{
"version": 3,
"sources": ["../../data/rulesets.ts"],
"sourcesContent": ["// Note: These are the rules that formats use\n\nimport type { Learnset } from \"../sim/dex-species\";\n\n// The list of formats is stored in config/formats.js\nexport const Rulesets: import('../sim/dex-formats').FormatDataTable = {\n\n\t// Rulesets\n\t///////////////////////////////////////////////////////////////////\n\n\tstandard: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard',\n\t\tdesc: \"The standard ruleset for all offical Smogon singles tiers (Ubers, OU, etc.)\",\n\t\truleset: [\n\t\t\t'Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',\n\t\t\t'Min Source Gen = 9',\n\t\t],\n\t},\n\tstandardnext: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard NEXT',\n\t\tdesc: \"The standard ruleset for the NEXT mod\",\n\t\truleset: [\n\t\t\t'+Unreleased', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'HP Percentage Mod', 'Cancel Mod',\n\t\t],\n\t\tbanlist: ['Soul Dew'],\n\t},\n\tflatrules: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Flat Rules',\n\t\tdesc: \"The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.\",\n\t\truleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],\n\t\tbanlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'],\n\t},\n\tlimittworestricted: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Limit Two Restricted',\n\t\tdesc: \"Limit two restricted Pok\u00E9mon (flagged with * in the rules list)\",\n\t\tonValidateTeam(team) {\n\t\t\tconst restrictedSpecies = [];\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tif (this.ruleTable.isRestrictedSpecies(species)) restrictedSpecies.push(species.name);\n\t\t\t}\n\t\t\tif (restrictedSpecies.length > 2) {\n\t\t\t\treturn [`You can only use up to two restricted Pok\\u00E9mon (you have: ${restrictedSpecies.join(', ')})`];\n\t\t\t}\n\t\t},\n\t},\n\tlimitonerestricted: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Limit One Restricted',\n\t\tdesc: \"Limit one restricted Pok\u00E9mon (flagged with * in the rules list)\",\n\t\tonValidateTeam(team) {\n\t\t\tconst restrictedSpecies = [];\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tif (this.ruleTable.isRestrictedSpecies(species)) restrictedSpecies.push(species.name);\n\t\t\t}\n\t\t\tif (restrictedSpecies.length > 1) {\n\t\t\t\treturn [`You can only use one restricted Pok\\u00E9mon (you have: ${restrictedSpecies.join(', ')})`];\n\t\t\t}\n\t\t},\n\t},\n\tstandarddoubles: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard Doubles',\n\t\tdesc: \"The standard ruleset for all official Smogon doubles tiers\",\n\t\truleset: [\n\t\t\t'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',\n\t\t\t'Min Source Gen = 9',\n\t\t],\n\t},\n\tstandardoms: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard OMs',\n\t\tdesc: \"The standard ruleset for all Smogon OMs (Almost Any Ability, STABmons, etc.)\",\n\t\truleset: [\n\t\t\t'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Overflow Stat Mod',\n\t\t\t'Min Source Gen = 9',\n\t\t],\n\t},\n\tstandardnatdex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard NatDex',\n\t\tdesc: \"The standard ruleset for all National Dex tiers\",\n\t\truleset: [\n\t\t\t'Obtainable', '+Unobtainable', '+Past', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',\n\t\t],\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tif (species.natDexTier === 'Illegal') {\n\t\t\t\tif (this.ruleTable.has(`+pokemon:${species.id}`)) return;\n\t\t\t\treturn [`${set.name || set.species} does not exist in the National Dex.`];\n\t\t\t}\n\t\t\tconst requireObtainable = this.ruleTable.has('obtainable');\n\t\t\tif (requireObtainable) {\n\t\t\t\tif (species.natDexTier === \"Unreleased\") {\n\t\t\t\t\tconst basePokemon = this.toID(species.baseSpecies);\n\t\t\t\t\tif (this.ruleTable.has(`+pokemon:${species.id}`) || this.ruleTable.has(`+basepokemon:${basePokemon}`)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn [`${set.name || set.species} does not exist in the National Dex.`];\n\t\t\t\t}\n\t\t\t\tfor (const moveid of set.moves) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\t\tif (move.isNonstandard === 'Unobtainable' && move.gen === this.dex.gen || move.id === 'lightofruin') {\n\t\t\t\t\t\tif (this.ruleTable.has(`+move:${move.id}`)) continue;\n\t\t\t\t\t\tconst problem = `${set.name}'s move ${move.name} does not exist in the National Dex.`;\n\t\t\t\t\t\tif (this.ruleTable.has('omunobtainablemoves')) {\n\t\t\t\t\t\t\tconst { outOfBattleSpecies } = this.getValidationSpecies(set);\n\t\t\t\t\t\t\tif (!this.omCheckCanLearn(move, outOfBattleSpecies, this.allSources(outOfBattleSpecies), set, problem)) continue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [problem];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Any item that was legal in Gen 7 (Normal Gem for example) should be usable\n\t\t\tif (!set.item) return;\n\t\t\tlet item = this.dex.items.get(set.item);\n\t\t\tlet gen = this.dex.gen;\n\t\t\twhile (item.isNonstandard && gen >= 7) {\n\t\t\t\titem = this.dex.forGen(gen).items.get(item.id);\n\t\t\t\tgen--;\n\t\t\t}\n\t\t\tif (requireObtainable && item.isNonstandard) {\n\t\t\t\tif (this.ruleTable.has(`+item:${item.id}`)) return;\n\t\t\t\treturn [`${set.name}'s item ${item.name} does not exist in Gen ${this.dex.gen}.`];\n\t\t\t}\n\t\t},\n\t\tonBegin() {\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tif (pokemon.species.isMega || pokemon.species.isPrimal || pokemon.species.forme === \"Ultra\") {\n\t\t\t\t\tpokemon.canTerastallize = null;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tstandarddraft: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Standard Draft',\n\t\tdesc: \"The custom Draft League ruleset\",\n\t\truleset: [\n\t\t\t'Obtainable', '+Unreleased', '+CAP', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',\n\t\t],\n\t\t// timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true},\n\t},\n\tobtainable: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Obtainable',\n\t\tdesc: \"Makes sure the team is possible to obtain in-game.\",\n\t\truleset: ['Obtainable Moves', 'Obtainable Abilities', 'Obtainable Formes', 'EV Limit = Auto', 'Obtainable Misc'],\n\t\tbanlist: ['Unreleased', 'Unobtainable', 'Nonexistent'],\n\t\t// Mostly hardcoded in team-validator.ts\n\t\tonValidateTeam(team, format) {\n\t\t\tlet kyuremCount = 0;\n\t\t\tlet necrozmaDMCount = 0;\n\t\t\tlet necrozmaDWCount = 0;\n\t\t\tlet calyrexCount = 0;\n\t\t\tfor (const set of team) {\n\t\t\t\tif (set.species === 'Kyurem-White' || set.species === 'Kyurem-Black') {\n\t\t\t\t\tif (kyuremCount > 0) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t`You cannot have more than one Kyurem-Black/Kyurem-White.`,\n\t\t\t\t\t\t\t`(It's untradeable and you can only make one with the DNA Splicers.)`,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tkyuremCount++;\n\t\t\t\t}\n\t\t\t\tif (set.species === 'Necrozma-Dusk-Mane') {\n\t\t\t\t\tif (necrozmaDMCount > 0) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t`You cannot have more than one Necrozma-Dusk-Mane`,\n\t\t\t\t\t\t\t`(It's untradeable and you can only make one with the N-Solarizer.)`,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tnecrozmaDMCount++;\n\t\t\t\t}\n\t\t\t\tif (set.species === 'Necrozma-Dawn-Wings') {\n\t\t\t\t\tif (necrozmaDWCount > 0) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t`You cannot have more than one Necrozma-Dawn-Wings`,\n\t\t\t\t\t\t\t`(It's untradeable and you can only make one with the N-Lunarizer.)`,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tnecrozmaDWCount++;\n\t\t\t\t}\n\t\t\t\tif (set.species === 'Calyrex-Ice' || set.species === 'Calyrex-Shadow') {\n\t\t\t\t\tif (calyrexCount > 0) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t`You cannot have more than one Calyrex-Ice/Calyrex-Shadow.`,\n\t\t\t\t\t\t\t`(It's untradeable and you can only make one with the Reins of Unity.)`,\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tcalyrexCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t},\n\tobtainablemoves: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Obtainable Moves',\n\t\tdesc: \"Makes sure moves are learnable by the species.\",\n\t\t// Hardcoded in team-validator.ts\n\t},\n\tobtainableabilities: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Obtainable Abilities',\n\t\tdesc: \"Makes sure abilities match the species.\",\n\t\t// Hardcoded in team-validator.ts\n\t},\n\tobtainableformes: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Obtainable Formes',\n\t\tdesc: \"Makes sure in-battle formes only appear in-battle.\",\n\t\t// Hardcoded in team-validator.ts\n\t},\n\tobtainablemisc: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Obtainable Misc',\n\t\tdesc: \"Validate all obtainability things that aren't moves/abilities (Hidden Power type, gender, IVs, events, duplicate moves).\",\n\t\t// Mostly hardcoded in team-validator.ts\n\t\tonChangeSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\n\t\t\tif (species.gender) {\n\t\t\t\tif (set.gender !== species.gender) {\n\t\t\t\t\tset.gender = species.gender;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (set.gender !== 'M' && set.gender !== 'F') {\n\t\t\t\t\tset.gender = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// limit one of each move\n\t\t\t// repealing this will not actually let you USE multiple moves, because of a cart bug:\n\t\t\t// https://twitter.com/DaWoblefet/status/1396217830006132737\n\t\t\tif (set.moves) {\n\t\t\t\tconst hasMove: { [k: string]: true } = {};\n\t\t\t\tfor (const moveId of set.moves) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveId);\n\t\t\t\t\tconst moveid = move.id;\n\t\t\t\t\tif (hasMove[moveid]) return [`${species.baseSpecies} has multiple copies of ${move.name}.`];\n\t\t\t\t\thasMove[moveid] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\thoennpokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Hoenn Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Hoenn region (OR/AS)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst hoennDex = [\n\t\t\t\t\"Abra\", \"Absol\", \"Aggron\", \"Alakazam\", \"Altaria\", \"Anorith\", \"Armaldo\", \"Aron\", \"Azumarill\", \"Azurill\", \"Bagon\", \"Baltoy\", \"Banette\", \"Barboach\", \"Beautifly\", \"Beldum\", \"Bellossom\", \"Blaziken\", \"Breloom\", \"Budew\", \"Cacnea\", \"Cacturne\", \"Camerupt\", \"Carvanha\", \"Cascoon\", \"Castform\", \"Chimecho\", \"Chinchou\", \"Chingling\", \"Clamperl\", \"Claydol\", \"Combusken\", \"Corphish\", \"Corsola\", \"Cradily\", \"Crawdaunt\", \"Crobat\", \"Delcatty\", \"Dodrio\", \"Doduo\", \"Donphan\", \"Dusclops\", \"Dusknoir\", \"Duskull\", \"Dustox\", \"Electrike\", \"Electrode\", \"Exploud\", \"Feebas\", \"Flygon\", \"Froslass\", \"Gallade\", \"Gardevoir\", \"Geodude\", \"Girafarig\", \"Glalie\", \"Gloom\", \"Golbat\", \"Goldeen\", \"Golduck\", \"Golem\", \"Gorebyss\", \"Graveler\", \"Grimer\", \"Grovyle\", \"Grumpig\", \"Gulpin\", \"Gyarados\", \"Hariyama\", \"Heracross\", \"Horsea\", \"Huntail\", \"Igglybuff\", \"Illumise\", \"Jigglypuff\", \"Kadabra\", \"Kecleon\", \"Kingdra\", \"Kirlia\", \"Koffing\", \"Lairon\", \"Lanturn\", \"Latias\", \"Latios\", \"Lileep\", \"Linoone\", \"Lombre\", \"Lotad\", \"Loudred\", \"Ludicolo\", \"Lunatone\", \"Luvdisc\", \"Machamp\", \"Machoke\", \"Machop\", \"Magcargo\", \"Magikarp\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Makuhita\", \"Manectric\", \"Marill\", \"Marshtomp\", \"Masquerain\", \"Mawile\", \"Medicham\", \"Meditite\", \"Metagross\", \"Metang\", \"Mightyena\", \"Milotic\", \"Minun\", \"Mudkip\", \"Muk\", \"Natu\", \"Nincada\", \"Ninetales\", \"Ninjask\", \"Nosepass\", \"Numel\", \"Nuzleaf\", \"Oddish\", \"Pelipper\", \"Phanpy\", \"Pichu\", \"Pikachu\", \"Pinsir\", \"Plusle\", \"Poochyena\", \"Probopass\", \"Psyduck\", \"Raichu\", \"Ralts\", \"Regice\", \"Regirock\", \"Registeel\", \"Relicanth\", \"Rhydon\", \"Rhyhorn\", \"Rhyperior\", \"Roselia\", \"Roserade\", \"Sableye\", \"Salamence\", \"Sandshrew\", \"Sandslash\", \"Sceptile\", \"Seadra\", \"Seaking\", \"Sealeo\", \"Seedot\", \"Seviper\", \"Sharpedo\", \"Shedinja\", \"Shelgon\", \"Shiftry\", \"Shroomish\", \"Shuppet\", \"Silcoon\", \"Skarmory\", \"Skitty\", \"Slaking\", \"Slakoth\", \"Slugma\", \"Snorunt\", \"Solrock\", \"Spheal\", \"Spinda\", \"Spoink\", \"Starmie\", \"Staryu\", \"Surskit\", \"Swablu\", \"Swalot\", \"Swampert\", \"Swellow\", \"Taillow\", \"Tentacool\", \"Tentacruel\", \"Torchic\", \"Torkoal\", \"Trapinch\", \"Treecko\", \"Tropius\", \"Vibrava\", \"Vigoroth\", \"Vileplume\", \"Volbeat\", \"Voltorb\", \"Vulpix\", \"Wailmer\", \"Wailord\", \"Walrein\", \"Weezing\", \"Whiscash\", \"Whismur\", \"Wigglytuff\", \"Wingull\", \"Wobbuffet\", \"Wurmple\", \"Wynaut\", \"Xatu\", \"Zangoose\", \"Zigzagoon\", \"Zubat\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!hoennDex.includes(species.baseSpecies) && !this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [species.baseSpecies + \" is not in the Hoenn Pok\u00E9dex.\"];\n\t\t\t}\n\t\t},\n\t},\n\tsinnohpokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Sinnoh Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Sinnoh region (Platinum)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst sinnohDex = [\n\t\t\t\t\"Turtwig\", \"Grotle\", \"Torterra\", \"Chimchar\", \"Monferno\", \"Infernape\", \"Piplup\", \"Prinplup\", \"Empoleon\", \"Starly\", \"Staravia\", \"Staraptor\", \"Bidoof\", \"Bibarel\", \"Kricketot\", \"Kricketune\", \"Shinx\", \"Luxio\", \"Luxray\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Magikarp\", \"Gyarados\", \"Budew\", \"Roselia\", \"Roserade\", \"Zubat\", \"Golbat\", \"Crobat\", \"Geodude\", \"Graveler\", \"Golem\", \"Onix\", \"Steelix\", \"Cranidos\", \"Rampardos\", \"Shieldon\", \"Bastiodon\", \"Machop\", \"Machoke\", \"Machamp\", \"Psyduck\", \"Golduck\", \"Burmy\", \"Wormadam\", \"Mothim\", \"Wurmple\", \"Silcoon\", \"Beautifly\", \"Cascoon\", \"Dustox\", \"Combee\", \"Vespiquen\", \"Pachirisu\", \"Buizel\", \"Floatzel\", \"Cherubi\", \"Cherrim\", \"Shellos\", \"Gastrodon\", \"Heracross\", \"Aipom\", \"Ambipom\", \"Drifloon\", \"Drifblim\", \"Buneary\", \"Lopunny\", \"Gastly\", \"Haunter\", \"Gengar\", \"Misdreavus\", \"Mismagius\", \"Murkrow\", \"Honchkrow\", \"Glameow\", \"Purugly\", \"Goldeen\", \"Seaking\", \"Barboach\", \"Whiscash\", \"Chingling\", \"Chimecho\", \"Stunky\", \"Skuntank\", \"Meditite\", \"Medicham\", \"Bronzor\", \"Bronzong\", \"Ponyta\", \"Rapidash\", \"Bonsly\", \"Sudowoodo\", \"Mime Jr.\", \"Mr. Mime\", \"Happiny\", \"Chansey\", \"Blissey\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Chatot\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Hoothoot\", \"Noctowl\", \"Spiritomb\", \"Gible\", \"Gabite\", \"Garchomp\", \"Munchlax\", \"Snorlax\", \"Unown\", \"Riolu\", \"Lucario\", \"Wooper\", \"Quagsire\", \"Wingull\", \"Pelipper\", \"Girafarig\", \"Hippopotas\", \"Hippowdon\", \"Azurill\", \"Marill\", \"Azumarill\", \"Skorupi\", \"Drapion\", \"Croagunk\", \"Toxicroak\", \"Carnivine\", \"Remoraid\", \"Octillery\", \"Finneon\", \"Lumineon\", \"Tentacool\", \"Tentacruel\", \"Feebas\", \"Milotic\", \"Mantyke\", \"Mantine\", \"Snover\", \"Abomasnow\", \"Sneasel\", \"Weavile\", \"Uxie\", \"Mesprit\", \"Azelf\", \"Dialga\", \"Palkia\", \"Manaphy\", \"Rotom\", \"Gligar\", \"Gliscor\", \"Nosepass\", \"Probopass\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Lickitung\", \"Lickilicky\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Swablu\", \"Altaria\", \"Togepi\", \"Togetic\", \"Togekiss\", \"Houndour\", \"Houndoom\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Tangela\", \"Tangrowth\", \"Yanma\", \"Yanmega\", \"Tropius\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Duskull\", \"Dusclops\", \"Dusknoir\", \"Porygon\", \"Porygon2\", \"Porygon-Z\", \"Scyther\", \"Scizor\", \"Elekid\", \"Electabuzz\", \"Electivire\", \"Magby\", \"Magmar\", \"Magmortar\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Absol\", \"Giratina\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif ((!sinnohDex.includes(species.baseSpecies) || species.gen > 4) && !this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.name} is not in the Sinnoh Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\toldunovapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Old Unova Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Unova region as of the original Black/White games\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tconst isUnova = (species.num >= 494 && species.num <= 649) &&\n\t\t\t\t!['Black', 'White', 'Therian', 'Resolute'].includes(species.forme) && species.gen <= 5;\n\t\t\tif (!isUnova && !this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Old Unova Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tnewunovapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'New Unova Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Unova region as of the Black 2/White 2 games\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst unovaDex = [\n\t\t\t\t\"Victini\", \"Snivy\", \"Servine\", \"Serperior\", \"Tepig\", \"Pignite\", \"Emboar\", \"Oshawott\", \"Dewott\", \"Samurott\", \"Patrat\", \"Watchog\", \"Purrloin\", \"Liepard\", \"Pidove\", \"Tranquill\", \"Unfezant\", \"Unfezant\", \"Sewaddle\", \"Swadloon\", \"Leavanny\", \"Sunkern\", \"Sunflora\", \"Lillipup\", \"Herdier\", \"Stoutland\", \"Mareep\", \"Flaaffy\", \"Ampharos\", \"Psyduck\", \"Golduck\", \"Azurill\", \"Marill\", \"Azumarill\", \"Riolu\", \"Lucario\", \"Dunsparce\", \"Audino\", \"Pansage\", \"Simisage\", \"Pansear\", \"Simisear\", \"Panpour\", \"Simipour\", \"Venipede\", \"Whirlipede\", \"Scolipede\", \"Koffing\", \"Weezing\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Growlithe\", \"Arcanine\", \"Magby\", \"Magmar\", \"Magmortar\", \"Elekid\", \"Electabuzz\", \"Electivire\", \"Rattata\", \"Raticate\", \"Zubat\", \"Golbat\", \"Crobat\", \"Grimer\", \"Muk\", \"Woobat\", \"Swoobat\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Onix\", \"Steelix\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Drilbur\", \"Excadrill\", \"Skitty\", \"Delcatty\", \"Buneary\", \"Lopunny\", \"Cottonee\", \"Whimsicott\", \"Petilil\", \"Lilligant\", \"Munna\", \"Musharna\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Darumaka\", \"Darmanitan\", \"Basculin\", \"Basculin\", \"Trubbish\", \"Garbodor\", \"Minccino\", \"Cinccino\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Sandshrew\", \"Sandslash\", \"Dwebble\", \"Crustle\", \"Scraggy\", \"Scrafty\", \"Maractus\", \"Sigilyph\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Yamask\", \"Cofagrigus\", \"Tirtouga\", \"Carracosta\", \"Archen\", \"Archeops\", \"Klink\", \"Klang\", \"Klinklang\", \"Budew\", \"Roselia\", \"Roserade\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Combee\", \"Vespiquen\", \"Emolga\", \"Heracross\", \"Pinsir\", \"Blitzle\", \"Zebstrika\", \"Buizel\", \"Floatzel\", \"Zorua\", \"Zoroark\", \"Ducklett\", \"Swanna\", \"Karrablast\", \"Escavalier\", \"Shelmet\", \"Accelgor\", \"Deerling\", \"Sawsbuck\", \"Foongus\", \"Amoonguss\", \"Castform\", \"Nosepass\", \"Probopass\", \"Aron\", \"Lairon\", \"Aggron\", \"Baltoy\", \"Claydol\", \"Larvesta\", \"Volcarona\", \"Joltik\", \"Galvantula\", \"Ferroseed\", \"Ferrothorn\", \"Tynamo\", \"Eelektrik\", \"Eelektross\", \"Frillish\", \"Jellicent\", \"Alomomola\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Zangoose\", \"Seviper\", \"Elgyem\", \"Beheeyem\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Heatmor\", \"Durant\", \"Cubchoo\", \"Beartic\", \"Cryogonal\", \"Tornadus\", \"Thundurus\", \"Landorus\", \"Skorupi\", \"Drapion\", \"Skarmory\", \"Numel\", \"Camerupt\", \"Spoink\", \"Grumpig\", \"Drifloon\", \"Drifblim\", \"Shuppet\", \"Banette\", \"Wingull\", \"Pelipper\", \"Lunatone\", \"Solrock\", \"Absol\", \"Tangela\", \"Tangrowth\", \"Mienfoo\", \"Mienshao\", \"Gligar\", \"Gliscor\", \"Pawniard\", \"Bisharp\", \"Cobalion\", \"Terrakion\", \"Virizion\", \"Tympole\", \"Palpitoad\", \"Seismitoad\", \"Stunfisk\", \"Shuckle\", \"Mantyke\", \"Mantine\", \"Remoraid\", \"Octillery\", \"Corsola\", \"Staryu\", \"Starmie\", \"Wailmer\", \"Wailord\", \"Lapras\", \"Spheal\", \"Sealeo\", \"Walrein\", \"Swablu\", \"Altaria\", \"Vulpix\", \"Ninetales\", \"Bronzor\", \"Bronzong\", \"Sneasel\", \"Weavile\", \"Delibird\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Ditto\", \"Beldum\", \"Metang\", \"Metagross\", \"Seel\", \"Dewgong\", \"Throh\", \"Sawk\", \"Bouffalant\", \"Druddigon\", \"Golett\", \"Golurk\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Slakoth\", \"Vigoroth\", \"Slaking\", \"Corphish\", \"Crawdaunt\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Lickitung\", \"Lickilicky\", \"Yanma\", \"Yanmega\", \"Tropius\", \"Carnivine\", \"Croagunk\", \"Toxicroak\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Reshiram\", \"Zekrom\", \"Kyurem\", \"Keldeo\", \"Meloetta\", \"Genesect\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tconst isUnova = unovaDex.includes(species.baseSpecies) && species.gen <= 5;\n\t\t\tif (!isUnova && !this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the New Unova Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tkalospokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Kalos Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Kalos region (XY)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst kalosDex = [\n\t\t\t\t\"Chespin\", \"Quilladin\", \"Chesnaught\", \"Fennekin\", \"Braixen\", \"Delphox\", \"Froakie\", \"Frogadier\", \"Greninja\", \"Bunnelby\", \"Diggersby\", \"Zigzagoon\", \"Linoone\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Pidgey\", \"Pidgeotto\", \"Pidgeot\", \"Scatterbug\", \"Spewpa\", \"Vivillon\", \"Caterpie\", \"Metapod\", \"Butterfree\", \"Weedle\", \"Kakuna\", \"Beedrill\", \"Pansage\", \"Simisage\", \"Pansear\", \"Simisear\", \"Panpour\", \"Simipour\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Bidoof\", \"Bibarel\", \"Dunsparce\", \"Azurill\", \"Marill\", \"Azumarill\", \"Burmy\", \"Wormadam\", \"Mothim\", \"Surskit\", \"Masquerain\", \"Magikarp\", \"Gyarados\", \"Corphish\", \"Crawdaunt\", \"Goldeen\", \"Seaking\", \"Carvanha\", \"Sharpedo\", \"Litleo\", \"Pyroar\", \"Psyduck\", \"Golduck\", \"Farfetch\\u2019d\", \"Riolu\", \"Lucario\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Flabe\\u0301be\\u0301\", \"Floette\", \"Florges\", \"Budew\", \"Roselia\", \"Roserade\", \"Ledyba\", \"Ledian\", \"Combee\", \"Vespiquen\", \"Skitty\", \"Delcatty\", \"Bulbasaur\", \"Ivysaur\", \"Venusaur\", \"Charmander\", \"Charmeleon\", \"Charizard\", \"Squirtle\", \"Wartortle\", \"Blastoise\", \"Skiddo\", \"Gogoat\", \"Pancham\", \"Pangoro\", \"Furfrou\", \"Doduo\", \"Dodrio\", \"Plusle\", \"Minun\", \"Gulpin\", \"Swalot\", \"Scraggy\", \"Scrafty\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Oddish\", \"Gloom\", \"Vileplume\", \"Bellossom\", \"Sentret\", \"Furret\", \"Nincada\", \"Ninjask\", \"Shedinja\", \"Espurr\", \"Meowstic\", \"Kecleon\", \"Honedge\", \"Doublade\", \"Aegislash\", \"Venipede\", \"Whirlipede\", \"Scolipede\", \"Audino\", \"Smeargle\", \"Croagunk\", \"Toxicroak\", \"Ducklett\", \"Swanna\", \"Spritzee\", \"Aromatisse\", \"Swirlix\", \"Slurpuff\", \"Volbeat\", \"Illumise\", \"Hoppip\", \"Skiploom\", \"Jumpluff\", \"Munchlax\", \"Snorlax\", \"Whismur\", \"Loudred\", \"Exploud\", \"Meditite\", \"Medicham\", \"Zubat\", \"Golbat\", \"Crobat\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Diancie\", \"Hoopa\", \"Volcanion\",\n\t\t\t\t\"Drifloon\", \"Drifblim\", \"Mienfoo\", \"Mienshao\", \"Zangoose\", \"Seviper\", \"Spoink\", \"Grumpig\", \"Absol\", \"Inkay\", \"Malamar\", \"Lunatone\", \"Solrock\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Wingull\", \"Pelipper\", \"Taillow\", \"Swellow\", \"Binacle\", \"Barbaracle\", \"Dwebble\", \"Crustle\", \"Tentacool\", \"Tentacruel\", \"Wailmer\", \"Wailord\", \"Luvdisc\", \"Skrelp\", \"Dragalge\", \"Clauncher\", \"Clawitzer\", \"Staryu\", \"Starmie\", \"Shellder\", \"Cloyster\", \"Qwilfish\", \"Horsea\", \"Seadra\", \"Kingdra\", \"Relicanth\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Helioptile\", \"Heliolisk\", \"Hippopotas\", \"Hippowdon\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Onix\", \"Steelix\", \"Woobat\", \"Swoobat\", \"Machop\", \"Machoke\", \"Machamp\", \"Cubone\", \"Marowak\", \"Kangaskhan\", \"Mawile\", \"Tyrunt\", \"Tyrantrum\", \"Amaura\", \"Aurorus\", \"Aerodactyl\", \"Ferroseed\", \"Ferrothorn\", \"Snubbull\", \"Granbull\", \"Electrike\", \"Manectric\", \"Houndour\", \"Houndoom\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Emolga\", \"Yanma\", \"Yanmega\", \"Hawlucha\", \"Sigilyph\", \"Golett\", \"Golurk\", \"Nosepass\", \"Probopass\", \"Makuhita\", \"Hariyama\", \"Throh\", \"Sawk\", \"Starly\", \"Staravia\", \"Staraptor\", \"Stunky\", \"Skuntank\", \"Nidoran-F\", \"Nidorina\", \"Nidoqueen\", \"Nidoran-M\", \"Nidorino\", \"Nidoking\", \"Dedenne\", \"Chingling\", \"Chimecho\", \"Mime Jr.\", \"Mr. Mime\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Wynaut\", \"Wobbuffet\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Sableye\", \"Carbink\", \"Tauros\", \"Miltank\", \"Mareep\", \"Flaaffy\", \"Ampharos\", \"Pinsir\", \"Heracross\", \"Pachirisu\", \"Slowpoke\", \"Slowbro\", \"Slowking\", \"Exeggcute\", \"Exeggutor\", \"Chatot\", \"Mantyke\", \"Mantine\", \"Clamperl\", \"Huntail\", \"Gorebyss\", \"Remoraid\", \"Octillery\", \"Corsola\", \"Chinchou\", \"Lanturn\", \"Alomomola\", \"Lapras\", \"Articuno\", \"Zapdos\", \"Moltres\",\n\t\t\t\t\"Diglett\", \"Dugtrio\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Gible\", \"Gabite\", \"Garchomp\", \"Geodude\", \"Graveler\", \"Golem\", \"Slugma\", \"Magcargo\", \"Shuckle\", \"Skorupi\", \"Drapion\", \"Wooper\", \"Quagsire\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Karrablast\", \"Escavalier\", \"Shelmet\", \"Accelgor\", \"Bellsprout\", \"Weepinbell\", \"Victreebel\", \"Carnivine\", \"Gastly\", \"Haunter\", \"Gengar\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Ekans\", \"Arbok\", \"Stunfisk\", \"Barboach\", \"Whiscash\", \"Purrloin\", \"Liepard\", \"Poochyena\", \"Mightyena\", \"Patrat\", \"Watchog\", \"Pawniard\", \"Bisharp\", \"Klefki\", \"Murkrow\", \"Honchkrow\", \"Foongus\", \"Amoonguss\", \"Lotad\", \"Lombre\", \"Ludicolo\", \"Buizel\", \"Floatzel\", \"Basculin\", \"Phantump\", \"Trevenant\", \"Pumpkaboo\", \"Gourgeist\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Rotom\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Voltorb\", \"Electrode\", \"Trubbish\", \"Garbodor\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Bergmite\", \"Avalugg\", \"Cubchoo\", \"Beartic\", \"Smoochum\", \"Jynx\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Snover\", \"Abomasnow\", \"Delibird\", \"Sneasel\", \"Weavile\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Torkoal\", \"Sandshrew\", \"Sandslash\", \"Aron\", \"Lairon\", \"Aggron\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Heatmor\", \"Durant\", \"Spinarak\", \"Ariados\", \"Spearow\", \"Fearow\", \"Cryogonal\", \"Skarmory\", \"Noibat\", \"Noivern\", \"Gligar\", \"Gliscor\", \"Hoothoot\", \"Noctowl\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Shuppet\", \"Banette\", \"Zorua\", \"Zoroark\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Bonsly\", \"Sudowoodo\", \"Spinda\", \"Teddiursa\", \"Ursaring\", \"Lickitung\", \"Lickilicky\", \"Scyther\", \"Scizor\", \"Ditto\", \"Swablu\", \"Altaria\", \"Druddigon\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Xerneas\", \"Yveltal\", \"Zygarde\", \"Mewtwo\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif ((!kalosDex.includes(species.baseSpecies) || species.gen > 6) && !this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.name} is not in the Kalos Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\toldalolapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Old Alola Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Alola region (SUMO)\",\n\t\tbanlist: ['Pikachu-Partner', 'Marowak-Alola-Totem', 'Ribombee-Totem', 'Araquanid-Totem', 'Lycanroc-Dusk', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings'],\n\t\tonValidateSet(set, format) {\n\t\t\tconst alolaDex = [\n\t\t\t\t\"Rowlet\", \"Dartrix\", \"Decidueye\", \"Litten\", \"Torracat\", \"Incineroar\", \"Popplio\", \"Brionne\", \"Primarina\", \"Pikipek\", \"Trumbeak\", \"Toucannon\", \"Yungoos\", \"Gumshoos\", \"Rattata-Alola\", \"Raticate-Alola\", \"Caterpie\", \"Metapod\", \"Butterfree\", \"Ledyba\", \"Ledian\", \"Spinarak\", \"Ariados\", \"Pichu\", \"Pikachu\", \"Raichu-Alola\", \"Grubbin\", \"Charjabug\", \"Vikavolt\", \"Bonsly\", \"Sudowoodo\", \"Happiny\", \"Chansey\", \"Blissey\", \"Munchlax\", \"Snorlax\", \"Slowpoke\", \"Slowbro\", \"Slowking\", \"Wingull\", \"Pelipper\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Meowth-Alola\", \"Persian-Alola\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Grimer-Alola\", \"Muk-Alola\", \"Growlithe\", \"Arcanine\", \"Drowzee\", \"Hypno\", \"Makuhita\", \"Hariyama\", \"Smeargle\", \"Crabrawler\", \"Crabominable\", \"Gastly\", \"Haunter\", \"Gengar\", \"Drifloon\", \"Drifblim\", \"Misdreavus\", \"Mismagius\", \"Zubat\", \"Golbat\", \"Crobat\", \"Diglett-Alola\", \"Dugtrio-Alola\", \"Spearow\", \"Fearow\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Mankey\", \"Primeape\", \"Delibird\", \"Oricorio\", \"Cutiefly\", \"Ribombee\", \"Petilil\", \"Lilligant\", \"Cottonee\", \"Whimsicott\", \"Psyduck\", \"Golduck\", \"Magikarp\", \"Gyarados\", \"Barboach\", \"Whiscash\", \"Machop\", \"Machoke\", \"Machamp\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Carbink\", \"Sableye\", \"Rockruff\", \"Lycanroc\", \"Spinda\", \"Tentacool\", \"Tentacruel\", \"Finneon\", \"Lumineon\", \"Wishiwashi\", \"Luvdisc\", \"Corsola\", \"Mareanie\", \"Toxapex\", \"Shellder\", \"Cloyster\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Lillipup\", \"Herdier\", \"Stoutland\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Mudbray\", \"Mudsdale\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Tauros\", \"Miltank\", \"Surskit\", \"Masquerain\", \"Dewpider\", \"Araquanid\", \"Fomantis\", \"Lurantis\", \"Morelull\", \"Shiinotic\", \"Paras\", \"Parasect\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Goldeen\", \"Seaking\", \"Feebas\", \"Milotic\", \"Alomomola\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Salandit\", \"Salazzle\", \"Cubone\", \"Marowak-Alola\", \"Kangaskhan\", \"Magby\", \"Magmar\", \"Magmortar\", \"Stufful\", \"Bewear\", \"Bounsweet\", \"Steenee\", \"Tsareena\", \"Comfey\", \"Pinsir\", \"Oranguru\", \"Passimian\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Castform\", \"Wimpod\", \"Golisopod\", \"Staryu\", \"Starmie\", \"Sandygast\", \"Palossand\", \"Cranidos\", \"Rampardos\", \"Shieldon\", \"Bastiodon\", \"Archen\", \"Archeops\", \"Tirtouga\", \"Carracosta\", \"Phantump\", \"Trevenant\", \"Nosepass\", \"Probopass\", \"Pyukumuku\", \"Chinchou\", \"Lanturn\", \"Type: Null\", \"Silvally\", \"Zygarde\", \"Trubbish\", \"Garbodor\", \"Skarmory\", \"Ditto\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Minior\", \"Beldum\", \"Metang\", \"Metagross\", \"Porygon\", \"Porygon2\", \"Porygon-Z\", \"Pancham\", \"Pangoro\", \"Komala\", \"Torkoal\", \"Turtonator\", \"Togedemaru\", \"Elekid\", \"Electabuzz\", \"Electivire\", \"Geodude-Alola\", \"Graveler-Alola\", \"Golem-Alola\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Gible\", \"Gabite\", \"Garchomp\", \"Klefki\", \"Mimikyu\", \"Bruxish\", \"Drampa\", \"Absol\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Sneasel\", \"Weavile\", \"Sandshrew-Alola\", \"Sandslash-Alola\", \"Vulpix-Alola\", \"Ninetales-Alola\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Snubbull\", \"Granbull\", \"Shellos\", \"Gastrodon\", \"Relicanth\", \"Dhelmise\", \"Carvanha\", \"Sharpedo\", \"Wailmer\", \"Wailord\", \"Lapras\", \"Exeggcute\", \"Exeggutor-Alola\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Emolga\", \"Scyther\", \"Scizor\", \"Murkrow\", \"Honchkrow\", \"Riolu\", \"Lucario\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Aerodactyl\", \"Tapu Koko\", \"Tapu Lele\", \"Tapu Bulu\", \"Tapu Fini\", \"Cosmog\", \"Cosmoem\", \"Solgaleo\", \"Lunala\", \"Nihilego\", \"Buzzwole\", \"Pheromosa\", \"Xurkitree\", \"Celesteela\", \"Kartana\", \"Guzzlord\", \"Necrozma\", \"Magearna\", \"Marshadow\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!alolaDex.includes(species.baseSpecies) && !alolaDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Old Alola Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tnewalolapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'New Alola Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Alola region (US/UM)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst alolaDex = [\n\t\t\t\t\"Rowlet\", \"Dartrix\", \"Decidueye\", \"Litten\", \"Torracat\", \"Incineroar\", \"Popplio\", \"Brionne\", \"Primarina\", \"Pikipek\", \"Trumbeak\", \"Toucannon\", \"Yungoos\", \"Gumshoos\", \"Rattata-Alola\", \"Raticate-Alola\", \"Caterpie\", \"Metapod\", \"Butterfree\", \"Ledyba\", \"Ledian\", \"Spinarak\", \"Ariados\", \"Buneary\", \"Lopunny\", \"Inkay\", \"Malamar\", \"Zorua\", \"Zoroark\", \"Furfrou\", \"Pichu\", \"Pikachu\", \"Raichu-Alola\", \"Grubbin\", \"Charjabug\", \"Vikavolt\", \"Bonsly\", \"Sudowoodo\", \"Happiny\", \"Chansey\", \"Blissey\", \"Munchlax\", \"Snorlax\", \"Slowpoke\", \"Slowbro\", \"Slowking\", \"Wingull\", \"Pelipper\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Meowth-Alola\", \"Persian-Alola\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Grimer-Alola\", \"Muk-Alola\", \"Mime Jr.\", \"Mr. Mime\", \"Ekans\", \"Arbok\", \"Dunsparce\", \"Growlithe\", \"Arcanine\", \"Drowzee\", \"Hypno\", \"Makuhita\", \"Hariyama\", \"Smeargle\", \"Crabrawler\", \"Crabominable\", \"Gastly\", \"Haunter\", \"Gengar\", \"Drifloon\", \"Drifblim\", \"Murkrow\", \"Honchkrow\", \"Zubat\", \"Golbat\", \"Crobat\", \"Noibat\", \"Noivern\", \"Diglett-Alola\", \"Dugtrio-Alola\", \"Spearow\", \"Fearow\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Mankey\", \"Primeape\", \"Delibird\", \"Hawlucha\", \"Oricorio\", \"Cutiefly\", \"Ribombee\", \"Flabe\\u0301be\\u0301\", \"Floette\", \"Florges\", \"Petilil\", \"Lilligant\", \"Cottonee\", \"Whimsicott\", \"Psyduck\", \"Golduck\", \"Smoochum\", \"Jynx\", \"Magikarp\", \"Gyarados\", \"Barboach\", \"Whiscash\", \"Seal\", \"Dewgong\", \"Machop\", \"Machoke\", \"Machamp\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Carbink\", \"Sableye\", \"Mawile\", \"Rockruff\", \"Lycanroc\", \"Spinda\", \"Tentacool\", \"Tentacruel\", \"Finneon\", \"Lumineon\", \"Wishiwashi\", \"Luvdisc\", \"Corsola\", \"Mareanie\", \"Toxapex\", \"Shellder\", \"Cloyster\", \"Clamperl\", \"Huntail\", \"Gorebyss\", \"Remoraid\", \"Octillery\", \"Mantyke\", \"Mantine\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Lillipup\", \"Herdier\", \"Stoutland\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Mareep\", \"Flaaffy\", \"Ampharos\", \"Mudbray\", \"Mudsdale\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Tauros\", \"Miltank\", \"Surskit\", \"Masquerain\", \"Dewpider\", \"Araquanid\", \"Fomantis\", \"Lurantis\", \"Morelull\", \"Shiinotic\", \"Paras\", \"Parasect\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Goldeen\", \"Seaking\", \"Basculin\", \"Feebas\", \"Milotic\", \"Alomomola\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Salandit\", \"Salazzle\", \"Cubone\", \"Marowak-Alola\", \"Kangaskhan\", \"Magby\", \"Magmar\", \"Magmortar\", \"Larvesta\", \"Volcarona\", \"Stufful\", \"Bewear\", \"Bounsweet\", \"Steenee\", \"Tsareena\", \"Comfey\", \"Pinsir\", \"Hoothoot\", \"Noctowl\", \"Kecleon\", \"Oranguru\", \"Passimian\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Castform\", \"Wimpod\", \"Golisopod\", \"Staryu\", \"Starmie\", \"Sandygast\", \"Palossand\", \"Omanyte\", \"Omastar\", \"Kabuto\", \"Kabutops\", \"Lileep\", \"Cradily\", \"Anorith\", \"Armaldo\", \"Cranidos\", \"Rampardos\", \"Shieldon\", \"Bastiodon\", \"Tirtouga\", \"Carracosta\", \"Archen\", \"Archeops\", \"Tyrunt\", \"Tyrantrum\", \"Amaura\", \"Aurorus\", \"Pupitar\", \"Larvitar\", \"Tyranitar\", \"Phantump\", \"Trevenant\", \"Natu\", \"Xatu\", \"Nosepass\", \"Probopass\", \"Pyukumuku\", \"Chinchou\", \"Lanturn\", \"Type: Null\", \"Silvally\", \"Poipole\", \"Naganadel\", \"Zygarde\", \"Trubbish\", \"Garbodor\", \"Minccino\", \"Cinccino\", \"Pineco\", \"Forretress\", \"Skarmory\", \"Ditto\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Elgyem\", \"Beheeyem\", \"Minior\", \"Beldum\", \"Metang\", \"Metagross\", \"Porygon\", \"Porygon2\", \"Porygon-Z\", \"Pancham\", \"Pangoro\", \"Komala\", \"Torkoal\", \"Turtonator\", \"Houndour\", \"Houndoom\", \"Dedenne\", \"Togedemaru\", \"Electrike\", \"Manectric\", \"Elekid\", \"Electabuzz\", \"Electivire\", \"Geodude-Alola\", \"Graveler-Alola\", \"Golem-Alola\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Gible\", \"Gabite\", \"Garchomp\", \"Baltoy\", \"Claydol\", \"Golett\", \"Golurk\", \"Klefki\", \"Mimikyu\", \"Shuppet\", \"Banette\", \"Frillish\", \"Jellicent\", \"Bruxish\", \"Drampa\", \"Absol\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Sneasel\", \"Weavile\", \"Sandshrew-Alola\", \"Sandslash-Alola\", \"Vulpix-Alola\", \"Ninetales-Alola\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Scraggy\", \"Scrafty\", \"Pawniard\", \"Bisharp\", \"Snubbull\", \"Granbull\", \"Shellos\", \"Gastrodon\", \"Relicanth\", \"Dhelmise\", \"Carvanha\", \"Sharpedo\", \"Skrelp\", \"Dragalge\", \"Clauncher\", \"Clawitzer\", \"Wailmer\", \"Wailord\", \"Lapras\", \"Tropius\", \"Exeggcute\", \"Exeggutor-Alola\", \"Corphish\", \"Crawdaunt\", \"Mienfoo\", \"Mienshao\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Emolga\", \"Scyther\", \"Scizor\", \"Heracross\", \"Aipom\", \"Ampibom\", \"Litleo\", \"Pyroar\", \"Misdreavus\", \"Mismagius\", \"Druddigon\", \"Lickitung\", \"Lickilicky\", \"Riolu\", \"Lucario\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Aerodactyl\", \"Tapu Koko\", \"Tapu Lele\", \"Tapu Bulu\", \"Tapu Fini\", \"Cosmog\", \"Cosmoem\", \"Solgaleo\", \"Lunala\", \"Nihilego\", \"Stakataka\", \"Blacephalon\", \"Buzzwole\", \"Pheromosa\", \"Xurkitree\", \"Celesteela\", \"Kartana\", \"Guzzlord\", \"Necrozma\", \"Magearna\", \"Marshadow\", \"Zeraora\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!alolaDex.includes(species.baseSpecies) && !alolaDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the New Alola Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tgalarpokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Galar Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Galar region (Sw/Sh)\",\n\t\tbanlist: ['Raichu-Alola', 'Weezing-Base'],\n\t\tonValidateSet(set, format) {\n\t\t\tconst galarDex = [\n\t\t\t\t\"Grookey\", \"Thwackey\", \"Rillaboom\", \"Scorbunny\", \"Raboot\", \"Cinderace\", \"Sobble\", \"Drizzile\", \"Inteleon\", \"Blipbug\", \"Dottler\", \"Orbeetle\", \"Caterpie\", \"Metapod\", \"Butterfree\", \"Grubbin\", \"Charjabug\", \"Vikavolt\", \"Hoothoot\", \"Noctowl\", \"Rookidee\", \"Corvisquire\", \"Corviknight\", \"Skwovet\", \"Greedent\", \"Pidove\", \"Tranquill\", \"Unfezant\", \"Nickit\", \"Thievul\", \"Zigzagoon\", \"Linoone\", \"Obstagoon\", \"Wooloo\", \"Dubwool\", \"Lotad\", \"Lombre\", \"Ludicolo\", \"Seedot\", \"Nuzleaf\", \"Shiftry\", \"Chewtle\", \"Drednaw\", \"Purrloin\", \"Liepard\", \"Yamper\", \"Boltund\", \"Bunnelby\", \"Diggersby\", \"Minccino\", \"Cinccino\", \"Bounsweet\", \"Steenee\", \"Tsareena\", \"Oddish\", \"Gloom\", \"Vileplume\", \"Bellossom\", \"Budew\", \"Roselia\", \"Roserade\", \"Wingull\", \"Pelipper\", \"Joltik\", \"Galvantula\", \"Electrike\", \"Manectric\", \"Vulpix\", \"Ninetales\", \"Growlithe\", \"Arcanine\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Delibird\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Baltoy\", \"Claydol\", \"Mudbray\", \"Mudsdale\", \"Dwebble\", \"Crustle\", \"Golett\", \"Golurk\", \"Munna\", \"Musharna\", \"Natu\", \"Xatu\", \"Stufful\", \"Bewear\", \"Snover\", \"Abomasnow\", \"Krabby\", \"Kingler\", \"Wooper\", \"Quagsire\", \"Corphish\", \"Crawdaunt\", \"Nincada\", \"Ninjask\", \"Shedinja\", \"Tyrogue\", \"Hitmonlee\", \"Hitmonchan\", \"Hitmontop\", \"Pancham\", \"Pangoro\", \"Klink\", \"Klang\", \"Klinklang\", \"Combee\", \"Vespiquen\", \"Bronzor\", \"Bronzong\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Drifloon\", \"Drifblim\", \"Gossifleur\", \"Eldegoss\", \"Cherubi\", \"Cherrim\", \"Stunky\", \"Skuntank\", \"Tympole\", \"Palpitoad\", \"Seismitoad\", \"Duskull\", \"Dusclops\", \"Dusknoir\", \"Machop\", \"Machoke\", \"Machamp\", \"Gastly\", \"Haunter\", \"Gengar\", \"Magikarp\", \"Gyarados\", \"Goldeen\", \"Seaking\", \"Remoraid\", \"Octillery\", \"Shellder\", \"Cloyster\", \"Feebas\", \"Milotic\", \"Basculin\", \"Wishiwashi\", \"Pyukumuku\", \"Trubbish\", \"Garbodor\", \"Sizzlipede\", \"Centiskorch\", \"Rolycoly\", \"Carkol\", \"Coalossal\", \"Diglett\", \"Dugtrio\", \"Drilbur\", \"Excadrill\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Woobat\", \"Swoobat\", \"Noibat\", \"Noivern\", \"Onix\", \"Steelix\", \"Arrokuda\", \"Barraskewda\", \"Meowth\", \"Perrserker\", \"Persian\", \"Milcery\", \"Alcremie\", \"Cutiefly\", \"Ribombee\", \"Ferroseed\", \"Ferrothorn\", \"Pumpkaboo\", \"Gourgeist\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Applin\", \"Flapple\", \"Appletun\", \"Espurr\", \"Meowstic\", \"Swirlix\", \"Slurpuff\", \"Spritzee\", \"Aromatisse\", \"Dewpider\", \"Araquanid\", \"Wynaut\", \"Wobbuffet\", \"Farfetch\\u2019d\", \"Sirfetch\\u2019d\", \"Chinchou\", \"Lanturn\", \"Croagunk\", \"Toxicroak\", \"Scraggy\", \"Scrafty\", \"Stunfisk\", \"Shuckle\", \"Barboach\", \"Whiscash\", \"Shellos\", \"Gastrodon\", \"Wimpod\", \"Golisopod\", \"Binacle\", \"Barbaracle\", \"Corsola\", \"Cursola\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Salandit\", \"Salazzle\", \"Pawniard\", \"Bisharp\", \"Throh\", \"Sawk\", \"Koffing\", \"Weezing\", \"Bonsly\", \"Sudowoodo\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Togepi\", \"Togetic\", \"Togekiss\", \"Munchlax\", \"Snorlax\", \"Cottonee\", \"Whimsicott\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Karrablast\", \"Escavalier\", \"Shelmet\", \"Accelgor\", \"Elgyem\", \"Beheeyem\", \"Cubchoo\", \"Beartic\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Skorupi\", \"Drapion\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Inkay\", \"Malamar\", \"Sneasel\", \"Weavile\", \"Sableye\", \"Mawile\", \"Maractus\", \"Sigilyph\", \"Riolu\", \"Lucario\", \"Torkoal\", \"Mimikyu\", \"Cufant\", \"Copperajah\", \"Qwilfish\", \"Frillish\", \"Jellicent\", \"Mareanie\", \"Toxapex\", \"Cramorant\", \"Toxel\", \"Toxtricity\", \"Toxtricity-Low-Key\", \"Silicobra\", \"Sandaconda\", \"Hippopotas\", \"Hippowdon\", \"Durant\", \"Heatmor\", \"Helioptile\", \"Heliolisk\", \"Hawlucha\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Yamask\", \"Runerigus\", \"Cofagrigus\", \"Honedge\", \"Doublade\", \"Aegislash\", \"Ponyta\", \"Rapidash\", \"Sinistea\", \"Polteageist\", \"Indeedee\", \"Phantump\", \"Trevenant\", \"Morelull\", \"Shiinotic\", \"Oranguru\", \"Passimian\", \"Morpeko\", \"Falinks\", \"Drampa\", \"Turtonator\", \"Togedemaru\", \"Snom\", \"Frosmoth\", \"Clobbopus\", \"Grapploct\", \"Pincurchin\", \"Mantyke\", \"Mantine\", \"Wailmer\", \"Wailord\", \"Bergmite\", \"Avalugg\", \"Dhelmise\", \"Lapras\", \"Lunatone\", \"Solrock\", \"Mime Jr.\", \"Mr. Mime\", \"Mr. Rime\", \"Darumaka\", \"Darmanitan\", \"Stonjourner\", \"Eiscue\", \"Duraludon\", \"Rotom\", \"Ditto\", \"Dracozolt\", \"Arctozolt\", \"Dracovish\", \"Arctovish\", \"Charmander\", \"Charmeleon\", \"Charizard\", \"Type: Null\", \"Silvally\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Dreepy\", \"Drakloak\", \"Dragapult\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!galarDex.includes(species.baseSpecies) && !galarDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Galar Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tisleofarmorpokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Isle of Armor Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Isle of Armor in the Galar Region (Sw/Sh DLC1)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst ioaDex = [\n\t\t\t\t\"Slowpoke\", \"Slowbro\", \"Slowking\", \"Buneary\", \"Lopunny\", \"Happiny\", \"Chansey\", \"Blissey\", \"Skwovet\", \"Greedent\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Blipbug\", \"Dottler\", \"Fomantis\", \"Lurantis\", \"Applin\", \"Flapple\", \"Appletun\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Shinx\", \"Luxio\", \"Luxray\", \"Klefki\", \"Pawniard\", \"Bisharp\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Krabby\", \"Kingler\", \"Tentacool\", \"Tentacruel\", \"Magikarp\", \"Gyarados\", \"Remoraid\", \"Octillery\", \"Mantyke\", \"Mantine\", \"Wingull\", \"Pelipper\", \"Skorupi\", \"Drapion\", \"Dunsparce\", \"Bouffalant\", \"Lickitung\", \"Lickilicky\", \"Chewtle\", \"Drednaw\", \"Wooper\", \"Quagsire\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Druddigon\", \"Shelmet\", \"Accelgor\", \"Karrablast\", \"Escavalier\", \"Bulbasaur\", \"Ivysaur\", \"Venusaur\", \"Squirtle\", \"Wartortle\", \"Blastoise\", \"Venipede\", \"Whirlipede\", \"Scolipede\", \"Foongus\", \"Amoonguss\", \"Comfey\", \"Tangela\", \"Tangrowth\", \"Croagunk\", \"Toxicroak\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Zorua\", \"Zoroark\", \"Oranguru\", \"Passimian\", \"Corphish\", \"Crawdaunt\", \"Cramorant\", \"Goldeen\", \"Seaking\", \"Arrokuda\", \"Barraskewda\", \"Staryu\", \"Starmie\", \"Kubfu\", \"Urshifu\", \"Emolga\", \"Dedenne\", \"Morpeko\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Inkay\", \"Malamar\", \"Wishiwashi\", \"Carvanha\", \"Sharpedo\", \"Lillipup\", \"Herdier\", \"Stoutland\", \"Tauros\", \"Miltank\", \"Scyther\", \"Scizor\", \"Pinsir\", \"Heracross\", \"Dwebble\", \"Crustle\", \"Wimpod\", \"Golisopod\", \"Pincurchin\", \"Mareanie\", \"Toxapex\", \"Clobbopus\", \"Grapploct\", \"Shellder\", \"Cloyster\", \"Sandygast\", \"Palossand\", \"Drifloon\", \"Drifblim\", \"Barboach\", \"Whiscash\", \"Azurill\", \"Marill\", \"Azumarill\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Psyduck\", \"Golduck\", \"Whismur\", \"Loudred\", \"Exploud\", \"Woobat\", \"Swoobat\", \"Skarmory\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Rockruff\", \"Lycanroc\", \"Salandit\", \"Salazzle\", \"Scraggy\", \"Scrafty\", \"Mienfoo\", \"Mienshao\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Sandshrew\", \"Sandslash\", \"Cubone\", \"Marowak\", \"Kangaskhan\", \"Torkoal\", \"Silicobra\", \"Sandaconda\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Larvesta\", \"Volcarona\", \"Chinchou\", \"Lanturn\", \"Wailmer\", \"Wailord\", \"Frillish\", \"Jellicent\", \"Skrelp\", \"Dragalge\", \"Clauncher\", \"Clawitzer\", \"Horsea\", \"Seadra\", \"Kingdra\", \"Petilil\", \"Lilligant\", \"Combee\", \"Vespiquen\", \"Exeggcute\", \"Exeggutor\", \"Ditto\", \"Porygon\", \"Porygon2\", \"Porygon-Z\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!ioaDex.includes(species.baseSpecies) && !ioaDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Isle of Armor Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tcrowntundrapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Crown Tundra Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Crown Tundra in the Galar Region (Sw/Sh DLC2)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst tundraDex = [\n\t\t\t\t\"Nidoran-F\", \"Nidorina\", \"Nidoqueen\", \"Nidoran-M\", \"Nidorino\", \"Nidoking\", \"Clefairy\", \"Clefable\", \"Zubat\", \"Golbat\", \"Ponyta\", \"Rapidash\", \"Mr. Mime\", \"Jynx\", \"Electabuzz\", \"Magmar\", \"Magikarp\", \"Gyarados\", \"Lapras\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Omanyte\", \"Omastar\", \"Kabuto\", \"Kabutops\", \"Aerodactyl\", \"Snorlax\", \"Articuno\", \"Zapdos\", \"Moltres\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Crobat\", \"Cleffa\", \"Espeon\", \"Umbreon\", \"Shuckle\", \"Sneasel\", \"Swinub\", \"Piloswine\", \"Delibird\", \"Smoochum\", \"Elekid\", \"Magby\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Zigzagoon\", \"Linoone\", \"Sableye\", \"Mawile\", \"Aron\", \"Lairon\", \"Aggron\", \"Swablu\", \"Altaria\", \"Barboach\", \"Whiscash\", \"Baltoy\", \"Claydol\", \"Lileep\", \"Cradily\", \"Anorith\", \"Armaldo\", \"Feebas\", \"Milotic\", \"Absol\", \"Snorunt\", \"Glalie\", \"Spheal\", \"Sealeo\", \"Walrein\", \"Relicanth\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Beldum\", \"Metang\", \"Metagross\", \"Regirock\", \"Regice\", \"Registeel\", \"Bronzor\", \"Bronzong\", \"Spiritomb\", \"Gible\", \"Gabite\", \"Garchomp\", \"Munchlax\", \"Riolu\", \"Lucario\", \"Snover\", \"Abomasnow\", \"Weavile\", \"Electivire\", \"Magmortar\", \"Leafeon\", \"Glaceon\", \"Mamoswine\", \"Froslass\", \"Audino\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Cottonee\", \"Whimsicott\", \"Basculin\", \"Darumaka\", \"Darmanitan\", \"Tirtouga\", \"Carracosta\", \"Archen\", \"Archeops\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Karrablast\", \"Escavalier\", \"Joltik\", \"Galvantula\", \"Ferroseed\", \"Ferrothorn\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Cubchoo\", \"Beartic\", \"Cryogonal\", \"Shelmet\", \"Accelgor\", \"Druddigon\", \"Golett\", \"Golurk\", \"Heatmor\", \"Durant\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Cobalion\", \"Terrakion\", \"Virizion\", \"Tyrunt\", \"Tyrantrum\", \"Amaura\", \"Aurorus\", \"Sylveon\", \"Carbink\", \"Phantump\", \"Trevenant\", \"Bergmite\", \"Avalugg\", \"Noibat\", \"Noivern\", \"Dewpider\", \"Araquanid\", \"Mimikyu\", \"Dhelmise\", \"Skwovet\", \"Greedent\", \"Rookidee\", \"Corvisquire\", \"Corviknight\", \"Gossifleur\", \"Eldegoss\", \"Wooloo\", \"Dubwool\", \"Yamper\", \"Boltund\", \"Rolycoly\", \"Carkol\", \"Coalossal\", \"Sizzlipede\", \"Centiskorch\", \"Sinistea\", \"Polteageist\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Obstagoon\", \"Mr. Rime\", \"Pincurchin\", \"Snom\", \"Frosmoth\", \"Stonjourner\", \"Eiscue\", \"Indeedee\", \"Morpeko\", \"Cufant\", \"Copperajah\", \"Dreepy\", \"Drakloak\", \"Dragapult\", \"Regieleki\", \"Regidrago\", \"Glastrier\", \"Spectrier\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!tundraDex.includes(species.baseSpecies) && !tundraDex.includes(species.name)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Crown Tundra Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tgalarexpansionpokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Galar Expansion Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Galar region, Isle of Armor, or Crown Tundra (Sw/Sh + Expansion Pass)\",\n\t\tonValidateSet(set, format) {\n\t\t\tconst galarDex = [\n\t\t\t\t\"Grookey\", \"Thwackey\", \"Rillaboom\", \"Scorbunny\", \"Raboot\", \"Cinderace\", \"Sobble\", \"Drizzile\", \"Inteleon\", \"Blipbug\", \"Dottler\", \"Orbeetle\", \"Caterpie\", \"Metapod\", \"Butterfree\", \"Grubbin\", \"Charjabug\", \"Vikavolt\", \"Hoothoot\", \"Noctowl\", \"Rookidee\", \"Corvisquire\", \"Corviknight\", \"Skwovet\", \"Greedent\", \"Pidove\", \"Tranquill\", \"Unfezant\", \"Nickit\", \"Thievul\", \"Zigzagoon\", \"Linoone\", \"Obstagoon\", \"Wooloo\", \"Dubwool\", \"Lotad\", \"Lombre\", \"Ludicolo\", \"Seedot\", \"Nuzleaf\", \"Shiftry\", \"Chewtle\", \"Drednaw\", \"Purrloin\", \"Liepard\", \"Yamper\", \"Boltund\", \"Bunnelby\", \"Diggersby\", \"Minccino\", \"Cinccino\", \"Bounsweet\", \"Steenee\", \"Tsareena\", \"Oddish\", \"Gloom\", \"Vileplume\", \"Bellossom\", \"Budew\", \"Roselia\", \"Roserade\", \"Wingull\", \"Pelipper\", \"Joltik\", \"Galvantula\", \"Electrike\", \"Manectric\", \"Vulpix\", \"Ninetales\", \"Growlithe\", \"Arcanine\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Delibird\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Baltoy\", \"Claydol\", \"Mudbray\", \"Mudsdale\", \"Dwebble\", \"Crustle\", \"Golett\", \"Golurk\", \"Munna\", \"Musharna\", \"Natu\", \"Xatu\", \"Stufful\", \"Bewear\", \"Snover\", \"Abomasnow\", \"Krabby\", \"Kingler\", \"Wooper\", \"Quagsire\", \"Corphish\", \"Crawdaunt\", \"Nincada\", \"Ninjask\", \"Shedinja\", \"Tyrogue\", \"Hitmonlee\", \"Hitmonchan\", \"Hitmontop\", \"Pancham\", \"Pangoro\", \"Klink\", \"Klang\", \"Klinklang\", \"Combee\", \"Vespiquen\", \"Bronzor\", \"Bronzong\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Drifloon\", \"Drifblim\", \"Gossifleur\", \"Eldegoss\", \"Cherubi\", \"Cherrim\", \"Stunky\", \"Skuntank\", \"Tympole\", \"Palpitoad\", \"Seismitoad\", \"Duskull\", \"Dusclops\", \"Dusknoir\", \"Machop\", \"Machoke\", \"Machamp\", \"Gastly\", \"Haunter\", \"Gengar\", \"Magikarp\", \"Gyarados\", \"Goldeen\", \"Seaking\", \"Remoraid\", \"Octillery\", \"Shellder\", \"Cloyster\", \"Feebas\", \"Milotic\", \"Basculin\", \"Wishiwashi\", \"Pyukumuku\", \"Trubbish\", \"Garbodor\", \"Sizzlipede\", \"Centiskorch\", \"Rolycoly\", \"Carkol\", \"Coalossal\", \"Diglett\", \"Dugtrio\", \"Drilbur\", \"Excadrill\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Woobat\", \"Swoobat\", \"Noibat\", \"Noivern\", \"Onix\", \"Steelix\", \"Arrokuda\", \"Barraskewda\", \"Meowth\", \"Perrserker\", \"Persian\", \"Milcery\", \"Alcremie\", \"Cutiefly\", \"Ribombee\", \"Ferroseed\", \"Ferrothorn\", \"Pumpkaboo\", \"Gourgeist\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Applin\", \"Flapple\", \"Appletun\", \"Espurr\", \"Meowstic\", \"Swirlix\", \"Slurpuff\", \"Spritzee\", \"Aromatisse\", \"Dewpider\", \"Araquanid\", \"Wynaut\", \"Wobbuffet\", \"Farfetch\\u2019d\", \"Sirfetch\\u2019d\", \"Chinchou\", \"Lanturn\", \"Croagunk\", \"Toxicroak\", \"Scraggy\", \"Scrafty\", \"Stunfisk\", \"Shuckle\", \"Barboach\", \"Whiscash\", \"Shellos\", \"Gastrodon\", \"Wimpod\", \"Golisopod\", \"Binacle\", \"Barbaracle\", \"Corsola\", \"Cursola\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Salandit\", \"Salazzle\", \"Pawniard\", \"Bisharp\", \"Throh\", \"Sawk\", \"Koffing\", \"Weezing\", \"Bonsly\", \"Sudowoodo\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Togepi\", \"Togetic\", \"Togekiss\", \"Munchlax\", \"Snorlax\", \"Cottonee\", \"Whimsicott\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Karrablast\", \"Escavalier\", \"Shelmet\", \"Accelgor\", \"Elgyem\", \"Beheeyem\", \"Cubchoo\", \"Beartic\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Skorupi\", \"Drapion\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Inkay\", \"Malamar\", \"Sneasel\", \"Weavile\", \"Sableye\", \"Mawile\", \"Maractus\", \"Sigilyph\", \"Riolu\", \"Lucario\", \"Torkoal\", \"Mimikyu\", \"Cufant\", \"Copperajah\", \"Qwilfish\", \"Frillish\", \"Jellicent\", \"Mareanie\", \"Toxapex\", \"Cramorant\", \"Toxel\", \"Toxtricity\", \"Toxtricity-Low-Key\", \"Silicobra\", \"Sandaconda\", \"Hippopotas\", \"Hippowdon\", \"Durant\", \"Heatmor\", \"Helioptile\", \"Heliolisk\", \"Hawlucha\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Yamask\", \"Runerigus\", \"Cofagrigus\", \"Honedge\", \"Doublade\", \"Aegislash\", \"Ponyta\", \"Rapidash\", \"Sinistea\", \"Polteageist\", \"Indeedee\", \"Phantump\", \"Trevenant\", \"Morelull\", \"Shiinotic\", \"Oranguru\", \"Passimian\", \"Morpeko\", \"Falinks\", \"Drampa\", \"Turtonator\", \"Togedemaru\", \"Snom\", \"Frosmoth\", \"Clobbopus\", \"Grapploct\", \"Pincurchin\", \"Mantyke\", \"Mantine\", \"Wailmer\", \"Wailord\", \"Bergmite\", \"Avalugg\", \"Dhelmise\", \"Lapras\", \"Lunatone\", \"Solrock\", \"Mime Jr.\", \"Mr. Mime\", \"Mr. Rime\", \"Darumaka\", \"Darmanitan\", \"Stonjourner\", \"Eiscue\", \"Duraludon\", \"Rotom\", \"Ditto\", \"Dracozolt\", \"Arctozolt\", \"Dracovish\", \"Arctovish\", \"Charmander\", \"Charmeleon\", \"Charizard\", \"Type: Null\", \"Silvally\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Dreepy\", \"Drakloak\", \"Dragapult\",\n\t\t\t\t\"Slowpoke\", \"Slowbro\", \"Slowking\", \"Buneary\", \"Lopunny\", \"Happiny\", \"Chansey\", \"Blissey\", \"Skwovet\", \"Greedent\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Blipbug\", \"Dottler\", \"Fomantis\", \"Lurantis\", \"Applin\", \"Flapple\", \"Appletun\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Shinx\", \"Luxio\", \"Luxray\", \"Klefki\", \"Pawniard\", \"Bisharp\", \"Abra\", \"Kadabra\", \"Alakazam\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Krabby\", \"Kingler\", \"Tentacool\", \"Tentacruel\", \"Magikarp\", \"Gyarados\", \"Remoraid\", \"Octillery\", \"Mantyke\", \"Mantine\", \"Wingull\", \"Pelipper\", \"Skorupi\", \"Drapion\", \"Dunsparce\", \"Bouffalant\", \"Lickitung\", \"Lickilicky\", \"Chewtle\", \"Drednaw\", \"Wooper\", \"Quagsire\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Druddigon\", \"Shelmet\", \"Accelgor\", \"Karrablast\", \"Escavalier\", \"Bulbasaur\", \"Ivysaur\", \"Venusaur\", \"Squirtle\", \"Wartortle\", \"Blastoise\", \"Venipede\", \"Whirlipede\", \"Scolipede\", \"Foongus\", \"Amoonguss\", \"Comfey\", \"Tangela\", \"Tangrowth\", \"Croagunk\", \"Toxicroak\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Zorua\", \"Zoroark\", \"Oranguru\", \"Passimian\", \"Corphish\", \"Crawdaunt\", \"Cramorant\", \"Goldeen\", \"Seaking\", \"Arrokuda\", \"Barraskewda\", \"Staryu\", \"Starmie\", \"Kubfu\", \"Urshifu\", \"Emolga\", \"Dedenne\", \"Morpeko\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Inkay\", \"Malamar\", \"Wishiwashi\", \"Carvanha\", \"Sharpedo\", \"Lillipup\", \"Herdier\", \"Stoutland\", \"Tauros\", \"Miltank\", \"Scyther\", \"Scizor\", \"Pinsir\", \"Heracross\", \"Dwebble\", \"Crustle\", \"Wimpod\", \"Golisopod\", \"Pincurchin\", \"Mareanie\", \"Toxapex\", \"Clobbopus\", \"Grapploct\", \"Shellder\", \"Cloyster\", \"Sandygast\", \"Palossand\", \"Drifloon\", \"Drifblim\", \"Barboach\", \"Whiscash\", \"Azurill\", \"Marill\", \"Azumarill\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Psyduck\", \"Golduck\", \"Whismur\", \"Loudred\", \"Exploud\", \"Woobat\", \"Swoobat\", \"Skarmory\", \"Roggenrola\", \"Boldore\", \"Gigalith\", \"Rockruff\", \"Lycanroc\", \"Salandit\", \"Salazzle\", \"Scraggy\", \"Scrafty\", \"Mienfoo\", \"Mienshao\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Sandshrew\", \"Sandslash\", \"Cubone\", \"Marowak\", \"Kangaskhan\", \"Torkoal\", \"Silicobra\", \"Sandaconda\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Larvesta\", \"Volcarona\", \"Chinchou\", \"Lanturn\", \"Wailmer\", \"Wailord\", \"Frillish\", \"Jellicent\", \"Skrelp\", \"Dragalge\", \"Clauncher\", \"Clawitzer\", \"Horsea\", \"Seadra\", \"Kingdra\", \"Petilil\", \"Lilligant\", \"Combee\", \"Vespiquen\", \"Exeggcute\", \"Exeggutor\", \"Ditto\", \"Porygon\", \"Porygon2\", \"Porygon-Z\",\n\t\t\t\t\"Nidoran-F\", \"Nidorina\", \"Nidoqueen\", \"Nidoran-M\", \"Nidorino\", \"Nidoking\", \"Clefairy\", \"Clefable\", \"Zubat\", \"Golbat\", \"Ponyta\", \"Rapidash\", \"Mr. Mime\", \"Jynx\", \"Electabuzz\", \"Magmar\", \"Magikarp\", \"Gyarados\", \"Lapras\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Omanyte\", \"Omastar\", \"Kabuto\", \"Kabutops\", \"Aerodactyl\", \"Snorlax\", \"Articuno\", \"Zapdos\", \"Moltres\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Crobat\", \"Cleffa\", \"Espeon\", \"Umbreon\", \"Shuckle\", \"Sneasel\", \"Swinub\", \"Piloswine\", \"Delibird\", \"Smoochum\", \"Elekid\", \"Magby\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Zigzagoon\", \"Linoone\", \"Sableye\", \"Mawile\", \"Aron\", \"Lairon\", \"Aggron\", \"Swablu\", \"Altaria\", \"Barboach\", \"Whiscash\", \"Baltoy\", \"Claydol\", \"Lileep\", \"Cradily\", \"Anorith\", \"Armaldo\", \"Feebas\", \"Milotic\", \"Absol\", \"Snorunt\", \"Glalie\", \"Spheal\", \"Sealeo\", \"Walrein\", \"Relicanth\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Beldum\", \"Metang\", \"Metagross\", \"Regirock\", \"Regice\", \"Registeel\", \"Bronzor\", \"Bronzong\", \"Spiritomb\", \"Gible\", \"Gabite\", \"Garchomp\", \"Munchlax\", \"Riolu\", \"Lucario\", \"Snover\", \"Abomasnow\", \"Weavile\", \"Electivire\", \"Magmortar\", \"Leafeon\", \"Glaceon\", \"Mamoswine\", \"Froslass\", \"Audino\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Cottonee\", \"Whimsicott\", \"Basculin\", \"Darumaka\", \"Darmanitan\", \"Tirtouga\", \"Carracosta\", \"Archen\", \"Archeops\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Vanillite\", \"Vanillish\", \"Vanilluxe\", \"Karrablast\", \"Escavalier\", \"Joltik\", \"Galvantula\", \"Ferroseed\", \"Ferrothorn\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Cubchoo\", \"Beartic\", \"Cryogonal\", \"Shelmet\", \"Accelgor\", \"Druddigon\", \"Golett\", \"Golurk\", \"Heatmor\", \"Durant\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Cobalion\", \"Terrakion\", \"Virizion\", \"Tyrunt\", \"Tyrantrum\", \"Amaura\", \"Aurorus\", \"Sylveon\", \"Carbink\", \"Phantump\", \"Trevenant\", \"Bergmite\", \"Avalugg\", \"Noibat\", \"Noivern\", \"Dewpider\", \"Araquanid\", \"Mimikyu\", \"Dhelmise\", \"Skwovet\", \"Greedent\", \"Rookidee\", \"Corvisquire\", \"Corviknight\", \"Gossifleur\", \"Eldegoss\", \"Wooloo\", \"Dubwool\", \"Yamper\", \"Boltund\", \"Rolycoly\", \"Carkol\", \"Coalossal\", \"Sizzlipede\", \"Centiskorch\", \"Sinistea\", \"Polteageist\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Obstagoon\", \"Mr. Rime\", \"Pincurchin\", \"Snom\", \"Frosmoth\", \"Stonjourner\", \"Eiscue\", \"Indeedee\", \"Morpeko\", \"Cufant\", \"Copperajah\", \"Dreepy\", \"Drakloak\", \"Dragapult\", \"Regieleki\", \"Regidrago\", \"Glastrier\", \"Spectrier\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!galarDex.includes(species.baseSpecies) && !galarDex.includes(species.name)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Galar, Isle of Armor, or Crown Tundra Pok\u00E9dexes.`];\n\t\t\t}\n\t\t},\n\t},\n\tpaldeapokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Paldea Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Paldea region (SV)\",\n\t\tbanlist: [\n\t\t\t'Arcanine-Hisui', 'Avalugg-Hisui', 'Basculin-White-Striped', 'Braviary-Hisui', 'Diglett-Alola', 'Dugtrio-Alola', 'Electrode-Hisui', 'Gimmighoul-Roaming',\n\t\t\t'Goodra-Hisui', 'Grimer-Alola', 'Growlithe-Hisui', 'Lilligant-Hisui', 'Meowth-Galar', 'Muk-Alola', 'Persian-Alola', 'Qwilfish-Hisui', 'Raichu-Alola',\n\t\t\t'Sliggoo-Hisui', 'Slowbro-Galar', 'Slowking-Galar', 'Slowpoke-Galar', 'Sneasel-Hisui', 'Voltorb-Hisui', 'Tauros-Base', 'Wooper-Base', 'Zorua-Hisui',\n\t\t\t'Zoroark-Hisui',\n\t\t],\n\t\tonValidateSet(set, format) {\n\t\t\tconst paldeaDex = [\n\t\t\t\t\"Sprigatito\", \"Floragato\", \"Meowscarada\", \"Fuecoco\", \"Crocalor\", \"Skeledirge\", \"Quaxly\", \"Quaxwell\", \"Quaquaval\", \"Lechonk\", \"Oinkologne\", \"Tarountula\", \"Spidops\", \"Nymble\", \"Lokix\", \"Hoppip\", \"Skiploom\", \"Jumpluff\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Pawmi\", \"Pawmo\", \"Pawmot\", \"Houndour\", \"Houndoom\", \"Yungoos\", \"Gumshoos\", \"Skwovet\", \"Greedent\", \"Sunkern\", \"Sunflora\", \"Kricketot\", \"Kricketune\", \"Scatterbug\", \"Spewpa\", \"Vivillon\", \"Combee\", \"Vespiquen\", \"Rookidee\", \"Corvisquire\", \"Corviknight\", \"Happiny\", \"Chansey\", \"Blissey\", \"Azurill\", \"Marill\", \"Azumarill\", \"Surskit\", \"Masquerain\", \"Buizel\", \"Floatzel\", \"Wooper\", \"Clodsire\", \"Psyduck\", \"Golduck\", \"Chewtle\", \"Drednaw\", \"Igglybuff\", \"Jigglypuff\", \"Wigglytuff\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Drowzee\", \"Hypno\", \"Gastly\", \"Haunter\", \"Gengar\", \"Tandemaus\", \"Maushold\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Fidough\", \"Dachsbun\", \"Slakoth\", \"Vigoroth\", \"Slaking\", \"Bounsweet\", \"Steenee\", \"Tsareena\", \"Smoliv\", \"Dolliv\", \"Arboliva\", \"Bonsly\", \"Sudowoodo\", \"Rockruff\", \"Lycanroc\", \"Rolycoly\", \"Carkol\", \"Coalossal\", \"Shinx\", \"Luxio\", \"Luxray\", \"Starly\", \"Staravia\", \"Staraptor\", \"Oricorio\", \"Mareep\", \"Flaaffy\", \"Ampharos\", \"Petilil\", \"Lilligant\", \"Shroomish\", \"Breloom\", \"Applin\", \"Flapple\", \"Appletun\", \"Spoink\", \"Grumpig\", \"Squawkabilly\", \"Misdreavus\", \"Mismagius\", \"Makuhita\", \"Hariyama\", \"Crabrawler\", \"Crabominable\", \"Salandit\", \"Salazzle\", \"Phanpy\", \"Donphan\", \"Cufant\", \"Copperajah\", \"Gible\", \"Gabite\", \"Garchomp\", \"Nacli\", \"Naclstack\", \"Garganacl\", \"Wingull\", \"Pelipper\", \"Magikarp\", \"Gyarados\", \"Arrokuda\", \"Barraskewda\", \"Basculin\", \"Gulpin\", \"Swalot\", \"Meowth\", \"Persian\", \"Drifloon\", \"Drifblim\", \"Flabe\\u0301be\\u0301\", \"Floette\", \"Florges\", \"Diglett\", \"Dugtrio\", \"Torkoal\", \"Numel\", \"Camerupt\", \"Bronzor\", \"Bronzong\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Mankey\", \"Primeape\", \"Annihilape\", \"Meditite\", \"Medicham\", \"Riolu\", \"Lucario\", \"Charcadet\", \"Armarouge\", \"Ceruledge\", \"Barboach\", \"Whiscash\", \"Tadbulb\", \"Bellibolt\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Croagunk\", \"Toxicroak\", \"Wattrel\", \"Kilowattrel\", \"Eevee\", \"Vaporeon\", \"Jolteon\", \"Flareon\", \"Espeon\", \"Umbreon\", \"Leafeon\", \"Glaceon\", \"Sylveon\", \"Dunsparce\", \"Dudunsparce\", \"Deerling\", \"Sawsbuck\", \"Girafarig\", \"Farigiraf\", \"Grimer\", \"Muk\", \"Maschiff\", \"Mabosstiff\", \"Toxel\", \"Toxtricity\", \"Dedenne\", \"Pachirisu\", \"Shroodle\", \"Grafaiai\", \"Stantler\", \"Foongus\", \"Amoonguss\", \"Voltorb\", \"Electrode\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Ditto\", \"Growlithe\", \"Arcanine\", \"Teddiursa\", \"Ursaring\", \"Zangoose\", \"Seviper\", \"Swablu\", \"Altaria\", \"Skiddo\", \"Gogoat\", \"Tauros\", \"Litleo\", \"Pyroar\", \"Stunky\", \"Skuntank\", \"Zorua\", \"Zoroark\", \"Sneasel\", \"Weavile\", \"Murkrow\", \"Honchkrow\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Sinistea\", \"Polteageist\", \"Mimikyu\", \"Klefki\", \"Indeedee\", \"Bramblin\", \"Brambleghast\", \"Toedscool\", \"Toedscruel\", \"Tropius\", \"Fomantis\", \"Lurantis\", \"Klawf\", \"Capsakid\", \"Scovillain\", \"Cacnea\", \"Cacturne\", \"Rellor\", \"Rabsca\", \"Venonat\", \"Venomoth\", \"Pineco\", \"Forretress\", \"Scyther\", \"Scizor\", \"Heracross\", \"Flittle\", \"Espathra\", \"Hippopotas\", \"Hippowdon\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Silicobra\", \"Sandaconda\", \"Mudbray\", \"Mudsdale\", \"Larvesta\", \"Volcarona\", \"Bagon\", \"Shelgon\", \"Salamence\", \"Tinkatink\", \"Tinkatuff\", \"Tinkaton\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Wiglett\", \"Wugtrio\", \"Bombirdier\", \"Finizen\", \"Palafin\", \"Varoom\", \"Revavroom\", \"Cyclizar\", \"Orthworm\", \"Sableye\", \"Shuppet\", \"Banette\", \"Falinks\", \"Hawlucha\", \"Spiritomb\", \"Noibat\", \"Noivern\", \"Dreepy\", \"Drakloak\", \"Dragapult\", \"Glimmet\", \"Glimmora\", \"Rotom\", \"Greavard\", \"Houndstone\", \"Oranguru\", \"Passimian\", \"Komala\", \"Larvitar\", \"Pupitar\", \"Tyranitar\", \"Stonjourner\", \"Eiscue\", \"Pincurchin\", \"Sandygast\", \"Palossand\", \"Slowpoke\", \"Slowbro\", \"Slowking\", \"Shellos\", \"Gastrodon\", \"Shellder\", \"Cloyster\", \"Qwilfish\", \"Luvdisc\", \"Finneon\", \"Lumineon\", \"Bruxish\", \"Alomomola\", \"Skrelp\", \"Dragalge\", \"Clauncher\", \"Clawitzer\", \"Tynamo\", \"Eelektrik\", \"Eelektross\", \"Mareanie\", \"Toxapex\", \"Flamigo\", \"Dratini\", \"Dragonair\", \"Dragonite\", \"Snom\", \"Frosmoth\", \"Snover\", \"Abomasnow\", \"Delibird\", \"Cubchoo\", \"Beartic\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Cryogonal\", \"Cetoddle\", \"Cetitan\", \"Bergmite\", \"Avalugg\", \"Rufflet\", \"Braviary\", \"Pawniard\", \"Bisharp\", \"Kingambit\", \"Deino\", \"Zweilous\", \"Hydreigon\", \"Veluza\", \"Dondozo\", \"Tatsugiri\", \"Great Tusk\", \"Scream Tail\", \"Brute Bonnet\", \"Flutter Mane\", \"Slither Wing\", \"Sandy Shocks\", \"Iron Treads\", \"Iron Bundle\", \"Iron Hands\", \"Iron Jugulis\", \"Iron Moth\", \"Iron Thorns\", \"Frigibax\", \"Arctibax\", \"Baxcalibur\", \"Gimmighoul\", \"Gholdengo\", \"Wo-Chien\", \"Chien-Pao\", \"Ting-Lu\", \"Chi-Yu\", \"Roaring Moon\", \"Iron Valiant\", \"Koraidon\", \"Miraidon\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!paldeaDex.includes(species.baseSpecies) && !paldeaDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Paldea Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tkitakamipokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Kitakami Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Kitakami region (SV DLC1)\",\n\t\tbanlist: [\n\t\t\t'Wooper-Paldea', 'Raichu-Alola', 'Vulpix-Alola', 'Ninetales-Alola', 'Growlithe-Hisui', 'Arcanine-Hisui',\n\t\t\t'Geodude-Alola', 'Graveler-Alola', 'Golem-Alola', 'Sandshrew-Alola', 'Sandslash-Alola', 'Weezing-Galar',\n\t\t\t'Sneasel-Hisui', 'Sliggoo-Hisui', 'Goodra-Hisui', 'Basculin-Red-Striped', 'Basculin-Blue-Striped', 'Ursaluna-Base',\n\t\t],\n\t\tonValidateSet(set, format) {\n\t\t\tconst kitakamiDex = [\n\t\t\t\t\"Spinarak\", \"Ariados\", \"Yanma\", \"Yanmega\", \"Wooper\", \"Quagsire\", \"Poochyena\", \"Mightyena\", \"Volbeat\", \"Illumise\", \"Corphish\", \"Crawdaunt\", \"Sewaddle\", \"Swadloon\", \"Leavanny\", \"Cutiefly\", \"Ribombee\", \"Ekans\", \"Arbok\", \"Pichu\", \"Pikachu\", \"Raichu\", \"Bellsprout\", \"Weepinbell\", \"Victreebel\", \"Sentret\", \"Furret\", \"Starly\", \"Staravia\", \"Staraptor\", \"Fomantis\", \"Lurantis\", \"Applin\", \"Flapple\", \"Appletun\", \"Dipplin\", \"Vulpix\", \"Ninetales\", \"Poliwag\", \"Poliwhirl\", \"Poliwrath\", \"Politoed\", \"Magikarp\", \"Gyarados\", \"Hoothoot\", \"Noctowl\", \"Aipom\", \"Ambipom\", \"Heracross\", \"Swinub\", \"Piloswine\", \"Mamoswine\", \"Stantler\", \"Seedot\", \"Nuzleaf\", \"Shiftry\", \"Ralts\", \"Kirlia\", \"Gardevoir\", \"Gallade\", \"Kricketot\", \"Kricketune\", \"Pachirisu\", \"Riolu\", \"Lucario\", \"Petilil\", \"Lilligant\", \"Phantump\", \"Trevenant\", \"Rockruff\", \"Lycanroc\", \"Skwovet\", \"Greedent\", \"Toedscool\", \"Toedscruel\", \"Poltchageist\", \"Sinistcha\", \"Growlithe\", \"Arcanine\", \"Geodude\", \"Graveler\", \"Golem\", \"Bonsly\", \"Sudowoodo\", \"Timburr\", \"Gurdurr\", \"Conkeldurr\", \"Noibat\", \"Noivern\", \"Arrokuda\", \"Barraskewda\", \"Hatenna\", \"Hattrem\", \"Hatterene\", \"Morpeko\", \"Orthworm\", \"Tandemaus\", \"Maushold\", \"Mankey\", \"Primeape\", \"Annihilape\", \"Munchlax\", \"Snorlax\", \"Lotad\", \"Lombre\", \"Ludicolo\", \"Nosepass\", \"Probopass\", \"Shinx\", \"Luxio\", \"Luxray\", \"Grubbin\", \"Charjabug\", \"Vikavolt\", \"Oricorio\", \"Sandshrew\", \"Sandslash\", \"Gastly\", \"Haunter\", \"Gengar\", \"Gligar\", \"Gliscor\", \"Houndour\", \"Houndoom\", \"Spoink\", \"Grumpig\", \"Vullaby\", \"Mandibuzz\", \"Mudbray\", \"Mudsdale\", \"Jangmo-o\", \"Hakamo-o\", \"Kommo-o\", \"Bombirdier\", \"Koffing\", \"Weezing\", \"Mienfoo\", \"Mienshao\", \"Duskull\", \"Dusclops\", \"Dusknoir\", \"Chingling\", \"Chimecho\", \"Slugma\", \"Magcargo\", \"Litwick\", \"Lampent\", \"Chandelure\", \"Surskit\", \"Masquerain\", \"Cleffa\", \"Clefairy\", \"Clefable\", \"Bronzor\", \"Bronzong\", \"Glimmet\", \"Glimmora\", \"Feebas\", \"Milotic\", \"Dunsparce\", \"Dudunsparce\", \"Barboach\", \"Whiscash\", \"Gible\", \"Gabite\", \"Garchomp\", \"Carbink\", \"Salandit\", \"Salazzle\", \"Sneasel\", \"Weavile\", \"Snorunt\", \"Glalie\", \"Froslass\", \"Tynamo\", \"Eelektrik\", \"Eelektross\", \"Goomy\", \"Sliggoo\", \"Goodra\", \"Ducklett\", \"Swanna\", \"Chewtle\", \"Drednaw\", \"Cramorant\", \"Pawniard\", \"Bisharp\", \"Kingambit\", \"Mimikyu\", \"Impidimp\", \"Morgrem\", \"Grimmsnarl\", \"Indeedee\", \"Basculin\", \"Basculegion\", \"Ursaluna\", \"Okidogi\", \"Munkidori\", \"Fezandipiti\", \"Ogerpon\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!kitakamiDex.includes(species.baseSpecies) && !kitakamiDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Kitakami Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tblueberrypokedex: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Blueberry Pokedex',\n\t\tdesc: \"Only allows Pokémon native to the Blueberry Academy (SV DLC2)\",\n\t\tbanlist: [\n\t\t\t'Diglett-Base', 'Dugtrio-Base', 'Grimer-Base', 'Muk-Base', 'Slowpoke-Base', 'Slowbro-Base', 'Slowking-Base',\n\t\t\t'Geodude-Base', 'Graveler-Base', 'Golem-Base', 'Qwilfish-Base', 'Sandshrew-Base', 'Sandslash-Base',\n\t\t\t'Vulpix-Base', 'Ninetales-Base', 'Typhlosion-Hisui', 'Samurott-Hisui', 'Greninja-Bond', 'Decidueye-Hisui',\n\t\t],\n\t\tonValidateSet(set, format) {\n\t\t\tconst blueberryDex = [\n\t\t\t\t\"Doduo\", \"Dodrio\", \"Exeggcute\", \"Exeggutor\", \"Rhyhorn\", \"Rhydon\", \"Rhyperior\", \"Venonat\", \"Venomoth\", \"Elekid\", \"Electabuzz\", \"Electivire\", \"Magby\", \"Magmar\", \"Magmortar\", \"Happiny\", \"Chansey\", \"Blissey\", \"Scyther\", \"Scizor\", \"Kleavor\", \"Tauros\", \"Blitzle\", \"Zebstrika\", \"Girafarig\", \"Farigiraf\", \"Sandile\", \"Krokorok\", \"Krookodile\", \"Rellor\", \"Rabsca\", \"Rufflet\", \"Braviary\", \"Vullaby\", \"Mandibuzz\", \"Litleo\", \"Pyroar\", \"Deerling\", \"Sawsbuck\", \"Smeargle\", \"Rotom\", \"Milcery\", \"Alcremie\", \"Trapinch\", \"Vibrava\", \"Flygon\", \"Pikipek\", \"Trumbeak\", \"Toucannon\", \"Tentacool\", \"Tentacruel\", \"Horsea\", \"Seadra\", \"Kingdra\", \"Bruxish\", \"Cottonee\", \"Whimsicott\", \"Comfey\", \"Slakoth\", \"Vigoroth\", \"Slaking\", \"Oddish\", \"Gloom\", \"Vileplume\", \"Bellossom\", \"Diglett\", \"Dugtrio\", \"Grimer\", \"Muk\", \"Zangoose\", \"Seviper\", \"Crabrawler\", \"Crabominable\", \"Oricorio\", \"Slowpoke\", \"Slowbro\", \"Slowking\", \"Chinchou\", \"Lanturn\", \"Inkay\", \"Malamar\", \"Luvdisc\", \"Finneon\", \"Lumineon\", \"Alomomola\", \"Torkoal\", \"Fletchling\", \"Fletchinder\", \"Talonflame\", \"Dewpider\", \"Araquanid\", \"Tyrogue\", \"Hitmonlee\", \"Hitmonchan\", \"Hitmontop\", \"Geodude\", \"Graveler\", \"Golem\", \"Drilbur\", \"Excadrill\", \"Gothita\", \"Gothorita\", \"Gothitelle\", \"Espurr\", \"Meowstic\", \"Minior\", \"Cranidos\", \"Rampardos\", \"Shieldon\", \"Bastiodon\", \"Minccino\", \"Cinccino\", \"Skarmory\", \"Swablu\", \"Altaria\", \"Magnemite\", \"Magneton\", \"Magnezone\", \"Plusle\", \"Minun\", \"Scraggy\", \"Scrafty\", \"Golett\", \"Golurk\", \"Numel\", \"Camerupt\", \"Sinistea\", \"Polteageist\", \"Porygon\", \"Porygon2\", \"Porygon-Z\", \"Joltik\", \"Galvantula\", \"Tynamo\", \"Eelektrik\", \"Eelektross\", \"Beldum\", \"Metang\", \"Metagross\", \"Axew\", \"Fraxure\", \"Haxorus\", \"Seel\", \"Dewgong\", \"Lapras\", \"Qwilfish\", \"Overqwil\", \"Solosis\", \"Duosion\", \"Reuniclus\", \"Snubbull\", \"Granbull\", \"Cubchoo\", \"Beartic\", \"Sandshrew\", \"Sandslash\", \"Vulpix\", \"Ninetales\", \"Snover\", \"Abomasnow\", \"Duraludon\", \"Archaludon\", \"Hydrapple\", \"Bulbasaur\", \"Ivysaur\", \"Venusaur\", \"Charmander\", \"Charmeleon\", \"Charizard\", \"Squirtle\", \"Wartortle\", \"Blastoise\", \"Chikorita\", \"Bayleef\", \"Meganium\", \"Cyndaquil\", \"Quilava\", \"Typhlosion\", \"Totodile\", \"Croconaw\", \"Feraligatr\", \"Treecko\", \"Grovyle\", \"Sceptile\", \"Torchic\", \"Combusken\", \"Blaziken\", \"Mudkip\", \"Marshtomp\", \"Swampert\", \"Turtwig\", \"Grotle\", \"Torterra\", \"Chimchar\", \"Monferno\", \"Infernape\", \"Piplup\", \"Prinplup\", \"Empoleon\", \"Snivy\", \"Servine\", \"Serperior\", \"Tepig\", \"Pignite\", \"Emboar\", \"Oshawott\", \"Dewott\", \"Samurott\", \"Chespin\", \"Quilladin\", \"Chesnaught\", \"Fennekin\", \"Braixen\", \"Delphox\", \"Froakie\", \"Frogadier\", \"Greninja\", \"Rowlet\", \"Dartrix\", \"Decidueye\", \"Litten\", \"Torracat\", \"Incineroar\", \"Popplio\", \"Brionne\", \"Primarina\", \"Grookey\", \"Thwackey\", \"Rillaboom\", \"Scorbunny\", \"Raboot\", \"Cinderace\", \"Sobble\", \"Drizzile\", \"Inteleon\", \"Gouging Fire\", \"Raging Bolt\", \"Iron Crown\", \"Iron Boulder\", \"Terapagos\", \"Walking Wake\", \"Iron Leaves\",\n\t\t\t];\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (!blueberryDex.includes(species.baseSpecies) && !blueberryDex.includes(species.name) &&\n\t\t\t\t!this.ruleTable.has('+' + species.id)) {\n\t\t\t\treturn [`${species.baseSpecies} is not in the Blueberry Pok\u00E9dex.`];\n\t\t\t}\n\t\t},\n\t},\n\tpotd: {\n\t\teffectType: 'Rule',\n\t\tname: 'PotD',\n\t\tdesc: \"Forces the Pokemon of the Day onto every random team.\",\n\t\tonBegin() {\n\t\t\tif (global.Config?.potd) {\n\t\t\t\tthis.add('rule', \"Pokemon of the Day: \" + this.dex.species.get(Config.potd).name);\n\t\t\t}\n\t\t},\n\t},\n\tforcemonotype: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Force Monotype',\n\t\tdesc: `Forces all teams to have the same type. Usage: Force Monotype = [Type], e.g. \"Force Monotype = Water\"`,\n\t\thasValue: true,\n\t\tonValidateRule(value) {\n\t\t\tconst type = this.dex.types.get(value);\n\t\t\tif (!type.exists) throw new Error(`Misspelled type \"${value}\"`);\n\t\t\t// Temporary hardcode until types support generations\n\t\t\tif (\n\t\t\t\t(['Dark', 'Steel'].includes(type.name) && this.dex.gen < 2) ||\n\t\t\t\t(type.name === 'Fairy' && this.dex.gen < 6)\n\t\t\t) {\n\t\t\t\tthrow new Error(`Invalid type \"${type.name}\" in Generation ${this.dex.gen}`);\n\t\t\t}\n\t\t\tif (type.name === 'Stellar') {\n\t\t\t\tthrow new Error(`There are no Stellar-type Pok\\u00e9mon.`);\n\t\t\t}\n\t\t\treturn type.name;\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tconst type = this.dex.types.get(this.ruleTable.valueRules.get('forcemonotype')!);\n\t\t\tif (!species.types.map(this.toID).includes(type.id)) {\n\t\t\t\treturn [`${set.species} must have ${type.name} type.`];\n\t\t\t}\n\t\t},\n\t},\n\tforcemonocolor: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Force Monocolor',\n\t\tdesc: `Forces all teams to have Pokémon of the same color. Usage: Force Monocolor = [Color], e.g. \"Force Monocolor = Blue\"`,\n\t\thasValue: true,\n\t\tonValidateRule(value) {\n\t\t\tconst validColors = [\"Black\", \"Blue\", \"Brown\", \"Gray\", \"Green\", \"Pink\", \"Purple\", \"Red\", \"White\", \"Yellow\"];\n\t\t\tif (!validColors.map(this.dex.toID).includes(this.dex.toID(value))) {\n\t\t\t\tthrow new Error(`Invalid color \"${value}\"`);\n\t\t\t}\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst color = this.toID(this.ruleTable.valueRules.get('forcemonocolor'));\n\t\t\tlet dex = this.dex;\n\t\t\tif (dex.gen < 5) {\n\t\t\t\tdex = dex.forGen(5);\n\t\t\t}\n\t\t\tconst species = dex.species.get(set.species);\n\t\t\tif (this.toID(species.color) !== color) {\n\t\t\t\treturn [`${set.species} must be the color ${color}.`];\n\t\t\t}\n\t\t},\n\t},\n\tforceteratype: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Force Tera Type',\n\t\tdesc: `Forces all Pokémon to have the same Tera Type. Usage: Force Tera Type = [Type], e.g. \"Force Tera Type = Dragon\"`,\n\t\thasValue: true,\n\t\tonValidateRule(value) {\n\t\t\tif (this.dex.gen !== 9) {\n\t\t\t\tthrow new Error(`Terastallization doesn't exist outside of Generation 9.`);\n\t\t\t}\n\t\t\tconst type = this.dex.types.get(value);\n\t\t\tif (!type.exists) throw new Error(`Misspelled type \"${value}\"`);\n\t\t\tif (type.isNonstandard) {\n\t\t\t\tthrow new Error(`Invalid type \"${type.name}\" in Generation ${this.dex.gen}.`);\n\t\t\t}\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst type = this.dex.types.get(this.ruleTable.valueRules.get('forceteratype')!);\n\t\t\tif (this.toID(set.teraType) !== type.id) {\n\t\t\t\treturn [`${set.species} must have its Tera Type set to ${type.name}.`];\n\t\t\t}\n\t\t},\n\t},\n\tforceselect: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Force Select',\n\t\tdesc: `Forces a Pokemon to be on the team and selected at Team Preview. Usage: Force Select = [Pokemon], e.g. \"Force Select = Magikarp\"`,\n\t\thasValue: true,\n\t\tonValidateRule(value) {\n\t\t\tif (!this.dex.species.get(value).exists) throw new Error(`Misspelled Pokemon \"${value}\"`);\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tlet hasSelection = false;\n\t\t\tconst species = this.dex.species.get(this.ruleTable.valueRules.get('forceselect'));\n\t\t\tfor (const set of team) {\n\t\t\t\tif (species.name === set.species) {\n\t\t\t\t\thasSelection = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!hasSelection) {\n\t\t\t\treturn [`Your team must contain ${species.name}.`];\n\t\t\t}\n\t\t},\n\t\t// hardcoded in sim/side\n\t},\n\tevlimits: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'EV Limits',\n\t\tdesc: \"Require EVs to be in specific ranges, such as: \\\"EV Limits = Atk 0-124 / Def 100-252\\\"\",\n\t\thasValue: true,\n\t\tonValidateRule(value) {\n\t\t\tif (!value) throw new Error(`To remove EV limits, use \"! EV Limits\"`);\n\n\t\t\tconst slashedParts = value.split('/');\n\t\t\tconst UINT_REGEX = /^[0-9]{1,4}$/;\n\t\t\treturn slashedParts.map(slashedPart => {\n\t\t\t\tconst parts = slashedPart.replace('-', ' - ').replace(/ +/g, ' ').trim().split(' ');\n\t\t\t\tconst [stat, low, hyphen, high] = parts;\n\t\t\t\tif (parts.length !== 4 || !UINT_REGEX.test(low) || hyphen !== '-' || !UINT_REGEX.test(high)) {\n\t\t\t\t\tthrow new Error(`EV limits should be in the format \"EV Limits = Atk 0-124 / Def 100-252\"`);\n\t\t\t\t}\n\t\t\t\tconst statid = this.dex.toID(stat) as StatID;\n\t\t\t\tif (!this.dex.stats.ids().includes(statid)) {\n\t\t\t\t\tthrow new Error(`Unrecognized stat name \"${stat}\" in \"${value}\"`);\n\t\t\t\t}\n\t\t\t\treturn `${statid} ${low}-${high}`;\n\t\t\t}).join(' / ');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst limits = this.ruleTable.valueRules.get('evlimits')!;\n\t\t\tconst problems = [];\n\n\t\t\tfor (const limit of limits.split(' / ')) {\n\t\t\t\tconst [statid, range] = limit.split(' ') as [StatID, string];\n\t\t\t\tconst [low, high] = range.split('-').map(num => parseInt(num));\n\t\t\t\tconst ev = set.evs[statid];\n\n\t\t\t\tif (ev < low || ev > high) {\n\t\t\t\t\tproblems.push(`${set.name || set.species}'s ${this.dex.stats.names[statid]} EV (${ev}) must be ${low}-${high}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn problems;\n\t\t},\n\t},\n\tteampreview: {\n\t\teffectType: 'Rule',\n\t\tname: 'Team Preview',\n\t\tdesc: \"Allows each player to see the Pokémon on their opponent's team before they choose their lead Pokémon\",\n\t\tonBegin() {\n\t\t\tif (this.ruleTable.has(`teratypepreview`)) {\n\t\t\t\tthis.add('rule', 'Tera Type Preview: Tera Types are shown at Team Preview');\n\t\t\t}\n\t\t},\n\t\tonTeamPreview() {\n\t\t\tthis.add('clearpoke');\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tlet details = pokemon.details.replace(', shiny', '')\n\t\t\t\t\t.replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed\n\t\t\t\tif (!this.ruleTable.has('speciesrevealclause')) {\n\t\t\t\t\tdetails = details\n\t\t\t\t\t\t.replace(/(Greninja|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu|Dudunsparce)(-[a-zA-Z?-]+)?/g, '$1-*');\n\t\t\t\t}\n\t\t\t\tthis.add('poke', pokemon.side.id, details, '');\n\t\t\t}\n\t\t\tthis.makeRequest('teampreview');\n\t\t\tif (this.ruleTable.has(`teratypepreview`)) {\n\t\t\t\tfor (const side of this.sides) {\n\t\t\t\t\tlet buf = ``;\n\t\t\t\t\tfor (const pokemon of side.pokemon) {\n\t\t\t\t\t\tbuf += buf ? ` / ` : `raw|${side.name}'s Tera Types:
`;\n\t\t\t\t\t\tbuf += ``;\n\t\t\t\t\t}\n\t\t\t\t\tthis.add(`${buf}`);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tteratypepreview: {\n\t\teffectType: 'Rule',\n\t\tname: 'Tera Type Preview',\n\t\tdesc: \"Allows each player to see the Tera Type of the Pokémon on their opponent's team before they choose their lead Pokémon\",\n\t\tonValidateRule() {\n\t\t\tif (!this.ruleTable.has('teampreview')) {\n\t\t\t\tthrow new Error(`The \"Tera Type Preview\" rule${this.ruleTable.blame('teratypepreview')} requires Team Preview.`);\n\t\t\t}\n\t\t},\n\t\t// implemented in team preview\n\t},\n\tonevsone: {\n\t\teffectType: 'Rule',\n\t\tname: 'One vs One',\n\t\tdesc: \"Only allows one Pokémon in battle\",\n\t\truleset: ['Picked Team Size = 1'],\n\t},\n\ttwovstwo: {\n\t\teffectType: 'Rule',\n\t\tname: 'Two vs Two',\n\t\tdesc: \"Only allows two Pokémon in battle\",\n\t\truleset: ['Picked Team Size = 2'],\n\t},\n\tlittlecup: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Little Cup',\n\t\tdesc: \"Only allows Pokémon that can evolve and don't have any prior evolutions\",\n\t\truleset: ['Max Level = 5'],\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (species.prevo && this.dex.species.get(species.prevo).gen <= this.gen) {\n\t\t\t\treturn [set.species + \" isn't the first in its evolution family.\"];\n\t\t\t}\n\t\t\tif (!species.nfe) {\n\t\t\t\treturn [set.species + \" doesn't have an evolution family.\"];\n\t\t\t}\n\t\t},\n\t},\n\ttimerstarting: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Starting',\n\t\tdesc: \"Amount of time given at the start of the battle in seconds\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\tdctimer: {\n\t\teffectType: 'Rule',\n\t\tname: 'DC Timer',\n\t\tdesc: \"Enables or disables the disconnection timer\",\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\tdctimerbank: {\n\t\teffectType: 'Rule',\n\t\tname: 'DC Timer Bank',\n\t\tdesc: \"Enables or disables the disconnection timer bank\",\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimergrace: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Grace',\n\t\tdesc: \"Grace period between timer activation and when total time starts ticking down.\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimeraddperturn: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Add Per Turn',\n\t\tdesc: \"Amount of additional time given per turn in seconds\",\n\t\thasValue: 'integer',\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimermaxperturn: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Max Per Turn',\n\t\tdesc: \"Maximum amount of time allowed per turn in seconds\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimermaxfirstturn: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Max First Turn',\n\t\tdesc: \"Maximum amount of time allowed for the first turn in seconds\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimeoutautochoose: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timeout Auto Choose',\n\t\tdesc: \"Enables or disables automatic selection of moves when a player times out\",\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\ttimeraccelerate: {\n\t\teffectType: 'Rule',\n\t\tname: 'Timer Accelerate',\n\t\tdesc: \"Enables or disables timer acceleration\",\n\t\t// hardcoded in server/room-battle.ts\n\t},\n\tblitz: {\n\t\teffectType: 'Rule',\n\t\tname: 'Blitz',\n\t\t// THIS 100% INTENTIONALLY SAYS TEN SECONDS PER TURN\n\t\t// IGNORE Max Per Turn. Add Per Turn IS 5, TRANSLATING TO AN INCREMENT OF 10.\n\t\tdesc: \"Super-fast 'Blitz' timer giving 30 second Team Preview and 10 seconds per turn.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Blitz: Super-fast timer');\n\t\t},\n\t\truleset: [\n\t\t\t'Timer Starting = 15', 'Timer Grace = 30',\n\t\t\t'Timer Add Per Turn = 5', 'Timer Max Per Turn = 15', 'Timer Max First Turn = 40',\n\t\t],\n\t},\n\tvgctimer: {\n\t\teffectType: 'Rule',\n\t\tname: 'VGC Timer',\n\t\tdesc: \"VGC's timer: 90 second Team Preview, 7 minutes Your Time, 1 minute per turn\",\n\t\truleset: [\n\t\t\t'Timer Starting = 420', 'Timer Grace = 90',\n\t\t\t'Timer Add Per Turn = 0', 'Timer Max Per Turn = 55', 'Timer Max First Turn = 90',\n\t\t\t'Timeout Auto Choose', 'DC Timer Bank',\n\t\t],\n\t},\n\tspeciesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Species Clause',\n\t\tdesc: \"Prevents teams from having more than one Pokémon from the same species\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Species Clause: Limit one of each Pok\u00E9mon');\n\t\t},\n\t\tonValidateTeam(team, format) {\n\t\t\tconst speciesTable = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tif (speciesTable.has(species.num)) {\n\t\t\t\t\treturn [`You are limited to one of each Pok\u00E9mon by Species Clause.`, `(You have more than one ${species.baseSpecies})`];\n\t\t\t\t}\n\t\t\t\tspeciesTable.add(species.num);\n\t\t\t}\n\t\t},\n\t},\n\tnicknameclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Nickname Clause',\n\t\tdesc: \"Prevents teams from having more than one Pokémon with the same nickname\",\n\t\tonValidateTeam(team, format) {\n\t\t\tconst nameTable = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tconst name = set.name;\n\t\t\t\tif (name) {\n\t\t\t\t\tif (name === this.dex.species.get(set.species).baseSpecies) continue;\n\t\t\t\t\tif (nameTable.has(name)) {\n\t\t\t\t\t\treturn [`Your Pok\u00E9mon must have different nicknames.`, `(You have more than one ${name})`];\n\t\t\t\t\t}\n\t\t\t\t\tnameTable.add(name);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Illegality of impersonation of other species is\n\t\t\t// hardcoded in team-validator.js, so we are done.\n\t\t},\n\t},\n\titemclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Item Clause',\n\t\tdesc: \"Prevents teams from having more than one Pokémon with the same item\",\n\t\thasValue: 'positive-integer',\n\t\tonBegin() {\n\t\t\tthis.add('rule', `Item Clause: Limit ${this.ruleTable.valueRules.get('itemclause') || 1} of each item`);\n\t\t},\n\t\tonValidateRule(value) {\n\t\t\tconst num = Number(value);\n\t\t\tif (num < 1 || num > this.ruleTable.maxTeamSize) {\n\t\t\t\tthrow new Error(`Item Clause must be between 1 and ${this.ruleTable.maxTeamSize}.`);\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst itemTable = new this.dex.Multiset();\n\t\t\tfor (const set of team) {\n\t\t\t\tconst item = this.toID(set.item);\n\t\t\t\tif (!item) continue;\n\t\t\t\titemTable.add(item);\n\t\t\t}\n\t\t\tconst itemLimit = Number(this.ruleTable.valueRules.get('itemclause') || 1);\n\t\t\tfor (const [itemid, num] of itemTable) {\n\t\t\t\tif (num <= itemLimit) continue;\n\t\t\t\treturn [\n\t\t\t\t\t`You are limited to ${itemLimit} of each item by Item Clause.`,\n\t\t\t\t\t`(You have more than ${itemLimit} ${this.dex.items.get(itemid).name})`,\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t},\n\tabilityclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Ability Clause',\n\t\tdesc: \"Prevents teams from having Pokémon with the same ability than allowed\",\n\t\thasValue: 'positive-integer',\n\t\tonBegin() {\n\t\t\tconst num = this.ruleTable.valueRules.get('abilityclause');\n\t\t\tthis.add('rule', `${num} Ability Clause: Limit ${num} of each ability`);\n\t\t},\n\t\tonValidateRule(value) {\n\t\t\tconst allowedAbilities = parseInt(value);\n\t\t\tif (allowedAbilities < 1) throw new Error(`Must allow at least 1 of each ability`);\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tif (this.format.id === 'gen8multibility') return;\n\t\t\tconst abilityTable = new this.dex.Multiset();\n\t\t\tconst base: { [k: string]: string } = {\n\t\t\t\tairlock: 'cloudnine',\n\t\t\t\tarmortail: 'queenlymajesty',\n\t\t\t\tbattlearmor: 'shellarmor',\n\t\t\t\tclearbody: 'whitesmoke',\n\t\t\t\tdazzling: 'queenlymajesty',\n\t\t\t\temergencyexit: 'wimpout',\n\t\t\t\tfilter: 'solidrock',\n\t\t\t\tgooey: 'tanglinghair',\n\t\t\t\tinsomnia: 'vitalspirit',\n\t\t\t\tironbarbs: 'roughskin',\n\t\t\t\tkeeneye: 'illuminate',\n\t\t\t\tlibero: 'protean',\n\t\t\t\tminus: 'plus',\n\t\t\t\tmoxie: 'chillingneigh',\n\t\t\t\tpowerofalchemy: 'receiver',\n\t\t\t\tpropellertail: 'stalwart',\n\t\t\t\tteravolt: 'moldbreaker',\n\t\t\t\tturboblaze: 'moldbreaker',\n\t\t\t};\n\t\t\tconst num = parseInt(this.ruleTable.valueRules.get('abilityclause')!);\n\t\t\tfor (const set of team) {\n\t\t\t\tlet ability = this.toID(set.ability);\n\t\t\t\tif (!ability) continue;\n\t\t\t\tif (ability in base) ability = base[ability] as ID;\n\t\t\t\tif (abilityTable.get(ability) >= num) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`You are limited to ${num} of each ability by Ability Clause.`,\n\t\t\t\t\t\t`(You have more than ${num} ${this.dex.abilities.get(ability).name} variant${num === 1 ? '' : 's'})`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tabilityTable.add(ability);\n\t\t\t}\n\t\t},\n\t},\n\tohkoclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'OHKO Clause',\n\t\tdesc: \"Bans all OHKO moves, such as Fissure\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'OHKO Clause: OHKO moves are banned');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst problems: string[] = [];\n\t\t\tif (set.moves) {\n\t\t\t\tfor (const moveId of set.moves) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveId);\n\t\t\t\t\tif (move.ohko) problems.push(move.name + ' is banned by OHKO Clause.');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn problems;\n\t\t},\n\t},\n\tevasionclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Evasion Clause',\n\t\tdesc: \"Bans abilities, items, and moves that boost Evasion\",\n\t\truleset: ['Evasion Abilities Clause', 'Evasion Items Clause', 'Evasion Moves Clause'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Evasion Clause: Evasion abilities, items, and moves are banned');\n\t\t},\n\t},\n\tevasionabilitiesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Evasion Abilities Clause',\n\t\tdesc: \"Bans abilities that boost Evasion under certain weather conditions\",\n\t\tbanlist: ['Sand Veil', 'Snow Cloak'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Evasion Abilities Clause: Evasion abilities are banned');\n\t\t},\n\t},\n\tevasionitemsclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Evasion Items Clause',\n\t\tdesc: \"Bans items that lower the accuracy of moves used against the user\",\n\t\tbanlist: ['Bright Powder', 'Lax Incense'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Evasion Items Clause: Evasion items are banned');\n\t\t},\n\t},\n\tevasionmovesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Evasion Moves Clause',\n\t\tdesc: \"Bans moves that consistently raise the user's evasion when used\",\n\t\tbanlist: ['Minimize', 'Double Team'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Evasion Moves Clause: Evasion moves are banned');\n\t\t},\n\t},\n\taccuracymovesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Accuracy Moves Clause',\n\t\tdesc: \"Bans moves that have a chance to lower the target's accuracy when used\",\n\t\tbanlist: [\n\t\t\t'Flash', 'Kinesis', 'Leaf Tornado', 'Mirror Shot', 'Mud Bomb', 'Mud-Slap', 'Muddy Water', 'Night Daze', 'Octazooka', 'Sand Attack', 'Smokescreen',\n\t\t],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Accuracy Moves Clause: Accuracy-lowering moves are banned');\n\t\t},\n\t},\n\tsleepmovesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Sleep Moves Clause',\n\t\tdesc: \"Bans all moves that induce sleep, such as Hypnosis\",\n\t\tbanlist: ['Yawn'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Sleep Moves Clause: Sleep-inducing moves are banned');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst problems = [];\n\t\t\tif (set.moves) {\n\t\t\t\tfor (const id of set.moves) {\n\t\t\t\t\tconst move = this.dex.moves.get(id);\n\t\t\t\t\tif (move.status === 'slp') problems.push(move.name + ' is banned by Sleep Moves Clause.');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn problems;\n\t\t},\n\t},\n\tgravitysleepclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Gravity Sleep Clause',\n\t\tdesc: \"Bans sleep moves below 100% accuracy, in conjunction with Gravity or Gigantamax Orbeetle\",\n\t\tbanlist: [\n\t\t\t'Gravity ++ Dark Void', 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder',\n\t\t],\n\t\tonValidateTeam(team) {\n\t\t\tlet hasOrbeetle = false;\n\t\t\tlet hasSleepMove = false;\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tif (species.name === \"Orbeetle\" && set.gigantamax) hasOrbeetle = true;\n\t\t\t\tif (!hasOrbeetle && species.name === \"Orbeetle-Gmax\") hasOrbeetle = true;\n\t\t\t\tfor (const moveid of set.moves) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\t\t// replicates previous behavior which may compare `true` to 100: true < 100 == true\n\t\t\t\t\t// this variable is true if the move never misses (even with lowered acc) or has a chance to miss,\n\t\t\t\t\t// but false if the move's accuracy is 100% (yet can be lowered).\n\t\t\t\t\tconst hasMissChanceOrNeverMisses = move.accuracy === true || move.accuracy < 100;\n\n\t\t\t\t\tif (move.status === 'slp' && hasMissChanceOrNeverMisses) {\n\t\t\t\t\t\thasSleepMove = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasOrbeetle && hasSleepMove) {\n\t\t\t\treturn [`The combination of Gravity and Gigantamax Orbeetle on the same team is banned.`];\n\t\t\t}\n\t\t},\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Gravity Sleep Clause: The combination of sleep-inducing moves with imperfect accuracy and Gravity or Gigantamax Orbeetle are banned');\n\t\t},\n\t},\n\tendlessbattleclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Endless Battle Clause',\n\t\tdesc: \"Prevents players from forcing a battle which their opponent cannot end except by forfeit\",\n\t\t// implemented in sim/battle.js, see https://dex.pokemonshowdown.com/articles/battlerules#endlessbattleclause for the specification.\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Endless Battle Clause: Forcing endless battles is banned');\n\t\t},\n\t},\n\tmoodyclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Moody Clause',\n\t\tdesc: \"Bans the ability Moody\",\n\t\tbanlist: ['Moody'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Moody Clause: Moody is banned');\n\t\t},\n\t},\n\tswaggerclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Swagger Clause',\n\t\tdesc: \"Bans the move Swagger\",\n\t\tbanlist: ['Swagger'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Swagger Clause: Swagger is banned');\n\t\t},\n\t},\n\tdrypassclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'DryPass Clause',\n\t\tdesc: \"Stops teams from bringing Pokémon with Baton Pass + any form of trapping, residual recovery, boosting, or Substitute.\",\n\t\truleset: ['Baton Pass Stat Clause', 'Baton Pass Stat Trap Clause'],\n\t\tbanlist: ['Baton Pass + Substitute', 'Baton Pass + Ingrain', 'Baton Pass + Aqua Ring', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Baton Pass + Jaw Lock'],\n\t},\n\tbatonpassclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Baton Pass Clause',\n\t\tdesc: \"Stops teams from having more than one Pokémon with Baton Pass, and no Pokémon may be capable of passing boosts to both Speed and another stat\",\n\t\tbanlist: [\"Baton Pass > 1\"],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Baton Pass Clause: Limit one Baton Passer, can\\'t pass Spe and other stats simultaneously');\n\t\t},\n\t\tonValidateSet(set, format, setHas) {\n\t\t\tif (!('move:batonpass' in setHas)) return;\n\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tconst ability = this.toID(set.ability);\n\t\t\tlet speedBoosted: boolean | string = false;\n\t\t\tlet nonSpeedBoosted: boolean | string = false;\n\n\t\t\tfor (const moveId of set.moves) {\n\t\t\t\tconst move = this.dex.moves.get(moveId);\n\t\t\t\tif (move.id === 'flamecharge' || (move.boosts?.spe && move.boosts.spe > 0)) {\n\t\t\t\t\tspeedBoosted = true;\n\t\t\t\t}\n\t\t\t\tconst nonSpeedBoostedMoves = [\n\t\t\t\t\t'acupressure', 'bellydrum', 'chargebeam', 'curse', 'diamondstorm', 'fellstinger', 'fierydance',\n\t\t\t\t\t'flowershield', 'poweruppunch', 'rage', 'rototiller', 'skullbash', 'stockpile',\n\t\t\t\t];\n\t\t\t\tif (nonSpeedBoostedMoves.includes(move.id) ||\n\t\t\t\t\tmove.boosts && ((move.boosts.atk && move.boosts.atk > 0) || (move.boosts.def && move.boosts.def > 0) ||\n\t\t\t\t\t\t(move.boosts.spa && move.boosts.spa > 0) || (move.boosts.spd && move.boosts.spd > 0))) {\n\t\t\t\t\tnonSpeedBoosted = true;\n\t\t\t\t}\n\t\t\t\tif (item.zMove && move.type === item.zMoveType && move.zMove?.boost) {\n\t\t\t\t\tconst boosts = move.zMove.boost;\n\t\t\t\t\tif (boosts.spe && boosts.spe > 0) {\n\t\t\t\t\t\tif (!speedBoosted) speedBoosted = move.name;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t(boosts.atk && boosts.atk > 0) || (boosts.def && boosts.def > 0) ||\n\t\t\t\t\t\t(boosts.spa && boosts.spa > 0) || (boosts.spd && boosts.spd > 0)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!nonSpeedBoosted || move.name === speedBoosted) nonSpeedBoosted = move.name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst speedBoostedAbilities = ['motordrive', 'rattled', 'speedboost', 'steadfast', 'weakarmor'];\n\t\t\tconst speedBoostedItems = ['blazikenite', 'eeviumz', 'kommoniumz', 'salacberry'];\n\t\t\tif (speedBoostedAbilities.includes(ability) || speedBoostedItems.includes(item.id)) {\n\t\t\t\tspeedBoosted = true;\n\t\t\t}\n\t\t\tif (!speedBoosted) return;\n\n\t\t\tconst nonSpeedBoostedAbilities = [\n\t\t\t\t'angerpoint', 'competitive', 'defiant', 'download', 'justified', 'lightningrod', 'moxie', 'sapsipper', 'stormdrain',\n\t\t\t];\n\t\t\tconst nonSpeedBoostedItems = [\n\t\t\t\t'absorbbulb', 'apicotberry', 'cellbattery', 'eeviumz', 'ganlonberry', 'keeberry', 'kommoniumz', 'liechiberry',\n\t\t\t\t'luminousmoss', 'marangaberry', 'petayaberry', 'snowball', 'starfberry', 'weaknesspolicy',\n\t\t\t];\n\t\t\tif (nonSpeedBoostedAbilities.includes(ability) || nonSpeedBoostedItems.includes(item.id)) {\n\t\t\t\tnonSpeedBoosted = true;\n\t\t\t}\n\t\t\tif (!nonSpeedBoosted) return;\n\n\t\t\t// if both boost sources are Z-moves, and they're distinct\n\t\t\tif (speedBoosted !== nonSpeedBoosted && typeof speedBoosted === 'string' && typeof nonSpeedBoosted === 'string') return;\n\n\t\t\treturn [\n\t\t\t\t`${set.name || set.species} can Baton Pass both Speed and a different stat, which is banned by Baton Pass Clause.`,\n\t\t\t];\n\t\t},\n\t},\n\tonebatonpassclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'One Baton Pass Clause',\n\t\tdesc: \"Stops teams from having more than one Pokémon with Baton Pass\",\n\t\tbanlist: [\"Baton Pass > 1\"],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'One Baton Pass Clause: Limit one Baton Passer');\n\t\t},\n\t},\n\toneboostpasserclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'One Boost Passer Clause',\n\t\tdesc: \"Stops teams from having a Pokémon with Baton Pass that has multiple ways to boost its stats, and no more than one Baton Passer may be able to boost its stats\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'One Boost Passer Clause: Limit one Baton Passer that has a way to boost its stats');\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst boostingEffects = [\n\t\t\t\t'acidarmor', 'agility', 'amnesia', 'apicotberry', 'barrier', 'bellydrum', 'bulkup', 'calmmind', 'cosmicpower', 'curse',\n\t\t\t\t'defensecurl', 'dragondance', 'ganlonberry', 'growth', 'harden', 'howl', 'irondefense', 'liechiberry', 'meditate',\n\t\t\t\t'petayaberry', 'salacberry', 'sharpen', 'speedboost', 'starfberry', 'swordsdance', 'tailglow', 'withdraw',\n\t\t\t];\n\t\t\tlet passers = 0;\n\t\t\tfor (const set of team) {\n\t\t\t\tif (!set.moves.includes('Baton Pass')) continue;\n\t\t\t\tlet passableBoosts = 0;\n\t\t\t\tconst item = this.toID(set.item);\n\t\t\t\tconst ability = this.toID(set.ability);\n\t\t\t\tfor (const move of set.moves) {\n\t\t\t\t\tif (boostingEffects.includes(this.toID(move))) passableBoosts++;\n\t\t\t\t}\n\t\t\t\tif (boostingEffects.includes(item)) passableBoosts++;\n\t\t\t\tif (boostingEffects.includes(ability)) passableBoosts++;\n\t\t\t\tif (passableBoosts === 1) passers++;\n\t\t\t\tif (passableBoosts > 1) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`${set.name || set.species} has Baton Pass and multiple ways to boost its stats, which is banned by One Boost Passer Clause.`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tif (passers > 1) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`Multiple Pokemon have Baton Pass and a way to boost their stats, which is banned by One Boost Passer Clause.`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tbatonpassstatclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Baton Pass Stat Clause',\n\t\tdesc: \"Stops teams from having a Pokémon with Baton Pass that has any way to boost its stats\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Baton Pass Stat Clause: No Baton Passer may have a way to boost its stats');\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst boostingEffects = [\n\t\t\t\t'absorbbulb', 'acidarmor', 'acupressure', 'agility', 'amnesia', 'ancientpower', 'angerpoint', 'apicotberry', 'autotomize',\n\t\t\t\t'barrier', 'bellydrum', 'bulkup', 'calmmind', 'cellbattery', 'chargebeam', 'coil', 'cosmicpower', 'cottonguard', 'curse',\n\t\t\t\t'defendorder', 'defiant', 'download', 'dragondance', 'fierydance', 'flamecharge', 'focusenergy', 'ganlonberry', 'growth',\n\t\t\t\t'harden', 'honeclaws', 'howl', 'irondefense', 'justified', 'liechiberry', 'lightningrod', 'meditate', 'metalclaw',\n\t\t\t\t'meteormash', 'motordrive', 'moxie', 'nastyplot', 'ominouswind', 'petayaberry', 'quiverdance', 'rage', 'rattled',\n\t\t\t\t'rockpolish', 'salacberry', 'sapsipper', 'sharpen', 'shellsmash', 'shiftgear', 'silverwind', 'skullbash', 'speedboost',\n\t\t\t\t'starfberry', 'steadfast', 'steelwing', 'stockpile', 'stormdrain', 'swordsdance', 'tailglow', 'weakarmor', 'withdraw',\n\t\t\t\t'workup',\n\t\t\t];\n\t\t\tfor (const set of team) {\n\t\t\t\tconst moves = set.moves.map(this.toID);\n\t\t\t\tif (!moves.includes('batonpass' as ID)) continue;\n\t\t\t\tlet passableBoosts = false;\n\t\t\t\tconst item = this.toID(set.item);\n\t\t\t\tconst ability = this.toID(set.ability);\n\t\t\t\tif (\n\t\t\t\t\tmoves.some(m => boostingEffects.includes(m)) || boostingEffects.includes(item) ||\n\t\t\t\t\tboostingEffects.includes(ability)\n\t\t\t\t) {\n\t\t\t\t\tpassableBoosts = true;\n\t\t\t\t}\n\t\t\t\tif (passableBoosts) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`${set.name || set.species} has Baton Pass and a way to boost its stats, which is banned by Baton Pass Stat Clause.`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tbatonpassstattrapclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Baton Pass Stat Trap Clause',\n\t\tdesc: \"Stops teams from having a Pokémon with Baton Pass that has any way to boost its stats or trap Pokémon.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Baton Pass Stat Trap Clause: No Baton Passer may have a way to boost stats or trap Pok\\u00e9mon');\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst statBoostOrTrapping = [\n\t\t\t\t'Acid Armor', 'Acupressure', 'Agility', 'Amnesia', 'Ancient Power', 'Assist', 'Barrier', 'Belly Drum', 'Block', 'Bulk Up', 'Calm Mind', 'Charge',\n\t\t\t\t'Charge Beam', 'Cosmic Power', 'Curse', 'Defend Order', 'Defense Curl', 'Dragon Dance', 'Growth', 'Guard Swap', 'Harden', 'Heart Swap', 'Howl',\n\t\t\t\t'Iron Defense', 'Ingrain', 'Mean Look', 'Meteor Mash', 'Meditate', 'Metal Claw', 'Nasty Plot', 'Ominous Wind', 'Power Trick', 'Psych Up', 'Rage',\n\t\t\t\t'Rock Polish', 'Sharpen', 'Silver Wind', 'Skull Bash', 'Spider Web', 'Steel Wing', 'Stockpile', 'Swords Dance', 'Tail Glow', 'Withdraw', 'Speed Boost',\n\t\t\t\t'Apicot Berry', 'Ganlon Berry', 'Liechi Berry', 'Petaya Berry', 'Salac Berry', 'Starf Berry', 'Kee Berry', 'Maranga Berry', 'Weakness Policy',\n\t\t\t\t'Blunder Policy', 'Luminiscent Moss', 'Snowball', 'Throat Spray', 'Mirror Herb', 'Adrenaline Orb',\n\t\t\t].map(this.toID);\n\t\t\tfor (const set of team) {\n\t\t\t\tif (!set.moves.map(this.toID).includes('batonpass' as ID)) continue;\n\t\t\t\tlet passableBoosts = false;\n\t\t\t\tconst item = this.toID(set.item);\n\t\t\t\tconst ability = this.toID(set.ability);\n\t\t\t\tfor (const move of set.moves) {\n\t\t\t\t\tif (statBoostOrTrapping.includes(this.toID(move))) passableBoosts = true;\n\t\t\t\t}\n\t\t\t\tif (statBoostOrTrapping.includes(item)) passableBoosts = true;\n\t\t\t\tif (statBoostOrTrapping.includes(ability)) passableBoosts = true;\n\t\t\t\tif (passableBoosts) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`${set.name || set.species} has Baton Pass and a way to boost its stats or pass trapping, which is banned by Baton Pass Stat Trap Clause.`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tcfzclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'CFZ Clause',\n\t\tdesc: \"Bans the use of crystal-free Z-Moves\",\n\t\tbanlist: [\n\t\t\t'10,000,000 Volt Thunderbolt', 'Acid Downpour', 'All-Out Pummeling', 'Black Hole Eclipse', 'Bloom Doom',\n\t\t\t'Breakneck Blitz', 'Catastropika', 'Clangorous Soulblaze', 'Continental Crush', 'Corkscrew Crash',\n\t\t\t'Devastating Drake', 'Extreme Evoboost', 'Genesis Supernova', 'Gigavolt Havoc', 'Guardian of Alola',\n\t\t\t'Hydro Vortex', 'Inferno Overdrive', 'Let\\'s Snuggle Forever', 'Light That Burns the Sky',\n\t\t\t'Malicious Moonsault', 'Menacing Moonraze Maelstrom', 'Never-Ending Nightmare', 'Oceanic Operetta',\n\t\t\t'Pulverizing Pancake', 'Savage Spin-Out', 'Searing Sunraze Smash', 'Shattered Psyche', 'Sinister Arrow Raid',\n\t\t\t'Soul-Stealing 7-Star Strike', 'Splintered Stormshards', 'Stoked Sparksurfer', 'Subzero Slammer',\n\t\t\t'Supersonic Skystrike', 'Tectonic Rage', 'Twinkle Tackle',\n\t\t],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'CFZ Clause: Crystal-free Z-Moves are banned');\n\t\t},\n\t},\n\tzmoveclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Z-Move Clause',\n\t\tdesc: \"Bans Pokémon from holding Z-Crystals\",\n\t\tonValidateSet(set) {\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tif (item.zMove) return [`${set.name || set.species}'s item ${item.name} is banned by Z-Move Clause.`];\n\t\t},\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Z-Move Clause: Z-Moves are banned');\n\t\t},\n\t},\n\tnotfullyevolved: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Not Fully Evolved',\n\t\tdesc: \"Bans Pokémon that are fully evolved or can't evolve\",\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tif (!species.nfe) {\n\t\t\t\treturn [set.species + \" cannot evolve.\"];\n\t\t\t}\n\t\t},\n\t},\n\thppercentagemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'HP Percentage Mod',\n\t\tdesc: \"Shows the HP of Pokémon in percentages\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'HP Percentage Mod: HP is shown in percentages');\n\t\t\tthis.reportPercentages = true;\n\t\t},\n\t},\n\texacthpmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Exact HP Mod',\n\t\tdesc: \"Shows the exact HP of all Pokémon\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Exact HP Mod: Exact HP is shown');\n\t\t\tthis.reportExactHP = true;\n\t\t},\n\t},\n\tcancelmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Cancel Mod',\n\t\tdesc: \"Allows players to change their own choices before their opponents make one\",\n\t\tonBegin() {\n\t\t\tthis.supportCancel = true;\n\t\t},\n\t},\n\tsleepclausemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Sleep Clause Mod',\n\t\tdesc: \"Prevents players from putting more than one of their opponent's Pokémon to sleep at a time, and bans Mega Gengar from using Hypnosis\",\n\t\tbanlist: ['Hypnosis + Gengarite'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Sleep Clause Mod: Limit one foe put to sleep');\n\t\t},\n\t\tonSetStatus(status, target, source) {\n\t\t\tif (source?.isAlly(target)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (status.id === 'slp') {\n\t\t\t\tfor (const pokemon of target.side.pokemon) {\n\t\t\t\t\tif (pokemon.hp && pokemon.status === 'slp') {\n\t\t\t\t\t\tif (!pokemon.statusState.source?.isAlly(pokemon)) {\n\t\t\t\t\t\t\tthis.add('-message', 'Sleep Clause Mod activated.');\n\t\t\t\t\t\t\tthis.hint(\"Sleep Clause Mod prevents players from putting more than one of their opponent's Pok\u00E9mon to sleep at a time\");\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tstadiumsleepclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Stadium Sleep Clause',\n\t\tdesc: \"Prevents players from putting one of their opponent's Pok\\u00E9mon to sleep if any of the opponent's other Pok\\u00E9mon are asleep (different from Sleep Clause Mod because putting your own Pok\\u00E9mon to sleep is enough to prevent opponents from putting your others to sleep).\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Stadium Sleep Clause: Limit one foe put to sleep');\n\t\t},\n\t\tonSetStatus(status, target, source) {\n\t\t\tif (source?.isAlly(target)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (status.id === 'slp') {\n\t\t\t\tfor (const pokemon of target.side.pokemon) {\n\t\t\t\t\tif (pokemon.hp && pokemon.status === 'slp') {\n\t\t\t\t\t\tthis.add('-message', \"Sleep Clause activated. (In official formats, Sleep Clause activates if any of the opponent's Pokemon are asleep, even if self-inflicted from Rest)\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tswitchpriorityclausemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Switch Priority Clause Mod',\n\t\tdesc: \"Makes a faster Pok\u00E9mon switch first when double-switching, unlike in Emerald link battles, where player 1's Pok\u00E9mon would switch first\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Switch Priority Clause Mod: Faster Pok\u00E9mon switch first');\n\t\t},\n\t},\n\tdesyncclausemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Desync Clause Mod',\n\t\tdesc: 'If a desync would happen, the move fails instead. This rule currently covers Bide, Counter, and Psywave.',\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Desync Clause Mod: Desyncs changed to move failure.');\n\t\t},\n\t\t// Hardcoded in gen1/moves.ts\n\t\t// Can't be disabled (no precedent for how else to handle desyncs)\n\t},\n\tdeoxyscamouflageclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Deoxys Camouflage Clause',\n\t\tdesc: \"Reveals the Deoxys forme when it is sent in battle.\",\n\t\t// Hardcoded into effect, cannot be disabled.\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Deoxys Camouflage Clause: Reveals the Deoxys forme when it is sent in battle.');\n\t\t},\n\t},\n\tfreezeclausemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Freeze Clause Mod',\n\t\tdesc: \"Prevents players from freezing more than one of their opponent's Pokémon at a time\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Freeze Clause Mod: Limit one foe frozen');\n\t\t},\n\t\tonSetStatus(status, target, source) {\n\t\t\tif (source?.isAlly(target)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (status.id === 'frz') {\n\t\t\t\tfor (const pokemon of target.side.pokemon) {\n\t\t\t\t\tif (pokemon.status === 'frz') {\n\t\t\t\t\t\tthis.add('-message', 'Freeze Clause activated.');\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tsametypeclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Same Type Clause',\n\t\tdesc: \"Forces all Pokémon on a team to share a type with each other\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Same Type Clause: Pok\u00E9mon in a team must share a type');\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tlet typeTable: string[] = [];\n\t\t\tfor (const [i, set] of team.entries()) {\n\t\t\t\tlet species = this.dex.species.get(set.species);\n\t\t\t\tif (!species.types) return [`Invalid pokemon ${set.name || set.species}`];\n\t\t\t\tif (i === 0) {\n\t\t\t\t\ttypeTable = species.types;\n\t\t\t\t} else {\n\t\t\t\t\ttypeTable = typeTable.filter(type => species.types.includes(type));\n\t\t\t\t}\n\t\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\t\tif (item.megaStone && species.baseSpecies === item.megaEvolves) {\n\t\t\t\t\tspecies = this.dex.species.get(item.megaStone);\n\t\t\t\t\ttypeTable = typeTable.filter(type => species.types.includes(type));\n\t\t\t\t}\n\t\t\t\tif (item.id === \"ultranecroziumz\" && species.baseSpecies === \"Necrozma\") {\n\t\t\t\t\tspecies = this.dex.species.get(\"Necrozma-Ultra\");\n\t\t\t\t\ttypeTable = typeTable.filter(type => species.types.includes(type));\n\t\t\t\t}\n\t\t\t\tif (!typeTable.length) return [`Your team must share a type.`];\n\t\t\t}\n\t\t\tfor (const set of team) {\n\t\t\t\tif (this.gen === 9 && set.teraType &&\n\t\t\t\t\t!typeTable.includes(set.teraType) && this.ruleTable.has(`enforcesameteratype`)) {\n\t\t\t\t\treturn [`${set.species}'s Tera Type must match the team's type.`];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tenforcesameteratype: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Enforce Same Tera Type',\n\t\tdesc: \"Forces Pokémon to have a Tera Type matching one of their original types.\",\n\t\t// implemented in sametypeclause\n\t},\n\tmegarayquazaclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Mega Rayquaza Clause',\n\t\tdesc: \"Prevents Rayquaza from mega evolving\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Mega Rayquaza Clause: You cannot mega evolve Rayquaza');\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tif (pokemon.species.id === 'rayquaza') {\n\t\t\t\t\tpokemon.canMegaEvo = null;\n\t\t\t\t\t// ability to terastal was determined before the clause activated, causing incorrect behavior\n\t\t\t\t\tif (!this.ruleTable.has('terastalclause')) {\n\t\t\t\t\t\tpokemon.canTerastallize = this.actions.canTerastallize(pokemon);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tdynamaxclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Dynamax Clause',\n\t\tdesc: \"Prevents Pokémon from Dynamaxing\",\n\t\tonValidateSet(set) {\n\t\t\tif (set.gigantamax) {\n\t\t\t\treturn [\n\t\t\t\t\t`Your set for ${set.species} is flagged as Gigantamax, but Gigantamaxing is disallowed`,\n\t\t\t\t\t`(If this was a mistake, disable Gigantamaxing on the set.)`,\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\tonBegin() {\n\t\t\tfor (const side of this.sides) {\n\t\t\t\tside.dynamaxUsed = true;\n\t\t\t}\n\t\t\tthis.add('rule', 'Dynamax Clause: You cannot dynamax');\n\t\t},\n\t},\n\tterastalclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Terastal Clause',\n\t\tdesc: \"Prevents Pokémon from Terastallizing\",\n\t\tonBegin() {\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tpokemon.canTerastallize = null;\n\t\t\t}\n\t\t\tthis.add('rule', 'Terastal Clause: You cannot Terastallize');\n\t\t},\n\t},\n\tarceusevlimit: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Arceus EV Limit',\n\t\tdesc: \"Restricts Arceus to a maximum of 100 EVs in any one stat, and only multiples of 10\",\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tif (species.num === 493 && set.evs) {\n\t\t\t\tlet stat: StatID;\n\t\t\t\tfor (stat in set.evs) {\n\t\t\t\t\tconst ev = set.evs[stat];\n\t\t\t\t\tif (ev > 100) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\"Arceus can't have more than 100 EVs in any stat, because Arceus is only obtainable from level 100 events.\",\n\t\t\t\t\t\t\t\"Level 100 Pokemon can only gain EVs from vitamins (Carbos etc), which are capped at 100 EVs.\",\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\tif (!(\n\t\t\t\t\t\tev % 10 === 0 ||\n\t\t\t\t\t\t(ev % 10 === 8 && ev % 4 === 0)\n\t\t\t\t\t)) {\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\"Arceus can only have EVs that are multiples of 10, because Arceus is only obtainable from level 100 events.\",\n\t\t\t\t\t\t\t\"Level 100 Pokemon can only gain EVs from vitamins (Carbos etc), which boost in multiples of 10.\",\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tinversemod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Inverse Mod',\n\t\tdesc: \"The mod for Inverse Battle which inverts the type effectiveness chart; weaknesses become resistances, while resistances and immunities become weaknesses\",\n\t\tonNegateImmunity: false,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Inverse Mod: Weaknesses become resistances, while resistances and immunities become weaknesses.');\n\t\t},\n\t\tonEffectivenessPriority: 1,\n\t\tonEffectiveness(typeMod, target, type, move) {\n\t\t\t// The effectiveness of Freeze Dry on Water isn't reverted\n\t\t\tif (move && move.id === 'freezedry' && type === 'Water') return;\n\t\t\tif (move && !this.dex.getImmunity(move, type)) return 1;\n\t\t\t// Ignore normal effectiveness, prevents bug with Tera Shell\n\t\t\tif (typeMod) return -typeMod;\n\t\t},\n\t},\n\n\tminsourcegen: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Min Source Gen\",\n\t\tdesc: \"Pokemon must be obtained from this generation or later.\",\n\t\thasValue: 'positive-integer',\n\t\tonValidateRule(value) {\n\t\t\tconst minSourceGen = parseInt(value);\n\t\t\tif (minSourceGen > this.dex.gen) {\n\t\t\t\t// console.log(this.ruleTable);\n\t\t\t\tthrow new Error(`Invalid generation ${minSourceGen}${this.ruleTable.blame('minsourcegen')} for a Gen ${this.dex.gen} format (${this.format.name})`);\n\t\t\t}\n\t\t},\n\t},\n\n\tomunobtainablemoves: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'OM Unobtainable Moves',\n\t\tdesc: \"Allows special move legality rules to allow moves which are otherwise unobtainable without hacking or glitches\",\n\t\t// Hardcoded in team-validator.ts\n\t\tonValidateRule() {\n\t\t\tif (!this.ruleTable.checkCanLearn?.[0]) {\n\t\t\t\tthrow new Error(`A format with the \"OM Unobtainable Moves\"${this.ruleTable.blame('omunobtainablemoves')} rule must also have a special move legality rule.`);\n\t\t\t}\n\t\t},\n\t},\n\tstabmonsmovelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'STABmons Move Legality',\n\t\tdesc: \"Allows Pokémon to use any move that they or a previous evolution/out-of-battle forme share a type with\",\n\t\truleset: ['OM Unobtainable Moves'],\n\t\tcheckCanLearn(move, species, setSources, set) {\n\t\t\tconst nonstandard = move.isNonstandard === 'Past' && !this.ruleTable.has('standardnatdex');\n\t\t\tif (!nonstandard && !move.isZ && !move.isMax && !this.ruleTable.isRestricted(`move:${move.id}`)) {\n\t\t\t\tconst speciesTypes: string[] = [];\n\t\t\t\tconst moveTypes: string[] = [];\n\t\t\t\t// BDSP can't import Pokemon from Home, so it shouldn't grant moves from archaic species types\n\t\t\t\tconst minObtainableSpeciesGen = this.dex.currentMod === 'gen8bdsp' ||\n\t\t\t\t\t(this.dex.gen === 9 && !this.ruleTable.has('standardnatdex')) ?\n\t\t\t\t\tthis.dex.gen : species.gen;\n\t\t\t\tfor (let i = this.dex.gen; i >= minObtainableSpeciesGen && i >= move.gen; i--) {\n\t\t\t\t\tconst dex = this.dex.forGen(i);\n\t\t\t\t\tmoveTypes.push(dex.moves.get(move.name).type);\n\n\t\t\t\t\tconst pokemon = dex.species.get(species.name);\n\t\t\t\t\tif (pokemon.forme || pokemon.otherFormes) {\n\t\t\t\t\t\tconst baseSpecies = dex.species.get(pokemon.baseSpecies);\n\t\t\t\t\t\tconst originalForme = dex.species.get(pokemon.changesFrom || pokemon.name);\n\t\t\t\t\t\tspeciesTypes.push(...originalForme.types);\n\t\t\t\t\t\tif (baseSpecies.otherFormes) {\n\t\t\t\t\t\t\tfor (const formeName of baseSpecies.otherFormes) {\n\t\t\t\t\t\t\t\tif (baseSpecies.prevo) {\n\t\t\t\t\t\t\t\t\tconst prevo = dex.species.get(baseSpecies.prevo);\n\t\t\t\t\t\t\t\t\tif (prevo.evos.includes(formeName)) continue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst forme = dex.species.get(formeName);\n\t\t\t\t\t\t\t\tif (forme.changesFrom === originalForme.name && !forme.battleOnly) {\n\t\t\t\t\t\t\t\t\tspeciesTypes.push(...forme.types);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tspeciesTypes.push(...pokemon.types);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet prevo = pokemon.prevo;\n\t\t\t\t\twhile (prevo) {\n\t\t\t\t\t\tconst prevoSpecies = dex.species.get(prevo);\n\t\t\t\t\t\tspeciesTypes.push(...prevoSpecies.types);\n\t\t\t\t\t\tprevo = prevoSpecies.prevo;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (moveTypes.some(m => speciesTypes.includes(m))) return null;\n\t\t\t}\n\t\t\treturn this.checkCanLearn(move, species, setSources, set);\n\t\t},\n\t},\n\talphabetcupmovelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Alphabet Cup Move Legality',\n\t\tdesc: \"Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.\",\n\t\truleset: ['OM Unobtainable Moves'],\n\t\tcheckCanLearn(move, species, setSources, set) {\n\t\t\tconst nonstandard = move.isNonstandard === 'Past' && !this.ruleTable.has('standardnatdex');\n\t\t\tif (!nonstandard && !move.isZ && !move.isMax && !this.ruleTable.isRestricted(`move:${move.id}`)) {\n\t\t\t\tconst letters = [species.id.charAt(0)];\n\t\t\t\tlet prevo = species.prevo;\n\t\t\t\tif (species.changesFrom === 'Silvally') prevo = 'Type: Null';\n\t\t\t\twhile (prevo) {\n\t\t\t\t\tconst prevoSpecies = this.dex.species.get(prevo);\n\t\t\t\t\tletters.push(prevoSpecies.id.charAt(0));\n\t\t\t\t\tprevo = prevoSpecies.prevo;\n\t\t\t\t}\n\t\t\t\tif (letters.includes(move.id.charAt(0))) return null;\n\t\t\t}\n\t\t\treturn this.checkCanLearn(move, species, setSources, set);\n\t\t},\n\t},\n\tsketchmonsmovelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Sketchmons Move Legality',\n\t\tdesc: \"Pokémon can learn one of any move they don't normally learn.\",\n\t\truleset: ['OM Unobtainable Moves'],\n\t\tcheckCanLearn(move, species, lsetData, set) {\n\t\t\tconst problem = this.checkCanLearn(move, species, lsetData, set);\n\t\t\tif (!problem) return null;\n\t\t\tif (move.isZ || move.isMax || this.ruleTable.isRestricted(`move:${move.id}`)) return problem;\n\t\t\tconst sketchMove = (set as any).sketchMove;\n\t\t\tif (sketchMove && sketchMove !== move.name) {\n\t\t\t\treturn ` already has ${sketchMove} as a sketched move.\\n(${species.name} doesn't learn ${move.name}.)`;\n\t\t\t}\n\t\t\t(set as any).sketchMove = move.name;\n\t\t\treturn null;\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst sketches = new this.dex.Multiset();\n\t\t\tfor (const set of team) {\n\t\t\t\tif ((set as any).sketchMove) {\n\t\t\t\t\tsketches.add((set as any).sketchMove);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst overSketched = [...sketches.entries()].filter(([moveName, count]) => count > 1);\n\t\t\tif (overSketched.length) {\n\t\t\t\treturn overSketched.map(([moveName, count]) => (\n\t\t\t\t\t`You are limited to 1 of ${moveName} by Sketch Clause.\\n(You have sketched ${moveName} ${count} times.)`\n\t\t\t\t));\n\t\t\t}\n\t\t},\n\t},\n\tcamomonsmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Camomons Mod',\n\t\tdesc: `Pokémon have their types set to match their first two moves.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Camomons Mod: Pok\\u00e9mon have their types set to match their first two moves.');\n\t\t},\n\t\tonModifySpeciesPriority: 2,\n\t\tonModifySpecies(species, target, source, effect) {\n\t\t\tif (!target) return; // Chat command\n\t\t\tif (effect && ['imposter', 'transform'].includes(effect.id)) return;\n\t\t\tconst types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.dex.moves.get(move.id).type))];\n\t\t\treturn { ...species, types };\n\t\t},\n\t\tonSwitchIn(pokemon) {\n\t\t\tthis.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');\n\t\t},\n\t\tonAfterMega(pokemon) {\n\t\t\tthis.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');\n\t\t},\n\t},\n\tallowtradeback: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Allow Tradeback',\n\t\tdesc: \"Allows Gen 1 pokemon to have moves from their Gen 2 learnsets\",\n\t\t// Implemented in team-validator.js\n\t},\n\tallowavs: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Allow AVs',\n\t\tdesc: \"Tells formats with the 'gen7letsgo' mod to take Awakening Values into consideration when calculating stats\",\n\t\t// implemented in TeamValidator#validateStats\n\t},\n\tnfeclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'NFE Clause',\n\t\tdesc: \"Bans all NFE Pokemon\",\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species || set.name);\n\t\t\tif (species.nfe) {\n\t\t\t\tif (this.ruleTable.has(`+pokemon:${species.id}`)) return;\n\t\t\t\treturn [`${set.species} is banned due to NFE Clause.`];\n\t\t\t}\n\t\t},\n\t},\n\tgemsclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Gems Clause',\n\t\tdesc: \"Bans all Gems\",\n\t\tonValidateSet(set) {\n\t\t\tif (!set.item) return;\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tif (item.isGem) {\n\t\t\t\tif (this.ruleTable.has(`+item:${item.id}`)) return;\n\t\t\t\treturn [`${item.name} is banned due to Gems Clause.`];\n\t\t\t}\n\t\t},\n\t},\n\t'sketchpostgen7moves': {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Sketch Post-Gen 7 Moves',\n\t\tdesc: \"Allows Pok\u00E9mon who learn Sketch to learn any Gen 8+ move (normally, Sketch is not usable in Gen 8 or Gen 9 Pre-DLC2).\",\n\t\t// Implemented in sim/team-validator.ts\n\t},\n\tmimicglitch: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Mimic Glitch',\n\t\tdesc: \"Allows any Pokemon with access to Assist, Copycat, Metronome, Mimic, or Transform to gain access to almost any other move.\",\n\t\t// Implemented in sim/team-validator.ts\n\t},\n\toverflowstatmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Overflow Stat Mod',\n\t\tdesc: \"Caps stats at 654 after a positive nature, or 655 after a negative nature\",\n\t\t// Implemented in sim/battle.ts\n\t},\n\tformeclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Forme Clause',\n\t\tdesc: \"Prevents teams from having more than one Pokémon of the same forme\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Forme Clause: Limit one of each forme of a Pok\u00E9mon');\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst formeTable = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tlet species = this.dex.species.get(set.species);\n\t\t\t\tif (species.name !== species.baseSpecies) {\n\t\t\t\t\tconst baseSpecies = this.dex.species.get(species.baseSpecies);\n\t\t\t\t\tif (\n\t\t\t\t\t\tspecies.types.join('/') === baseSpecies.types.join('/') &&\n\t\t\t\t\t\tObject.values(species.baseStats).join('/') === Object.values(baseSpecies.baseStats).join('/')\n\t\t\t\t\t) {\n\t\t\t\t\t\tspecies = baseSpecies;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (formeTable.has(species.name)) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`You are limited to one of each forme of a Pok\u00E9mon by Forme Clause.`,\n\t\t\t\t\t\t`(You have more than one of ${species.name})`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tformeTable.add(species.name);\n\t\t\t}\n\t\t},\n\t},\n\t'350cupmod': {\n\t\teffectType: 'Rule',\n\t\tname: '350 Cup Mod',\n\t\tdesc: \"If a Pokémon's BST is 350 or lower, all of its stats get doubled.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', '350 Cup Mod: If a Pokemon\\'s BST is 350 or lower, all of its stats get doubled.');\n\t\t},\n\t\tonModifySpeciesPriority: 2,\n\t\tonModifySpecies(species) {\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tif (newSpecies.bst <= 350) {\n\t\t\t\tnewSpecies.bst = 0;\n\t\t\t\tfor (const stat in newSpecies.baseStats) {\n\t\t\t\t\tnewSpecies.baseStats[stat] = this.clampIntRange(newSpecies.baseStats[stat] * 2, 1, 255);\n\t\t\t\t\tnewSpecies.bst += newSpecies.baseStats[stat];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tflippedmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Flipped Mod',\n\t\tdesc: \"Every Pokémon's stats are reversed. HP becomes Spe, Atk becomes Sp. Def, Def becomes Sp. Atk, and vice versa.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Flipped Mod: Pokemon have their stats flipped (HP becomes Spe, vice versa).');\n\t\t},\n\t\tonModifySpeciesPriority: 2,\n\t\tonModifySpecies(species) {\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tconst reversedNums = Object.values(newSpecies.baseStats).reverse();\n\t\t\tfor (const [i, statName] of Object.keys(newSpecies.baseStats).entries()) {\n\t\t\t\tnewSpecies.baseStats[statName] = reversedNums[i];\n\t\t\t}\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tscalemonsmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Scalemons Mod',\n\t\tdesc: \"Every Pokémon's stats, barring HP, are scaled to give them a BST as close to 600 as possible\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Scalemons Mod: Every Pokemon\\'s stats, barring HP, are scaled to come as close to a BST of 600 as possible');\n\t\t},\n\t\tonModifySpeciesPriority: 1,\n\t\tonModifySpecies(species) {\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tconst bstWithoutHp: number = newSpecies.bst - newSpecies.baseStats['hp'];\n\t\t\tconst scale = 600 - newSpecies.baseStats['hp'];\n\t\t\tnewSpecies.bst = newSpecies.baseStats['hp'];\n\t\t\tfor (const stat in newSpecies.baseStats) {\n\t\t\t\tif (stat === 'hp') continue;\n\t\t\t\tnewSpecies.baseStats[stat] = this.clampIntRange(newSpecies.baseStats[stat] * scale / bstWithoutHp, 1, 255);\n\t\t\t\tnewSpecies.bst += newSpecies.baseStats[stat];\n\t\t\t}\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tteamtypepreview: {\n\t\teffectType: 'Rule',\n\t\tname: 'Team Type Preview',\n\t\tdesc: \"Allows each player to see the Pokémon on their opponent's team and those Pokémon's types before they choose their lead Pokémon\",\n\t\tonTeamPreview() {\n\t\t\tthis.add('clearpoke');\n\t\t\tfor (const side of this.sides) {\n\t\t\t\tfor (const pokemon of side.pokemon) {\n\t\t\t\t\tconst details = pokemon.details.replace(', shiny', '')\n\t\t\t\t\t\t.replace(/(Arceus|Greninja|Gourgeist|Pumpkaboo|Silvally|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*');\n\t\t\t\t\tthis.add('poke', pokemon.side.id, details, '');\n\t\t\t\t}\n\t\t\t\tlet buf = 'raw|';\n\t\t\t\tfor (const pokemon of side.pokemon) {\n\t\t\t\t\tif (!buf.endsWith('|')) buf += '/';\n\t\t\t\t\tbuf += ``;\n\t\t\t\t\tfor (const type of pokemon.species.types) {\n\t\t\t\t\t\tbuf += ` `;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.add(`${buf}`);\n\t\t\t}\n\t\t\tthis.makeRequest('teampreview');\n\t\t},\n\t},\n\topenteamsheets: {\n\t\teffectType: 'Rule',\n\t\tname: 'Open Team Sheets',\n\t\tdesc: \"Allows each player to see the Pokémon and all non-stat information about them, before they choose their lead Pokémon\",\n\t\tmutuallyExclusiveWith: 'forceopenteamsheets',\n\t\tonValidateRule() {\n\t\t\tif (!(this.ruleTable.has('teampreview') || this.ruleTable.has('teamtypepreview'))) {\n\t\t\t\tthrow new Error(`The \"Open Team Sheets\" rule${this.ruleTable.blame('openteamsheets')} requires Team Preview.`);\n\t\t\t}\n\t\t},\n\t\tonTeamPreview() {\n\t\t\tconst msg = 'uhtml|otsrequest|';\n\t\t\tfor (const side of this.sides) {\n\t\t\t\tthis.addSplit(side.id, [msg]);\n\t\t\t}\n\t\t},\n\t\tonBattleStart() {\n\t\t\tfor (const side of this.sides) {\n\t\t\t\tthis.addSplit(side.id, ['uhtmlchange|otsrequest|']);\n\t\t\t}\n\t\t},\n\t},\n\tforceopenteamsheets: {\n\t\teffectType: 'Rule',\n\t\tname: 'Force Open Team Sheets',\n\t\tdesc: \"Allows each player to see the Pokémon and all non-stat information about them, before they choose their lead Pokémon\",\n\t\tmutuallyExclusiveWith: 'openteamsheets',\n\t\tonValidateRule() {\n\t\t\tif (!(this.ruleTable.has('teampreview') || this.ruleTable.has('teamtypepreview'))) {\n\t\t\t\tthrow new Error(`The \"Force Open Team Sheets\" rule${this.ruleTable.blame('forceopenteamsheets')} requires Team Preview.`);\n\t\t\t}\n\t\t},\n\t\tonTeamPreview() {\n\t\t\tthis.showOpenTeamSheets();\n\t\t},\n\t},\n\taaarestrictedabilities: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'AAA Restricted Abilities',\n\t\tdesc: \"Allows validation for AAA formats to use restricted abilities instead of banned ones.\",\n\t\tonValidateSet(set) {\n\t\t\tconst ability = this.dex.abilities.get(set.ability);\n\t\t\tif (this.ruleTable.isRestricted(`ability:${ability.id}`)) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tif (!Object.values(species.abilities).includes(ability.name)) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t`The Ability \"${ability.name}\" is restricted.`,\n\t\t\t\t\t\t`(Only Pok\\u00e9mon that get ${ability.name} naturally can use it.)`,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\teventmovesclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Event Moves Clause',\n\t\tdesc: \"Bans moves only obtainable through events.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Event Moves Clause: Event-only moves are banned');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tif (!set.moves) return;\n\t\t\tconst moveSources: NonNullable = Object.fromEntries(\n\t\t\t\tset.moves.map(move => [this.toID(move), []])\n\t\t\t);\n\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tfor (const { learnset } of this.dex.species.getFullLearnset(species.id)) {\n\t\t\t\tfor (const moveid in moveSources) {\n\t\t\t\t\tmoveSources[moveid].push(...(learnset[moveid] || []));\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst problems = [];\n\t\t\tfor (const move of set.moves) {\n\t\t\t\tconst sources = moveSources[this.toID(move)];\n\t\t\t\tif (sources?.length && sources.every(learned => learned.includes('S'))) {\n\t\t\t\t\tproblems.push(`${species.name}'s move ${move} is obtainable only through events.`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (problems.length) problems.push(`(Event-only moves are banned.)`);\n\t\t\treturn problems;\n\t\t},\n\t},\n\tpickedteamsize: {\n\t\teffectType: 'Rule',\n\t\tname: 'Picked Team Size',\n\t\tdesc: \"Team size (number of pokemon) that can be brought out of Team Preview\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/side\n\t\tonValidateRule() {\n\t\t\tif (!(this.ruleTable.has('teampreview') || this.ruleTable.has('teamtypepreview'))) {\n\t\t\t\tthrow new Error(`The \"Picked Team Size\" rule${this.ruleTable.blame('pickedteamsize')} requires Team Preview.`);\n\t\t\t}\n\t\t},\n\t},\n\tminteamsize: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Min Team Size\",\n\t\tdesc: \"Minimum team size (number of pokemon) that can be brought into Team Preview (or into the battle, in formats without Team Preview)\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tevlimit: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"EV Limit\",\n\t\tdesc: \"Maximum total EVs on each pokemon.\",\n\t\thasValue: 'integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tmaxteamsize: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Max Team Size\",\n\t\tdesc: \"Maximum team size (number of pokemon) that can be brought into Team Preview (or into the battle, in formats without Team Preview)\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t\tonValidateRule(value) {\n\t\t\tif (this.format.id.endsWith('computergeneratedteams')) {\n\t\t\t\tthrow new Error(`${this.format.name} does not support Max Team Size.`);\n\t\t\t}\n\t\t},\n\t},\n\tmaxmovecount: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Max Move Count\",\n\t\tdesc: \"Max number of moves allowed on a single pokemon (defaults to 4 in a normal game)\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tmaxtotallevel: {\n\t\teffectType: 'Rule',\n\t\tname: 'Max Total Level',\n\t\tdesc: \"Teams are restricted to a total maximum Level limit and Pokemon are restricted to a set range of Levels\",\n\t\thasValue: 'positive-integer',\n\t\tonValidateTeam(team) {\n\t\t\tconst pickedTeamSize = this.ruleTable.pickedTeamSize || team.length;\n\t\t\tconst maxTotalLevel = this.ruleTable.maxTotalLevel;\n\t\t\tif (maxTotalLevel === null) throw new Error(\"No maxTotalLevel specified.\");\n\n\t\t\tconst teamLevels = [];\n\t\t\tfor (const set of team) {\n\t\t\t\tteamLevels.push(set.level);\n\t\t\t}\n\t\t\tteamLevels.sort((a, b) => a - b);\n\n\t\t\tlet totalLowestLevels = 0;\n\t\t\tfor (let i = 0; i < pickedTeamSize; i++) {\n\t\t\t\ttotalLowestLevels += teamLevels[i];\n\t\t\t}\n\t\t\tif (totalLowestLevels > maxTotalLevel) {\n\t\t\t\tconst thePokemon = pickedTeamSize === team.length ?\n\t\t\t\t\t`all ${team.length} Pok\u00E9mon` : `the ${pickedTeamSize} lowest-leveled Pok\u00E9mon`;\n\t\t\t\treturn [\n\t\t\t\t\t`The combined levels of ${thePokemon} of your team is ${totalLowestLevels}, above the format's total level limit of ${maxTotalLevel}${this.ruleTable.blame('maxtotallevel')}.`,\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tlet minTotalWithHighestLevel = teamLevels[teamLevels.length - 1];\n\t\t\tfor (let i = 0; i < pickedTeamSize - 1; i++) {\n\t\t\t\tminTotalWithHighestLevel += teamLevels[i];\n\t\t\t}\n\t\t\tif (minTotalWithHighestLevel > maxTotalLevel) {\n\t\t\t\treturn [\n\t\t\t\t\t`Your highest level Pok\u00E9mon is unusable, because there's no way to create a team with it whose total level is less than the format's total level limit of ${maxTotalLevel}${this.ruleTable.blame('maxtotallevel')}.`,\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\tonValidateRule(value) {\n\t\t\tconst ruleTable = this.ruleTable;\n\t\t\tconst maxTotalLevel = ruleTable.maxTotalLevel!;\n\t\t\tconst maxTeamSize = ruleTable.pickedTeamSize || ruleTable.maxTeamSize;\n\t\t\tconst maxTeamSizeBlame = ruleTable.pickedTeamSize ? ruleTable.blame('pickedteamsize') : ruleTable.blame('maxteamsize');\n\t\t\tif (maxTotalLevel >= ruleTable.maxLevel * maxTeamSize) {\n\t\t\t\tthrow new Error(`A Max Total Level of ${maxTotalLevel}${ruleTable.blame('maxtotallevel')} is too high (and will have no effect) with ${maxTeamSize}${maxTeamSizeBlame} Pok\u00E9mon at max level ${ruleTable.maxLevel}${ruleTable.blame('maxlevel')}`);\n\t\t\t}\n\t\t\tif (maxTotalLevel <= ruleTable.minLevel * maxTeamSize) {\n\t\t\t\tthrow new Error(`A Max Total Level of ${maxTotalLevel}${ruleTable.blame('maxtotallevel')} is too low with ${maxTeamSize}${maxTeamSizeBlame} Pok\u00E9mon at min level ${ruleTable.minLevel}${ruleTable.blame('minlevel')}`);\n\t\t\t}\n\t\t},\n\t\t// hardcoded in sim/side\n\t},\n\tminlevel: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Min Level',\n\t\tdesc: \"Minimum level of brought Pok\u00E9mon\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tmaxlevel: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Max Level',\n\t\tdesc: \"Maximum level of brought Pok\u00E9mon (if you're using both this and Adjust Level, this will control what level moves you have access to)\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tdefaultlevel: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Default Level',\n\t\tdesc: \"Default level of brought Pok\u00E9mon (normally should be equal to Max Level, except Custom Games have a very high max level but still default to 100)\",\n\t\thasValue: 'positive-integer',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tadjustlevel: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Adjust Level',\n\t\tdesc: \"All Pok\u00E9mon will be set to exactly this level (but unlike Max Level and Min Level, it will still be able to learn moves from above this level) (when using this, Max Level is the level of the pokemon before it's level-adjusted down)\",\n\t\thasValue: 'positive-integer',\n\t\tmutuallyExclusiveWith: 'adjustleveldown',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tadjustleveldown: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Adjust Level Down',\n\t\tdesc: \"Any Pok\u00E9mon above this level will be set to this level (but unlike Max Level, it will still be able to learn moves from above this level)\",\n\t\thasValue: 'positive-integer',\n\t\tmutuallyExclusiveWith: 'adjustlevel',\n\t\t// hardcoded in sim/team-validator\n\t},\n\tstadiumitemsclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Stadium Items Clause',\n\t\tdesc: \"Bans items that are not usable in Pokemon Stadium 2.\",\n\t\tbanlist: ['Fast Ball', 'Friend Ball', 'Great Ball', 'Heavy Ball', 'Level Ball', 'Love Ball', 'Lure Ball', 'Master Ball', 'Moon Ball', 'Park Ball', 'Poke Ball', 'Safari Ball', 'Ultra Ball', 'Fire Stone', 'Leaf Stone', 'Moon Stone', 'Sun Stone', 'Thunder Stone', 'Upgrade', 'Water Stone', 'Mail'],\n\t},\n\tnc2000movelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"NC 2000 Move Legality\",\n\t\tdesc: \"Prevents Pok\\u00e9mon from having moves that would only be obtainable in Pok\\u00e9mon Crystal.\",\n\t\t// Implemented in mods/gen2/rulesets.ts\n\t},\n\taptclause: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'APT Clause',\n\t\tdesc: \"Bans the combination of Agility and partial trapping moves like Wrap.\",\n\t\tbanlist: ['Agility + Wrap', 'Agility + Fire Spin', 'Agility + Bind', 'Agility + Clamp'],\n\t},\n\tnc1997movelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"NC 1997 Move Legality\",\n\t\tdesc: \"Bans move combinations on Pok\\u00e9mon that weren't legal in NC 1997.\",\n\t\t// Implemented in mods/gen1jpn/rulesets.ts\n\t},\n\tnoswitching: {\n\t\teffectType: 'Rule',\n\t\tname: 'No Switching',\n\t\tdesc: 'All Pok\\u00e9mon are trapped (cannot switch naturally, but can as the effect of an item, move, or Ability).',\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'No Switching: All Pok\\u00e9mon are trapped');\n\t\t},\n\t\tonTrapPokemon(pokemon) {\n\t\t\tpokemon.trapped = true;\n\t\t},\n\t},\n\tchimera1v1rule: {\n\t\teffectType: 'Rule',\n\t\tname: 'Chimera 1v1 Rule',\n\t\tdesc: \"Merges a team of six into a single Pok\\u00e9mon depending on the order chosen at team preview: It gains the typing of the first, item of the second, ability of the third, stats of the fourth, the first two moves of the fifth, and the last two moves of the sixth.\",\n\t\truleset: ['Team Preview', 'Picked Team Size = 6'],\n\t\tonValidateSet(set) {\n\t\t\tif (!set.item) return;\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tif (item.itemUser && !this.ruleTable.has(`+item:${item.id}`)) {\n\t\t\t\treturn [`${set.species}'s item ${item.name} is banned.`];\n\t\t\t}\n\t\t},\n\t\tonValidateRule() {\n\t\t\tconst table = this.ruleTable;\n\t\t\tif ((table.pickedTeamSize || table.minTeamSize) < 6) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Custom rules that could allow the active team size to be reduced below 6 (Min Team Size < 6, Picked Team Size < 6) could prevent the Chimera from being fully defined, and are incompatible with Chimera 1v1.`\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst gameType = this.format.gameType;\n\t\t\tif (gameType === 'doubles' || gameType === 'triples') {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The game type '${gameType}' cannot be 1v1 because sides can have multiple active Pok\\u00e9mon, so it is incompatible with Chimera 1v1.`\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tonBeforeSwitchIn(pokemon) {\n\t\t\tconst allies = pokemon.side.pokemon.splice(1);\n\t\t\tpokemon.side.pokemonLeft = 1;\n\t\t\tconst newSpecies = this.dex.deepClone(pokemon.baseSpecies);\n\t\t\tnewSpecies.abilities = allies[1].baseSpecies.abilities;\n\t\t\tnewSpecies.baseStats = allies[2].baseSpecies.baseStats;\n\t\t\tnewSpecies.bst = allies[2].baseSpecies.bst;\n\t\t\tpokemon.item = allies[0].item;\n\t\t\tpokemon.ability = pokemon.baseAbility = allies[1].ability;\n\t\t\tpokemon.set.evs = allies[2].set.evs;\n\t\t\tpokemon.set.nature = allies[2].set.nature;\n\t\t\tpokemon.set.ivs = allies[2].set.ivs;\n\t\t\tpokemon.hpType = (pokemon as any).baseHpType = allies[2].baseHpType;\n\t\t\tpokemon.moveSlots = (pokemon as any).baseMoveSlots = [\n\t\t\t\t...allies[3].baseMoveSlots.slice(0, 2), ...allies[4].baseMoveSlots.slice(2),\n\t\t\t].filter((move, index, moveSlots) => moveSlots.find(othermove => othermove.id === move.id) === move);\n\t\t\t// so all HP-related properties get re-initialized in setSpecies\n\t\t\tpokemon.maxhp = 0;\n\t\t\tpokemon.setSpecies(newSpecies, null);\n\t\t},\n\t},\n\tbonustypemod: {\n\t\tname: \"Bonus Type Mod\",\n\t\teffectType: \"Rule\",\n\t\tdesc: `Pokémon have their Tera Type added onto their current ones.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Bonus Type Mod: Pok\\u00e9mon have their Tera Type added onto their current ones.');\n\t\t},\n\t\tonModifySpeciesPriority: 1,\n\t\tonModifySpecies(species, target, source, effect) {\n\t\t\tif (!target) return; // Chat command\n\t\t\tif (effect && ['imposter', 'transform'].includes(effect.id)) return;\n\t\t\tconst typesSet = new Set(species.types);\n\t\t\tconst bonusType = this.dex.types.get(target.teraType);\n\t\t\tif (bonusType.exists) typesSet.add(bonusType.name);\n\t\t\treturn { ...species, types: [...typesSet] };\n\t\t},\n\t\tonSwitchIn(pokemon) {\n\t\t\tthis.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');\n\t\t},\n\t\tonAfterMega(pokemon) {\n\t\t\tthis.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');\n\t\t},\n\t},\n\tfirstbloodrule: {\n\t\teffectType: \"Rule\",\n\t\tname: \"First Blood Rule\",\n\t\tdesc: `The first team to have a Pokémon faint loses.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'First Blood Rule: The first team to have a Pok\\u00e9mon faint loses.');\n\t\t},\n\t\tonFaint(target) {\n\t\t\tthis.lose(target.side);\n\t\t},\n\t},\n\ttiershiftmod: {\n\t\teffectType: \"Rule\",\n\t\tname: \"Tier Shift Mod\",\n\t\tdesc: `Pokémon below OU get their stats, excluding HP, boosted. UU/RUBL get +15, RU/NUBL get +20, NU/PUBL get +25, and PU or lower get +30.`,\n\t\truleset: ['Overflow Stat Mod'],\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Tier Shift Mod: Pok\\u00e9mon get stat buffs depending on their tier, excluding HP.');\n\t\t},\n\t\tonModifySpecies(species, target, source, effect) {\n\t\t\tif (!species.baseStats) return;\n\t\t\tconst boosts: { [tier: string]: number } = {\n\t\t\t\tuu: 15,\n\t\t\t\trubl: 15,\n\t\t\t\tru: 20,\n\t\t\t\tnubl: 20,\n\t\t\t\tnu: 25,\n\t\t\t\tpubl: 25,\n\t\t\t\tpu: 30,\n\t\t\t\tzubl: 30,\n\t\t\t\tzu: 30,\n\t\t\t\tnfe: 30,\n\t\t\t\tlc: 30,\n\t\t\t};\n\t\t\tconst isNatDex: boolean = this.ruleTable.has(\"standardnatdex\");\n\t\t\tlet tier: string = this.toID(isNatDex ? species.natDexTier : species.tier);\n\t\t\tif (!(tier in boosts)) return;\n\t\t\t// Non-Pokemon bans in lower tiers\n\t\t\tif (target) {\n\t\t\t\tif (this.toID(target.set.item) === 'lightclay') tier = 'rubl';\n\t\t\t\tif (this.toID(target.set.item) === 'damprock') tier = 'publ';\n\t\t\t\tif (this.toID(target.set.item) === 'heatrock') tier = 'publ';\n\t\t\t}\n\t\t\tconst pokemon = this.dex.deepClone(species);\n\t\t\tpokemon.bst = pokemon.baseStats['hp'];\n\t\t\tconst boost = boosts[tier];\n\t\t\tlet statName: StatID;\n\t\t\tfor (statName in pokemon.baseStats as StatsTable) {\n\t\t\t\tif (statName === 'hp') continue;\n\t\t\t\tpokemon.baseStats[statName] = this.clampIntRange(pokemon.baseStats[statName] + boost, 1, 255);\n\t\t\t\tpokemon.bst += pokemon.baseStats[statName];\n\t\t\t}\n\t\t\treturn pokemon;\n\t\t},\n\t},\n\trevelationmonsmod: {\n\t\teffectType: \"Rule\",\n\t\tname: \"Revelationmons Mod\",\n\t\tdesc: `The moves in the first slot(s) of a Pokémon's set have their types changed to match the Pokémon's type(s).`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Revelationmons Mod: The first moveslots have their types changed to match the Pok\\u00e9mon\\'s types');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tconst slotIndex = species.types.length - 1;\n\t\t\tconst problems = [];\n\t\t\tfor (const [i, moveid] of set.moves.entries()) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tif (!this.ruleTable.isRestricted(`move:${move.id}`)) continue;\n\t\t\t\tif (i <= slotIndex) {\n\t\t\t\t\tproblems.push(`${move.name} can't be in moveslot ${i + 1} because it's restricted from being in the first ${slotIndex + 1 > 1 ? `${slotIndex + 1} slots` : 'slot'}.`);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn problems;\n\t\t},\n\t\tonModifyMove(move, pokemon, target) {\n\t\t\tconst types = pokemon.getTypes(true);\n\t\t\tconst noModifyType = [\n\t\t\t\t'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',\n\t\t\t];\n\t\t\tif (noModifyType.includes(move.id)) return;\n\t\t\tfor (const [i, type] of types.entries()) {\n\t\t\t\tif (!this.dex.types.isName(type)) continue;\n\t\t\t\tif (pokemon.moveSlots[i] && move.id === pokemon.moveSlots[i].id) move.type = type;\n\t\t\t}\n\t\t},\n\t},\n\treevolutionmod: {\n\t\teffectType: \"Rule\",\n\t\tname: \"Re-Evolution Mod\",\n\t\tdesc: \"Pokémon gain the stat changes they would gain from evolving again.\",\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Re-Evolution Mod: Pok\\u00e9mon gain the boosts they would gain from evolving again');\n\t\t},\n\t\tonModifySpecies(species, target) {\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tconst baseSpecies = this.dex.species.get(\n\t\t\t\t(Array.isArray(species.battleOnly) ? species.battleOnly[0] : species.battleOnly) || species.changesFrom || species.name\n\t\t\t);\n\t\t\tif (!newSpecies.prevo) {\n\t\t\t\tif (!baseSpecies.prevo) return;\n\t\t\t\tconst prevoSpecies = this.dex.species.get(baseSpecies.prevo);\n\t\t\t\tlet statid: StatID;\n\t\t\t\tnewSpecies.bst = 0;\n\t\t\t\tfor (statid in prevoSpecies.baseStats) {\n\t\t\t\t\tconst change = baseSpecies.baseStats[statid] - prevoSpecies.baseStats[statid];\n\t\t\t\t\tconst formeChange = newSpecies.baseStats[statid] - baseSpecies.baseStats[statid];\n\t\t\t\t\tnewSpecies.baseStats[statid] = this.clampIntRange(baseSpecies.baseStats[statid] + change, 1, 255);\n\t\t\t\t\tnewSpecies.baseStats[statid] = this.clampIntRange(newSpecies.baseStats[statid] + formeChange, 1, 255);\n\t\t\t\t\tnewSpecies.bst += newSpecies.baseStats[statid];\n\t\t\t\t}\n\t\t\t\treturn newSpecies;\n\t\t\t}\n\t\t\tconst prevoSpecies = this.dex.species.get(newSpecies.prevo);\n\t\t\tlet statid: StatID;\n\t\t\tnewSpecies.bst = 0;\n\t\t\tfor (statid in prevoSpecies.baseStats) {\n\t\t\t\tconst change = newSpecies.baseStats[statid] - prevoSpecies.baseStats[statid];\n\t\t\t\tnewSpecies.baseStats[statid] = this.clampIntRange(newSpecies.baseStats[statid] + change, 1, 255);\n\t\t\t\tnewSpecies.bst += newSpecies.baseStats[statid];\n\t\t\t}\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tbrokenrecordmod: {\n\t\teffectType: \"Rule\",\n\t\tname: \"Broken Record Mod\",\n\t\tdesc: `Pokémon can hold a TR to use that move in battle.`,\n\t\tonValidateSet(set) {\n\t\t\tif (!set.item) return;\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tif (!/^tr\\d\\d/i.test(item.name)) return;\n\t\t\tconst moveName = item.desc.split('move ')[1].split('.')[0];\n\t\t\tif (set.moves.map(this.toID).includes(this.toID(moveName))) {\n\t\t\t\treturn [\n\t\t\t\t\t`${set.species} can't run ${item.name} (${moveName}) as its item because it already has that move in its moveset.`,\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\tonValidateTeam(team) {\n\t\t\tconst trs = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tif (!set.item) continue;\n\t\t\t\tconst item = this.dex.items.get(set.item).name;\n\t\t\t\tif (!/^tr\\d\\d/i.test(item)) continue;\n\t\t\t\tif (trs.has(item)) {\n\t\t\t\t\treturn [`Your team already has a Pok\\u00e9mon with ${item}.`];\n\t\t\t\t}\n\t\t\t\ttrs.add(item);\n\t\t\t}\n\t\t},\n\t\tonTakeItem(item) {\n\t\t\treturn !/^tr\\d\\d/i.test(item.name);\n\t\t},\n\t\tonModifyMove(move) {\n\t\t\tif (move.id === 'knockoff') {\n\t\t\t\tmove.onBasePower = function (basePower, source, target, m) {\n\t\t\t\t\tconst item = target.getItem();\n\t\t\t\t\tif (!this.singleEvent('TakeItem', item, target.itemState, target, target, m, item)) return;\n\t\t\t\t\t// Very hardcode but I'd prefer to not make a mod for one damage calculation change\n\t\t\t\t\tif (item.id && !/^tr\\d\\d/i.test(item.id)) {\n\t\t\t\t\t\treturn this.chainModify(1.5);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (move.id === 'fling') {\n\t\t\t\tmove.onPrepareHit = function (target, source, m) {\n\t\t\t\t\tif (source.ignoringItem()) return false;\n\t\t\t\t\tconst item = source.getItem();\n\t\t\t\t\tif (!this.singleEvent('TakeItem', item, source.itemState, source, source, m, item)) return false;\n\t\t\t\t\tif (!item.fling) return false;\n\t\t\t\t\tif (/^tr\\d\\d/i.test(item.id)) return false;\n\t\t\t\t\tm.basePower = item.fling.basePower;\n\t\t\t\t\tif (item.isBerry) {\n\t\t\t\t\t\tm.onHit = function (foe) {\n\t\t\t\t\t\t\tif (this.singleEvent('Eat', item, null, foe, null, null)) {\n\t\t\t\t\t\t\t\tthis.runEvent('EatItem', foe, null, null, item);\n\t\t\t\t\t\t\t\tif (item.id === 'leppaberry') foe.staleness = 'external';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.onEat) foe.ateBerry = true;\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (item.fling.effect) {\n\t\t\t\t\t\tm.onHit = item.fling.effect;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!m.secondaries) m.secondaries = [];\n\t\t\t\t\t\tif (item.fling.status) {\n\t\t\t\t\t\t\tm.secondaries.push({ status: item.fling.status });\n\t\t\t\t\t\t} else if (item.fling.volatileStatus) {\n\t\t\t\t\t\t\tm.secondaries.push({ volatileStatus: item.fling.volatileStatus });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsource.addVolatile('fling');\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tonBegin() {\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tconst item = pokemon.getItem();\n\t\t\t\tif (/^tr\\d\\d/i.test(item.name)) {\n\t\t\t\t\tconst move = this.dex.moves.get(item.desc.split('move ')[1].split('.')[0]);\n\t\t\t\t\tpokemon.moveSlots = (pokemon as any).baseMoveSlots = [\n\t\t\t\t\t\t...pokemon.baseMoveSlots, {\n\t\t\t\t\t\t\tid: move.id,\n\t\t\t\t\t\t\tmove: move.name,\n\t\t\t\t\t\t\tpp: move.pp * 8 / 5,\n\t\t\t\t\t\t\tmaxpp: move.pp * 8 / 5,\n\t\t\t\t\t\t\ttarget: move.target,\n\t\t\t\t\t\t\tdisabled: false,\n\t\t\t\t\t\t\tdisabledSource: '',\n\t\t\t\t\t\t\tused: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tforceofthefallenmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Force of the Fallen Mod',\n\t\tdesc: `Pokémon pass the move in their last moveslot to their allies when they are KOed.`,\n\t\tonValidateSet(set, format, setHas, teamHas) {\n\t\t\tconst lastMoveslot = this.dex.moves.get(set.moves[set.moves.length - 1]);\n\t\t\tif (this.ruleTable.isRestricted(`move:${lastMoveslot.id}`)) {\n\t\t\t\treturn [`${set.species}'s move ${lastMoveslot.name} cannot be placed in the last moveslot.`];\n\t\t\t}\n\t\t},\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Force of the Fallen Mod: Pok&\\u00e9mon pass the move in their last moveslot to their allies when they\\'re KOed');\n\t\t\tfor (const pokemon of this.getAllPokemon()) {\n\t\t\t\tpokemon.m.trueLastMoveSlot = pokemon.baseMoveSlots[pokemon.baseMoveSlots.length - 1];\n\t\t\t}\n\t\t},\n\t\tonFaint(target) {\n\t\t\tconst allies = target.side.pokemon.filter(ally => ally && target !== ally);\n\t\t\tfor (const ally of allies) {\n\t\t\t\tally.moveSlots = (ally as any).baseMoveSlots = [...ally.baseMoveSlots, target.m.trueLastMoveSlot];\n\t\t\t}\n\t\t},\n\t},\n\tcategoryswapmod: {\n\t\teffectType: 'Rule',\n\t\tname: 'Category Swap Mod',\n\t\tdesc: `All physical moves become special, and all special moves become physical.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Category Swap Mod: All physical moves become special, and vice versa');\n\t\t},\n\t\tonModifyMove(move, pokemon, target) {\n\t\t\tif (move.category === \"Status\") return;\n\n\t\t\tif (move.category === \"Physical\") {\n\t\t\t\tmove.category = \"Special\";\n\t\t\t} else if (move.category === \"Special\") {\n\t\t\t\tmove.category = \"Physical\";\n\t\t\t}\n\n\t\t\tswitch (move.id) {\n\t\t\tcase 'doomdesire': {\n\t\t\t\tmove.onTry = function (source, subtarget) {\n\t\t\t\t\tif (!subtarget.side.addSlotCondition(subtarget, 'futuremove')) return false;\n\t\t\t\t\tObject.assign(subtarget.side.slotConditions[subtarget.position]['futuremove'], {\n\t\t\t\t\t\tmove: 'doomdesire',\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tmoveData: {\n\t\t\t\t\t\t\tid: 'doomdesire',\n\t\t\t\t\t\t\tname: \"Doom Desire\",\n\t\t\t\t\t\t\taccuracy: 100,\n\t\t\t\t\t\t\tbasePower: 140,\n\t\t\t\t\t\t\tcategory: \"Physical\",\n\t\t\t\t\t\t\tpriority: 0,\n\t\t\t\t\t\t\tflags: { futuremove: 1 },\n\t\t\t\t\t\t\teffectType: 'Move',\n\t\t\t\t\t\t\ttype: 'Steel',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.add('-start', source, 'Doom Desire');\n\t\t\t\t\treturn this.NOT_FAIL;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'futuresight': {\n\t\t\t\tmove.onTry = function (source, subtarget) {\n\t\t\t\t\tif (!subtarget.side.addSlotCondition(subtarget, 'futuremove')) return false;\n\t\t\t\t\tObject.assign(subtarget.side.slotConditions[subtarget.position]['futuremove'], {\n\t\t\t\t\t\tduration: 3,\n\t\t\t\t\t\tmove: 'futuresight',\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tmoveData: {\n\t\t\t\t\t\t\tid: 'futuresight',\n\t\t\t\t\t\t\tname: \"Future Sight\",\n\t\t\t\t\t\t\taccuracy: 100,\n\t\t\t\t\t\t\tbasePower: 120,\n\t\t\t\t\t\t\tcategory: \"Physical\",\n\t\t\t\t\t\t\tpriority: 0,\n\t\t\t\t\t\t\tflags: { futuremove: 1 },\n\t\t\t\t\t\t\tignoreImmunity: false,\n\t\t\t\t\t\t\teffectType: 'Move',\n\t\t\t\t\t\t\ttype: 'Psychic',\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.add('-start', source, 'move: Future Sight');\n\t\t\t\t\treturn this.NOT_FAIL;\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// Moves with dynamic categories will always be physical if not special-cased\n\t\t\tcase 'lightthatburnsthesky':\n\t\t\tcase 'photongeyser': {\n\t\t\t\tmove.category = 'Special';\n\t\t\t\tif (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'shellsidearm': {\n\t\t\t\tif (!target) return;\n\t\t\t\tmove.category = 'Special';\n\t\t\t\tconst atk = pokemon.getStat('atk', false, true);\n\t\t\t\tconst spa = pokemon.getStat('spa', false, true);\n\t\t\t\tconst def = target.getStat('def', false, true);\n\t\t\t\tconst spd = target.getStat('spd', false, true);\n\t\t\t\tconst physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50);\n\t\t\t\tconst special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50);\n\t\t\t\tif (physical > special || (physical === special && this.randomChance(1, 2))) {\n\t\t\t\t\tmove.category = 'Physical';\n\t\t\t\t\tmove.flags.contact = 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tgodlygiftmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Godly Gift Mod\",\n\t\tonValidateTeam(team) {\n\t\t\tconst gods = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tlet species = this.dex.species.get(set.species);\n\t\t\t\tif (typeof species.battleOnly === 'string') species = this.dex.species.get(species.battleOnly);\n\t\t\t\tif (\n\t\t\t\t\t(species.baseSpecies === 'Zamazenta' && this.toID(set.item) === 'rustedshield') ||\n\t\t\t\t\t(species.baseSpecies === 'Zacian' && this.toID(set.item) === 'rustedsword')\n\t\t\t\t) {\n\t\t\t\t\tspecies = this.dex.species.get(`${species.baseSpecies}-Crowned`);\n\t\t\t\t}\n\t\t\t\tif (set.item && this.dex.items.get(set.item).megaStone) {\n\t\t\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\t\t\tif (item.megaEvolves === species.baseSpecies) {\n\t\t\t\t\t\tspecies = this.dex.species.get(item.megaStone);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.ruleTable.isRestrictedSpecies(species)) {\n\t\t\t\t\tgods.add(species.name);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (gods.size > 1) {\n\t\t\t\treturn [`You have too many Gods.`, `(${Array.from(gods).join(', ')} are Gods.)`];\n\t\t\t}\n\t\t},\n\t\tonModifySpeciesPriority: 3,\n\t\tonModifySpecies(species, target, source) {\n\t\t\tif (source || !target?.side) return;\n\t\t\tconst god = target.side.team.find(set => {\n\t\t\t\tlet godSpecies = this.dex.species.get(set.species);\n\t\t\t\tif (this.toID(set.ability) === 'powerconstruct') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (set.item) {\n\t\t\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\t\t\tif (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);\n\t\t\t\t\tif ([\"Zacian\", \"Zamazenta\"].includes(godSpecies.baseSpecies) && item.id.startsWith('rusted')) {\n\t\t\t\t\t\tgodSpecies = this.dex.species.get(set.species + \"-Crowned\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst isGod = this.ruleTable.isRestrictedSpecies(godSpecies);\n\t\t\t\treturn isGod;\n\t\t\t}) || target.side.team[0];\n\t\t\tconst stat = Dex.stats.ids()[target.side.team.indexOf(target.set)];\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tlet godSpecies = this.dex.species.get(god.species);\n\t\t\tif (typeof godSpecies.battleOnly === 'string') {\n\t\t\t\tgodSpecies = this.dex.species.get(godSpecies.battleOnly);\n\t\t\t}\n\t\t\tnewSpecies.bst -= newSpecies.baseStats[stat];\n\t\t\tnewSpecies.baseStats[stat] = godSpecies.baseStats[stat];\n\t\t\tif (this.gen === 1 && (stat === 'spa' || stat === 'spd')) {\n\t\t\t\tnewSpecies.baseStats['spa'] = newSpecies.baseStats['spd'] = godSpecies.baseStats[stat];\n\t\t\t}\n\t\t\tnewSpecies.bst += newSpecies.baseStats[stat];\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tvoltturnmayhemmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"VoltTurn Mayhem Mod\",\n\t\tdesc: `Every move that targets a foe causes the user to switch out after use.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'VoltTurn Mayhem Mod: Every move that targets a foe causes the user to switch out after use');\n\t\t},\n\t\tonModifyMove(move, source, target) {\n\t\t\tconst validTargets = ['adjacentFoe', 'allAdjacent', 'allAdjacentFoes', 'any', 'normal', 'randomNormal', 'scripted'];\n\t\t\tif (!validTargets.includes(move.target)) return;\n\t\t\tmove.selfSwitch = true;\n\t\t},\n\t},\n\tconvergencelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Convergence Legality\",\n\t\tdesc: `Allows all Pokémon that have identical types to share moves and abilities.`,\n\t\tonValidateSet(set, format) {\n\t\t\tconst curSpecies = this.dex.species.get(set.species);\n\t\t\tconst obtainableAbilityPool = new Set();\n\t\t\tconst matchingSpecies = this.dex.species.all()\n\t\t\t\t.filter(species => (\n\t\t\t\t\t(!species.isNonstandard || this.ruleTable.has(`+pokemontag:${this.toID(species.isNonstandard)}`)) &&\n\t\t\t\t\tspecies.types.every(type => curSpecies.types.includes(type)) &&\n\t\t\t\t\tspecies.types.length === curSpecies.types.length && !this.ruleTable.isBannedSpecies(species)\n\t\t\t\t));\n\t\t\tfor (const species of matchingSpecies) {\n\t\t\t\tfor (const abilityName of Object.values(species.abilities)) {\n\t\t\t\t\tconst abilityid = this.toID(abilityName);\n\t\t\t\t\tobtainableAbilityPool.add(abilityid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!obtainableAbilityPool.has(this.toID(set.ability))) {\n\t\t\t\treturn [`${curSpecies.name} doesn't have access to ${this.dex.abilities.get(set.ability).name}.`];\n\t\t\t}\n\t\t},\n\t\tcheckCanLearn(move, species, setSources, set) {\n\t\t\tconst matchingSpecies = this.dex.species.all()\n\t\t\t\t.filter(s => (\n\t\t\t\t\t(!s.isNonstandard || this.ruleTable.has(`+pokemontag:${this.toID(s.isNonstandard)}`)) &&\n\t\t\t\t\ts.types.every(type => species.types.includes(type)) &&\n\t\t\t\t\ts.types.length === species.types.length && !this.ruleTable.isBannedSpecies(s)\n\t\t\t\t));\n\t\t\tconst someCanLearn = matchingSpecies.some(s => this.checkCanLearn(move, s, setSources, set) === null);\n\t\t\tif (someCanLearn) return null;\n\t\t\treturn this.checkCanLearn(move, species, setSources, set);\n\t\t},\n\t},\n\thackmonsformelegality: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Hackmons Forme Legality\",\n\t\tdesc: `Enforces proper forme legality for hackmons-based metagames.`,\n\t\tunbanlist: ['All Pokemon'],\n\t\tbanlist: ['CAP', 'LGPE', 'Future'],\n\t\tonChangeSet(set, format, setHas, teamHas) {\n\t\t\tlet species = this.dex.species.get(set.species);\n\t\t\tif (\n\t\t\t\t(species.natDexTier === 'Illegal' || species.forme.includes('Totem')) &&\n\t\t\t\t!['Floette-Eternal', 'Greninja-Ash', 'Xerneas-Neutral'].includes(species.name) &&\n\t\t\t\t!this.ruleTable.has(`+pokemon:${species.id}`)\n\t\t\t) {\n\t\t\t\treturn [`${species.name} is illegal.`];\n\t\t\t}\n\t\t\tconst problemPokemon = this.dex.species.all().filter(s => (\n\t\t\t\t(s.name === 'Xerneas' || s.battleOnly || s.forme === 'Eternamax') &&\n\t\t\t\t!(s.isMega || s.isPrimal || ['Greninja-Ash', 'Necrozma-Ultra'].includes(s.name)) &&\n\t\t\t\t!(this.ruleTable.has(`+pokemon:${s.id}`) || this.ruleTable.has(`+basepokemon:${this.toID(s.baseSpecies)}`))\n\t\t\t));\n\t\t\tif (problemPokemon.includes(species)) {\n\t\t\t\tif (species.requiredItem && this.toID(set.item) !== this.toID(species.requiredItem)) {\n\t\t\t\t\treturn [`${set.name ? `${set.name} (${species.name})` : species.name} is required to hold ${species.requiredItem}.`];\n\t\t\t\t}\n\t\t\t\tif (species.requiredMove && !set.moves.map(this.toID).includes(this.toID(species.requiredMove))) {\n\t\t\t\t\treturn [`${set.name ? `${set.name} (${species.name})` : species.name} is required to have ${species.requiredMove}.`];\n\t\t\t\t}\n\t\t\t\tset.species = (species.id === 'xerneas' ? 'Xerneas-Neutral' :\n\t\t\t\t\tspecies.id === 'zygardecomplete' ? 'Zygarde' : species.battleOnly) as string;\n\t\t\t\tspecies = this.dex.species.get(set.species);\n\t\t\t}\n\t\t\tfor (const moveid of set.moves) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tif (move.isNonstandard && move.isNonstandard !== 'Unobtainable' && !this.ruleTable.has(`+move:${move.id}`)) {\n\t\t\t\t\treturn [`${move.name} is illegal.`];\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst item = this.dex.items.get(set.item);\n\t\t\tif (item.isNonstandard && item.isNonstandard !== 'Unobtainable' && !this.ruleTable.has(`+item:${item.id}`)) {\n\t\t\t\treturn [`${item.name} is illegal.`];\n\t\t\t}\n\t\t\tif (species.baseSpecies === 'Xerneas' && this.toID(set.ability) !== 'fairyaura') {\n\t\t\t\treturn [`${set.name ? `${set.name} (${species.name})` : species.name} is ability-locked into Fairy Aura.`];\n\t\t\t}\n\t\t},\n\t},\n\tspeciesrevealclause: {\n\t\teffectType: 'Rule',\n\t\tname: 'Species Reveal Clause',\n\t\tdesc: \"Reveals a Pokémon's true species in hackmons-based metagames.\",\n\t\t// Hardcoded into effect, cannot be disabled, ties into team preview\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Species Reveal Clause: Reveals a Pok\\u00e9mon\\'s true species in hackmons-based metagames.');\n\t\t},\n\t},\n\tfranticfusionsmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Frantic Fusions Mod\",\n\t\tdesc: `Pokémon nicknamed after another Pokémon get their stats buffed by 1/4 of that Pokémon's stats, barring HP, and access to their abilities.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Frantic Fusions Mod: Pok\\u00e9mon nicknamed after another Pok\\u00e9mon get buffed stats and more abilities.');\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tconst fusion = this.dex.species.get(set.name);\n\t\t\tconst abilityPool = new Set(Object.values(species.abilities));\n\t\t\tif (fusion.exists) {\n\t\t\t\tfor (const ability of Object.values(fusion.abilities)) {\n\t\t\t\t\tabilityPool.add(ability);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst ability = this.dex.abilities.get(set.ability);\n\t\t\tif (!abilityPool.has(ability.name)) {\n\t\t\t\treturn [`${species.name} only has access to the following abilities: ${Array.from(abilityPool).join(', ')}.`];\n\t\t\t}\n\t\t},\n\t\tonValidateTeam(team, format) {\n\t\t\tconst donors = new this.dex.Multiset();\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tconst fusion = this.dex.species.get(set.name);\n\t\t\t\tif (fusion.exists) {\n\t\t\t\t\tset.name = fusion.name;\n\t\t\t\t} else {\n\t\t\t\t\tset.name = species.baseSpecies;\n\t\t\t\t\tif (species.baseSpecies === 'Unown') set.species = 'Unown';\n\t\t\t\t}\n\t\t\t\tif (fusion.name === species.name) continue;\n\t\t\t\tdonors.add(fusion.name);\n\t\t\t}\n\t\t\tfor (const [fusionName, number] of donors) {\n\t\t\t\tif (number > 1) {\n\t\t\t\t\treturn [`You can only fuse with any Pok\\u00e9 once.`, `(You have ${number} Pok\\u00e9mon fused with ${fusionName}.)`];\n\t\t\t\t}\n\t\t\t\tconst fusion = this.dex.species.get(fusionName);\n\t\t\t\tif (this.ruleTable.isBannedSpecies(fusion) || fusion.battleOnly) {\n\t\t\t\t\treturn [`Pok\\u00e9mon can't fuse with banned Pok\\u00e9mon.`, `(${fusionName} is banned.)`];\n\t\t\t\t}\n\t\t\t\tif (fusion.isNonstandard &&\n\t\t\t\t\t!(this.ruleTable.has(`+pokemontag:${this.toID(fusion.isNonstandard)}`) ||\n\t\t\t\t\t\tthis.ruleTable.has(`+pokemon:${fusion.id}`) ||\n\t\t\t\t\t\tthis.ruleTable.has(`+basepokemon:${this.toID(fusion.baseSpecies)}`))) {\n\t\t\t\t\treturn [`${fusion.name} is marked as ${fusion.isNonstandard}, which is banned.`];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonModifySpecies(species, target, source, effect) {\n\t\t\tif (!target) return;\n\t\t\tconst newSpecies = this.dex.deepClone(species);\n\t\t\tconst fusionName = target.set.name;\n\t\t\tif (!fusionName || fusionName === newSpecies.name) return;\n\t\t\tconst fusionSpecies = this.dex.deepClone(this.dex.species.get(fusionName));\n\t\t\tnewSpecies.bst = newSpecies.baseStats.hp;\n\t\t\tfor (const stat in newSpecies.baseStats) {\n\t\t\t\tif (stat === 'hp') continue;\n\t\t\t\tconst addition = Math.floor(fusionSpecies.baseStats[stat] / 4);\n\t\t\t\tnewSpecies.baseStats[stat] = this.clampIntRange(newSpecies.baseStats[stat] + addition, 1, 255);\n\t\t\t\tnewSpecies.bst += newSpecies.baseStats[stat];\n\t\t\t}\n\t\t\treturn newSpecies;\n\t\t},\n\t},\n\tproteanpalacemod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Protean Palace Mod\",\n\t\tdesc: `Pokémon become the type of the move they use.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', 'Protean Palace Mod: Pok\\u00e9mon become the type of the move they use.');\n\t\t},\n\t\tonPrepareHit(source, target, move) {\n\t\t\tif (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return;\n\t\t\tconst type = move.type;\n\t\t\tif (type && type !== '???' && source.getTypes().join() !== type) {\n\t\t\t\tif (!source.setType(type)) return;\n\t\t\t\tthis.add('-start', source, 'typechange', type, '[from] ability: Protean');\n\t\t\t}\n\t\t},\n\t},\n\tbestof: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: 'Best Of',\n\t\tdesc: \"Allows players to define a best-of series where the winner of the series is the winner of the majority of games.\",\n\t\thasValue: 'positive-integer',\n\t\tonValidateRule(value) {\n\t\t\tconst num = Number(value);\n\t\t\tif (num > 9 || num < 3 || num % 2 !== 1) {\n\t\t\t\tthrow new Error(\"Series length must be an odd number between three and nine (inclusive).\");\n\t\t\t}\n\t\t\tif (!['singles', 'doubles'].includes(this.format.gameType)) {\n\t\t\t\tthrow new Error(\"Only single and doubles battles can be a Best-of series.\");\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t},\n\tillusionlevelmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Illusion Level Mod\",\n\t\tdesc: `Changes the Illusion ability to disguise the Pokémon's level instead of leaking it.`,\n\t\tonBegin() {\n\t\t\tthis.add('rule', \"Illusion Level Mod: Illusion disguises the Pok\\u00e9mon's true level\");\n\t\t},\n\t\t// Implemented in Pokemon#getDetails\n\t},\n\tallowedpokemoves: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Allowed Pokemoves\",\n\t\tdesc: \"Allows players to define the amount of Pokemoves allowed per set.\",\n\t\thasValue: 'positive-integer',\n\t\tonValidateRule(value) {\n\t\t\tconst num = Number(value);\n\t\t\tif (num > this.ruleTable.maxMoveCount || num < 1) {\n\t\t\t\tthrow new Error(`Allowed Pokemoves must be between 1 and ${this.ruleTable.maxMoveCount}.`);\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\t// Validation in the Pokemoves format\n\t},\n\tuniquepokemoves: {\n\t\teffectType: 'ValidatorRule',\n\t\tname: \"Unique Pokemoves\",\n\t\tdesc: \"Allows players to define how many times a Pokemon can be used as a Pokemove per team.\",\n\t\thasValue: 'positive-integer',\n\t\tonValidateRule(value) {\n\t\t\tconst num = Number(value);\n\t\t\tif (num > this.ruleTable.maxMoveCount || num < 1) {\n\t\t\t\tthrow new Error(`Unique Pokemoves must be between 1 and ${this.ruleTable.maxMoveCount}.`);\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tonValidateTeam(team, format, teamHas) {\n\t\t\tconst pokemoves = new this.dex.Multiset();\n\t\t\tfor (const set of team) {\n\t\t\t\tif (set.moves?.length) {\n\t\t\t\t\tfor (const moveid of set.moves) {\n\t\t\t\t\t\tconst pokemove = this.dex.species.get(moveid);\n\t\t\t\t\t\tif (!pokemove.exists) continue;\n\t\t\t\t\t\tpokemoves.add(pokemove.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst problems: string[] = [];\n\t\t\tconst uniquePokemoves = Number(this.ruleTable.valueRules.get('uniquepokemoveclause') || 1);\n\t\t\tfor (const [moveid, num] of pokemoves) {\n\t\t\t\tif (num <= uniquePokemoves) continue;\n\t\t\t\tproblems.push(\n\t\t\t\t\t`You have ${num} Pok\\u00e9mon with ${this.dex.species.get(moveid).name} as a Pokemove.`,\n\t\t\t\t\t`(Each Pok\\u00e9mon can only be used as a Pokemove ${uniquePokemoves} time${uniquePokemoves === 1 ? '' : 's'} per team.)`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn problems;\n\t\t},\n\t},\n\tferventimpersonationmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Fervent Impersonation Mod\",\n\t\tdesc: `Nickname a Pokémon after another Pokémon that it shares a moveset with, and it will transform into the Pokémon it's nicknamed after once it drops to or below 50% health.`,\n\t\tonValidateTeam(team, format, teamHas) {\n\t\t\tconst exhaustedSpecies = new Set();\n\t\t\tfor (const set of team) {\n\t\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\t\tconst impersonation = this.dex.species.get(set.name);\n\t\t\t\tif (exhaustedSpecies.has(species.baseSpecies) ||\n\t\t\t\t\t(exhaustedSpecies.has(impersonation.baseSpecies) && impersonation.baseSpecies !== species.baseSpecies)) {\n\t\t\t\t\treturn [`You have more than one Pok\\u00e9mon nicknamed after ${impersonation.baseSpecies}.`];\n\t\t\t\t}\n\t\t\t\texhaustedSpecies.add(species.baseSpecies);\n\t\t\t\tif (impersonation.exists && impersonation.baseSpecies !== species.baseSpecies) {\n\t\t\t\t\texhaustedSpecies.add(impersonation.baseSpecies);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonValidateSet(set) {\n\t\t\tconst species = this.dex.species.get(set.species);\n\t\t\tconst impersonation = this.dex.species.get(set.name);\n\t\t\tif (this.ruleTable.isRestrictedSpecies(species)) {\n\t\t\t\treturn [\n\t\t\t\t\t`${species.name} can't be used as a base species.`,\n\t\t\t\t\t`(Restricted Pok\\u00e9mon can only be used as impersonations.)`,\n\t\t\t\t];\n\t\t\t}\n\t\t\tconst rt = this.ruleTable;\n\t\t\tif ((this.toID(set.name) !== species.id && this.toID(set.name) !== impersonation.id) ||\n\t\t\t\t(impersonation.isNonstandard && !(rt.has(`+pokemontag:${this.toID(impersonation.isNonstandard)}`) ||\n\t\t\t\t\trt.has(`+pokemon:${impersonation.id}`) || rt.has(`+basepokemon:${this.toID(impersonation.baseSpecies)}`)))) {\n\t\t\t\treturn [`All Pok\\u00e9mon must either have no nickname or must be nicknamed after a Pok\\u00e9mon.`];\n\t\t\t}\n\t\t},\n\t\tcheckCanLearn(move, species, setSources, set) {\n\t\t\tconst impersonation = this.dex.species.get(set.name);\n\t\t\tconst baseCheckCanLearn = this.checkCanLearn(move, species, setSources, set);\n\t\t\tif (baseCheckCanLearn) return baseCheckCanLearn;\n\t\t\treturn this.checkCanLearn(move, impersonation, setSources, set);\n\t\t},\n\t\tonResidualOrder: 29,\n\t\tonResidual(pokemon) {\n\t\t\tif (pokemon.transformed || !pokemon.hp) return;\n\t\t\tconst oldPokemon = pokemon.species;\n\t\t\tconst impersonation = this.dex.species.get(pokemon.set.name);\n\t\t\tif (pokemon.species.baseSpecies === impersonation.baseSpecies || pokemon.hp > pokemon.maxhp / 2) return;\n\t\t\tthis.add('-activate', pokemon, 'ability: Power Construct');\n\t\t\tconst abilitySlot = Object.keys(oldPokemon.abilities).find(x => (\n\t\t\t\t(oldPokemon.abilities as any)[x] === pokemon.set.ability\n\t\t\t)) || \"0\";\n\t\t\tpokemon.formeChange(impersonation.name, this.effect, true, abilitySlot);\n\t\t\tpokemon.baseMaxhp = Math.floor(Math.floor(\n\t\t\t\t2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100\n\t\t\t) * pokemon.level / 100 + 10);\n\t\t\tconst newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp;\n\t\t\tpokemon.hp = this.clampIntRange(newMaxHP - (pokemon.maxhp - pokemon.hp), 1, newMaxHP);\n\t\t\tpokemon.maxhp = newMaxHP;\n\t\t\tthis.add('-heal', pokemon, pokemon.getHealth, '[silent]');\n\t\t},\n\t},\n\ttwisteddimensionmod: {\n\t\teffectType: 'Rule',\n\t\tname: \"Twisted Dimension Mod\",\n\t\tdesc: `The effects of Trick Room are always active, using Trick Room reverts the field to normal for 5 turns.`,\n\t\t// implemented in Pokemon#getActionSpeed()\n\t},\n\tmixandmegaoldaggronite: {\n\t\teffectType: 'Rule',\n\t\tname: \"Mix and Mega Old Aggronite\",\n\t\tdesc: `Causes Aggronite to no longer give the Steel type in Mix and Mega.`,\n\t\t// implemented in mods/mixandmega/scripts.ts\n\t},\n};\n"],
"mappings": "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W;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAS;AAAA,QAAU;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAY;AAAA,QAAa;AAAA,MAClvE;AACA,YAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI;AAC5D,UAAI,CAAC,SAAS,SAAS,QAAQ,WAAW,KAAK,CAAC,KAAK,UAAU,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrF,eAAO,CAAC,QAAQ,cAAc,kCAA+B;AAAA,MAC9D;AAAA,IACD;AAAA,EACD;AAAA,EACA,eAAe;AAAA,IACd,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,KAAK,QAAQ;AAC1B,YAAM,YAAY;AAAA,QACjB;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAS;AAAA,QAAS;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAS;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAS;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAc;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAc;AAAA,QAAc;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,MACjzE;AACA,YAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI;AAC5D,WAAK,CAAC,UAAU,SAAS,QAAQ,WAAW,KAAK,QAAQ,MAAM,MAAM,CAAC,KAAK,UAAU,IAAI,MAAM,QAAQ,EAAE,GAAG;AAC3G,eAAO,CAAC,GAAG,QAAQ,uCAAoC;AAAA,MACxD;AAAA,IACD;AAAA,EACD;AAAA,EACA,iBAAiB;AAAA,IAChB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,KAAK,QAAQ;AAC1B,YAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI;AAC5D,YAAM,UAAW,QAAQ,OAAO,OAAO,QAAQ,OAAO,OACrD,CAAC,CAAC,SAAS,SAAS,WAAW,UAAU,EAAE,SAAS,QAAQ,KAAK,KAAK,QAAQ,OAAO;AACtF,UAAI,CAAC,WAAW,CAAC,KAAK,UAAU,IAAI,MAAM,QAAQ,EAAE,GAAG;AACtD,eAAO,CAAC,GAAG,QAAQ,iDAA8C;AAAA,MAClE;AAAA,IACD;AAAA,EACD;AAAA,EACA,iBAAiB;AAAA,IAChB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,KAAK,QAAQ;AAC1B,YAAM,WAAW;AAAA,QAChB;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAc;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAO;AAAA,QAAU;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,QAAS;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAc;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;A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AA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAc;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QACltD;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAc;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAc;AAAA,QAAc;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAS;AAAA,QAAS;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAS;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;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AS;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAS;AAAA,QAAS;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAe;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAY;AAAA,QAAe;AAAA,QAAU;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QA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AY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAe;AAAA,QAAc;AAAA,QAAS;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAe;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,MACl4E;AACA,YAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI;AAC5D,UAAI,CAAC,OAAO,SAAS,QAAQ,WAAW,KAAK,CAAC,OAAO,SAAS,QAAQ,IAAI,KACzE,CAAC,KAAK,UAAU,IAAI,MAAM,QAAQ,EAAE,GAAG;AACvC,eAAO,CAAC,GAAG,QAAQ,qDAAkD;AAAA,MACtE;AAAA,IACD;AAAA,EACD;AAAA,EACA,oBAAoB;AAAA,IACnB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,KAAK,QAAQ;AAC1B,YAAM,YAAY;AAAA,QACjB;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAc;AAAA,QAAc;AAAA,QAAU;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAe;AAAA,QAAe;AAAA,QAAc;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAe;AAAA,QAAY;AAAA,QAAe;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAc;AAAA,QAAa;AAAA,QAAY;AAAA,QAAc;AAAA,QAAQ;AAAA,QAAY;AAAA,QAAe;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,MACn2E;AACA,YAAM,UAAU,KAAK,IAAI,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI;AAC5D,UAAI,CAAC,UAAU,SAAS,QAAQ,WAAW,KAAK,CAAC,UAAU,SAAS,QAAQ,IAAI,GAAG;AAClF,eAAO,CAAC,GAAG,QAAQ,oDAAiD;AAAA,MACrE;AAAA,IACD;AAAA,EACD;AAAA,EACA,uBAAuB;AAAA,IACtB,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,cAAc,KAAK,QAAQ;AAC1B,YAAM,WAAW;AAAA,QAChB;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAe;AAAA,QAAe;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAc;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAS;AAAA,QAAS;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AA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Ae;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAY;AAAA,QACj4E;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAQ;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAQ;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAc;AAAA,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AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAU;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAe;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAgB;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAY;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAU;AAAA,QAAW;AAAA,QAAY;AAAA,QAAU;AAAA,QAAc;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAa;AAAA,QAAc;AAAA,QAAW;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAS;AAAA,QAAY;AAAA,QAAc;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAe;AAAA,QAAU;AAAA,QAAc;AAAA,QAAa;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa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AA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAS;AAAA,QAAW;AAAA,QAAW;AAAA,QAAU;AAAA,QAAU;AAAA,QAAS;AAAA,QAAY;AAAA,QAAY;AAAA,QAAe;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAc;AAAA,QAAU;AAAA,QAAa;AAAA,QAAc;AAAA,QAAU;AAAA,QAAU;AAAA,QAAa;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAW;AAAA,QAAQ;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAU;AAAA,QAAa;AAAA,QAAa;AAAA,QAAc;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAc;AAAA,QAAc;AAAA,QAAa;AAAA,QAAY;AAAA,QAAa;AAAA,QAAa;AAAA,QAAa;AAAA,QAAW;AAAA,QAAY;AAAA,QAAa;AAAA,QAAW;AAAA,QAAc;AAAA,QAAY;AAAA,QAAY;AAAA,QAAc;AAAA,QAAW;AAAA,QAAW;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAa;AAAA,QAAY;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAY;AAAA,QAAa;AAAA,QAAU;AAAA,QAAY;AAAA,QAAY;AAAA,QAAS;AAAA,QAAW;AAAA,QAAa;AAAA,QAAS;AAAA,QAAW;AAAA,QAAU;AAAA,QAAY;AAAA,QAAU;AAAA,QAAY;AAAA,QAAW;AAAA,QAAa;AAAA,QAAc;AAAA,QAAY;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAa;AAAA,QAAY;AAAA,QAAU;AAAA,QAAW;AAAA,QAAa;AA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",
"names": ["prevo", "prevoSpecies", "statid", "godSpecies", "ability"]
}