torn-client
Version:
Fully-typed and auto-generated TypeScript client for the Torn City v2 API. Supports Node.js and browsers
988 lines (862 loc) • 213 kB
TypeScript
/**
* Defines the rate limit handling strategy for API requests
*
* @category Core
*/
type RateLimitMode = "autoDelay" | "throwOnLimit" | "ignore";
/**
* Defines the algorithm for distributing requests across multiple API keys
*
* @category Core
*/
type ApiKeyBalancing = "roundRobin" | "random";
/**
* Core function for making API requests
* It's generic, allowing the caller to specify the expected return type
*
* @template T The expected type of the response data
* @param path The API endpoint path (e.g., "/user/profile")
* @param params The query parameters for the request
* @returns A Promise that resolves to the response data of type T
*
* @category Core
*/
type Requester = <T = unknown>(path: string, params: Record<string, unknown>) => Promise<T>;
/**
* Wraps a paginated API response, providing methods to navigate between pages
*
* The properties of the current page's data are directly accessible on instances of this class
*
* @template T The type of the data within the paginated response
*
* @category Core
*/
declare class PaginatedResponse<T> {
private readonly nextUrl;
private readonly prevUrl;
private readonly requester;
constructor(data: T, nextUrl: string | null, prevUrl: string | null, requester: Requester);
/**
* Fetches a page of results from a given URL
* @param url The full URL of the page to fetch
* @returns A new combined response object if the page exists, otherwise null
*/
private fetchPage;
/**
* Fetches the next page of results
* @returns A promise that resolves to the next page, or null if there is no next page
*/
next(): Promise<(PaginatedResponse<T> & T) | null>;
/**
* Fetches the previous page of results
* @returns A promise that resolves to the previous page, or null if there is no next page
*/
prev(): Promise<(PaginatedResponse<T> & T) | null>;
}
/** @category Models */
type AmmoId = number;
/** @category Models */
type ApiKeyAccessTypeEnum = "Custom" | "Public Only" | "Minimal Access" | "Limited Access" | "Full Access";
/** @category Models */
type Attack = {
id: AttackId;
code: AttackCode;
started: number;
ended: number;
attacker: AttackPlayer | null;
defender: AttackPlayer;
result: FactionAttackResult;
respect_gain: number;
respect_loss: number;
chain: number;
is_interrupted: boolean;
is_stealthed: boolean;
is_raid: boolean;
is_ranked_war: boolean;
finishing_hit_effects: AttackingFinishingHitEffects[];
modifiers: {
fair_fight: number;
war: number;
retaliation: number;
group: number;
overseas: number;
chain: number;
warlord: number;
};
};
/** @category Models */
type AttackActionEnum = "attackerhosp" | "busy" | "critical hit" | "attackerjail" | "escapefail" | "hit" | "hosp" | "joinfight" | "leave" | "loot" | "lost" | "missed" | "mug" | "noAmmo" | "onItemUseEff" | "opponenthosp" | "opponentjail" | "paralyzed" | "reload" | "runaway" | "specialTemp" | "specialTempI" | "stalemate" | "startfight" | "stunned" | "suppressed" | "timeout" | "won";
/** @category Models */
type AttackCode = string;
/** @category Models */
type AttackFinishingHitEffect = "proficience" | "stricken" | "revitalize" | "warlord" | "plunder" | "irradiate";
/** @category Models */
type AttackId = number;
/** @category Models */
type AttackingFinishingHitEffects = {
name: AttackFinishingHitEffect;
value: number;
};
/** @category Models */
type AttackLog = {
text: string;
timestamp: number;
action: AttackActionEnum;
icon: string;
attacker: {
id: UserId;
name: string;
item: {
id?: ItemId;
name?: string;
} | null;
} | null;
defender: {
id: UserId;
name: string;
} | null;
attacker_item?: {
id: ItemId;
name: string;
};
};
/** @category Models */
type AttackLogResponse = {
attacklog: {
log: AttackLog[];
summary: AttackLogSummary[];
};
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type AttackLogSummary = {
id: UserId | null;
name: string | null;
hits: number;
misses: number;
damage: number;
};
/** @category Models */
type AttackPlayer = {
id: UserId;
name: string;
level: number;
faction: AttackPlayerFaction | null;
};
/** @category Models */
type AttackPlayerFaction = {
id: FactionId;
name: string;
};
/** @category Models */
type AttackPlayerSimplified = {
id: UserId;
faction_id: FactionId | null;
};
/** @category Models */
type AttackSimplified = {
id: AttackId;
code: AttackCode;
started: number;
ended: number;
attacker: AttackPlayerSimplified | null;
defender: AttackPlayerSimplified;
result: FactionAttackResult;
respect_gain: number;
respect_loss: number;
};
/** @category Models */
type BasicProperty = {
id: PropertyTypeId;
name: string;
};
/** @category Models */
type BasicUser = {
id: UserId;
name: string;
};
/** @category Models */
type Bazaar = {
id: UserId;
name: string;
is_open: boolean;
};
/** @category Models */
type BazaarAdvancedItemSales = Bazaar & {
advanced_item_sales: number;
};
/** @category Models */
type BazaarBargainSales = Bazaar & {
bargain_sales: number;
};
/** @category Models */
type BazaarBulkSales = Bazaar & {
bulk_sales: number;
};
/** @category Models */
type BazaarDollarSales = Bazaar & {
dollar_sales: number;
};
/** @category Models */
type BazaarRecentFavorites = Bazaar & {
recent_favorites: number;
};
/** @category Models */
type BazaarResponse = {
bazaar: BazaarWeekly | BazaarSpecialized;
};
/** @category Models */
type BazaarResponseSpecialized = {
bazaar: BazaarSpecialized;
};
/** @category Models */
type BazaarSpecialized = {
specialized: BazaarWeeklyCustomers[];
};
/** @category Models */
type BazaarTotalFavorites = Bazaar & {
total_favorites: number;
};
/** @category Models */
type BazaarWeekly = {
busiest: BazaarWeeklyCustomers[];
most_popular: BazaarTotalFavorites[];
trending: BazaarRecentFavorites[];
top_grossing: BazaarWeeklyIncome[];
bulk: BazaarBulkSales[];
advanced_item: BazaarAdvancedItemSales[];
bargain: BazaarBargainSales[];
dollar_sale: BazaarDollarSales[];
};
/** @category Models */
type BazaarWeeklyCustomers = Bazaar & {
weekly_customers: number;
};
/** @category Models */
type BazaarWeeklyIncome = Bazaar & {
weekly_income: number;
};
/** @category Models */
type Bounty = {
target_id: UserId;
target_name: string;
target_level: number;
lister_id: UserId | null;
lister_name: string | null;
reward: number;
reason: string | null;
quantity: number;
is_anonymous: boolean;
valid_until: number;
};
/** @category Models */
type ChainId = number;
/** @category Models */
type CompanyId = number;
/** @category Models */
type CompanyTypeId = number;
/** @category Models */
type CountryEnum = "Mexico" | "Hawaii" | "South Africa" | "Japan" | "China" | "Argentina" | "Switzerland" | "Canada" | "United Kingdom" | "UAE" | "Cayman Islands" | "Torn";
/** @category Models */
type DirtyBombId = number;
/** @category Models */
type EducationId = number;
/** @category Models */
type Faction = {
basic?: {
id?: number;
name?: string;
tag?: string;
tag_image?: string;
leader_id?: number;
co_leader_id?: number;
respect?: number;
days_old?: number;
capacity?: number;
members?: number;
is_enlisted?: boolean;
rank?: {
level?: number;
name?: string;
division?: number;
position?: number;
wins?: number;
};
best_chain?: number;
};
};
/** @category Models */
type FactionApplication = {
id: number;
user: {
id: UserId;
name: string;
level: number;
stats: {
strength: number;
speed: number;
dexterity: number;
defense: number;
} | null;
};
message: string | null;
valid_until: number;
status: FactionApplicationStatusEnum;
};
/** @category Models */
type FactionApplicationsResponse = {
applications: FactionApplication[];
};
/** @category Models */
type FactionApplicationStatusEnum = "accepted" | "declined" | "withdrawn" | "active";
/** @category Models */
type FactionAttackResult = "None" | "Attacked" | "Mugged" | "Hospitalized" | "Arrested" | "Looted" | "Lost" | "Stalemate" | "Assist" | "Escape" | "Timeout" | "Special" | "Bounty" | "Interrupted";
/** @category Models */
type FactionAttacksFullResponse = {
attacks: AttackSimplified[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionAttacksResponse = {
attacks: Attack[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionBalance = {
faction: {
money: number;
points: number;
scope: number;
};
members: {
id: UserId;
username: string;
money: number;
points: number;
}[];
};
/** @category Models */
type FactionBalanceResponse = {
balance: FactionBalance;
};
/** @category Models */
type FactionBasic = {
id: FactionId;
name: string;
tag: string;
tag_image: string;
leader_id: UserId;
co_leader_id: UserId;
respect: number;
days_old: number;
capacity: number;
members: number;
is_enlisted: boolean | null;
rank: FactionRank;
best_chain: number;
};
/** @category Models */
type FactionBasicResponse = {
basic: FactionBasic;
};
/** @category Models */
type FactionBranchDetails = {
name: string;
order: number;
multiplier: number;
upgrades: FactionUpgradeDetails[];
};
/** @category Models */
type FactionBranchId = number;
/** @category Models */
type FactionBranchStateEnum = "war" | "peace";
/** @category Models */
type FactionChain = {
id: ChainId;
chain: number;
respect: number;
start: number;
end: number;
};
/** @category Models */
type FactionChainReport = {
id: ChainId;
faction_id: FactionId;
start: number;
end: number;
details: FactionChainReportDetails;
bonuses: FactionChainReportBonus[];
attackers: FactionChainReportAttacker[];
non_attackers: UserId[];
};
/** @category Models */
type FactionChainReportAttacker = {
id: UserId;
respect: FactionChainReportAttackerRespect;
attacks: FactionChainReportAttackerAttacks;
};
/** @category Models */
type FactionChainReportAttackerAttacks = {
total: number;
leave: number;
mug: number;
hospitalize: number;
assists: number;
retaliations: number;
overseas: number;
draws: number;
escapes?: number;
losses: number;
war: number;
bonuses: number;
};
/** @category Models */
type FactionChainReportAttackerRespect = {
total: number;
average: number;
best: number;
};
/** @category Models */
type FactionChainReportBonus = {
attacker_id: UserId;
defender_id: UserId;
chain: number;
respect: number;
};
/** @category Models */
type FactionChainReportDetails = {
chain: number;
respect: number;
members: number;
targets: number;
war: number;
best: number;
leave: number;
mug: number;
hospitalize: number;
assists: number;
retaliations: number;
overseas: number;
draws: number;
escapes: number;
losses: number;
};
/** @category Models */
type FactionChainReportResponse = {
chainreport: FactionChainReport;
};
/** @category Models */
type FactionChainsResponse = {
chains: FactionChain[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionChainWarfare = FactionChain & {
faction: {
id: FactionId;
name: string;
};
};
/** @category Models */
type FactionContributor = {
id: UserId;
username: string;
value: number;
in_faction: boolean;
};
/** @category Models */
type FactionContributorsResponse = {
contributors: FactionContributor[];
};
/** @category Models */
type FactionCrime = {
id: FactionCrimeId;
previous_crime_id: FactionCrimeId | null;
name: OrganizedCrimeName;
difficulty: number;
status: FactionCrimeStatusEnum;
created_at: number;
planning_at: number | null;
ready_at: number | null;
expired_at: number;
executed_at: number | null;
slots: FactionCrimeSlot[];
rewards: FactionCrimeReward | null;
};
/** @category Models */
type FactionCrimeId = number;
/** @category Models */
type FactionCrimeItemOutcomeEnum = "lost" | "used";
/** @category Models */
type FactionCrimeResponse = {
crime: FactionCrime;
};
/** @category Models */
type FactionCrimeReward = {
money: number;
items: FactionCrimeRewardItem[];
respect: number;
scope: number;
payout: FactionCrimeRewardPayout | null;
};
/** @category Models */
type FactionCrimeRewardItem = {
id: ItemId;
quantity: number;
};
/** @category Models */
type FactionCrimeRewardPayout = {
type: FactionOrganizedCrimePayoutType;
percentage: number;
paid_by: UserId;
paid_at: number;
};
/** @category Models */
type FactionCrimeSlot = {
position: string;
position_id: TornOrganizedCrimePositionId;
position_number: number;
item_requirement: {
id: ItemId;
is_reusable: boolean;
is_available: boolean;
} | null;
user: FactionCrimeUser | null;
checkpoint_pass_rate: number;
};
/** @category Models */
type FactionCrimesResponse = {
crimes: FactionCrime[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionCrimeStatusEnum = "Recruiting" | "Planning" | "Successful" | "Failure" | "Expired";
/** @category Models */
type FactionCrimeUser = {
id: UserId;
outcome: FactionCrimeUserOutcome | null;
outcome_duration?: number | null;
item_outcome: FactionCrimeUserItemOutcome | null;
joined_at: number;
progress: number;
};
/** @category Models */
type FactionCrimeUserItemOutcome = {
owned_by: FactionCrimeUserItemOutcomeEnum;
item_id: ItemId;
item_uid: ItemUid;
outcome: FactionCrimeItemOutcomeEnum;
};
/** @category Models */
type FactionCrimeUserItemOutcomeEnum = "user" | "faction";
/** @category Models */
type FactionCrimeUserOutcome = "Successful" | "Failed" | "Jailed" | "Injured" | "Hospitalized";
/** @category Models */
type FactionHofResponse = {
hof: FactionHofStats;
};
/** @category Models */
type FactionHofStats = {
rank: HofValueString;
respect: HofValue;
chain: HofValue;
};
/** @category Models */
type FactionHofValues = {
chain: number | null;
chain_duration: number | null;
respect: number | null;
};
/** @category Models */
type FactionId = number;
/** @category Models */
type FactionLookupResponse = {
selections: FactionSelectionName[];
};
/**
* Details about a faction member.
* @category Models
*/
type FactionMember = {
id: UserId;
name: string;
position: string;
level: number;
days_in_faction: number;
is_revivable: boolean;
is_on_wall: boolean;
is_in_oc: boolean;
has_early_discharge: boolean;
last_action: UserLastAction;
status: UserStatus;
revive_setting: ReviveSetting;
};
/** @category Models */
type FactionMembersResponse = {
members: FactionMember[];
};
/** @category Models */
type FactionNews = {
id: string;
text: string;
timestamp: number;
};
/** @category Models */
type FactionNewsCategory = "main" | "attack" | "armoryDeposit" | "armoryAction" | "territoryWar" | "rankedWar" | "territoryGain" | "chain" | "crime" | "membership" | "depositFunds" | "giveFunds";
/** @category Models */
type FactionNewsResponse = {
news: FactionNews[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionOngoingChain = {
id: ChainId;
current: number;
max: number;
timeout: number;
modifier: number;
cooldown: number;
start: number;
end: number;
};
/** @category Models */
type FactionOngoingChainResponse = {
chain: FactionOngoingChain;
};
/** @category Models */
type FactionOrganizedCrimePayoutType = "balance" | "wallet" | "inventory";
/** @category Models */
type FactionPact = {
faction_id: FactionId;
faction_name: string;
until: string;
};
/** @category Models */
type FactionPosition = {
name: string;
is_default: boolean;
abilities: FactionPositionAbilityEnum[];
};
/** @category Models */
type FactionPositionAbilityEnum = "Medical Item Usage" | "Booster Item Usage" | "Drug Item Usage" | "Energy Refill Usage" | "Nerve Refill Usage" | "Temporary Item Loaning" | "Weapon & Armor Loaning" | "Item Retrieving" | "Organised Crimes" | "Faction API Access" | "Item Giving" | "Money Giving" | "Points Giving" | "Forum Management" | "Application Management" | "Kick Members" | "Balance Adjustment" | "War Management" | "Upgrade Management" | "Newsletter Sending" | "Announcement Changes" | "Description Changes";
/** @category Models */
type FactionPositionsResponse = {
positions: FactionPosition[];
};
/** @category Models */
type FactionRacketsResponse = {
rackets: TornRacket[];
};
/** @category Models */
type FactionRaidReport = {
id: RaidWarId;
start: number;
end: number;
aggressor: FactionRaidReportFaction;
defender: FactionRaidReportFaction;
};
/** @category Models */
type FactionRaidReportAttacker = {
user: FactionRaidReportUser;
attacks: number;
damage: number;
};
/** @category Models */
type FactionRaidReportFaction = {
id: FactionId;
name: string;
score: number;
attackers: FactionRaidReportAttacker[];
non_attackers: FactionRaidReportUser[];
};
/** @category Models */
type FactionRaidReportUser = {
id: UserId;
name: string;
};
/** @category Models */
type FactionRaidsResponse = {
raids: FactionRaidWarfare[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionRaidWar = {
war_id: number;
start: number;
end: number | null;
factions: FactionRaidWarParticipant[];
};
/** @category Models */
type FactionRaidWarfare = {
id: RaidWarId;
start: number;
end: number | null;
aggressor: FactionRaidWarfareFaction;
defender: FactionRaidWarfareFaction;
};
/**
* The field 'chain' exists only if the field 'end' is NOT populated in FactionRaidWarfare schema.
* @category Models
*/
type FactionRaidWarfareFaction = {
id: FactionId;
name: string;
score: number;
chain?: number;
};
/** @category Models */
type FactionRaidWarParticipant = {
id: FactionId;
name: string;
score: number;
chain: number;
is_aggressor: boolean;
};
/** @category Models */
type FactionRaidWarReportResponse = {
raidreport: FactionRaidReport[];
};
/** @category Models */
type FactionRank = {
level: number;
name: string;
division: number;
position: number;
wins: number;
};
/** @category Models */
type FactionRankedWar = {
war_id: number;
start: number;
end: number | null;
target: number;
winner: number | null;
factions: FactionRankedWarParticipant[];
};
/** @category Models */
type FactionRankedWarDetails = {
id: RankedWarId;
start: number;
end: number;
target: number;
winner: FactionId | null;
factions: {
id: FactionId;
name: string;
score: number;
chain: number;
}[];
};
/** @category Models */
type FactionRankedWarParticipant = {
id: FactionId;
name: string;
score: number;
chain: number;
};
/** @category Models */
type FactionRankedWarReportResponse = {
rankedwarreport: {
id: RankedWarId;
start: number;
end: number;
winner: FactionId;
forfeit: boolean;
factions: {
id: FactionId;
name: string;
score: number;
attacks: number;
rank: {
before: string;
after: string;
};
rewards: {
respect: number;
points: number;
items: {
id: ItemId;
name: string;
quantity: number;
}[];
};
members: {
id: UserId;
name: string;
level: number;
attacks: number;
score: number;
}[];
}[];
};
};
/** @category Models */
type FactionRankedWarResponse = {
rankedwars: FactionRankedWarDetails[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionRankedWarsCategoryEnum = "all" | "ongoing";
/** @category Models */
type FactionRankEnum = "Unranked" | "Bronze" | "Silver" | "Gold" | "Platinum" | "Diamond";
/** @category Models */
type FactionResponse = FactionHofResponse | FactionMembersResponse | FactionBasicResponse | FactionWarsResponse | FactionNewsResponse | RevivesResponse | FactionTerritoryWarsHistoryResponse | FactionAttacksResponse | FactionBalanceResponse | FactionRaidWarReportResponse | FactionTerritoriesOwnershipResponse | FactionPositionsResponse | RevivesFullResponse | FactionAttacksFullResponse | FactionApplicationsResponse | FactionOngoingChainResponse | FactionChainsResponse | FactionChainReportResponse | FactionCrimesResponse | FactionCrimeResponse | FactionRaidsResponse | FactionWarfareResponse | FactionRankedWarReportResponse | FactionTerritoryWarReportResponse | FactionTerritoriesResponse | FactionUpgradesResponse | FactionStatsResponse | FactionContributorsResponse | FactionRacketsResponse | FactionRankedWarResponse | FactionLookupResponse | TimestampResponse;
/** @category Models */
type FactionSearch = {
id: FactionId;
name: string;
respect: number;
members: number;
leader: FactionSearchLeader;
co_leader: FactionSearchLeader | null;
image: string | null;
tag_image: string | null;
tag: string | null;
is_destroyed: boolean;
is_recruiting: boolean;
};
/** @category Models */
type FactionSearchLeader = {
id: UserId;
name: string;
};
/** @category Models */
type FactionSearchResponse = {
search: FactionSearch[];
_metadata: RequestMetadataWithLinks;
};
/** @category Models */
type FactionSelectionName = "applications" | "attacks" | "attacksfull" | "balance" | "basic" | "chain" | "chainreport" | "chains" | "contributors" | "crime" | "crimes" | "hof" | "lookup" | "members" | "news" | "positions" | "rackets" | "raidreport" | "raids" | "rankedwars" | "rankedwarreport" | "reports" | "revives" | "revivesfull" | "search" | "stats" | "territory" | "territoryownership" | "territorywarreport" | "territorywars" | "timestamp" | "upgrades" | "warfare" | "wars" | "armor" | "boosters" | "caches" | "cesium" | "crimeexp" | "drugs" | "medical" | "temporary" | "weapons" | string;
/** @category Models */
type FactionStat = {
name: FactionStatEnum;
value: number;
};
/** @category Models */
type FactionStatEnum = "medicalitemsused" | "criminaloffences" | "organisedcrimerespect" | "organisedcrimemoney" | "organisedcrimesuccess" | "organisedcrimefail" | "attackswon" | "attackslost" | "attackschain" | "attacksleave" | "attacksmug" | "attackshosp" | "bestchain" | "busts" | "revives" | "jails" | "hosps" | "medicalitemrecovery" | "medicalcooldownused" | "gymtrains" | "gymstrength" | "gymspeed" | "gymenergy" | "gymdefense" | "gymdexterity" | "candyused" | "alcoholused" | "energydrinkused" | "drugsused" | "drugoverdoses" | "rehabs" | "caymaninterest" | "traveltimes" | "traveltime" | "hunting" | "attacksdamagehits" | "attacksdamage" | "hosptimegiven" | "hosptimereceived" | "attacksdamaging" | "attacksrunaway" | "highestterritories" | "territoryrespect" | "membersamount" | "factionage" | "upgradesamount";
/** @category Models */
type FactionStatsResponse = {
stats: FactionStat[];
};
/** @category Models */
type FactionTerritoriesOwnershipResponse = {
territoryOwnership: FactionTerritoryOwnership[];
};
/** @category Models */
type FactionTerritoriesResponse = {
territory: FactionTerritory[];
};
/** @category Models */
type FactionTerritory = {
id: FactionTerritoryEnum;
acquired_at: number;
sector: number;
size: number;
density: number;
slots: number;
respect: number;
coordinates: TornTerritoryCoordinates;
racket: TornRacket | null;
};
/** @category Models */
type FactionTerritoryEnum = "AAB" | "AAC" | "AAD" | "AAE" | "AAF" | "AAG" | "ABA" | "ABB" | "ABC" | "ABD" | "ABE" | "ABF" | "ACA" | "ACB" | "ACC" | "ACD" | "ACE" | "ACF" | "ACG" | "ADA" | "ADB" | "ADC" | "ADD" | "ADE" | "ADF" | "ADG" | "AEA" | "AEB" | "AEC" | "AED" | "AEE" | "AEF" | "AFA" | "AFB" | "AFC" | "AFD" | "AFE" | "AFF" | "AFG" | "AGA" | "AGB" | "AGC" | "AGD" | "AGE" | "AGF" | "AGG" | "AHA" | "AHB" | "AHC" | "AHD" | "AHE" | "AHF" | "AIA" | "AIB" | "AIC" | "AID" | "AIE" | "AIF" | "AJA" | "AJB" | "AJC" | "AJD" | "AJE" | "AJF" | "AKA" | "AKB" | "AKC" | "AKD" | "AKE" | "AKF" | "ALA" | "ALB" | "ALC" | "ALD" | "ALE" | "ALF" | "AMA" | "AMB" | "AMC" | "AMD" | "AME" | "AMF" | "ANB" | "ANC" | "AND" | "ANE" | "ANF" | "ANG" | "AOB" | "AOC" | "AOD" | "AOE" | "AOF" | "AOG" | "APB" | "APC" | "APD" | "APE" | "APF" | "APG" | "AQB" | "AQC" | "AQD" | "AQE" | "AQF" | "AQG" | "ARB" | "ARC" | "ARD" | "ARE" | "ARF" | "ASB" | "ASC" | "ASD" | "ASE" | "ASF" | "ASG" | "ATB" | "ATC" | "ATD" | "ATE" | "ATF" | "ATG" | "AUB" | "AUC" | "AUD" | "AUE" | "AUF" | "AUG" | "AVB" | "AVC" | "AVD" | "AVE" | "AVF" | "AVG" | "AWB" | "AWC" | "AWD" | "AWE" | "AWF" | "AWG" | "AXB" | "AXC" | "AXD" | "AXE" | "AXF" | "AXG" | "AYB" | "AYC" | "AYD" | "AYE" | "AYF" | "AYG" | "AZB" | "AZC" | "AZD" | "AZE" | "AZF" | "AZG" | "BAA" | "BAB" | "BAC" | "BAD" | "BAE" | "BAF" | "BAG" | "BBA" | "BBB" | "BBC" | "BBD" | "BBE" | "BBF" | "BBG" | "BCA" | "BCB" | "BCC" | "BCD" | "BCE" | "BCF" | "BCG" | "BDA" | "BDB" | "BDC" | "BDD" | "BDE" | "BDF" | "BDG" | "BEA" | "BEB" | "BEC" | "BED" | "BEE" | "BEF" | "BFA" | "BFB" | "BFC" | "BFD" | "BFE" | "BFF" | "BFG" | "BGA" | "BGB" | "BGC" | "BGD" | "BGE" | "BGF" | "BGG" | "BHA" | "BHB" | "BHC" | "BHD" | "BHE" | "BHF" | "BIA" | "BIB" | "BIC" | "BID" | "BIE" | "BIF" | "BJA" | "BJB" | "BJC" | "BJD" | "BJE" | "BJF" | "BKA" | "BKB" | "BKC" | "BKD" | "BKE" | "BKF" | "BLA" | "BLB" | "BLC" | "BLD" | "BLE" | "BLF" | "BMA" | "BMB" | "BMC" | "BMD" | "BME" | "BMF" | "BNB" | "BNC" | "BND" | "BNE" | "BNF" | "BNG" | "BOB" | "BOC" | "BOD" | "BOE" | "BOF" | "BPB" | "BPC" | "BPD" | "BPE" | "BPF" | "BPG" | "BQB" | "BQC" | "BQD" | "BQF" | "BQG" | "BRB" | "BRC" | "BRD" | "BRE" | "BRF" | "BRG" | "BSB" | "BSC" | "BSD" | "BSE" | "BSF" | "BTB" | "BTC" | "BTD" | "BTE" | "BTF" | "BTG" | "BUB" | "BUC" | "BUD" | "BUE" | "BUF" | "BUG" | "BVB" | "BVC" | "BVD" | "BVE" | "BVF" | "BVG" | "BWB" | "BWC" | "BWD" | "BWE" | "BWF" | "BWG" | "BXB" | "BXC" | "BXD" | "BXE" | "BXF" | "BXG" | "BYB" | "BYC" | "BYD" | "BYE" | "BYF" | "BYG" | "BZB" | "BZC" | "BZD" | "BZE" | "BZF" | "BZG" | "CAA" | "CAB" | "CAC" | "CAD" | "CAE" | "CAF" | "CAG" | "CBA" | "CBB" | "CBC" | "CBD" | "CBE" | "CBF" | "CBG" | "CCA" | "CCB" | "CCC" | "CCD" | "CCE" | "CCF" | "CCG" | "CDA" | "CDB" | "CDC" | "CDD" | "CDE" | "CDF" | "CDG" | "CEA" | "CEB" | "CEC" | "CED" | "CEE" | "CEF" | "CFA" | "CFB" | "CFC" | "CFD" | "CFE" | "CFG" | "CGA" | "CGB" | "CGC" | "CGD" | "CGE" | "CGF" | "CGG" | "CHA" | "CHB" | "CHC" | "CHD" | "CHE" | "CHF" | "CIA" | "CIB" | "CIC" | "CID" | "CIE" | "CIF" | "CJA" | "CJB" | "CJC" | "CJD" | "CJE" | "CJF" | "CKA" | "CKB" | "CKC" | "CKD" | "CKE" | "CKF" | "CLA" | "CLB" | "CLC" | "CLD" | "CLE" | "CLF" | "CMA" | "CMB" | "CMC" | "CMD" | "CME" | "CMF" | "CNB" | "CNC" | "CND" | "CNE" | "CNF" | "CNG" | "COB" | "COC" | "COD" | "COE" | "COF" | "COG" | "CPB" | "CPC" | "CPD" | "CPE" | "CPF" | "CPG" | "CQB" | "CQC" | "CQD" | "CQF" | "CQG" | "CRB" | "CRC" | "CRD" | "CRE" | "CRF" | "CRG" | "CSB" | "CSC" | "CSD" | "CSE" | "CSF" | "CSG" | "CTB" | "CTC" | "CTD" | "CTE" | "CTF" | "CTG" | "CUB" | "CUC" | "CUD" | "CUE" | "CUF" | "CUG" | "CVB" | "CVC" | "CVD" | "CVE" | "CVF" | "CVG" | "CWB" | "CWC" | "CWD" | "CWE" | "CWF" | "CWG" | "CXB" | "CXC" | "CXD" | "CXE" | "CXF" | "CXG" | "CYB" | "CYC" | "CYD" | "CYE" | "CYF" | "CZB" | "CZC" | "CZD" | "CZE" | "CZF" | "CZG" | "DAA" | "DAB" | "DAC" | "DAD" | "DAE" | "DAF" | "DAG" | "DBA" | "DBB" | "DBC" | "DBD" | "DBE" | "DBF" | "DBG" | "DCA" | "DCB" | "DCC" | "DCD" | "DCE" | "DCF" | "DCG" | "DDA" | "DDB" | "DDC" | "DDD" | "DDE" | "DDF" | "DDG" | "DEA" | "DEB" | "DEC" | "DED" | "DEE" | "DEF" | "DFA" | "DFB" | "DFC" | "DFD" | "DFE" | "DFF" | "DFG" | "DGA" | "DGB" | "DGC" | "DGD" | "DGE" | "DGF" | "DGG" | "DHA" | "DHB" | "DHC" | "DHD" | "DHE" | "DHF" | "DIA" | "DIB" | "DIC" | "DID" | "DIE" | "DIF" | "DJA" | "DJB" | "DJC" | "DJD" | "DJE" | "DKA" | "DKB" | "DKC" | "DKD" | "DKE" | "DKF" | "DLA" | "DLB" | "DLC" | "DLD" | "DLE" | "DLF" | "DMA" | "DMB" | "DMC" | "DMD" | "DME" | "DMF" | "DNB" | "DNC" | "DND" | "DNE" | "DNF" | "DNG" | "DOB" | "DOC" | "DOD" | "DOE" | "DOF" | "DOG" | "DPB" | "DPC" | "DPD" | "DPE" | "DPF" | "DPG" | "DQB" | "DQC" | "DQD" | "DQF" | "DQG" | "DRB" | "DRC" | "DRD" | "DRE" | "DRF" | "DRG" | "DSB" | "DSC" | "DSD" | "DSE" | "DSF" | "DSG" | "DTB" | "DTC" | "DTD" | "DTE" | "DTF" | "DTG" | "DUB" | "DUC" | "DUD" | "DUE" | "DUF" | "DUG" | "DVB" | "DVC" | "DVD" | "DVE" | "DVF" | "DVG" | "DWB" | "DWC" | "DWD" | "DWE" | "DWF" | "DWG" | "DXB" | "DXC" | "DXD" | "DXE" | "DXF" | "DXG" | "DYB" | "DYC" | "DYD" | "DYE" | "DYF" | "DYG" | "DZB" | "DZC" | "DZD" | "DZE" | "DZF" | "DZG" | "EAA" | "EAB" | "EAC" | "EAD" | "EAE" | "EAF" | "EAG" | "EBA" | "EBB" | "EBC" | "EBD" | "EBE" | "EBF" | "EBG" | "ECA" | "ECB" | "ECC" | "ECD" | "ECE" | "ECF" | "ECG" | "EDA" | "EDB" | "EDC" | "EDD" | "EDE" | "EDF" | "EDG" | "EEA" | "EEB" | "EEC" | "EED" | "EEE" | "EEF" | "EFA" | "EFB" | "EFC" | "EFD" | "EFE" | "EFF" | "EFG" | "EGA" | "EGB" | "EGC" | "EGD" | "EGE" | "EGF" | "EHA" | "EHB" | "EHC" | "EHD" | "EHE" | "EHF" | "EIA" | "EIB" | "EIC" | "EID" | "EIE" | "EIF" | "EJA" | "EJB" | "EJC" | "EJD" | "EJE" | "EKA" | "EKB" | "EKC" | "EKD" | "EKE" | "EKF" | "ELA" | "ELB" | "ELC" | "ELD" | "ELE" | "ELF" | "EMA" | "EMB" | "EMC" | "EMD" | "EME" | "EMF" | "ENB" | "ENC" | "END" | "ENE" | "ENF" | "ENG" | "EOB" | "EOC" | "EOD" | "EOE" | "EOF" | "EPB" | "EPC" | "EPD" | "EPE" | "EPF" | "EPG" | "EQB" | "EQC" | "EQD" | "EQF" | "EQG" | "ERB" | "ERC" | "ERD" | "ERE" | "ERF" | "ERG" | "ESB" | "ESC" | "ESD" | "ESE" | "ESF" | "ESG" | "ETB" | "ETC" | "ETD" | "ETE" | "ETF" | "ETG" | "EUB" | "EUC" | "EUD" | "EUE" | "EUF" | "EUG" | "EVB" | "EVC" | "EVD" | "EVE" | "EVF" | "EVG" | "EWB" | "EWC" | "EWD" | "EWE" | "EWF" | "EWG" | "EXB" | "EXC" | "EXD" | "EXE" | "EXF" | "EXG" | "EYB" | "EYC" | "EYD" | "EYE" | "EYF" | "EYG" | "EZB" | "EZC" | "EZD" | "EZE" | "EZF" | "EZG" | "FAA" | "FAB" | "FAC" | "FAD" | "FAE" | "FAF" | "FAG" | "FBA" | "FBB" | "FBC" | "FBD" | "FBF" | "FBG" | "FCA" | "FCB" | "FCC" | "FCD" | "FCE" | "FCF" | "FCG" | "FDA" | "FDB" | "FDC" | "FDD" | "FDE" | "FDF" | "FDG" | "FEA" | "FEB" | "FEC" | "FED" | "FEE" | "FEF" | "FFA" | "FFB" | "FFC" | "FFD" | "FFE" | "FFF" | "FFG" | "FGA" | "FGB" | "FGC" | "FGD" | "FGE" | "FGF" | "FGG" | "FHA" | "FHB" | "FHC" | "FHD" | "FHE" | "FHF" | "FIA" | "FIB" | "FIC" | "FID" | "FIE" | "FIF" | "FJA" | "FJB" | "FJC" | "FJD" | "FJE" | "FJF" | "FKA" | "FKB" | "FKC" | "FKD" | "FKE" | "FKF" | "FLA" | "FLB" | "FLC" | "FLD" | "FLE" | "FLF" | "FMA" | "FMC" | "FMD" | "FME" | "FMF" | "FNB" | "FNC" | "FND" | "FNE" | "FNF" | "FNG" | "FOB" | "FOC" | "FOD" | "FOE" | "FOF" | "FPB" | "FPC" | "FPD" | "FPE" | "FPF" | "FPG" | "FQB" | "FQC" | "FQD" | "FQF" | "FQG" | "FRB" | "FRC" | "FRD" | "FRE" | "FRF" | "FRG" | "FSB" | "FSC" | "FSD" | "FSE" | "FSF" | "FSG" | "FTB" | "FTC" | "FTD" | "FTE" | "FTF" | "FTG" | "FUB" | "FUC" | "FUD" | "FUE" | "FUF" | "FUG" | "FVB" | "FVC" | "FVD" | "FVE" | "FVF" | "FVG" | "FWB" | "FWC" | "FWD" | "FWE" | "FWF" | "FWG" | "FXB" | "FXC" | "FXD" | "FXE" | "FXF" | "FXG" | "FYB" | "FYC" | "FYD" | "FYE" | "FYF" | "FYG" | "FZB" | "FZC" | "FZD" | "FZE" | "FZF" | "FZG" | "GAA" | "GAB" | "GAC" | "GAD" | "GAE" | "GAF" | "GAG" | "GBA" | "GBB" | "GBC" | "GBD" | "GBE" | "GBF" | "GCA" | "GCB" | "GCC" | "GCD" | "GCE" | "GCF" | "GCG" | "GDA" | "GDB" | "GDC" | "GDD" | "GDE" | "GDF" | "GDG" | "GEA" | "GEB" | "GEC" | "GED" | "GEE" | "GEF" | "GFA" | "GFB" | "GFC" | "GFD" | "GFE" | "GFF" | "GFG" | "GGA" | "GGB" | "GGC" | "GGD" | "GGE" | "GGF" | "GHA" | "GHB" | "GHC" | "GHD" | "GHE" | "GHF" | "GIA" | "GIB" | "GIC" | "GID" | "GIE" | "GJA" | "GJB" | "GJC" | "GJD" | "GJE" | "GJF" | "GKA" | "GKB" | "GKC" | "GKD" | "GKE" | "GKF" | "GLA" | "GLB" | "GLC" | "GLD" | "GLE" | "GLF" | "GMA" | "GMC" | "GMD" | "GME" | "GMF" | "GNB" | "GNC" | "GND" | "GNE" | "GNF" | "GNG" | "GOB" | "GOC" | "GOD" | "GOE" | "GOF" | "GPB" | "GPC" | "GPD" | "GPE" | "GPF" | "GPG" | "GQC" | "GQD" | "GQF" | "GQG" | "GRB" | "GRC" | "GRD" | "GRE" | "GRF" | "GRG" | "GSB" | "GSC" | "GSD" | "GSE" | "GSF" | "GSG" | "GTB" | "GTC" | "GTD" | "GTE" | "GTF" | "GTG" | "GUB" | "GUC" | "GUD" | "GUF" | "GUG" | "GVB" | "GVC" | "GVD" | "GVE" | "GVF" | "GVG" | "GWB" | "GWC" | "GWD" | "GWE" | "GWF" | "GWG" | "GXB" | "GXC" | "GXD" | "GXE" | "GXF" | "GXG" | "GYB" | "GYC" | "GYD" | "GYE" | "GYF" | "GYG" | "GZB" | "GZC" | "GZD" | "GZE" | "GZF" | "GZG" | "HAA" | "HAB" | "HAC" | "HAD" | "HAE" | "HAF" | "HAG" | "HBA" | "HBB" | "HBC" | "HBD" | "HBE" | "HBF" | "HCA" | "HCB" | "HCC" | "HCD" | "HCE" | "HCF" | "HCG" | "HDA" | "HDB" | "HDC" | "HDD" | "HDE" | "HDF" | "HDG" | "HEA" | "HEB" | "HEC" | "HED" | "HEE" | "HEF" | "HFA" | "HFB" | "HFC" | "HFD" | "HFE" | "HFF" | "HGA" | "HGB" | "HGC" | "HGD" | "HGE" | "HGF" | "HHA" | "HHB" | "HHC" | "HHD" | "HHE" | "HHF" | "HIA" | "HIB" | "HIC" | "HID" | "HIE" | "HJA" | "HJB" | "HJC" | "HJD" | "HJE" | "HJF" | "HKA" | "HKB" | "HKC" | "HKD" | "HKE" | "HKF" | "HLA" | "HLB" | "HLC" | "HLD" | "HLE" | "HLF" | "HMA" | "HMC" | "HMD" | "HME" | "HMF" | "HNB" | "HNC" | "HND" | "HNE" | "HNF" | "HNG" | "HOB" | "HOC" | "HOD" | "HOE" | "HOF" | "HPB" | "HPC" | "HPD" | "HPE" | "HPF" | "HPG" | "HQB" | "HQC" | "HQD" | "HQF" | "HQG" | "HRB" | "HRC" | "HRD" | "HRE" | "HRF" | "HRG" | "HSB" | "HSC" | "HSD" | "HSE" | "HSF" | "HSG" | "HTB" | "HTC" | "HTD" | "HTE" | "HTF" | "HTG" | "HUB" | "HUC" | "HUD" | "HUE" | "HUF" | "HUG" | "HVB" | "HVC" | "HVD" | "HVE" | "HVF" | "HVG" | "HWB" | "HWC" | "HWD" | "HWE" | "HWF" | "HWG" | "HXB" | "HXC" | "HXD" | "HXE" | "HXF" | "HXG" | "HYB" | "HYC" | "HYD" | "HYE" | "HYF" | "HYG" | "HZB" | "HZC" | "HZD" | "HZE" | "HZF" | "HZG" | "IAA" | "IAB" | "IAC" | "IAD" | "IAE" | "IAF" | "IAG" | "IBA" | "IBB" | "IBC" | "IBD" | "IBE" | "IBF" | "ICA" | "ICB" | "ICC" | "ICD" | "ICE" | "ICF" | "ICG" | "IDA" | "IDB" | "IDC" | "IDD" | "IDE" | "IDF" | "IDG" | "IEA" | "IEB" | "IEC" | "IED" | "IEE" | "IEF" | "IFA" | "IFB" | "IFC" | "IFD" | "IFE" | "IFF" | "IFG" | "IGA" | "IGB" | "IGC" | "IGD" | "IGE" | "IGF" | "IGG" | "IHA" | "IHB" | "IHC" | "IHD" | "IHE" | "IHF" | "IIA" | "IIB" | "IIC" | "IID" | "IIE" | "IJA" | "IJB" | "IJC" | "IJD" | "IJE" | "IJF" | "IKA" | "IKB" | "IKC" | "IKD" | "IKE" | "IKF" | "ILA" | "ILB" | "ILC" | "ILD" | "ILE" | "ILF" | "IMA" | "IMB" | "IMC" | "IMD" | "IME" | "IMF" | "INB" | "INC" | "IND" | "INE" | "INF" | "ING" | "IOB" | "IOC" | "IOD" | "IOE" | "IOF" | "IPB" | "IPC" | "IPD" | "IPE" | "IPF" | "IPG" | "IQB" | "IQC" | "IQD" | "IQF" | "IQG" | "IRB" | "IRC" | "IRD" | "IRE" | "IRF" | "IRG" | "ISB" | "ISC" | "ISD" | "ISE" | "ISF" | "ISG" | "ITB" | "ITC" | "ITD" | "ITE" | "ITF" | "ITG" | "IUB" | "IUC" | "IUD" | "IUE" | "IUF" | "IUG" | "IVB" | "IVC" | "IVD" | "IVE" | "IVF" | "IVG" | "IWB" | "IWC" | "IWD" | "IWE" | "IWF" | "IWG" | "IXB" | "IXC" | "IXD" | "IXE" | "IXF" | "IXG" | "IYB" | "IYC" | "IYD" | "IYE" | "IYF" | "IYG" | "IZB" | "IZC" | "IZD" | "IZE" | "IZF" | "IZG" | "JAA" | "JAB" | "JAC" | "JAD" | "JAE" | "JAF" | "JAG" | "JBA" | "JBB" | "JBC" | "JBD" | "JBE" | "JBF" | "JCA" | "JCB" | "JCC" | "JCD" | "JCE" | "JCF" | "JCG" | "JDA" | "JDB" | "JDC" | "JDD" | "JDE" | "JDF" | "JDG" | "JEA" | "JEB" | "JEC" | "JED" | "JEE" | "JEF" | "JFA" | "JFB" | "JFC" | "JFD" | "JFE" | "JFF" | "JFG" | "JGA" | "JGB" | "JGC" | "JGD" | "JGE" | "JGF" | "JHA" | "JHB" | "JHC" | "JHD" | "JHE" | "JHF" | "JIA" | "JIB" | "JIC" | "JID" | "JIE" | "JIF" | "JJA" | "JJB" | "JJC" | "JJD" | "JJE" | "JJF" | "JKA" | "JKB" | "JKC" | "JKD" | "JKE" | "JKF" | "JLA" | "JLB" | "JLC" | "JLD" | "JLE" | "JLF" | "JMA" | "JMC" | "JMD" | "JME" | "JMF" | "JNB" | "JNC" | "JND" | "JNE" | "JNF" | "JNG" | "JOB" | "JOC" | "JOD" | "JOE" | "JOF" | "JPB" | "JPC" | "JPD" | "JPE" | "JPF" | "JPG" | "JQB" | "JQC" | "JQD" | "JQF" | "JQG" | "JRB" | "JRC" | "JRD" | "JRE" | "JRF" | "JRG" | "JSB" | "JSC" | "JSD" | "JSE" | "JSF" | "JSG" | "JTB" | "JTC" | "JTD" | "JTE" | "JTF" | "JTG" | "JUB" | "JUC" | "JUD" | "JUE" | "JUF" | "JUG" | "JVB" | "JVC" | "JVD" | "JVE" | "JVF" | "JVG" | "JWB" | "JWC" | "JWD" | "JWE" | "JWF" | "JWG" | "JXB" | "JXC" | "JXD" | "JXE" | "JXF" | "JXG" | "JYB" | "JYC" | "JYD" | "JYE" | "JYF" | "JYG" | "JZB" | "JZC" | "JZD" | "JZE" | "JZF" | "JZG" | "KAA" | "KAB" | "KAC" | "KAD" | "KAE" | "KAF" | "KAG" | "KBA" | "KBB" | "KBC" | "KBD" | "KBE" | "KBF" | "KBG" | "KCA" | "KCB" | "KCC" | "KCD" | "KCE" | "KCF" | "KCG" | "KDA" | "KDB" | "KDC" | "KDD" | "KDE" | "KEA" | "KEB" | "KEC" | "KED" | "KEE" | "KEF" | "KFA" | "KFB" | "KFC" | "KFD" | "KFE" | "KFF" | "KFG" | "KGA" | "KGB" | "KGC" | "KGD" | "KGE" | "KGF" | "KGG" | "KHA" | "KHB" | "KHC" | "KHD" | "KHE" | "KHF" | "KIA" | "KIB" | "KIC" | "KID" | "KIE" | "KIF" | "KJA" | "KJB" | "KJC" | "KJD" | "KJE" | "KJF" | "KKA" | "KKB" | "KKC" | "KKD" | "KKE" | "KKF" | "KLA" | "KLB" | "KLC" | "KLD" | "KLE" | "KLF" | "KMA" | "KMC" | "KMD" | "KME" | "KMF" | "KNB" | "KNC" | "KND" | "KNE" | "KNF" | "KNG" | "KOB" | "KOC" | "KOD" | "KOE" | "KOF" | "KPB" | "KPC" | "KPD" | "KPE" | "KPF" | "KPG" | "KQB" | "KQC" | "KQD" | "KQE" | "KQF" | "KQG" | "KRB" | "KRC" | "KRD" | "KRE" | "KRF" | "KRG" | "KSB" | "KSC" | "KSD" | "KSE" | "KSF" | "KSG" | "KTB" | "KTC" | "KTD" | "KTE" | "KTF" | "KTG" | "KUB" | "KUC" | "KUD" | "KUE" | "KUF" | "KUG" | "KVB" | "KVC" | "KVD" | "KVE" | "KVF" | "KVG" | "KWB" | "KWC" | "KWD" | "KWE" | "KWF" | "KWG" | "KXB" | "KXC" | "KXD" | "KXE" | "KXF" | "KXG" | "KYB" | "KYC" | "KYD" | "KYE" | "KYF" | "KYG" | "KZB" | "KZC" | "KZD" | "KZE" | "KZF" | "KZG" | "LAA" | "LAB" | "LAC" | "LAD" | "LAE" | "LAF" | "LAG" | "LBA" | "LBB" | "LBC" | "LBD" | "LBE" | "LBF" | "LBG" | "LCA" | "LCB" | "LCC" | "LCD" | "LCE" | "LCF" | "LCG" | "LDA" | "LDB" | "LDC" | "LDD" | "LDE" | "LDF" | "LEA" | "LEB" | "LEC" | "LED" | "LEE" | "LEF" | "LFA" | "LFB" | "LFC" | "LFD" | "LFE" | "LFF" | "LFG" | "LGA" | "LGB" | "LGC" | "LGD" | "LGE" | "LGF" | "LGG" | "LHA" | "LHB" | "LHC" | "LHD" | "LHE" | "LHF" | "LIA" | "LIB" | "LIC" | "LID" | "LIE" | "LIF" | "LJA" | "LJB" | "LJC" | "LJD" | "LJE" | "LJF" | "LKA" | "LKB" | "LKC" | "LKD" | "LKE" | "LKF" | "LLA" | "LLB" | "LLC" | "LLD" | "LLE" | "LLF" | "LMA" | "LMC" | "LMD" | "LME" | "LMF" | "LNB" | "LNC" | "LND" | "LNE" | "LNF" | "LNG" | "LOB" | "LOC" | "LOD" | "LOE" | "LOF" | "LPB" | "LPC" | "LPD" | "LPE" | "LPF" | "LPG" | "LQB" | "LQC" | "LQD" | "LQE" | "LQF" | "LQG" | "LRB" | "LRC" | "LRD" | "LRE" | "LRF" | "LRG" | "LSB" | "LSC" | "LSD" | "LSE" | "LSF" | "LSG" | "LTB" | "LTC" | "LTD" | "LTE" | "LTF" | "LTG" | "LUB" | "LUC" | "LUD" | "LUE" | "LUF" | "LUG" | "LVB" | "LVC" | "LVD" | "LVE" | "LVF" | "LVG" | "LWB" | "LWC" | "LWD" | "LWE" | "LWF" | "LWG" | "LXB" | "LXC" | "LXD" | "LXE" | "LXF" | "LXG" | "LYB" | "LYC" | "LYD" | "LYE" | "LYF" | "LYG" | "LZB" | "LZC" | "LZD" | "LZE" | "LZF" | "LZG" | "MAA" | "MAB" | "MAC" | "MAD" | "MAE" | "MAF" | "MAG" | "MBA" | "MBB" | "MBC" | "MBD" | "MBE" | "MBF" | "MBG" | "MCA" | "MCB" | "MCC" | "MCD" | "MCE" | "MCF" | "MCG" | "MDA" | "MDB" | "MDC" | "MDD" | "MDE" | "MDF" | "MDG" | "MEA" | "MEB" | "MEC" | "MED" | "MEE" | "MEF" | "MEG" | "MFA" | "MFB" | "MFC" | "MFD" | "MFE" | "MFF" | "MFG" | "MGA" | "MGB" | "MGC" | "MGD" | "MGE" | "MGF" | "MGG" | "MHA" | "MHB" | "MHC" | "MHD" | "MHE" | "MHF" | "MIA" | "MIB" | "MIC" | "MID" | "MIE" | "MIF" | "MJA" | "MJB" | "MJC" | "MJD" | "MJE" | "MKA" | "MKB" | "MKC" | "MKD" | "MKE" | "MKF" | "MLA" | "MLB" | "MLC" | "MLD" | "MLE" | "MLF" | "MMA" | "MMC" | "MMD" | "MME" | "MMF" | "MNB" | "MNC" | "MND" | "MNE" | "MNF" | "MNG" | "MOB" | "MOC" | "MOD" | "MOE" | "MOF" | "MPB" | "MPC" | "MPD" | "MPE" | "MPF" | "MPG" | "MQB" | "MQC" | "MQD" | "MQE" | "MQF" | "MQG" | "MRB" | "MRC" | "MRD" | "MRE" | "MRF" | "MRG" | "MSB" | "MSC" | "MSD" | "MSE" | "MSF" | "MSG" | "MTB" | "MTC" | "MTD" | "MTE" | "MTF" | "MTG" | "MUB" | "MUC" | "MUD" | "MUE" | "MUF" | "MUG" | "MVB" | "MVC" | "MVD" | "MVE" | "MVF" | "MVG" | "MWB" | "MWC" | "MWD" | "MWE" | "MWF" | "MWG" | "MXB" | "MXC" | "MXD" | "MXE" | "MXF" | "MXG" | "MYB" | "MYC" | "MYD" | "MYE" | "MYF" | "MYG" | "MZB" | "MZC" | "MZD" | "MZE" | "MZF" | "MZG" | "NAB" | "NAC" | "NAD" | "NAE" | "NAF" | "NAG" | "NBA" | "NBB" | "NBC" | "NBD" | "NBE" | "NBF" | "NBG" | "NCA" | "NCB" | "NCC" | "NCD" | "NCE" | "NCF" | "NCG" | "NDA" | "NDB" | "NDC" | "NDD" | "NDE" | "NDF" | "NDG" | "NEA" | "NEB" | "NEC" | "NED" | "NEE" | "NEF" | "NEG" | "NFA" | "NFB" | "NFC" | "NFD" | "NFE" | "NFF" | "NFG" | "NGA" | "NGB" | "NGC" | "NGD" | "NGE" | "NGF" | "NGG" | "NHA" | "NHB" | "NHC" | "NHD" | "NHE" | "NHF" | "NIA" | "NIB" | "NIC" | "NID" | "NIE" | "NIF" | "NJA" | "NJB" | "NJC" | "NJD" | "NJE" | "NJF" | "NKA" | "NKB" | "NKC" | "NKD" | "NKE" | "NKF" | "NLA" | "NLB" | "NLC" | "NLD" | "NLE" | "NLF" | "NMA" | "NMB" | "NMC" | "NMD" | "NME" | "NMF" | "NNB" | "NND" | "NNE" | "NNF" | "NNG" | "NOB" | "NOC" | "NOD" | "NOE" | "NOF" | "NOG" | "NPB" | "NPC" | "NPD" | "NPE" | "NPF" | "NQB" | "NQC" | "NQD" | "NQE" | "NQF" | "NQG" | "NRB" | "NRC" | "NRD" | "NRE" | "NRF" | "NRG" | "NSB" | "NSC" | "NSD" | "NSE" | "NSF" | "NSG" | "NTB" | "NTC" | "NTD" | "NTE" | "NTF" | "NTG" | "NUB" | "NUC" | "NUD" | "NUE" | "NUF" | "NUG" | "NVB" | "NVC" | "NVD" | "NVE" | "NVF" | "NVG" | "NWB" | "NWC" | "NWD" | "NWE" | "NWF" | "NWG" | "NXB" | "NXC" | "NXD" | "NXE" | "NXF" | "NXG" | "NYB" | "NYC" | "NYD" | "NYE" | "NYF" | "NYG" | "NZB" | "NZC" | "NZD" | "NZE" | "NZF" | "NZG" | "OAB" | "OAC" | "OAD" | "OAE" | "OAF" | "OAG" | "OBA" | "OBB" | "OBC" | "OBD" | "OBE" | "OBF" | "OCA" | "OCB" | "OCC" | "OCD" | "OCE" | "OCF" | "OCG" | "ODA" | "ODB" | "ODC" | "ODD" | "ODE" | "ODF" | "ODG" | "OEA" | "OEB" | "OEC" | "OED" | "OEE" | "OEF" | "OFA" | "OFB" | "OFC" | "OFD" | "OFE" | "OFF" | "OFG" | "OGA" | "OGB" | "OGC" | "OGD" | "OGE" | "OGF" | "OGG" | "OHA" | "OHB" | "OHC" | "OHD" | "OHE" | "OHF" | "OIA" | "OIB" | "OIC" | "OID" | "OIE" | "OIF" | "OJA" | "OJB" | "OJC" | "OJD" | "OJE" | "OJF" | "OKA" | "OKB" | "OKC" | "OKD" | "OKE" | "OKF" | "OLA" | "OLB" | "OLC" | "OLD" | "OLE" | "OLF" | "OMA" | "OMB" | "OMC" | "OMD" | "OME" | "OMF" | "ONB" | "OND" | "ONE" | "ONF" | "ONG" | "OOB" | "OOC" | "OOD" | "OOE" | "OOF" | "OOG" | "OPB" | "OPC" | "OPD" | "OPE" | "OPF" | "OQB" | "OQC" | "OQD" | "OQE" | "OQF" | "OQG" | "ORB" | "ORC" | "ORD" | "ORE" | "ORF" | "ORG" | "OSB" | "OSC" | "OSD" | "OSE" | "OSF" | "OTB" | "OTC" | "OTD" | "OTE" | "OTG" | "OUB" | "OUC" | "OUD" | "OUE" | "OUF" | "OUG" | "OVB" | "OVC" | "OVD" | "OVE" | "OVF" | "OVG" | "OWB" | "OWC" | "OWD" | "OWE" | "OWF" | "OWG" | "OXB" | "OXC" | "OXD" | "OXE" | "OXF" | "OXG" | "OYB" | "OYC" | "OYD" | "OYE" | "OYF" | "OYG" | "OZB" | "OZC" | "OZD" | "OZE" | "OZF" | "OZG" | "PAB" | "PAC" | "PAD" | "PAE" | "PAF" | "PAG" | "PBA" | "PBB" | "PBC" | "PBD" | "PBE" | "PBF" | "PCA" | "PCB" | "PCC" | "PCD" | "PCE" | "PCF" | "PCG" | "PDA" | "PDB" | "PDC" | "PDD" | "PDE" | "PDF" | "PDG" | "PEA" | "PEB" | "PEC" | "PED" | "PEE" | "PEF" | "PFA" | "PFB" | "PFC" | "PFD" | "PFE" | "PFF" | "PFG" | "PGA" | "PGB" | "PGC" | "PGD" | "PGE" | "PGF" | "PGG" | "PHA" | "PHB" | "PHC" | "PHD" | "PHE" | "PHF" | "PIA" | "PIB" | "PIC" | "PID" | "PIE" | "PIF" | "PJA" | "PJB" | "PJC" | "PJD" | "PJE" | "PJF" | "PKA" | "PKB" | "PKC" | "PKD" | "PKE" | "PKF" | "PLA" | "PLB" | "PLC" | "PLD" | "PLE" | "PLF" | "PMA" | "PMB" | "PMC" | "PMD" | "PME" | "PMF" | "PNB" | "PND" | "PNE" | "PNF" | "PNG" | "POB" | "POC" | "POD" | "POE" | "POF" | "POG" | "PPB" | "PPC" | "PPD" | "PPE" | "PPF" | "PQB" | "PQC" | "PQD" | "PQE" | "PQF" | "PQG" | "PRB" | "PRC" | "PRD" | "PRE" | "PRF" | "PRG" | "PSB" | "PSC" | "PSD" | "PSE" | "PSF" | "PTB" | "PTC" | "PTD" | "PTE" | "PTF" | "PTG" | "PUB" | "PUC" | "PUD" | "PUE" | "PUF" | "PUG" | "PVB" | "PVC" | "PVD" | "PVE" | "PVF" | "PVG" | "PWB" | "PWC" | "PWD" | "PWE" | "PWF" | "PWG" | "PXB" | "PXC" | "PXD" | "PXE" | "PXF" | "PXG" | "PYB" | "PYC" | "PYD" | "PYE" | "PYF" | "PYG" | "PZB" | "PZC" | "PZD" | "PZE" | "PZF" | "PZG" | "QAB" | "QAC" | "QAD" | "QAE" | "QAF" | "QAG" | "QBA" | "QBB" | "QBC" | "QBD" | "QBE" | "QBF" | "QCA" | "QCB" | "QCC" | "QCD" | "QCE" | "QCF" | "QCG" | "QDA" | "QDB" | "QDC" | "QDD" | "QDE" | "QDG" | "QEA" | "QEB" | "QEC" | "QED" | "QEE" | "QEF" | "QFA" | "QFB" | "QFC" | "QFD" | "QFE" | "QFF" | "QFG" | "QGA" | "QGB" | "QGC" | "QGD" | "QGE" | "QGF" | "QGG" | "QHA" | "QHB" | "QHC" | "QHD" | "QHE" | "QHF" | "QIA" | "QIB" | "QIC" | "QID" | "QIE" | "QIF" | "QJA" | "QJB" | "QJC" | "QJD" | "QJE" | "QJF" | "QKA" | "QKB" | "QKC" | "QKD" | "QKE" | "QKF" | "QLA" | "QLB" | "QLC" | "QLD" | "QLE" | "QLF" | "QMA" | "QMB" | "QMC" | "QMD" | "QME" | "QMF" | "QNB" | "QND" | "QNE" | "QNF" | "QNG" | "QOB" | "QOC" | "QOD" | "QOE" | "QOF" | "QOG" | "QPB" | "QPC" | "QPD" | "QPE" | "QPF" | "QQB" | "QQC" | "QQD" | "QQE" | "QQF" | "QQG" | "QRB" | "QRC" | "QRD" | "QRE" | "QRF" | "QRG" | "QSB" | "QSC" | "QSD" | "QSE" | "QSF" | "QSG" | "QTB" | "QTC" | "QTD" | "QTE" | "QTF" | "QTG" | "QUB" | "QUC" | "QUD" | "QUE" | "QUF" | "QUG" | "QVB" | "QVC" | "QVD" | "QVE" | "QVF" | "QWB" | "QWC" | "QWD" | "QWE" | "QWF" | "QWG" | "QXB" | "QXC" | "QXD" | "QXE" | "QXF" | "QXG" | "QYB" | "QYC" | "QYD" | "QYE" | "QYF" | "QYG" | "QZB" | "QZC" | "QZD" | "QZE" | "QZF" | "QZG" | "RAB" | "RAC" | "RAD" | "RAE" | "RAF" | "RAG" | "RBA" | "RBB" | "RBC" | "RBD" | "RBE" | "RBF" | "RCA" | "RCB" | "RCC" | "RCD" | "RCE" | "RCF" | "RCG" | "RDA" | "RDB" | "RDC" | "RDD" | "RDE" | "RDF" | "RDG" | "REA" | "REB" | "REC" | "RED" | "REE" | "REF" | "RFA" | "RFB" | "RFC" | "RFD" | "RFE" | "RFF" | "RFG" | "RGA" | "RGB" | "RGC" | "RGD" | "RGE" | "RGF" | "RGG" | "RHA" | "RHB" | "RHC" | "RHD" | "RHE" | "RHF" | "RIA" | "RIB" | "RIC" | "RID" | "RIE" | "RIF" | "RJA" | "RJB" | "RJC" | "RJD" | "RJE" | "RJF" | "RKA" | "RKB" | "RKC" | "RKD" | "RKE" | "RKF" | "RLA" | "RLB" | "RLC" | "RLD" | "RLE" | "RLF" | "RMA" | "RMB" | "RMC" | "RMD" | "RME" | "RMF" | "RNB" | "RND" | "RNE" | "RNF" | "RNG" | "ROB" | "ROC" | "ROD" | "ROE" | "ROF" | "ROG" | "RPB" | "RPC" | "RPD" | "RPE" | "RPF" | "RQB" | "RQC" | "RQD" | "RQE" | "RQF" | "RQG" | "RRC" | "RRD" | "RRE" | "RRF" | "RRG" | "RSB" | "RSC" | "RSD" | "RSE" | "RSF" | "RTB" | "RTC" | "RTD" | "RTE" | "RTF" | "RTG" | "RUB" | "RUC" | "RUD" | "RUE" | "RUF" | "RUG" | "RVB" | "RVC" | "RVD" | "RVE" | "RVF" | "RVG" | "RWB" | "RWC" | "RWD" | "RWE" | "RWF" | "RWG" | "RXB" | "RXC" | "RXD" | "RXE" | "RXF" | "RXG" | "RYB" | "RYC" | "RYD" | "RYE" | "RYF" | "RYG" | "RZB" | "RZC" | "RZD" | "RZE" | "RZF" | "RZG" | "SAB" | "SAC" | "SAD" | "SAE" | "SAF" | "SAG" | "SBA" | "SBB" | "SBC" | "SBD" | "SBE" | "SBF" | "SCA" | "SCB" | "SCC" | "SCD" | "SCE" | "SCF" | "SCG" | "SDA" | "SDB" | "SDC" | "SDD" | "SDE" | "SDF" | "SDG" | "SEA" | "SEB" | "SEC" | "SED" | "SEE" | "SEF" | "SFA" | "SFB" | "SFC" | "SFD" | "SFE" | "SFF" | "SFG" | "SGA" | "SGB" | "SGC" | "SGD" | "SGE" | "SGF" | "SGG" | "SHA" | "SHB" | "SHC" | "SHD" | "SHE" | "SHF" | "SIA" | "SIB" | "SIC" | "SID" | "SIE" | "SIF" | "SJA" | "SJB" | "SJC" | "SJD" | "SJE" | "SJF" | "SKA" | "SKB" | "SKC" | "SKD" | "SKE" | "SKF" | "SLA" | "SLB" | "SLC" | "SLD" | "SLE" | "SLF" | "SMA" | "SMB" | "SMC" | "SMD" | "SME" | "SMF" | "SNB" | "SND" | "SNE" | "SNF" | "SNG" | "SOB" | "SOC" | "SOD" | "SOE" | "SOF" | "SOG" | "SPB" | "SPC" | "SPD" | "SPE" | "SPF" | "SPG" | "SQB" | "SQC" | "SQD" | "SQE" | "SQF" | "SQG" | "SRB" | "SRC" | "SRD" | "SRE" | "SRF" | "SRG" | "SSB" | "SSC" | "SSD" | "SSE" | "SSF" | "SSG" | "STB" | "STC" | "STD" | "STE" | "STF" | "STG" | "SUB" | "SUC" | "SUD" | "SUE" | "SUF" | "SUG" | "SVB" | "SVC" | "SVD" | "SVE" | "SVF" | "SVG" | "SWB" | "SWC" | "SWD" | "SWE" | "SWF" | "SWG" | "SXB" | "SXC" | "SXD" | "SXE" | "SXF" | "SXG" | "SYB" | "SYC" | "SYD" | "SYE" | "SYF" | "SYG" | "SZB" | "SZC" | "SZD" | "SZE" | "SZF" | "SZG" | "TAB" | "TAC" | "TAD" | "TAE" | "TAF" | "TAG" | "TBA" | "TBB" | "TBC" | "TBD" | "TBE" | "TBF" | "TCA" | "TCB" | "TCC" | "TCD" | "TCE" | "TCF" | "TCG" | "TDA" | "TDB" | "TDC" | "TDD" | "TDE" | "TDF" | "TDG" | "TEA" | "TEB" | "TEC" | "TED" | "TEE" | "TEF" | "TFA" | "TFB" | "TFC" | "TFD" | "TFE" | "TFF" | "TFG" | "TGA" | "TGB" | "TGC" | "TGD" | "TGE" | "TGF" | "TGG" | "THA" | "THB" | "THC" | "THD" | "THE" | "THF" | "TIA" | "TIB" | "TIC" | "TID" | "TIE" | "TIF" | "TJA" | "TJB" | "TJC" | "TJD" | "TJE" | "TJF" | "TKA" | "TKB" | "TKC" | "TKD" | "TKE" | "TKF" | "TLA" | "TLB" | "TLC" | "TLD" | "TLE" | "TLF" | "TMA" | "TMB" | "TMC" | "TMD" | "TME" | "TMF" | "TNB" | "TNC" | "TND" | "TNE" | "TNF" | "TNG" | "TOB" | "TOC" | "TOD" | "TOE" | "TOF" | "TOG" | "TPB" | "TPC" | "TPD" | "TPE" | "TPF" | "TPG" | "TQB" | "TQC" | "TQD" | "TQE" | "TQF" | "TQG" | "TRB" | "TRC" | "TRD" | "TRE" | "TRF" | "TRG" | "TSB" | "TSC" | "TSD" | "TSE" | "TSF" | "TSG" | "TTB" | "TTC" | "TTD" | "TTE" | "TTF" | "TTG" | "TUB" | "TUD" | "TUE" | "TUF" | "TUG" | "TVB" | "TVC" | "TVD" | "TVE" | "TVF" | "TVG" | "TWB" | "TWC" | "TWD" | "TWE" | "TWF" | "TWG" | "TXB" | "TXC" | "TXD" | "TXE" | "TXF" | "TXG" | "TYB" | "TYC" | "TYD" | "TYE" | "TYF" | "TYG" | "TZ