code:
// A whitelist for ingame variables.  Used to init the game or fill in gaps.  Also used as a whitelist.  Anything not on this list will be removed on BC.
App.Data.defaultGameStateVariables = {
	// Page
	returnTo: "init",
	nextButton: "Continue",
	nextLink: "Alpha disclaimer",
	storedLink: "",

	// Version
	ver: 0,
	pmodVer: 0,
	releaseID: 0,

	// Slaves
	/** @type {Object.<number, number>} */
	slaveIndices: {},
	genePool: [],
	geneMods: {NCS: 0, rapidCellGrowth: 0},
	missingTable: {},
	/** @type {App.Entity.SlaveState[]} */
	slaves: [],

	// PC
	/** @type {App.Entity.PlayerState} */
	PC: {},
	freshPC: 0,
	IsInPrimePC: 3,
	IsPastPrimePC: 5000,
	PCTitle: "",

	// Save
	saveImported: 0,

	// Other
	cheater: 0,
	cash: 0,
	cashLastWeek: 0,
	taintedSaveFile: 0,

	// UI content
	UI: {
		slaveSummary: {
			abbreviation: {
				clothes: 2,
				devotion: 2,
				diet: 2,
				drugs: 2,
				genitalia: 2,
				health: 2,
				hormoneBalance: 2,
				mental: 2,
				nationality: 2,
				origins: 2,
				physicals: 2,
				race: 2,
				rules: 2,
				rulesets: 2,
				skills: 2,
			}
		}
	},
	FSNamePref: 0,
	HGFormality: 1,
	HGSeverity: 0,
	abbreviateSidebar: 1,
	adamPrinciple: 0,
	allowFamilyTitles: 0,
	allowMaleSlaveNames: false,
	autosave: 1,
	baseDifficulty: 3,
	dangerousPregnancy: 0,
	debugMode: 0,
	debugModeCustomFunction: 0,
	difficultySwitch: 0,
	disableLisping: 0,
	displayAssignments: 1,
	economy: 100,
	expansionRequestsAllowed: 1,
	extremeUnderage: 0,
	formatNumbers: 1,
	fucktoyInteractionsPosition: 1,
	headGirlSoftensFlaws: 1,
	headGirlTrainsFlaws: 1,
	headGirlTrainsHealth: 1,
	headGirlTrainsObedience: 1,
	headGirlTrainsParaphilias: 1,
	headGirlTrainsSkills: 1,
	imageChoice: 1,
	inbreeding: 1,
	killChoice: -1,
	lineSeparations: 1,
	limitFamilies: 0,
	makeDicks: 0,
	modRequestsAllowed: 1,
	neighboringArcologies: 3,
	neighborDisplay: "list",
	newDescriptions: 0,
	newModelUI: 1,
	nicknamesAllowed: 1,
	positionMainLinks: -1,
	profiler: 0,
	realRoyalties: 0,
	retainCareer: 1,
	ngpParams: {},
	rulesAssistantAuto: 0,
	rulesAssistantMain: 1,
	seeAge: 1,
	seeArcology: 1,
	seeAvatar: 1,
	seeBestiality: 0,
	seeCircumcision: 1,
	seeDesk: 1,
	seeDetails: 1,
	seeDicks: 25,
	seeDicksAffectsPregnancy: 1,
	seeExtreme: 0,
	seeFCNN: 1,
	seeFaces: 1,
	seeHeight: 0,
	seeHyperPreg: 0,
	seeIllness: 1,
	seeImages: 0,
	seeIncest: 1,
	seeMainFetishes: 0,
	seeNationality: 1,
	seePee: 1,
	seePreg: 1,
	seeRace: 1,
	seeReportImages: 1,
	seeSummaryImages: 1,
	seeVectorArtHighlights: 1,
	showAgeDetail: 1,
	showAppraisal: 1,
	showAssignToScenes: 1,
	showBodyMods: 1,
	showBoobCCs: 1,
	showClothing: 1,
	showDickCMs: 1,
	showDistantRelatives: 0,
	showEWD: 1,
	showEWM: 1,
	showEconomicDetails: 0,
	showHeightCMs: 1,
	showImplantEffects: 1,
	showInches: 1,
	showMissingSlaves: false,
	showMissingSlavesSD: false,
	showNeighborDetails: 1,
	showNumbers: 2,
	showNumbersMax: 20,
	showScores: 1,
	showSexualHistory: 1,
	showTipsFromEncy: 1,
	showVignettes: 1,
	slavePanelStyle: 1,
	sortSlavesBy: "devotion",
	sortSlavesMain: 1,
	sortSlavesOrder: "descending",
	summaryStats: 0,
	surnameOrder: 0,
	/** @type {Object.<string, string>} */
	tabChoice: {Main: "all"},
	universalRulesAssignsSelfFacility: 0,
	universalRulesBirthing: 0,
	universalRulesCSec: 0,
	universalRulesChildrenBecomeBreeders: 0,
	universalRulesConsent: 0,
	universalRulesFacilityWork: 1,
	universalRulesImmobileSlavesMaintainMuscles: 0,
	universalRulesImpregnation: "none",
	universalRulesNewSlavesRA: 1,
	universalRulesRest: 0,
	useAccordion: 0,
	useFSNames: 1,
	useSlaveListInPageJSNavigation: 0,
	useSlaveSummaryOverviewTab: 0,
	useSlaveSummaryTabs: 0,
	useTabs: 0,
	verboseDescriptions: 0,
	verticalizeArcologyLinks: 0,
	theme: 0,
	weightAffectsAssets: 1,
	curativeSideEffects: 1,
	disableTiredness: 1,
	disableLongDamage: 1,

	// eslint-disable-next-line camelcase
	pedo_mode: 0,
	minimumSlaveAge: 16,
	fertilityAge: 13,
	potencyAge: 13,
	AgePenalty: 1,
	precociousPuberty: 0,
	loliGrow: 0,
	retirementAge: 45,
	customRetirementAge: 45,
	customMenialRetirementAge: 65,
	sortIncubatorList: "Unsorted",
	AgeEffectOnTrainerPricingPC: 1,
	AgeEffectOnTrainerEffectivenessPC: 1,
	AgeTrainingUpperBoundPC: 14,
	AgeTrainingLowerBoundPC: 12,
	childSex: 0,
	showClothingErection: true,

	// Default location
	continent: "North America",
	terrain: "rural",
	language: "English",

	AProsperityCapModified: 0,
	secExpEnabled: 0,
};

// Corp data
App.Data.CorpInitData = {
	Announced: 0,
	Incorporated: 0,
	Market: 0,
	Econ: 0,
	CashDividend: 0,
	Div: 0,
	ExpandToken: 0,
	Spec: 0,
	SpecToken: 0,
	SpecRaces: []
};

// Black Market
App.Data.FSWares = [
	"AssetExpansionistResearch",
	"GenderRadicalistResearch",
	"HedonisticDecadenceResearch",
	"SlaveProfessionalismResearch",
	"SlimnessEnthusiastResearch",
	"TransformationFetishistResearch",
	"YouthPreferentialistResearch",
];

App.Data.illegalWares = [
	"AnimalOrgans",
	"asexualReproduction",
	"BlackmarketPregAdaptation",
	"childhoodFertilityInducedNCS",
	"PGHack",
	"RapidCellGrowthFormula",
	"sympatheticOvaries",
	"UterineRestraintMesh",
];

// The other half of the above whitelist.  However, entries in this array will be forced to the values set here upon starting NG+.
App.Data.resetOnNGPlus = {
	policies: {
		retirement: {
			sex: 0,
			milk: 0,
			cum: 0,
			births: 0,
			kills: 0,

			fate: "menial slave",
			menial2Citizen: 0,
			customAgePolicy: 0,
			physicalAgePolicy: 0
		},
		SMR: {
			basicSMR: 1,
			healthInspectionSMR: 0,
			educationSMR: 0,
			frigiditySMR: 0,
			weightSMR: 0,
			honestySMR: 0,

			beauty: {
				basicSMR: 0,
				qualitySMR: 0
			},
			height: {
				basicSMR: 0,
				advancedSMR: 0
			},
			intelligence: {
				basicSMR: 0,
				qualitySMR: 0
			},
			eugenics: {
				faceSMR: 0,
				heightSMR: 0,
				intelligenceSMR: 0
			}
		},

		childProtectionAct: 1,
		culturalOpenness: 0,
		proRefugees: 0,
		publicFuckdolls: 0,

		proRecruitment: 0,
		cash4Babies: 0,
		regularParties: 0,
		publicPA: 0,
		coursingAssociation: 0,

		raidingMercenaries: 0,
		mixedMarriage: 0,
		goodImageCampaign: 0,
		alwaysSubsidizeRep: 0,
		alwaysSubsidizeGrowth: 0,

		immmigrationCash: 0,
		immmigrationRep: 0,
		enslavementCash: 0,
		enslavementRep: 0,
		cashForRep: 0,

		oralAppeal: 0,
		vaginalAppeal: 0,
		analAppeal: 0
	},

	FCTV: {},
	assistant: {},
	targetArcology: {fs: "New"},
	readySlaves: 0,

	slaveDead: 0,
	plot: 1,
	assignmentRecords: {},
	marrying: [], // array of slave being married this week
	organs: [],
	corp: App.Data.CorpInitData,
	dividendTimer: 0,
	dividendRatio: 0,
	personalShares: 0,
	publicShares: 0,
	SF: {},
	recuriterOffice: 0,
	focus: "social engineering",
	thisWeeksFSWares: 0,
	thisWeeksIllegalWares: 0,
	Sweatshops: 0,

	milkTap: 0,
	militiaRecruitmen: 0,
	rivalID: 0,
	eventDescription: 0,
	eliteAuctioned: 0,
	slavesSacrificedThisWeek: 0,
	subSlaves: 0,

	PopCap: 0,
	HGtraining: "",
	mercenariesTitle: "",
	milk: 0,
	cum: 0,
	hormones: 0,
	milkSale: 0,
	FSReminder: 0,
	facility: {},
	boomerangStats: {},
	FSNonconformist: "",
	econAdvantage: 0,
	attackType: "none",
	attackThisWeek: 0,
	lastAttackWeeks: 0,
	lastRebellionWeeks: 0,
	hasFoughtOnce: 0,
	hasFoughtMajorBattleOnce: 0,
	hasRebelledOnce: 0,
	majorBattle: 0,
	PCvictoryStreak: 0,
	PClossStreak: 0,
	foughtThisWeek: 0,
	/* edicts */
	alternativeRents: 0,
	enslavementRights: 0,
	securityExemption: 0,
	sellData: 0,
	propCampaignBoost: 0,
	slaveWatch: 0,
	subsidyChurch: 0,
	limitImmigration: 0,
	openBorders: 0,
	slavesOfficers: 0,
	martialSchool: 0,
	discountMercenaries: 0,
	militiaFounded: 0,
	recruitVolunteers: 0,
	conscription: 0,
	militaryService: 0,
	militarizedSociety: 0,
	militaryExemption: 0,
	lowerRquirements: 0,
	noSubhumansInArmy: 0,
	pregExemption: 0,
	eliteOfficers: 0,
	liveTargets: 0,
	legionTradition: 0,
	eagleWarriors: 0,
	ronin: 0,
	sunTzu: 0,
	mamluks: 0,
	pharaonTradition: 0,
	weaponsLaw: 3,
	soldierWages: 1,
	militiaSoldierPrivilege: 0,
	slaveSoldierPrivilege: 0,
	mercSoldierPrivilege: 0,
	tradeLegalAid: 0,
	taxTrade: 0,

	/* buildings */
	secHQ: 0,
	secMenials: 0,
	secUpgrades: {},
	crimeUpgrades: {},
	intelUpgrades: {},
	readinessUpgrades: {},
	riotCenter: 0,
	riotUpgrades: {},
	fort: {},
	sentUnitCooldown: 0,
	advancedRiotEquip: 0,
	brainImplant: -1,
	brainImplantProject: 0,
	weapMenials: 0,
	weapManu: 0,
	weapProductivity: 1,
	weapLab: 1,
	baseUpgradeTime: 10,
	weapUpgrades: [],
	currentUpgrade: {},
	droneUpgrades: {},
	humanUpgrade: {},
	sellTo: {},
	completedUpgrades: [],
	transportHub: 0,
	airport: 1,
	railway: 1,
	docks: 1,
	hubSecurity: 1,

	/* events */
	smilingManProgress: 0,
	investedFunds: 0,
	relationshipLM: 0,
	captureRoute: 0,
	collaborationRoute: 0,
	smilingManWeek: 0,
	globalCrisisWeeks: 0,
	smilingManFate: 4,

	/* rebellions */
	tension: 0,
	slaveProgress: 0,
	citizenProgress: 0,
	slaveRebellionEventFires: 0,
	citizenRebellionEventFires: 0,
	slaveRebellion: 0,
	citizenRebellion: 0,
	rebellingUnits: [],
	engageRule: 0,
	irregulars: 0,
	rebellingMilitia: 0,
	rebellingSlaves: 0,
	rebellingMercs: 0,
	repairTime: 3,
	arcRepairTime: 0,
	garrison: {},
	rebellionsCount: 0,
	PCrebWon: 0,
	PCrebLoss: 0,

	/* armed forces stats */
	targetUnit: 0,
	targetIndex: 0,
	secBotsCost: 500,
	secBotsUpgradeCost: 250,
	equipUpgradeCost: 250,
	maxTroops: 30,
	militiaTotalManpower: 0,
	militiaFreeManpower: 0,
	militiaEmployedManpower: 0,
	militiaTotalCasualties: 0,
	slavesEmployedManpower: 0,
	slavesTotalCasualties: 0,
	slavesMaxTroops: 30,
	mercTotalManpower: 0,
	mercFreeManpower: 0,
	mercEmployedManpower: 0,
	mercTotalCasualties: 0,
	militiaLoyalty: 0,
	slaveArmyLoyalty: 0,
	mercLoyalty: 0,
	createdSlavesUnits: 0,
	createdMilitiaUnits: 0,
	createdMercUnits: 0,

	/* battle relevant vars */
	slaveVictories: [],
	slaveIncreasedPrestige: 0,
	totalKills: 0,
	battlesCount: 0,
	majorBattlesCount: 0,
	chosenTactic: "none",
	leadingTroops: "none",
	attackTroops: 0,
	attackEquip: 0,
	battleTerrain: "none",
	maxTurns: 10,
	battleResult: 4,
	/* sets battleResult value outside accepted range (-3,3) to avoid evaluation problems */
	losses: 0,
	enemyLosses: 0,
	battleTurns: 0,
	tacticsSuccessful: 0,
	leaderWounded: 0,
	/* 0=no wound, 1=mute, 2=blind, 3=amputee, 4=health */
	gainedCombat: 0,
	gainedWarfare: 0,
	expectedEquip: 0,
	estimatedMen: 0,
	SFIntervention: 0,
	carriableSoldiers: 0,
	SFatk: 0,
	SFdef: 0,
	SFhp: 0,
	rebellingID: [],
	saveValid: 0,
	lastSelection: [],

	/* statistics */
	equipMod: 0.15,
	secBotsBaseAttack: 7,
	secBotsBaseDefense: 3,
	secBotsMorale: 200,
	secBotsBaseHp: 3,
	militiaBaseAttack: 0,
	militiaBaseDefense: 0,
	militiaBaseMorale: 0,
	militiaBaseHp: 0,
	slaveBaseAttack: 0,
	slaveBaseDefense: 0,
	slaveBaseMorale: 0,
	slaveBaseHp: 0,
	mercBaseAttack: 0,
	mercBaseDefense: 0,
	mercBaseMorale: 0,
	mercBaseHp: 0,
	SFBaseAttack: 0,
	SFBaseDefense: 0,
	SFBaseMorale: 0,
	SFBaseHp: 0,

	raBaseAttack: 7,
	raBaseDefense: 2,
	raBaseMorale: 100,
	raBaseHp: 2,
	fcBaseAttack: 6,
	fcBaseDefense: 4,
	fcBaseMorale: 130,
	fcBaseHp: 3,
	owBaseAttack: 8,
	owBaseDefense: 4,
	owBaseMorale: 110,
	owBaseHp: 2,
	ffBaseAttack: 9,
	ffBaseDefense: 2,
	ffBaseMorale: 160,
	ffBaseHp: 2,

	/* units */
	secBots: {},

	militiaUnits: [],
	slaveUnits: [],
	mercUnits: [],

	/* SFanon additions */
	SFSupportLevel: 0,
	SFGear: 0,
	SavedLeader: 0,
	SavedSFI: 0,
	sectionInFirebase: 0,

	/* base vars */
	SecExp: {},
	PCvictories: 0,
	PClosses: 0,

	/* buildings */
	woundType: 0,
	/* 0:no wound, 1:mute, 2:blind, 3:amputee, 4<:health */

	reminderEntry: "",
	reminderWeek: "",
	lastWeeksCashIncome: {},
	lastWeeksCashExpenses: {},
	lastWeeksCashProfits: {},
	lastWeeksRepIncome: {},
	lastWeeksRepExpenses: {},
	lastWeeksRepProfits: {},
	lastWeeksGatheredTotals: {},
	currentRule: {},
	costs: 0,
	seeBuilding: 0,
	slaveOneTimeMinAge: 0,
	slaveOneTimeMaxAge: 0,
	purchasedSagBGone: 0,
	eliteFail: 0,
	eliteFailTimer: 0,
	nurseryGrowthStimsSetting: 0,
	MadamIgnoresFlaws: 0,
	farmyardBreeding: 0,
	farmyardShows: 0,
	DJignoresFlaws: 0,
	slaveFightingBG: 0,
	HGSlaveSuccess: 0,
	unMadam: 0,
	madamCashBonus: 0,
	whorePriceAdjustment: {},
	unDJ: 0,
	DJRepBonus: 0,
	fuckSlaves: 0,
	freeSexualEnergy: 0,
	publicServants: 0,
	averageDick: 0,
	slavesWithWorkingDicks: 0,
	slaveJobValues: {},

	fluid: 0,
	cumSale: 0,
	revivalistLanguage: 0,
	localEcon: 0,
	econRate: 0,
	drugsCost: 0,
	rulesCost: 0,
	modCost: 0,
	surgeryCost: 0,
	/** @type {FC.ArcologyState[]} */
	arcologies: [],
	HackingSkillMultiplier: 0,
	upgradeMultiplierArcology: 0,
	upgradeMultiplierMedicine: 0,
	upgradeMultiplierTrade: 0,
	nationalities: {},
	/** @type {Object.<string, Set<number>>} */
	JobIDMap: {},
	averageTrust: 0,
	averageDevotion: 0,
	enduringTrust: 0,
	enduringDevotion: 0,
	/** @type {App.RA.Rule[]} */
	defaultRules: [],

	REFeminizationCheckinIDs: [],
	REMILFCheckinIDs: [],
	REOrientationCheckinIDs: [],
	REUglyCheckinIDs: [],
	REButtholeCheckinIDs: [],
	REFutaSisterCheckinIDs: [],
	REReductionCheckinIDs: [],
	/** @type {FC.SlaveStateOrZero} */
	activeSlave: 0,
	activeChild: 0,
	reminders: [],

	boomerangSlave: 0,
	boomerangWeeks: 0,
	boomerangBuyer: 0,

	bioreactorPerfectedID: 0,

	independenceDay: 0,
	invasionVictory: 0,
	daughtersVictory: 0,

	dormitory: 20,
	dormitoryPopulation: 0,
	rooms: 5,
	roomsPopulation: 0,

	brothelDecoration: "standard",
	brothelUpgradeDrugs: 0,
	brothelAdsSpending: 0,
	brothelAdsOld: 0,
	brothelAdsModded: 0,
	brothelAdsImplanted: 0,
	brothelAdsStacked: 0,
	brothelAdsPreg: 0,
	brothelAdsXX: 0,
	brothelName: "the Brothel",
	brothelNameCaps: "The Brothel",
	brothel: 0,
	brothelBoost: {
		selected: 0, eligible: 0
	},
	dairyDecoration: "standard",
	dairyPrepUpgrade: 0,
	dairyStimulatorsUpgrade: 0,
	dairyStimulatorsSetting: 0,
	dairyStimulatorsSettingChanged: 0,
	dairyFeedersUpgrade: 0,
	dairyFeedersSetting: 0,
	dairyFeedersSettingChanged: 0,
	dairyPregUpgrade: 0,
	dairyPregSetting: 0,
	dairyPregSettingChanged: 0,
	dairyRestraintsUpgrade: 0,
	dairyRestraintsSetting: 0,
	dairySlimMaintainUpgrade: 0,
	dairySlimMaintain: 0,
	dairyHyperPregRemodel: 0,
	dairyWeightSetting: 0,
	dairyImplantsSetting: 1,
	dairyUpgradeMenials: 0,
	createBioreactors: 0,
	bioreactorsAnnounced: 0,
	bioreactorsHerm: 0,
	bioreactorsXX: 0,
	bioreactorsXY: 0,
	bioreactorsBarren: 0,
	dairyName: "the Dairy",
	dairyNameCaps: "The Dairy",
	dairy: 0,
	cumSlaves: 0,
	clubDecoration: "standard",
	clubUpgradePDAs: 0,
	clubAdsSpending: 0,
	clubAdsOld: 0,
	clubAdsModded: 0,
	clubAdsImplanted: 0,
	clubAdsStacked: 0,
	clubAdsPreg: 0,
	clubAdsXX: 0,
	clubName: "the Club",
	clubNameCaps: "The Club",
	club: 0,
	servantsQuartersDecoration: "standard",
	servantsQuartersUpgradeMonitoring: 0,
	servantsQuarters: 0,
	servantsQuartersName: "the Servants' Quarters",
	servantsQuartersNameCaps: "The Servants' Quarters",
	schoolroomDecoration: "standard",
	schoolroomUpgradeSkills: 0,
	schoolroomUpgradeLanguage: 0,
	schoolroomUpgradeRemedial: 0,
	schoolroomRemodelBimbo: 0,
	schoolroom: 0,
	schoolroomName: "the Schoolroom",
	schoolroomNameCaps: "The Schoolroom",
	spaDecoration: "standard",
	spa: 0,
	spaSpots: 0,
	spaUpgrade: 0,
	spaFix: 0,
	spaName: "the Spa",
	spaNameCaps: "The Spa",

	// Incubator Subsection
	incubator: 0,
	incubatorSlaves: 0,
	incubatorBulkRelease: 0,
	incubatorOrgans: [],
	incubatorOldID: 0,
	incubatorUpgradeSpeed: 5,
	incubatorUpgradeWeight: 0,
	incubatorUpgradeMuscles: 0,
	incubatorUpgradeGrowthStims: 0,
	incubatorUpgradeReproduction: 0,
	incubatorUpgradeOrgans: 0,
	incubatorImprintSetting: "trust",
	incubatorWeightSetting: 0,
	incubatorMusclesSetting: 0,
	incubatorGrowthStimsSetting: 0,
	incubatorReproductionSetting: 0,
	incubatorPregAdaptationSetting: 0,
	incubatorPregAdaptationPower: 0,

	incubatorName: "the Incubator",
	incubatorNameCaps: "The Incubator",
	reservedChildren: 0,
	tanks: [],

	clinicDecoration: "standard",
	clinic: 0,
	clinicUpgradeFilters: 0,
	clinicUpgradeScanner: 0,
	clinicUpgradePurge: 0,
	clinicObservePregnancy: 1,
	clinicInflateBelly: 0,
	clinicSpeedGestation: 0,
	clinicName: "the Clinic",
	clinicNameCaps: "The Clinic",
	arcadeDecoration: "standard",
	arcadeUpgradeInjectors: 0,
	arcadeUpgradeFuckdolls: 0,
	arcadeUpgradeCollectors: 0,
	arcadeUpgradeHealth: -1,
	arcadeName: "the Arcade",
	arcadeNameCaps: "The Arcade",
	arcade: 0,
	fuckdollsSold: 0,
	cellblockDecoration: "standard",
	cellblockUpgrade: 0,
	cellblock: 0,
	cellblockName: "the Cellblock",
	cellblockNameCaps: "The Cellblock",
	cellblockWardenCumsInside: 1,
	masterSuiteDecoration: "standard",
	masterSuiteUpgradeLuxury: 0,
	masterSuiteUpgradePregnancy: 0,				/* Is the upgrade active? */
	masterSuitePregnancyFertilityDrugs: 0,			/* Are slaves being put on fertility drugs? */
	masterSuitePregnancyFertilitySupplements: 0,	/* Are those drugs being supplemented (health benefits and (even) more multiple pregnancies) */
	masterSuitePregnancySlaveLuxuries: 0,			/* Are the slaves being given some nicer things to reduce stress during preg? (health/devotion/trust benefits) */
	universalHGImpregnateMasterSuiteToggle: 0,		/* Will the HG impregnate fertile slaves in the MS? */
	masterSuiteHyperPregnancy: 0,
	masterSuite: 0,
	masterSuiteName: "the Master Suite",
	masterSuiteNameCaps: "The Master Suite",

	// Nursery Subsection
	nursery: 0,						/* counts the number of children the nursery can support */
	nurseryNannies: 0,					/* counts the number of nannies the nursery can support */
	nurseryBabies: 0,					/* counts the number of children currently in the nursery */
	MatronInfluence: 0,				/* check for whether the children are influenced by the Matron */
	nannyInfluence: 0,					/* check for whether the children are influenced by the nannies */
	nurseryDecoration: "standard",
	nurseryWeight: 0,
	nurseryMuscles: 0,
	nurseryHormones: 0,
	nurseryOrgans: 0,					/* not currently in use */
	nurseryImprintSetting: 0,
	nurseryWeightSetting: 0,
	nurseryMusclesSetting: 0,
	nurseryHormonesSetting: 0,
	nurseryName: "the Nursery",
	nurseryNameCaps: "The Nursery",
	reservedChildrenNursery: 0,
	cribs: [],							/* array of children in the nursery */
	cribsIndices: {},
	sortNurseryList: "Unsorted",
	targetAgeNursery: 18,

	// Farmyard Subsection %/
	farmyard: 0,
	farmyardShowgirls: [],			/* array of farmhands putting on shows */
	farmyardFarmers: [],			/* array of farmhands farming */
	farmMenials: 0,
	farmMenialsSpace: 0,
	farmyardDecoration: "standard",
	farmyardUpgrade: {
		pump: 0, fertilizer: 0, hydroponics: 0, machinery: 0, seeds: 0
	},
	farmyardCrops: 0,
	farmyardStable: 0,
	farmyardKennels: 0,
	farmyardCages: 0,
	activeCanine: 0,
	activeHooved: 0,
	activeFeline: 0,
	animalsBought: {
		canines: 0, hooved: 0, felines: 0, labradorRetrievers: 0, germanShepherds: 0, goldenRetrievers: 0, frenchBulldogs: 0, bulldogs: 0, beagles: 0, poodles: 0, rottweilers: 0, yorkshireTerriers: 0, siberianHuskies: 0, horses: 0, bulls: 0, pigs: 0, siameses: 0, persians: 0, maineCoons: 0, ragdolls: 0, bengals: 0, abbysinians: 0, birmans: 0, orientalShorthairs: 0, sphynxes: 0, russianBlues: 0, wolves: 0, foxes: 0, jackals: 0, dingos: 0, zebras: 0, cougars: 0, jaguars: 0, pumas: 0, lynx: 0, leopards: 0, lions: 0, tigers: 0
	},
	canines: [],
	hooved: [],
	felines: [],
	farmyardName: "the Farmyard",
	farmyardNameCaps: "The Farmyard",

	HGSuite: 0,
	HGSuiteSurgery: 1,
	HGSuiteDrugs: 1,
	HGSuiteHormones: 1,
	HGSuiteEquality: 0,
	HGSuiteName: "the Head Girl Suite",
	HGSuiteNameCaps: "The Head Girl Suite",
	fighterIDs: [],
	pitBG: 0,
	pitAnimal: 0,
	pitAnimalType: 0,
	pitAudience: "none",
	pitLethal: 0,
	pitVirginities: 0,
	pitFought: 0,
	pit: 0,
	pitName: "the Pit",
	pitNameCaps: "The Pit",
	dojo: 0,
	feeder: 0,
	cockFeeder: 0,
	suppository: 0,
	weatherCladding: 0,
	weatherAwareness: 0,
	boobAccessibility: 0,
	servantMilkers: 0,
	servantMilkersMultiplier: 1,

	studio: 0,
	studioFeed: 0,
	PCSlutContacts: 1,

	/* Porn star counts (prestige 1) and ID's (prestige 3) */
	pornStars: {},

	pregInventor: 0,
	pregInventorID: 0,
	pregInventions: 0,

	legendaryWhoreID: 0,
	legendaryEntertainerID: 0,
	legendaryCowID: 0,
	legendaryBallsID: 0,
	legendaryWombID: 0,
	legendaryAbolitionistID: 0,

	FSAnnounced: 0,
	FSCredits: 0,
	FSGotRepCredits: 0,
	FSCreditCount: 5,
	FSSingleSlaveRep: 10,
	FSSpending: 0,
	FSLockinLevel: 100,
	applyLaw: 0,
	FSPromenade: {
		Subjugationist: 0, Supremacist: 0, GenderRadicalist: 0, GenderFundamentalist: 0, Paternalist: 0, Degradationist: 0, BodyPurist: 0, TransformationFetishist: 0, YouthPreferentialist: 0, MaturityPreferentialist: 0, SlimnessEnthusiast: 0, AssetExpansionist: 0, Pastoralist: 0, PhysicalIdealist: 0, ChattelReligionist: 0, RomanRevivalist: 0, AztecRevivalist: 0, EgyptianRevivalist: 0, EdoRevivalist: 0, ArabianRevivalist: 0, ChineseRevivalist: 0, Repopulationist: 0, Eugenics: 0, Hedonism: 0, IntellectualDependency: 0, SlaveProfessionalism: 0, PetiteAdmiration: 0, StatuesqueGlorification: 0
	},

	// new corporation variables
	newCorp: 1,
	vanillaShareSplit: 1,

	/* Slave sexual services and goods variables */
	classSatisfied: {
		lowerClass: 0, middleClass: 0, upperClass: 0, topClass: 0
	},
	whoreBudget: {
		lowerClass: 7, middleClass: 40, upperClass: 200, topClass: 1500
	},
	sexDemandResult: {
		lowerClass: 0, middleClass: 0, upperClass: 0, topClass: 0
	},
	arcadePrice: 2,
	clubSlaveSexAmount: 0,

	shelterSlave: 0,
	shelterSlaveBought: 0,
	shelterAbuse: 0,
	shelterSlaveGeneratedWeek: 0,

	// alternate clothing access variables
	clothesBoughtBunny: 0,
	clothesBoughtConservative: 0,
	clothesBoughtChains: 0,
	clothesBoughtWestern: 0,
	clothesBoughtOil: 0,
	clothesBoughtHabit: 0,
	clothesBoughtToga: 0,
	clothesBoughtHuipil: 0,
	clothesBoughtKimono: 0,
	clothesBoughtHarem: 0,
	clothesBoughtQipao: 0,
	clothesBoughtEgypt: 0,
	clothesBoughtBelly: 0,
	clothesBoughtMaternityDress: 0,
	clothesBoughtMaternityLingerie: 0,
	clothesBoughtLazyClothes: 0,
	clothesBoughtBimbo: 0,
	clothesBoughtCourtesan: 0,
	shoesBoughtHeels: 0,
	clothesBoughtPetite: 0,
	// non-fs
	clothesBoughtMilitary: 0,
	clothesBoughtCultural: 0,
	clothesBoughtMiddleEastern: 0,
	clothesBoughtPol: 0,
	clothesBoughtCostume: 0,
	clothesBoughtPantsu: 0,
	clothesBoughtCareer: 0,
	clothesBoughtDresses: 0,
	clothesBoughtBodysuits: 0,
	clothesBoughtCasual: 0,
	clothesBoughtUnderwear: 0,
	clothesBoughtSports: 0,
	clothesBoughtPony: 0,
	clothesBoughtSwimwear: 0,
	toysBoughtDildos: 0,
	toysBoughtGags: 0,
	toysBoughtVaginalAttachments: 0,
	toysBoughtButtPlugs: 0,
	toysBoughtButtPlugTails: 0,
	toysBoughtSmartVibes: 0,
	buckets: 0,

	specialSlavesPriceOverride: 0,
	pregAccessibility: 0,
	dickAccessibility: 0,
	ballsAccessibility: 0,
	buttAccessibility: 0,
	ageMode: 0,
	enema: 0,
	medicalEnema: 0,
	dairyPiping: 0,
	inflatedSlavesMilk: 0,
	inflatedSlavesCum: 0,
	milkPipeline: 0,
	cumPipeline: 0,
	wcPiping: 0,
	burstee: 0,
	slaveDeath: 0,
	playerBred: 0,
	propOutcome: 0,
	EliteSires: ["crazy", "futa", "moves", "preggo", "quick", "virgin"],
	startingPoint: -1,
	raped: -1,
	children: [],
	missingParentID: -10000,
	startingSlaveRelative: 0,
	mom: 0,
	/* animalParts: 0,*/
	originOveride: 0,
	playerAging: 2,
	pregSpeedControl: 0,
	playerSurgery: 0,
	playerGetsMilked: 0,
	bodyswapAnnounced: 0,
	surnamesForbidden: 0,
	menstruation: 0,
	FCNNstation: 0,
	MercenariesMessageSent: 0,
	SpecialForcesMessageSent: 0,
	BodyguardHasSucessfullyRecivedSignal: 0,
	finalChoice: "none",
	eliteTotal: 12,
	eliteDead: 0,
	eliteVegetable: 0,
	eliteFate: 0,
	swanSong: 0,
	swanSongWeek: 99999,
	failedElite: 0,
	eugenicsFullControl: 0,
	badC: 0,
	badB: 0,

	schoolSuggestion: 0,
	TSS: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	GRI: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	SCP: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	LDE: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	TGA: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	TCR: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	TFS: {
		farmUpgrade: 0, schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0, compromiseWeek: 0
	},
	futaAddiction: 0,
	HA: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},
	NUL: {
		schoolUpgrade: 0, schoolPresent: 0, schoolProsperity: 0, subsidize: 0, schoolAnnexed: 0, studentsBought: 0, schoolSale: 0
	},

	IDNumber: 1,

	week: 1,

	weddingPlanned: 0,
	/** @type {string|Array<{ID:number, trainingRegimen:string}>} */
	personalAttention: "sex",
	/** @type {FC.SlaveStateOrZero}  */
	HeadGirl: 0,
	HGTimeInGrade: 0,
	HGEnergy: 0,
	HGCum: 0,
	/** @type {FC.SlaveStateOrZero} */
	Recruiter: 0,
	recruiterTarget: "desperate whores",
	recruiterProgress: 0,
	recruiterIdleRule: "number",
	recruiterIdleNumber: 20,
	recruiterIOUs: 0,
	bodyguardTrains: 1,
	/** @type {FC.SlaveStateOrZero} */
	Bodyguard: 0,
	/** @type {FC.SlaveStateOrZero} */
	Madam: 0,
	/** @type {FC.SlaveStateOrZero} */
	DJ: 0,
	/** @type {FC.SlaveStateOrZero} */
	Milkmaid: 0,
	milkmaidImpregnates: 0,
	/** @type {FC.SlaveStateOrZero} */
	Farmer: 0,
	StewardessID: 0,
	stewardessImpregnates: 0,
	/** @type {FC.SlaveStateOrZero} */
	Schoolteacher: 0,
	AttendantID: 0,
	/** @type {FC.SlaveStateOrZero} */
	Matron: 0,
	/** @type {FC.SlaveStateOrZero} */
	Nurse: 0,
	/** @type {FC.SlaveStateOrZero} */
	Wardeness: 0,
	/** @type {FC.SlaveStateOrZero} */
	Concubine: 0,

	justiceEvents: ["slave deal", "slave training", "majority deal", "indenture deal", "virginity deal", "breeding deal"], /* not in setupVars because we remove events from this array as they occur */
	prisonCircuit: ["low tier criminals", "gangs and smugglers", "white collar", "military prison"],
	prisonCircuitIndex: 0,

	ui: "start",
	tooltipsEnabled: 0,

	brandTarget: {primary: "left buttock", secondary: "left buttock", local: "left buttock"},
	brandDesign: {primary: "your initials", official: "your initials", local: "your initials"},

	scarTarget: {primary: "left cheek", secondary: "left cheek", local: "left cheek"},
	scarDesign: {primary: "generic", local: "generic"},

	oralTotal: 0,
	vaginalTotal: 0,
	analTotal: 0,
	mammaryTotal: 0,
	penetrativeTotal: 0,
	milkTotal: 0,
	cumTotal: 0,
	foodTotal: 0,
	birthsTotal: 0,
	abortionsTotal: 0,
	miscarriagesTotal: 0,
	pitKillsTotal: 0,
	pitFightsTotal: 0,

	collaboration: 0,
	traitor: 0,
	traitorType: 0,
	traitorWeeks: 0,
	traitorStats: 0,
	hackerSupport: 0,
	hostage: 0,
	hostageAnnounced: 0,
	hostageRescued: 0,
	hostageGiveIn: 0,
	rivalSet: 0,
	rivalryFS: 0,
	rivalryFSAdopted: 0,
	rivalryFSRace: 0,
	rivalOwner: 0,
	rivalOwnerEnslaved: 0,
	rivalryPower: 0,
	rivalryDuration: 0,
	rivalRace: 0,
	rivalGender: 0,
	nationHate: 0,
	slaveMedic: 0,
	PShoot: 0,
	PSnatch: 0,
	PRaid: 0,
	PRaidTarget: 0,
	PAidTarget: "",
	PAid: 0,
	PPit: 0,

	dispensary: 0,
	dispensaryUpgrade: 0,
	organFarmUpgrade: 0,
	completedOrgans: [],
	ImplantProductionUpgrade: 0,
	permaPregImplant: 0,
	injectionUpgrade: 0,
	hormoneUpgradeMood: 0,
	hormoneUpgradeShrinkage: 0,
	hormoneUpgradePower: 0,
	pubertyHormones: 0,
	dietXXY: 0,
	dietCleanse: 0,
	cumProDiet: 0,
	dietFertility: 0,
	curativeUpgrade: 0,
	growthStim: 0,
	reproductionFormula: 0,
	aphrodisiacUpgrade: 0,
	aphrodisiacUpgradeRefine: 0,
	healthyDrugsUpgrade: 0,
	superFertilityDrugs: 0,
	bellyImplants: 0,
	cervixImplants: 0,
	meshImplants: 0,
	prostateImplants: 0,
	youngerOvaries: 0,
	sympatheticOvaries: 0,
	fertilityImplant: 0,
	asexualReproduction: 0,
	animalOvaries: 0, /* {pigOvaries: 0, canineOvaries: 0, horseOvaries: 0, cowOvaries: 0} currently unused*/
	animalTesticles: 0, /* {pigTestes: 0, dogTestes: 0, horseTestes: 0, cowTestes: 0} currently unused*/
	animalMpreg: 0, /* {pigMpreg: 0, dogMpreg: 0, horseMpreg: 0, cowMpreg: 0} currently unused*/
	geneticMappingUpgrade: 0,
	pregnancyMonitoringUpgrade: 0,
	cloningSystem: 0,
	geneticFlawLibrary: 0,

	surgeryUpgrade: 0,

	barracks: 0,
	mercenaries: 0,
	mercenariesHelpCorp: 0,
	personalArms: 0,

	saleDescription: 0,
	gingering: 0,
	beforeGingering: 0,
	gingeringDetected: 0,
	gingeringDetection: 0,
	surgeryDescription: 0,
	encyclopedia: "How to Play",

	trinkets: [],
	SPcost: 1000,
	debtWarned: 0,
	internationalTrade: 1,
	internationalVariety: 0,
	slaveCostFactor: 0.95,
	menialDemandFactor: 0,
	menialSupplyFactor: 0,
	demandTimer: 0,
	supplyTimer: 0,
	elapsedDemandTimer: 0,
	elapsedSupplyTimer: 0,
	slaveCostRandom: 0,
	deltaDemand: 0,
	deltaDemandOld: 0,
	deltaSupply: 0,
	deltaSupplyOld: 0,
	NPCSexSupply: {
		lowerClass: 3000, middleClass: 3000, upperClass: 3000, topClass: 3000
	},
	NPCMarketShare: {
		lowerClass: 1000, middleClass: 1000, upperClass: 1000, topClass: 1000
	},
	sexSubsidies: {
		lowerClass: 0, middleClass: 0, upperClass: 0, topClass: 0
	},
	sexSupplyBarriers: {
		lowerClass: 0, middleClass: 0, upperClass: 0, topClass: 0
	},
	facilityCost: 100,
	enduringRep: 1000,
	rep: 0,
	repLastWeek: 0,

	arcologyUpgrade: {
		drones: 0, hydro: 0, apron: 0, grid: 0, spire: 0
	},

	AGrowth: 2,
	ACitizens: 4250,
	lowerClass: 3120,
	LSCBase: 800,
	visitors: 0,
	rentDefaults: {
		lowerClass: 20, middleClass: 50, upperClass: 180, topClass: 650
	},
	rent: {
		lowerClass: 20, middleClass: 50, upperClass: 180, topClass: 650
	},
	rentEffectL: 1,
	middleClass: 890,
	MCBase: 200,
	rentEffectM: 1,
	upperClass: 200,
	UCBase: 40,
	rentEffectU: 1,
	topClass: 40,
	TCBase: 20,
	rentEffectT: 1,
	GDP: 278.6,
	NPCSlaves: 900,
	ASlaves: 900,
	AProsperityCap: 0,

	food: 125000,
	foodLastWeek: 0,
	foodProduced: 0,
	foodStored: 0,
	farmyardFoodCost: 5,
	foodCost: 25,
	foodMarket: 0,
	foodRate: {
		slave: 2, lower: 1.8, middle: 2, upper: 2.2, top: 2.4
	},
	foodConsumption: 0,	/* total amount food consumed per week */
	revealFoodEffects: 0,
	rations: 0,

	building: {},

	menials: 0,
	fuckdolls: 0,
	menialBioreactors: 0,
	prestigeAuctioned: 0,
	slaveMarketLimit: 20,
	slavesSeen: 0,

	slaveOrphanageTotal: 0,
	citizenOrphanageTotal: 0,
	privateOrphanageTotal: 0,
	breederOrphanageTotal: 0,

	LurcherID: 0,
	coursed: 0,
	StudID: 0,
	StudCum: 0,
	raided: 0,

	expiree: 0,
	retiree: 0,
	birthee: 0,
	FSSlaveProfLawTrigger: 0,
	citizenRetirementTrigger: 0,
	FSSupLawTrigger: 0,
	FSSubLawTrigger: 0,
	nicaea: 0,
	nicaeaAnnounceable: 0,
	nicaeaAnnounced: 0,
	nicaeaPreparation: 0,
	nicaeaInvolvement: -2,
	nicaeaPower: 0,
	nicaeaHeld: 0,
	nicaeaFocus: "",
	nicaeaAssignment: "",
	nicaeaAchievement: "",
	nicaeaName: "",
	nicaeaInfluence: 0,
	peacekeepers: 0,
	peacekeepersFate: 0,
	peacekeepersGone: 0,
	mercRomeo: 0,

	oralUseWeight: 5,
	vaginalUseWeight: 5,
	analUseWeight: 5,

	weatherToday: {},

	customSlaveOrdered: 0,
	/* I am not a slave object! Do not treat me like one! */
	customSlave: {},

	huskSlaveOrdered: 0,
	huskSlave: {},

	/* non-vanilla shit*/

	targetAge: 18,
	pubertyLength: 5,
	maxGrowthAge: 24,

	/* Job Fulfillment Center */
	JFCOrder: 0,
	Role: "",

	cheatMode: 0,
	cheatModeM: 1,
	experimental: {
		nursery: 0,
		food: 0,
		animalOvaries: 0,
		dinnerParty: 0
	},
	NaNArray: [],

	/* Misc mod variables */
	recruiterEugenics: 0,

	prostheticsUpgrade: 0,
	adjustProstheticsCompleted: 0,
	adjustProsthetics: [], /* format: {id: string, workleft: int, slaveID: int}*/
	/* task: {type: "research"/"craft/craftFit", id: string, workLeft: int, [if constructFit] slaveID: int}*/
	researchLab: {
		level: 0,
		aiModule: 1,
		tasks: [],
		maxSpace: 0,
		hired: 0,
		menials: 0,
	},
	prosthetics: {},

	merchantFSWares: App.Data.FSWares,
	merchantIllegalWares: App.Data.illegalWares,
	RapidCellGrowthFormula: 0,
	UterineRestraintMesh: 0,
	PGHack: 0,
	BlackmarketPregAdaptation: 0,

	diversePronouns: 0,

	/* Security Expansion */
	wasToggledBefore: 0,
	/* moved first build to post toggle */

	/* Career-skill gain */
	masteredXP: 200,

	/* Weather effect on economy */
	antiWeatherFreeze: 0,
	econWeatherDamage: 0,
	disasterResponse: 0,

	postSexCleanUp: 1,

	sideBarOptions: {
		Cash: 1, Upkeep: 1, SexSlaveCount: 1, roomPop: 1, Rep: 1, GSP: 1, Authority: 1, Security: 1, Crime: 1, confirmWeekEnd: 0,
	},
	DefaultBirthDestination: "individually decided fates",
	legendaryFacility: 0,
	heroSlavesPurchased : [],
	fcnn: [
		("...coming up at the top of the hour: Catgirl slaves, science fact or science fiction..."),
		("...coming up at the top of the hour: Malnockestivi Smith, Free Cities' first MtFtMtFtH transgendered person..."),
		("...new arcology construction up 23% worldwide this year, according to..."),
		("...United States Congress spends 1,264th consecutive day gridlocked over post office..."),
		("...coming up at the top of the hour: Arcology owners: oversexed oligarchs or attractive, oversexed oligarchs?..."),
		("...coming up at the top of the hour: Anal sex: not just for sex any more..."),
		("...coming up at the top of the hour: Oral sex: the new hello..."),
		("...new book by prominent feminist suggests that women should not be used as sexual appliances..."),
		("...just ahead, interview with Desha Moore, prominent advocate for compulsory female enslavement..."),
		("...just ahead, Slave Market Trends: will the pierced anus be in again this year..."),
		("...just ahead, Slave Market Trends: upstart slave trainers avoid implants..."),
		("...implant technology firm BusTech notches successful initial public offering..."),
		("...the upcoming shortage of authentic leather and what it means for the whip industry..."),
		("...dairy conglomerate Creem Inc. denies allegations of adulterating breast milk with..."),
		("...two-time award-winning actress Linda Loveless debuted new implants on the red carpet this..."),
		("...dick size: are your slaves lying to you when they tell you you're too big..."),
		("...just ahead, slave expert's opinion on best shemale slaves to use for double penetration..."),
		("...Free Cities social conservatives criticize marriage, say your slaves should be enough..."),
		("...councilman Taggart suggested in a public address that involuntary enslavement..."),
		("...councilman Taggart denies allegations that he has remained faithful to his wife..."),
		("...councilman Taggart presented evidence that regulation of the sex slave market would..."),
		("...after a word from our sponsors. Creem Inc.: for all your dairy needs..."),
		("...after a word from our sponsors. Horstmann Ltd, Free Cities' finest whipmakers..."),
		("...after a word from our sponsors. Coming soon to theaters, Quintuple, the musical..."),
		("...critical of low-end slave training corporation Wallerson & Sons for practices that they say..."),
		("...training corporation Wallerson & Sons called a study on slave illness rates 'ludicrous,' but..."),
		("...our tech correspondent: the possibilities of virally-administered gene therapy..."),
		("...our tech correspondent: breakthrough in in-vitro drug treatments that promise to..."),
		("...our tech correspondent: next year to see release of two competing aphrodisiacs..."),
		("...our tech correspondent: the coming permanent aphrodisiac implants, and what they mean..."),
		("...Sex Slaves in Space: what it takes to keep a mining crew happy for an 18-month contract..."),
		("...the implant-drug balance: how much tissue growth is necessary to support larger..."),
		("...the actress stated that the cut to full nudity in the script violated contractual..."),
		("...doping scandal as Slave Games watchdog alleges champion used internal reservoir of lube..."),
		("...next on Extreme Surgery: the mouthpussy experimenters and what they..."),
		("...'A hole's a hole,' said CEO of upstart budget glory hole franchise..."),
		("...underground slave pit fights step into the light this evening as..."),
		("...underground slave pit fight champion, freed yesterday, sells herself back into..."),
		("...with the lead designer of the MP17, the new machine pistol marketed specifically for bodyguards..."),
		("...the new Aegis drone series: because your arcology's security is your most important possession..."),
		("...the BAe Goshawk: because you deserve to travel at twice the speed of sound in the finest style..."),
		("...this year's Goat.cx award for outstanding orifice innovation goes to..."),
		("...public controversy over cannibalism. Decadence taken too far or an acceptable next step..."),
		("...sixth day of street cleaners' strike. Spokesman for the strikers: 'It's getting too nasty..."),
		("...debuts new book, 'So Long, And Thanks For All The Dicks', in which the recently retired sex slaves tell-all about..."),
		("...cure for lactose intolerance, for which he was awarded the International Association of Pastoralist..."),
		("...from the Free Cities have become increasingly common clientele for the black market..."),
		("...a risky gamble on the three-hour-long hardcore sex scene, but the box office figures for just..."),
	],
};

App.Data.ignoreGameStateVariables = [
	// pronouns
	"Mothers",
	"mothers",
	"Fathers",
	"Husbands",
	"Husband",
	"Brother",
	"Son",
	"Shota",
	"Men",
	"Man",
	"fathers",
	"husbands",
	"husband",
	"brother",
	"son",
	"shota",
	"men",
	"man",
	"Mother",
	"Wives",
	"Wife",
	"Sister",
	"Daughter",
	"Loli",
	"Women",
	"Woman",
	"mother",
	"wives",
	"wife",
	"sister",
	"daughter",
	"loli",
	"women",
	"woman",
	"Girl",
	"Herself",
	"Hers",
	"Her",
	"She",
	"girl",
	"herself",
	"hers",
	"her",
	"she",
	"Father",
	"father",
	"Boy",
	"Himself",
	"His",
	"Him",
	"He",
	"boy",
	"himself",
	"his",
	"him",
	"he",

	// Enunciate
	"enunciate"
];


code:
// these ratings tables are consumed by App.UI.SlaveSummaryImpl.helpers. getNumericRating()
// this function takes a value for rating and iterates a table (in the declaration order)
// until it finds a key greater or equal to the value; the found record is returned from the function
// Briefly, each dictionary entry key -> value is read as "the highest rating that still suits -> value" or
// "up to, including"
// The idea behind this is too decrease number of comparisons and retain compatibility with simple dictionaries
// without sparse keys
App.Data.SlaveSummary = {
	long: {
		body: {
			age: {
				17: "Underage.",
				18: "Eighteen.",
				19: "Nineteen.",
				24: "Early twenties.",
				29: "Late twenties.",
				34: "Early thirties.",
				39: "Late thirties.",
				999: "Forties."
			},
			face: { // face value + 100
				4: {desc: "Very ugly", style: "red"},
				59: {desc: "Ugly", style: "red"},
				89: {desc: "Unattractive", style: "red"},
				110: {desc: "Average"},
				140: {desc: "Attractive", style: "pink"},
				195: {desc: "Beautiful", style: "pink"},
				200: {desc: "Very beautiful", style: "pink"},
			},
			lips: {
				10: {desc: "Thin lips", style: "red"},
				20: {desc: "Normal lips"},
				40: {desc: "Pretty lips"},
				70: {desc: "Big lips"},
				95: {desc: "Huge lips"},
				100: {desc: "Facepussy"}
			},
			teeth: {
				"crooked": {desc: "Crooked teeth.", style: "yellow"},
				"gapped": {desc: "Tooth gap.", style: "yellow"},
				"cosmetic braces": {desc: "Cosmetic braces."},
				"straightening braces": {desc: "Braces."},
				"removable": {desc: "Removable teeth."},
				"pointy": {desc: "Sharp fangs."},
				"baby": {desc: "Baby teeth."},
				"mixed": {desc: "Mixed teeth."}
			},
			waist: { // waist value + 100
				4: {desc: "Absurdly narrow waist", style: "pink"},
				60: {desc: "Hourglass waist", style: "pink"},
				89: {desc: "Feminine waist", style: "pink"},
				110: {desc: "Average waist"},
				140: {desc: "Unattractive waist", style: "red"},
				195: {desc: "Ugly waist", style: "red"},
				200: {desc: "Masculine waist", style: "red"}
			},
			genitalia: {
				dickBalls: { // indices [dick, balls]
					3: {
						3: null,
						4: "Big balls.",
						5: "Huge balls.",
						8: "Monstrous balls.",
						99: "Hyper balls."
					},
					4: {
						3: "Big dick.",
						99: "Big dick & balls."
					},
					5: {
						4: "Huge dick.",
						99: "Huge dick & balls."
					},
					8: {
						5: "Monster dong.",
						99: "Monster dick & balls."
					},
					99: {
						8: "Hyper dong.",
						99: "Hyper dick & balls."
					}
				},
				holes: { // indices [vagina, anus]
					2: {
						2: null,
						3: "Gaping anus.",
						4: "Permagaped anus."
					},
					3: {
						2: "Loose pussy.",
						3: "High mileage."
					},
					4: {
						3: "Cavernous pussy.",
						4: "Blown out holes."
					}
				}
			},
			titsAss: { // indices: [boobs, butt, FSAssetExpansionist(0,1), weight+100, muscles+100]
				499: {
					2: {
						2: { // FSAssetExpansionist doesn't matter
							109: {
								130: {desc: "Girlish figure.", style: "pink"},
							},
						},
					}
				},
				799: {
					4: null,
					6: {desc: "Big ass.", style: "pink"},
					8: {desc: "Huge ass.", style: "pink"},
					9: {desc: "Titanic ass.", style: "pink"},
					999: {desc: "Hyper ass.", style: "pink"},
				},
				1999: {
					4: {desc: "Big tits.", style: "pink"},
					999: {desc: "Big T&A.", style: "pink"}
				},
				3999: {
					6: {desc: "Huge tits.", style: "pink"},
					999: {desc: "Huge T&A.", style: "pink"}
				},
				11999: {
					8: {desc: "Monstrous tits.", style: "pink"},
					999: {desc: "Enormous T&A.", style: "pink"},
				},
				100000: {
					9: {desc: "Immobilizing tits.", style: "pink"},
					999: {desc: "Hyper T&A.", style: "pink"}
				}
			},
			weight: { // indices: [weigh + 100, FSHedonisticDecadence (0,1), hips + 2]
				4: {desc: "Emaciated", style: "red"},
				69: {
					2: { // FSHedonisticDecadence doesn't matter
						0: {desc: "Model-thin"},
						5: {desc: "Very thin", style: "red"}
					}
				},
				89: {desc: "Thin"},
				110: {desc: "Trim"},
				130: {desc: "Plush"},
				195: {
					0: {
						3: {desc: "Overweight", style: "red"},
						99: {desc: "Nicely chubby"}
					},
					1: {desc: "Nicely chubby"}
				},
				230: {
					0: {
						4: {desc: "Fat", style: "red"},
						99: {desc: "Pleasantly soft and shapely"}
					},
					1: {desc: "Pleasantly soft and shapely"}
				},
				260: {
					0: {desc: "Obese", style: "red"},
					1: {desc: "Amazingly voluptuous"}
				},
				290: {
					0: {desc: "Super Obese", style: "red"},
					1: {desc: "SSBBW"}
				},
				999: {
					0: {desc: "Dangerously Obese", style: "red"},
					1: {desc: "Perfectly massive"}
				}
			},
			hipsAss: {
				0: {desc: "Disproportionately small butt.", style: "red"},
				1: {desc: "Disproportionately big butt.", style: "red"}
			},
			muscles: { // indices: [muscles + 100, FSPhysicalIdealist(0,1) ]
				4: {desc:"Frail", style:"red"},
				69: {
					0: {desc: "Very weak"},
					1: {desc: "Very weak", style: "red"}
				},
				94: {
					0: {desc: "Weak"},
					1: {desc: "Weak", style: "red"}
				},
				105: {desc: "Soft"},
				130: {desc: "Toned"},
				150: {desc: "Fit"},
				195: {desc: "Muscular"},
				200: {desc: "Hugely muscular"}
			}
		},
		mental: {
			devotion: { // devotion value + 100
				4: {desc: "Very hateful", style: ["devotion", "hateful"]},
				49: {desc: "Hateful", style: ["devotion", "hateful"]},
				79: {desc: "Resistant", style: ["devotion", "resistant"]},
				120: {desc: "Ambivalent", style: ["devotion", "ambivalent"]},
				150: {desc: "Accepting", style: ["devotion", "accept"]},
				195: {desc: "Devoted", style: ["devotion", "devoted"]},
				200: {desc: "Worshipful", style: ["devotion", "worship"]}
			},
			trust: { // first key: trust + 100, second key: devotion + 100
				4: {desc: "Extremely terrified", style: ["trust", "extremely-terrified"]},
				49: {desc: "Terrified", style: ["trust", "terrified"]},
				79: {desc: "Frightened", style: ["trust", "frightened"]},
				120: {desc: "Fearful", style: ["trust", "fearful"]},
				150: {
					79: {desc: "Careful", style: ["defiant", "careful"]},
					200: {desc: "Careful", style: ["trust", "careful"]},
				},
				195: {
					79: {desc: "Bold", style: ["defiant", "bold"]},
					200: {desc: "Trusting", style: ["trust", "trusting"]},
				},
				200: {
					79: {desc: "Defiant", style: ["defiant", "full"]},
					200: {desc: "Profoundly trusting", style: ["trust", "prof-trusting"]},
				}
			},
			education: { // index: intelligenceImplant + 15
				0: ", hindered",
				29: "",
				44: ", educated",
				99: ", well educated"
			},
			intelligence: { // index: intelligence + 100
				4: {desc: "Moronic", style: "orangered"},
				49: {desc: "Very slow", style: "orangered"},
				84: {desc: "Slow", style: "orangered"},
				115: {desc: "Average intelligence"},
				150: {desc: "Smart", style: "deepskyblue"},
				195: {desc: "Very smart", style: "deepskyblue"},
				230: {desc: "Brilliant", style: "deepskyblue"},
				999: {desc: "Genius", style: "deepskyblue"},
			},
			behavioralFlaw: {
				"arrogant": "Arrogant.",
				"bitchy": "Bitchy.",
				"odd": "Odd.",
				"hates men": "Hates men.",
				"hates women": "Hates women.",
				"gluttonous": "Stress eater.",
				"anorexic": "Anorexic.",
				"devout": "Devoutly religious.",
				"liberated": "Mentally liberated.",
			}
		},
		fetish: { // indices [fetish, fetishStrength]
			"submissive": {
				60: "Submissive tendencies",
				95: "Submissive",
				100: "Complete submissive"
			},
			"cumslut": {
				60: "Prefers oral",
				95: "Oral fixation",
				100: "Cumslut"
			},
			"humiliation": {
				60: "Interest in humiliation",
				95: "Exhibitionist",
				100: "Humiliation slut"
			},
			"buttslut": {
				60: "Prefers anal",
				95: "Anal fixation",
				100: "Buttslut"
			},
			"boobs": {
				60: "Loves boobs",
				95: "Breast fixation",
				100: "Boobslut"
			},
			"sadist": {
				60: "Sadistic tendencies",
				95: "Sadist",
				100: "Complete sadist"
			},
			"masochist": {
				60: "Masochistic tendencies",
				95: "Masochist",
				100: "Complete masochist"
			},
			"dom": {
				60: "Dominant tendencies",
				95: "Dominant",
				100: "Complete dom"
			},
			"pregnancy": {
				60: "Interest in impregnation",
				95: "Pregnancy kink",
				100: "Pregnancy fetish"
			},
			"none": "Sexually vanilla"
		},
		clothes: {
			"Western clothing": "Chaps.",
			"a Santa dress": "Santa dress.",
			"a ball gown": "Ball gown.",
			"a bimbo outfit": "Bimbo outfit.",
			"a biyelgee costume": "Biyelgee costume.",
			"a bra": "Nice bra.",
			"a bunny outfit": "Bunny outfit.",
			"a burkini": "Burkini.",
			"a burqa": "Burqa.",
			"a button-up shirt and panties": "Button-up shirt, panties.",
			"a button-up shirt": "Nice button-up shirt.",
			"a chattel habit": "Chattel habit.",
			"a cheerleader outfit": "Cheerleader.",
			"a comfortable bodysuit": "Bodysuit.",
			"a courtesan dress": "Courtesan dress.",
			"a cybersuit": "Cybersuit.",
			"a dirndl": "Dirndl.",
			"a fallen nuns habit": "Slutty habit.",
			"a gothic lolita dress": "Gothic lolita dress.",
			"a halter top dress": "Halter top dress.",
			"a hanbok": "Hanbok.",
			"a hijab and abaya": "Hijab and abaya.",
			"a hijab and blouse": "Hijab and blouse.",
			"a huipil": "Huipil.",
			"a kimono": "Kimono.",
			"a klan robe": "Klan robe.",
			"a latex catsuit": "Nice latex.",
			"a leotard": "Leotard.",
			"a long qipao": "Long Qipao.",
			"a maternity dress": "Maternity dress.",
			"a military uniform": "Military uniform.",
			"a mini dress": "Mini dress.",
			"a monokini": "Monokini.",
			"a mounty outfit": "Mounty outfit.",
			"a nice maid outfit": "Nice maid.",
			"a nice nurse outfit": "Nice nurse.",
			"a nice pony outfit": "Nice pony outfit.",
			"a niqab and abaya": "Niqab and abaya.",
			"a one-piece swimsuit": "Swimsuit.",
			"a penitent nuns habit": "Cilice.",
			"a police uniform": "Police uniform.",
			"a red army uniform": "Red Army uniform.",
			"a scalemail bikini": "Scalemail bikini.",
			"a schoolgirl outfit": "Schoolgirl outfit.",
			"a schutzstaffel uniform": "Schutzstaffel uniform.",
			"a skimpy loincloth": "Skimpy loincloth.",
			"a slave gown": "Slave gown.",
			"a slutty klan robe": "Slutty klan robe.",
			"a slutty maid outfit": "Slutty maid.",
			"a slutty nurse outfit": "Slutty nurse.",
			"a slutty outfit": "Slutty outfit.",
			"a slutty pony outfit": "Slutty pony outfit.",
			"a slutty qipao": "Slutty qipao.",
			"a slutty schutzstaffel uniform": "Slutty Schutzstaffel uniform.",
			"a sports bra": "Sports bra.",
			"a string bikini": "String bikini.",
			"a striped bra": "Striped bra.",
			"a succubus outfit": "Succubus outfit.",
			"a sweater and cutoffs": "Jean shorts, sweater.",
			"a sweater and panties": "Sweater, panties.",
			"a sweater": "Nice sweater.",
			"a t-shirt and jeans": "Blue jeans, t-shirt.",
			"a t-shirt and panties": "Panties, t-shirt.",
			"a t-shirt and thong": "Thong, t-shirt.",
			"a t-shirt": "T-shirt.",
			"a tank-top and panties": "Tank-top, panties.",
			"a tank-top": "Nice tank-top.",
			"a thong": "Nice thong.",
			"a toga": "Toga.",
			"a tube top and thong": "Tube top, thong.",
			"a tube top": "Nice tube top.",
			"an apron": "Apron.",
			"an oversized t-shirt and boy shorts": "Over-sized t-shirt, boy shorts.",
			"an oversized t-shirt": "Nice over-sized t-shirt.",
			"attractive lingerie for a pregnant woman": "Preggo lingerie.",
			"attractive lingerie": "Nice lingerie.",
			"battlearmor": "Battlearmor.",
			"battledress": "Battledress.",
			"body oil": "Body oil.",
			"boyshorts": "Boy shorts.",
			"chains": "Chains.",
			"clubslut netting": "Netting.",
			"conservative clothing": "Conservative clothing.",
			"cutoffs and a t-shirt": "Cutoffs, t-shirt.",
			"cutoffs": "Jean shorts.",
			"harem gauze": "Harem outfit.",
			"jeans": "Tight blue jeans.",
			"kitty lingerie": "Kitty lingerie.",
			"leather pants and a tube top": "Leather pants, tube top.",
			"leather pants and pasties": "Leather pants, pasties.",
			"leather pants": "Nice leather pants.",
			"lederhosen": "Lederhosen.",
			"nice business attire": "Nice suit.",
			"overalls": "Overalls.",
			"panties and pasties": "Pasties, panties.",
			"panties": "Nice panties.",
			"pasties": "Pasties.",
			"restrictive latex": "Bondage latex.",
			"shibari ropes": "Shibari.",
			"slutty business attire": "Slutty suit.",
			"slutty jewelry": "Bangles.",
			"spats and a tank top": "Spats, tank top.",
			"sport shorts and a sports bra": "Shorts, bra.",
			"sport shorts and a t-shirt": "Nice sport shorts, shirt.",
			"sport shorts": "Shorts.",
			"stretch pants and a crop-top": "Stretch pants, crop-top.",
			"striped panties": "Striped panties.",
			"striped underwear": "Striped underwear",
			"uncomfortable straps": "Leather straps.",

		},
		accessory: {
			collar: {
				"ancient Egyptian": "Wesekh.",
				"bell collar": "Bell collar.",
				"bowtie": "Bowtie collar.",
				"neck tie": "Neck tie.",
				"cruel retirement counter": "Cruel counter collar.",
				"heavy gold": "Gold collar.",
				"leather with cowbell": "Cowbell collar.",
				"neck corset": "Neck corset.",
				"nice retirement counter": "Nice counter collar.",
				"preg biometrics": "Pregnancy biometrics collar.",
				"pretty jewelry": "Pretty collar.",
				"satin choker": "Satin choker.",
				"shock punishment": "Shock collar.",
				"silk ribbon": "Silken ribbon.",
				"stylish leather": "Stylish leather collar.",
				"tight steel": "Steel collar.",
				"uncomfortable leather": "Leather collar.",
			},
			faceAccessory: {
				"porcelain mask": "Porcelain mask.",
				"cat ears": "Cat ears.",
			},
			mouthAccessory: {
				"bit gag": "Bit gag.",
				"dildo gag": "Dildo gag.",
				"ring gag": "Ring gag.",
				"massive dildo gag": "Throat-bulging dildo gag.",
				"ball gag": "Ball gag.",
			},
			belly: {
				"a corset": "Corset.",
				"a huge empathy belly": "Huge fake belly.",
				"a large empathy belly": "Large fake belly.",
				"a medium empathy belly": "Medium fake belly.",
				"a small empathy belly": "Small fake belly.",
				"a support band": "Support band.",
				"an extreme corset": "Extreme corsetage.",
				"shapewear": "Shapewear.",
			},
			vaginal: {
				"bullet vibrator": "Attached bullet vibrator.",
				"smart bullet vibrator": "Attached smart bullet vibrator.",
				"dildo": "Vaginal dildo.",
				"large dildo": "Large vaginal dildo.",
				"huge dildo": "Huge vaginal dildo.",
				"long dildo": "Long vaginal dildo.",
				"long, large dildo": "Long and large vaginal dildo.",
				"long, huge dildo": "Long and wide vaginal dildo.",
			},
			buttplug: {
				"plug": "Buttplug.",
				"large plug": "Large buttplug.",
				"huge plug": "Huge buttplug.",
				"long plug": "Long buttplug.",
				"long, large plug": "Large, long buttplug.",
				"long, huge plug": "Enormous buttplug.",
			},
			buttplugAttachment: {
				"tail": "Attached tail.",
				"cat tail": "Attached cat tail.",
				"fox tail": "Attached fox tail.",
				"cow tail": "Attached cow tail.",
			}
		},
		diet: {
			"restricted": "Dieting.",
			"fattening": "Gaining weight.",
			"corrective": "Corrective.",
			"XX": "Estrogen rich.",
			"XY": "Testosterone rich.",
			"XXY": "Futanari mix.",
			"muscle building": "Pumping iron.",
			"slimming": "Slimming down.",
			"cum production": "Cum production.",
			"cleansing": "Cleansing.",
			"fertility": "Fertility.",
		},
		specialDiet: { // index: dietCum + 3 * dietMilk
			0: null,
			1: "Cum Added.",
			2: "Cum Based.",
			3: "Milk Based.",
			4: "Milk & Cum Added.",
			5: "Cum Based with Milk.",
			6: "Milk Added.",
			7: "Milk Based with Cum.",
			8: "Cum and Milk Based."
		},
		race: {
			"white": "Caucasian",
			"asian": "Asian",
			"indo-aryan": "Indo-aryan",
			"latina": "Latina",
			"middle eastern": "Middle Eastern",
			"black": "Black",
			"pacific islander": "Pacific Islander",
			"malay": "Malay",
			"amerindian": "Amerindian",
			"semitic": "Semitic",
			"southern european": "Southern European",
			"mixed race": "Mixed race",
		},
		hormoneBalance: { // rating is hormoneBalance value + 500
			100: "Overwhelmingly masculine",
			200: "Extremely masculine",
			300: "Heavily masculine",
			400: "Very masculine",
			479: "Masculine",
			520: "Neutral",
			599: "Feminine",
			699: "Very feminine",
			799: "Heavily feminine",
			899: "Extremely feminine",
			1000: "Overwhelmingly feminine"
		},
		health: {
			illness: {
				0: null,
				1: {desc: "Sick", style: "yellow"},
				2: {desc: "Ill", style: ["red", "strong"]},
				3: {desc: "Very ill", style: ["red", "strong"]},
				4: {desc: "Terribly ill", style: ["red", "strong"]},
				5: {desc: "Dangerously ill", style: ["red", "strong"]}
			},
			tiredness: {
				30: {desc: "Energetic", style: "green"},
				60: {desc: "Tired", style: "yellow"},
				90: {desc: "Fatigued", style: "orange"},
				100: {desc: "Exhausted", style: ["red", "strong"]}
			},
			health: { // health + 100
				10: {desc: "On the edge of death", style: ["red", "strong"]},
				49: {desc: "Extremely unhealthy", style: ["red", "strong"]},
				79: {desc: "Unhealthy", style: ["red", "strong"]},
				120: {desc: "healthy", style: "yellow"},
				150: {desc: "Very healthy", style: "green"},
				190: {desc: "Extremely healthy", style: "green"},
				200: {desc: "Unnaturally healthy", style: "green"}
			},
		},
		prestige: {
			0: null,
			1: {desc: "Prestigious.", style: "green"},
			2: {desc: "Very prestigious.", style: "green"},
			3: {desc: "Extremely prestigious.", style: "green"},
		},
		pornPrestige: {
			0: null,
			1: {desc: "Porn amateur.", style: "green"},
			2: {desc: "Porn slut.", style: "green"},
			3: {desc: "Porn star.", style: "green"},
		},
		accent: {
			0: null,
			1: {desc: "Cute accent.", style: "pink"},
			2: {desc: "Accent."},
			3: {desc: "Bad accent.", style: "red"},
			4: {desc: "No language skills.", style: "red"},
		},
		smartPiercing: {
			setting: {
				"off": "SP off.",
				"submissive": "SP: submissive.",
				"lesbian": "SP: lesbian.",
				"oral": "SP: oral.",
				"humiliation": "SP: humiliation.",
				"anal": "SP: anal.",
				"boobs": "SP: breasts.",
				"sadist": "SP: sadism.",
				"masochist": "SP: masochism.",
				"dom": "SP: dominance.",
				"pregnancy": "SP: pregnancy.",
				"vanilla": "SP: vanilla.",
				"all": "SP: all.",
				"none": "SP: none.",
				"monitoring": "SP: monitoring.",
				"men": "SP: men.",
				"women": "SP: women.",
				"anti-men": "SP: anti men.",
				"anti-women": "SP: anti women.",
			}
		},
		skills: {
			entertainment: {
				10: null,
				29: {desc: "Basic entertainer", style: "aquamarine"},
				59: {desc: "Skilled entertainer", style: "aquamarine"},
				99: {desc: "Expert entertainer", style: "aquamarine"},
				999: {desc: "Masterful entertainer", style: "aquamarine"}
			},
			sex: { // indices: [sexSkills, hasVagina(0,1)]
				30: {desc: "Sexually unskilled", style: "aquamarine"},
				90: {desc: "Sexually skilled", style: "aquamarine"},
				120: {desc: "Sexual expert", style: "aquamarine"},
				180: {
					0: {desc: "Masterful shemale", style: "aquamarine"},
					1: {desc: "Sexual expert", style: "aquamarine"}
				},
				9999: {desc: "Sex master", style: "aquamarine"}
			},
			whoring: {
				10: null,
				29: {desc: "Basic whore", style: "aquamarine"},
				59: {desc: "Skilled whore", style: "aquamarine"},
				99: {desc: "Expert whore", style: "aquamarine"},
				999: {desc: "Masterful whore", style: "aquamarine"}
			},
			mss: {desc: "Masterful Sex Slave.", style: "aquamarine"},
			fighter: {desc: "Trained fighter.", style: "aquamarine"},
		},
		sexDrive: {
			XX: {
				5: {desc: "disgusted by women", style: "red"},
				15: {desc: "turned off by women", style: "red"},
				35: {desc: "not attracted to women", style: "red"},
				65: {desc: "indifferent to women"},
				85: {desc: "attracted to women", style: "green"},
				95: {desc: "aroused by women", style: "green"},
				999: {desc: "passionate about women", style: "green"}
			},
			XY: {
				5: {desc: "Disgusted by men", style: "red"},
				15: {desc: "Turned off by men", style: "red"},
				35: {desc: "Not attracted to men", style: "red"},
				65: {desc: "Indifferent to men"},
				85: {desc: "Attracted to men", style: "green"},
				95: {desc: "Aroused by men", style: "green"},
				999: {desc: "Passionate about men", style: "green"}
			},
			energy: {
				20: {desc: "No sex drive", style: "red"},
				40: {desc: "Poor sex drive", style: "red"},
				60: {desc: "Average sex drive", style: "yellow"},
				80: {desc: "Good sex drive", style: "green"},
				95: {desc: "Powerful sex drive", style: "green"},
				999: {desc: "Nymphomaniac!", style: "green"}
			},
			synergy: {
				omni: {desc: "Omnisexual!", style: "green"},
				nymphomni: {desc: "Omnisexual nymphomaniac!", style: "green"}
			}
		}
	},
	short: {
		body: {
			age: {
				18: "18",
				19: "19",
				24: "Ea20s",
				29: "Lt20s",
				34: "Ea30s",
				39: "Lt30s",
				999: "40s"
			},
			face: { // face value + 100
				4: {desc: "Face---", style: "red"},
				59: {desc: "Face--", style: "red"},
				89: {desc: "Face-", style: "red"},
				110: {desc: "Face"},
				140: {desc: "Face+", style: "pink"},
				195: {desc: "Face++", style: "pink"},
				200: {desc: "Face+++", style: "pink"},
			},
			lips: {
				10: {desc: "Lips-", style: "red"},
				20: {desc: "Lips"},
				40: {desc: "Lips+"},
				70: {desc: "Lips++"},
				95: {desc: "Lips+++"},
				100: {desc: "Facepussy"}
			},
			teeth: {
				"crooked": {desc: "Cr Teeth", style: "yellow"},
				"gapped": {desc: "Gap", style: "yellow"},
				"cosmetic braces": {desc: "Cos Braces"},
				"straightening braces": {desc: "Braces"},
				"removable": {desc: "Rem Teeth"},
				"pointy": {desc: "Fangs"},
				"baby": {desc: "Baby"},
				"mixed": {desc: "Mixed"}
			},
			waist: { // waist value + 100
				4: {desc: "Wst+++", style: "pink"},
				60: {desc: "Wst++", style: "pink"},
				89: {desc: "Wst+", style: "pink"},
				110: {desc: "Wst"},
				140: {desc: "Wst-", style: "red"},
				195: {desc: "Wst--", style: "red"},
				200: {desc: "Wst---", style: "red"}
			},
			genitalia:{
				dickBalls: { // indices [dick, balls]
					3: {
						3: null,
						4: "Balls",
						5: "Balls+",
						8: "Balls++",
						99: "Balls+++"
					},
					4: {
						3: "Dick",
						99: "Junk"
					},
					5: {
						4: "Dick+",
						99: "Junk+"
					},
					8: {
						5: "Dick++",
						99: "Junk++"
					},
					99: {
						8: "Dick+++",
						99: "Junk+++"
					}
				},
				holes: { // indices [vagina, anus]
					2: {
						2: null,
						3: "A+",
						4: "A++"
					},
					3: {
						2: "V+",
						3: "V+A+"
					},
					4: {
						3: "V++",
						4: "V++A++"
					}
				}
			},
			titsAss: { // indices: [boobs, butt, FSAssetExpansionist(0,1), weight+100, muscles+100]
				499: {
					2: {
						2: { // FSAssetExpansionist doesn't matter
							109: {
								130: {desc: "Girlish", style: "pink"},
							},
						},
					}
				},
				799: {
					4: null,
					6: {desc: "Ass", style: "pink"},
					8: {desc: "Ass+", style: "pink"},
					9: {desc: "Ass++", style: "pink"},
					999: {desc: "Ass+++", style: "pink"},
				},
				1999: {
					4: {desc: "Boobs", style: "pink"},
					999: {desc: "T&A", style: "pink"}
				},
				3999: {
					6: {desc: "Boobs+", style: "pink"},
					999: {desc: "T&A+", style: "pink"}
				},
				11999: {
					8:{desc: "Boobs++", style: "pink"},
					999: {desc: "T&A++", style: "pink"},
				},
				100000: {
					9: {desc: "Boobs+++", style: "pink"},
					999: {desc:	"T&A+++", style: "pink"}
				}
			},
			weight: { // indices: [weigh + 100, FSHedonisticDecadence (0,1), hips + 2]
				4: {desc: "W---", style: ["red", "strong"]},
				69: {
					99: { // FSHedonisticDecadence doesn't matter
						0: {desc: "W--", style: "strong"},
						5: {desc: "W--", style: ["red", "strong"]}
					}
				},
				89: {desc: "W-", style: "strong"},
				110: {desc: "W", style: "strong"},
				130: {desc: "W+", style: "strong"},
				195: {
					0: {
						3: {desc: "W++", style: ["red", "strong"]},
						99: {desc: "W++", style: "strong"}
					},
					1: {desc: "W++", style: "strong"}
				},
				230: {
					0: {
						4: {desc: "W+++", style: ["red", "strong"]},
						99: {desc: "W+++", style: "strong"}
					},
					1: {desc: "W+++", style: "strong"},
				},
				260: {
					0: {desc: "W++++", style: ["red", "strong"]},
					1: {desc: "W++++", style: "strong"}
				},
				290: {
					0: {desc: "W+++++", style: ["red", "strong"]},
					1: {desc: "W+++++", style: "strong"}
				},
				999: {
					0: {desc: "W++++++", style: ["red", "strong"]},
					1: {desc: "W++++++", style: "strong"}
				}
			},
			hipsAss: {
				0: {desc: "Disp-", style: "red"},
				1: {desc: "Disp+", style: "red"}
			},
			muscles: { // indices: [muscles + 100, FSPhysicalIdealist(0,1) ]
				4: {desc:"Weak++", style:"red"},
				69: {
					0: {desc: "Soft+"},
					1: {desc: "Weak+", style: "red"}
				},
				94: {
					0: {desc: "Soft"},
					1: {desc: "Weak", style: "red"}
				},
				105: {desc: "Soft"},
				130: {desc: "Toned"},
				150: {desc: "Fit"},
				195: {desc: "Musc+"},
				200: {desc: "Musc++"}
			}
		},
		mental: {
			devotion: { // devotion value + 100
				4: {desc: "VHate", style: ["devotion", "hateful"]},
				49: {desc: "Hate", style: ["devotion", "hateful"]},
				79: {desc: "Res", style: ["devotion", "resistant"]},
				120: {desc: "Ambiv", style: ["devotion", "ambivalent"]},
				150: {desc: "Accept", style: ["devotion", "accept"]},
				195: {desc: "Devo", style: ["devotion", "devoted"]},
				200: {desc: "Wor", style: ["devotion", "worship"]}
			},
			trust: { // first key: trust + 100, second key: devotion + 100
				4: {desc: "ETerr", style: ["trust", "extremely-terrified"]},
				49: {desc: "Terr", style: ["trust", "terrified"]},
				79: {desc: "Fright", style: ["trust", "frightened"]},
				120: {desc: "Fear", style: ["trust", "fearful"]},
				150: {
					79: {desc: "Caref", style: ["defiant", "careful"]},
					200: {desc: "Caref", style: ["trust", "careful"]},
				},
				195: {
					79: {desc: "Bold", style: ["defiant", "bold"]},
					200: {desc: "Trust", style: ["trust", "trusting"]},
				},
				200: {
					79: {desc: "Defiant", style: ["defiant", "full"]},
					200: {desc: "VTrust", style: ["trust", "prof-trusting"]},
				}
			},
			education: { // index: intelligenceImplant + 15
				0: "(e-)",
				29: "",
				44: "(e)",
				99: "(e+)"
			},
			intelligence: { // index: intelligence + 100
				4: {desc: "I---", style: "orangered"},
				49: {desc: "I--", style: "orangered"},
				84: {desc: "I-", style: "orangered"},
				115: {desc: "I"},
				150: {desc: "I+", style: "deepskyblue"},
				195: {desc: "I++", style: "deepskyblue"},
				230: {desc: "I+++", style: "deepskyblue"},
				999: {desc: "I++++", style: "deepskyblue"},
			},
			behavioralFlaw: {
				"arrogant": "Arrog",
				"bitchy": "Bitchy",
				"odd": "Odd",
				"hates men": "Men-",
				"hates women": "Women-",
				"gluttonous": "Glut",
				"anorexic": "Ano",
				"devout": "Dev",
				"liberated": "Lib",
			},
			sexualFlaw: {
				"hates oral": {desc: "Oral-", style: "red"},
				"hates anal": {desc: "Anal-", style: "red"},
				"hates penetration": {desc: "Fuck-", style: "red"},
				"shamefast": {desc: "Shame", style: "red"},
				"idealistic": {desc: "Ideal", style: "red"},
				"repressed": {desc: "Repre", style: "red"},
				"apathetic": {desc: "Apath", style: "red"},
				"crude": {desc: "Crude", style: "red"},
				"judgemental": {desc: "Judge", style: "red"},
				"cum addict": {desc: "CumAdd", style: "yellow"},
				"anal addict": {desc: "AnalAdd", style: "yellow"},
				"attention whore": {desc: "Attention", style: "yellow"},
				"breast growth": {desc: "BoobObsess", style: "yellow"},
				"abusive": {desc: "Abusive", style: "yellow"},
				"malicious": {desc: "Malice", style: "yellow"},
				"self hating": {desc: "SelfHatr", style: "yellow"},
				"neglectful": {desc: "SelfNeglect", style: "yellow"},
				"breeder": {desc: "BreedObsess", style: "yellow"},
			},
			behavioralQuirk: {
				"confident": "Confid",
				"cutting": "Cutting",
				"funny": "Funny",
				"fitness": "Fit",
				"adores women": "Women+",
				"adores men": "Men+",
				"insecure": "Insec",
				"sinful": "Sinf",
				"advocate": "Advoc",
			},
			sexualQuirk: {
				"gagfuck queen": "Gagfuck",
				"painal queen": "Painal",
				"strugglefuck queen": "Struggle",
				"tease": "Tease",
				"romantic": "Romantic",
				"perverted": "Perverted",
				"caring": "Caring",
				"unflinching": "Unflinch",
				"size queen": "SizeQ",
			}
		},
		health: {
			tiredness: {
				30: {desc: "Ene", style: "green"},
				60: {desc: "Tir", style: "yellow"},
				90: {desc: "Tir+", style: "orange"},
				100: {desc: "Exh", style: ["red", "strong"]}
			}
		},
		accent: {
			1: {desc: "Acc", style: "pink"},
			2: {desc: "Acc-"},
			3: {desc: "Acc--"},
			4: {desc: "Acc--", style: "red"},
		},
		fetish: { // indices [fetish, fetishStrength]
			"submissive": {
				60: "Sub",
				95: "Sub+",
				100: "Sub++"
			},
			"cumslut": {
				60: "Oral",
				95: "Oral+",
				100: "Oral++"
			},
			"humiliation": {
				60: "Humil",
				95: "Humil+",
				100: "Humil++"
			},
			"buttslut": {
				60: "Anal",
				95: "Anal+",
				100: "Anal++"
			},
			"boobs": {
				60: "Boobs",
				95: "Boobs+",
				100: "Boobs++"
			},
			"sadist": {
				60: "Sadist",
				95: "Sadist+",
				100: "Sadist++"
			},
			"masochist": {
				60: "Pain",
				95: "Pain+",
				100: "Pain++"
			},
			"dom": {
				60: "Dom",
				95: "Dom+",
				100: "Dom++"
			},
			"pregnancy": {
				60: "Preg",
				95: "Preg+",
				100: "Preg++"
			},
			"none" : "Vanilla"
		},
		prestige: {
			0: null,
			1: {desc: "Prest", style: "green"},
			2: {desc: "Prest+", style: "green"},
			3: {desc: "Prest++", style: "green"},
		},
		pornPrestige: {
			0: null,
			1: {desc: "PPrest", style: "green"},
			2: {desc: "PPrest+", style: "green"},
			3: {desc: "PPrest++", style: "green"},
		},
		diet: {
			"restricted": "Di:W-",
			"fattening": "Di:W+",
			"corrective": "Di:W=",
			"XX": "Di:XX+",
			"XY": "Di:XY+",
			"XXY": "Di:XXY+",
			"muscle building": "Di:M+",
			"slimming": "Di:M-",
			"cum production": "Di:C+",
			"cleansing": "Di:H+",
			"fertility": "Di:F+",

		},
		specialDiet: { // index: dietCum + 3 * dietMilk
			0: null,
			1: "Cum+",
			2: "Cum++",
			3: "Milk+",
			4: "Cum+ Milk+",
			5: "Cum++ Milk+",
			6: "Milk++",
			7: "Cum+ Milk++",
			8: "Cum++ Milk++"
		},
		drugs: {
			"breast injections": "Boobs+",
			"intensive breast injections": "Boobs++",
			"hyper breast injections": "Boobs+++",
			"nipple enhancers": "Nipple+",
			"butt injections": "Butt+",
			"intensive butt injections": "Butt++",
			"hyper butt injections": "Butt+++",
			"lip injections": "Lip+",
			"fertility drugs": "Fert+",
			"super fertility drugs": "Fert++",
			"penis enhancement": "Dick+",
			"intensive penis enhancement": "Dick++",
			"hyper penis enhancement": "Dick+++",
			"testicle enhancement": "Balls+",
			"intensive testicle enhancement": "Balls++",
			"hyper testicle enhancement": "Balls+++",
			"psychosuppressants": "Psych-",
			"psychostimulants": "Psych+",
			"steroids": "Ster",
			"female hormone injections": "HormXX++",
			"male hormone injections": "HormXY++",
			"hormone enhancers": "Horm+",
			"hormone blockers": "Horm-",
			"anti-aging cream": "Age-",
			"appetite suppressors": "ApSup",
			"penis atrophiers": "Dick-",
			"testicle atrophiers": "Balls-",
			"clitoris atrophiers": "Clit-",
			"labia atrophiers": "Labia-",
			"nipple atrophiers": "Nipple-",
			"lip atrophiers": "Lip-",
			"breast redistributors": "Breast-",
			"butt redistributors": "Butt-",
			"sag-B-gone": "AntiSag",
			"growth stimulants": "GroStim",
			"priapism agents": "Erection"
		},
		nationality: { // NOTE this dictionary lacks "Zimbabwean" key, which is a spacial case
			"Afghan": "Afg",
			"Albanian": "Alb",
			"Algerian": "Alg",
			"American": "USA",
			"Andorran": "And",
			"Angolan": "Ang",
			"Antiguan": "AB",
			"Argentinian": "Arg",
			"Armenian": "Arm",
			"Aruban": "Aru",
			"Australian": "Aus",
			"Austrian": "Aut",
			"Azerbaijani": "Aze",
			"Bahamian": "Bah",
			"Bahraini": "Bah",
			"Bangladeshi": "Bgd",
			"Barbadian": "Bar",
			"Belarusian": "Ber",
			"Belgian": "Bel",
			"Belizean": "Blz",
			"Beninese": "Ben",
			"Bermudian": "Bmd",
			"Bhutanese": "Bhu",
			"Bissau-Guinean": "GB",
			"Bolivian": "Bol",
			"Bosnian": "Bos",
			"Brazilian": "Bra",
			"British": "UK",
			"Bruneian": "Bru",
			"Bulgarian": "Bul",
			"Burkinabé": "BF",
			"Burmese": "Bur",
			"Burundian": "Bnd",
			"Cambodian": "Kam",
			"Cameroonian": "Cam",
			"Canadian": "Can",
			"Cape Verdean": "CV",
			"Catalan": "Cat",
			"Central African": "CAR",
			"Chadian": "Cha",
			"Chilean": "Chl",
			"Chinese": "Chi",
			"Colombian": "Col",
			"Comorian": "Com",
			"Congolese": "RC",
			"a Cook Islander": "CI",
			"Costa Rican": "CR",
			"Croatian": "Cro",
			"Cuban": "Cub",
			"Curaçaoan": "Cur",
			"Cypriot": "Cyp",
			"Czech": "Cze",
			"Danish": "Den",
			"Djiboutian": "Dji",
			"Dominican": "DR",
			"Dominiquais": "Dom",
			"Dutch": "Nld",
			"East Timorese": "ET",
			"Ecuadorian": "Ecu",
			"Egyptian": "Egy",
			"Emirati": "UAE",
			"Equatoguinean": "EG",
			"Eritrean": "Eri",
			"Estonian": "Est",
			"Ethiopian": "Eth",
			"Fijian": "Fij",
			"Filipina": "Phl",
			"Finnish": "Fin",
			"French": "Fra",
			"French Guianan": "FG",
			"French Polynesian": "FP",
			"Gabonese": "Gab",
			"Gambian": "Gam",
			"Georgian": "Geo",
			"German": "Ger",
			"Ghanan": "Gha",
			"Greek": "Gre",
			"Greenlandic": "Grn",
			"Grenadian": "Gda",
			"Guamanian": "Gua",
			"Guatemalan": "Gtm",
			"Guinean": "Gui",
			"Guyanese": "Guy",
			"Haitian": "Hai",
			"Honduran": "Hon",
			"Hungarian": "Hun",
			"I-Kiribati": "Kir",
			"Icelandic": "Ice",
			"Indian": "Ind",
			"Indonesian": "Idn",
			"Iranian": "Irn",
			"Iraqi": "Irq",
			"Irish": "Irl",
			"Israeli": "Isr",
			"Italian": "Ita",
			"Ivorian": "IC",
			"Jamaican": "Jam",
			"Japanese": "Jpn",
			"Jordanian": "Jor",
			"Kazakh": "Kaz",
			"Kenyan": "Ken",
			"Kittitian": "SKN",
			"Korean": "Kor",
			"Kosovan": "Kos",
			"Kurdish": "Kur",
			"Kuwaiti": "Kuw",
			"Kyrgyz": "Kyr",
			"Laotian": "Lao",
			"Latvian": "Lat",
			"Lebanese": "Lbn",
			"Liberian": "Lib",
			"Libyan": "Lby",
			"a Liechtensteiner": "Lie",
			"Lithuanian": "Lit",
			"Luxembourgian": "Lux",
			"Macedonian": "Mac",
			"Malagasy": "Mad",
			"Malawian": "Mwi",
			"Malaysian": "Mys",
			"Maldivian": "Mdv",
			"Malian": "Mal",
			"Maltese": "Mlt",
			"Marshallese": "MI",
			"Mauritanian": "Mta",
			"Mauritian": "Mts",
			"Mexican": "Mex",
			"Micronesian": "FSM",
			"Moldovan": "Mol",
			"Monégasque": "Mnc",
			"Mongolian": "Mon",
			"Montenegrin": "Mng",
			"Moroccan": "Mor",
			"Mosotho": "Les",
			"Motswana": "Bot",
			"Mozambican": "Moz",
			"Namibian": "Nam",
			"Nauruan": "Nau",
			"Nepalese": "Npl",
			"New Caledonian": "NC",
			"a New Zealander": "NZ",
			"Ni-Vanuatu": "Van",
			"Nicaraguan": "Nic",
			"Nigerian": "Nga",
			"Nigerien": "Ngr",
			"Niuean": "Niu",
			"Norwegian": "Nor",
			"Omani": "Omn",
			"Pakistani": "Pak",
			"Palauan": "Plu",
			"Palestinian": "Pal",
			"Panamanian": "Pan",
			"Papua New Guinean": "PNG",
			"Paraguayan": "Par",
			"Peruvian": "Per",
			"Polish": "Pol",
			"Portuguese": "Por",
			"Puerto Rican": "PR",
			"Qatari": "Qat",
			"Romanian": "Rom",
			"Russian": "Rus",
			"Rwandan": "Rwa",
			"Sahrawi": "Sah",
			"Saint Lucian": "SL",
			"Salvadoran": "ES",
			"Sammarinese": "SM",
			"Samoan": "Sam",
			"São Toméan": "STP",
			"Saudi": "Sau",
			"Scottish": "Sco",
			"Senegalese": "Sen",
			"Serbian": "Srb",
			"Seychellois": "Sey",
			"Sierra Leonean": "Sie",
			"Singaporean": "Sng",
			"Slovak": "Svk",
			"Slovene": "Svn",
			"a Solomon Islander": "SI",
			"Somali": "Som",
			"South African": "RSA",
			"South Sudanese": "SS",
			"Spanish": "Spa",
			"Sri Lankan": "Sri",
			"Sudanese": "Sud",
			"Surinamese": "Sur",
			"Swazi": "Swa",
			"Swedish": "Swe",
			"Swiss": "Swi",
			"Syrian": "Syr",
			"Taiwanese": "Tai",
			"Tajik": "Taj",
			"Tanzanian": "Tza",
			"Thai": "Tha",
			"Tibetan": "Tib",
			"Togolese": "Tog",
			"Tongan": "Ton",
			"Trinidadian": "TT",
			"Tunisian": "Tun",
			"Turkish": "Tur",
			"Turkmen": "Tkm",
			"Tuvaluan": "Tuv",
			"Ugandan": "Uga",
			"Ukrainian": "Ukr",
			"Uruguayan": "Uru",
			"Uzbek": "Uzb",
			"Vatican": "VC",
			"Venezuelan": "Ven",
			"Vietnamese": "Vnm",
			"Vincentian": "SVG",
			"Yemeni": "Yem",
			"Zairian": "DRC",
			"Zambian": "Zam",
			"Ancient Chinese Revivalist": "Chi Rev",
			"Ancient Egyptian Revivalist": "Egy Rev",
			"Arabian Revivalist": "Ara Rev",
			"Aztec Revivalist": "Azt Rev",
			"Edo Revivalist": "Edo Rev",
			"Roman Revivalist": "Rom Rev",
			"": "None",
			"none": "None",
			"slave": "None",
			"Stateless": "None"
		},
		race: {
			"white": "C",
			"asian": "A",
			"indo-aryan": "I",
			"latina": "L",
			"middle eastern": "ME",
			"black": "B",
			"pacific islander": "PI",
			"malay": "M",
			"amerindian": "AI",
			"semitic": "S",
			"southern european": "SE",
			"mixed race": "MR",
		},
		skin: {
			"pure white": "P. Whi",
			"extremely fair": "E. Fai",
			"very fair": "V. Fai",
			"extremely pale": "E. Pal",
			"very pale": "V. Pal",
			"light brown": "L. Br",
			"dark brown": "D. Br",
			"light olive": "L. Oli",
			"dark olive": "D. Oli",
			"light beige": "L. Bei",
			"dark beige": "D. Bei",
			"tan": "Tan",
			"bronze": "Bron",
			"ebony": "Ebon",
			"pure black": "P. Bla",
			"dark": "Dark",
			"fair": "Fair",
			"pale": "Pale"
		},
		smartPiercing: {
			setting: {
				"off": "SP-",
				"submissive": "SP:sub",
				"lesbian": "SP:les",
				"oral": "SP:oral",
				"humiliation": "SP:humil",
				"anal": "SP:anal",
				"boobs": "SP:boobs",
				"sadist": "SP:sade",
				"masochist": "SP:pain",
				"dom": "SP:dom",
				"pregnancy": "SP:pregnancy",
				"vanilla": "SP:vanilla",
				"all": "SP:all",
				"none": "SP:none",
				"monitoring": "SP:monitoring",
				"men": "SP:men",
				"women": "SP:women",
				"anti-men": "SP:anti-men",
				"anti-women": "SP:anti-women",
			}
		},
		skills: {
			entertainment: {
				10: null,
				29: {desc: "E", style: "aquamarine"},
				59: {desc: "E+", style: "aquamarine"},
				99: {desc: "E++", style: "aquamarine"},
				999: {desc: "E+++", style: "aquamarine"}
			},
			sex: { // indices: [sexSkills, hasVagina(0,1)]
				30: {desc: "S-", style: "aquamarine"},
				90: {desc: "S+", style: "aquamarine"},
				120: {desc: "S++", style: "aquamarine"},
				180: {
					0: {desc: "Sh++", style: "aquamarine"},
					1: {desc: "S++", style: "aquamarine"}
				},
				9999: {desc: "S++", style: "aquamarine"}
			},
			whoring: {
				10: null,
				29: {desc: "W", style: "aquamarine"},
				59: {desc: "W+", style: "aquamarine"},
				99: {desc: "W++", style: "aquamarine"},
				999: {desc: "W+++", style: "aquamarine"}
			},
			mss: {desc: "MSS", style: "aquamarine"},
			fighter: {desc: "C", style: "aquamarine"},
		},
		sexDrive: {
			XX: {
				5: {desc: "XX---", style: "red"},
				15: {desc: "XX--", style: "red"},
				35: {desc: "XX-", style: "red"},
				65: {desc: "XX"},
				85: {desc: "XX+", style: "green"},
				95: {desc: "XX++", style: "green"},
				999: {desc: "XX+++", style: "green"}
			},
			XY: {
				5: {desc: "XY---", style: "red"},
				15: {desc: "XY--", style: "red"},
				35: {desc: "XY-", style: "red"},
				65: {desc: "XY"},
				85: {desc: "XY+", style: "green"},
				95: {desc: "XY++", style: "green"},
				999: {desc: "XY+++", style: "green"}
			},
			energy: {
				20: {desc: "SD--", style: "red"},
				40: {desc: "SD-", style: "red"},
				60: {desc: "SD", style: "yellow"},
				80: {desc: "SD+", style: "green"},
				95: {desc: "SD++", style: "green"},
				999: {desc: "Nympho!", style: "green"}
			},
			synergy: {
				omni: {desc: "Omni!", style: "green"},
				nymphomni: {desc: "Omni+Nympho!!", style: "green"}
			}
		}
	}
};

repo_name: KnightBoulegard/fc

license: mit


code:
App.Data.NationalityPresets = {};

App.Data.NationalityPresets.Vanilla = new Map ([
	["Vanilla Global", {
		Afghan: 2,
		Albanian: 1,
		Algerian: 3,
		American: 6,
		Andorran: 1,
		Angolan: 1,
		Antiguan: 1,
		Argentinian: 4,
		Armenian: 2,
		Aruban: 1,
		Australian: 3,
		Austrian: 2,
		Azerbaijani: 1,
		Bahamian: 1,
		Bahraini: 1,
		Bangladeshi: 4,
		Barbadian: 1,
		Belarusian: 1,
		Belgian: 2,
		Belizean: 1,
		Beninese: 1,
		Bermudian: 1,
		Bhutanese: 1,
		"Bissau-Guinean": 1,
		Bolivian: 2,
		Bosnian: 1,
		Brazilian: 4,
		British: 3,
		Bruneian: 1,
		Bulgarian: 2,
		Burkinabé: 1,
		Burmese: 2,
		Burundian: 1,
		Cambodian: 1,
		Cameroonian: 1,
		Canadian: 2,
		"Cape Verdean": 1,
		Catalan: 1,
		"Central African": 1,
		Chadian: 1,
		Chilean: 2,
		Chinese: 15,
		Colombian: 3,
		Comorian: 1,
		Congolese: 1,
		"a Cook Islander": 1,
		"Costa Rican": 1,
		Croatian: 1,
		Cuban: 2,
		Curaçaoan: 1,
		Cypriot: 1,
		Czech: 2,
		Danish: 2,
		Djiboutian: 1,
		Dominican: 2,
		Dominiquais: 1,
		Dutch: 2,
		"East Timorese": 1,
		Ecuadorian: 1,
		Egyptian: 3,
		Emirati: 2,
		Equatoguinean: 1,
		Eritrean: 1,
		Estonian: 2,
		Ethiopian: 3,
		Fijian: 1,
		Filipina: 3,
		Finnish: 2,
		French: 3,
		"French Guianan": 1,
		"French Polynesian": 1,
		Gabonese: 1,
		Gambian: 1,
		Georgian: 1,
		German: 3,
		Ghanan: 2,
		Greek: 2,
		Greenlandic: 1,
		Grenadian: 1,
		Guamanian: 1,
		Guatemalan: 1,
		Guinean: 1,
		Guyanese: 1,
		Haitian: 2,
		Honduran: 1,
		Hungarian: 2,
		"I-Kiribati": 1,
		Icelandic: 2,
		Indian: 11,
		Indonesian: 5,
		Iranian: 3,
		Iraqi: 2,
		Irish: 2,
		Israeli: 2,
		Italian: 3,
		Ivorian: 1,
		Jamaican: 2,
		Japanese: 3,
		Jordanian: 2,
		Kazakh: 2,
		Kenyan: 3,
		Kittitian: 1,
		Korean: 2,
		Kosovan: 1,
		Kurdish: 1,
		Kuwaiti: 1,
		Kyrgyz: 1,
		Laotian: 1,
		Latvian: 1,
		Lebanese: 2,
		Liberian: 1,
		Libyan: 2,
		"a Liechtensteiner": 1,
		Lithuanian: 2,
		Luxembourgian: 1,
		Macedonian: 1,
		Malagasy: 1,
		Malawian: 1,
		Malaysian: 3,
		Maldivian: 1,
		Malian: 2,
		Maltese: 1,
		Marshallese: 1,
		Mauritanian: 1,
		Mauritian: 1,
		Mexican: 4,
		Micronesian: 1,
		Moldovan: 1,
		Monégasque: 1,
		Mongolian: 1,
		Montenegrin: 1,
		Moroccan: 2,
		Mosotho: 1,
		Motswana: 1,
		Mozambican: 1,
		Namibian: 1,
		Nauruan: 1,
		Nepalese: 2,
		"New Caledonian": 1,
		"a New Zealander": 2,
		"Ni-Vanuatu": 1,
		Nicaraguan: 2,
		Nigerian: 4,
		Nigerien: 2,
		Niuean: 1,
		Norwegian: 2,
		Omani: 2,
		Pakistani: 3,
		Palauan: 1,
		Palestinian: 1,
		Panamanian: 1,
		"Papua New Guinean": 1,
		Paraguayan: 1,
		Peruvian: 2,
		Polish: 3,
		Portuguese: 2,
		"Puerto Rican": 1,
		Qatari: 1,
		Romanian: 2,
		Russian: 4,
		Rwandan: 1,
		Sahrawi: 1,
		"Saint Lucian": 1,
		Salvadoran: 2,
		Sammarinese: 1,
		Samoan: 1,
		"São Toméan": 1,
		Saudi: 2,
		Scottish: 1,
		Senegalese: 1,
		Serbian: 2,
		Seychellois: 1,
		"Sierra Leonean": 1,
		Singaporean: 1,
		Slovak: 2,
		Slovene: 1,
		"a Solomon Islander": 1,
		Somali: 1,
		"South African": 4,
		"South Sudanese": 1,
		Spanish: 3,
		"Sri Lankan": 1,
		Sudanese: 3,
		Surinamese: 1,
		Swazi: 1,
		Swedish: 2,
		Swiss: 2,
		Syrian: 1,
		Taiwanese: 1,
		Tajik: 1,
		Tanzanian: 2,
		Thai: 3,
		Tibetan: 1,
		Togolese: 1,
		Tongan: 1,
		Trinidadian: 1,
		Tunisian: 2,
		Turkish: 3,
		Turkmen: 1,
		Tuvaluan: 1,
		Ugandan: 2,
		Ukrainian: 3,
		Uruguayan: 2,
		Uzbek: 2,
		Vatican: 1,
		Venezuelan: 3,
		Vietnamese: 3,
		Vincentian: 1,
		Yemeni: 2,
		Zairian: 3,
		Zambian: 1,
		Zimbabwean: 2
	}],
	["Vanilla North America", {
		American: 6,
		Antiguan: 1,
		Aruban: 1,
		Bahamian: 1,
		Barbadian: 1,
		Belizean: 1,
		Bermudian: 1,
		Canadian: 2,
		"Costa Rican": 1,
		Cuban: 2,
		Curaçaoan: 1,
		Dominican: 2,
		Dominiquais: 1,
		Greenlandic: 1,
		Grenadian: 1,
		Guatemalan: 1,
		Haitian: 2,
		Honduran: 1,
		Jamaican: 2,
		Kittitian: 1,
		Mexican: 4,
		Nicaraguan: 2,
		Panamanian: 1,
		"Puerto Rican": 1,
		"Saint Lucian": 1,
		Salvadoran: 2,
		Trinidadian: 1,
		Vincentian: 1
	}],
	["Vanilla South America", {
		Argentinian: 4,
		Bolivian: 2,
		Brazilian: 4,
		Chilean: 2,
		Colombian: 3,
		Ecuadorian: 1,
		"French Guianan": 1,
		Guyanese: 1,
		Paraguayan: 1,
		Peruvian: 2,
		Surinamese: 1,
		Uruguayan: 2,
		Venezuelan: 3
	}],
	["Vanilla Middle East", {
		Afghan: 2,
		Armenian: 2,
		Azerbaijani: 1,
		Bahraini: 1,
		Cypriot: 1,
		Egyptian: 3,
		Emirati: 2,
		Georgian: 1,
		Iranian: 3,
		Iraqi: 2,
		Israeli: 2,
		Jordanian: 2,
		Kurdish: 1,
		Kuwaiti: 1,
		Lebanese: 2,
		Omani: 2,
		Palestinian: 1,
		Qatari: 1,
		Saudi: 2,
		Syrian: 1,
		Turkish: 3,
		Yemeni: 2
	}],
	["Vanilla Africa", {
		Algerian: 3,
		Angolan: 1,
		Beninese: 1,
		"Bissau-Guinean": 1,
		Burkinabé: 1,
		Burundian: 1,
		Cameroonian: 1,
		"Cape Verdean": 1,
		"Central African": 1,
		Chadian: 1,
		Comorian: 1,
		Congolese: 1,
		Djiboutian: 1,
		Equatoguinean: 1,
		Eritrean: 1,
		Ethiopian: 3,
		Gabonese: 1,
		Gambian: 1,
		Ghanan: 2,
		Guinean: 1,
		Ivorian: 1,
		Kenyan: 3,
		Liberian: 1,
		Libyan: 2,
		Malagasy: 1,
		Malawian: 1,
		Malian: 2,
		Mauritanian: 1,
		Mauritian: 1,
		Moroccan: 2,
		Mosotho: 1,
		Motswana: 1,
		Mozambican: 1,
		Namibian: 1,
		Nigerian: 4,
		Nigerien: 2,
		Rwandan: 1,
		Sahrawi: 1,
		"São Toméan": 1,
		Senegalese: 1,
		Seychellois: 1,
		"Sierra Leonean": 1,
		Somali: 1,
		"South African": 4,
		"South Sudanese": 1,
		Sudanese: 3,
		Swazi: 1,
		Tanzanian: 2,
		Togolese: 1,
		Tunisian: 2,
		Ugandan: 2,
		Zairian: 3,
		Zambian: 1,
		Zimbabwean: 2
	}],
	["Vanilla Asia", {
		Bangladeshi: 4,
		Bhutanese: 1,
		Bruneian: 1,
		Burmese: 2,
		Cambodian: 1,
		Chinese: 15,
		"East Timorese": 1,
		Filipina: 3,
		Indian: 11,
		Indonesian: 5,
		Japanese: 3,
		Kazakh: 2,
		Korean: 2,
		Kyrgyz: 1,
		Laotian: 1,
		Malaysian: 3,
		Maldivian: 1,
		Mongolian: 1,
		Nepalese: 2,
		Pakistani: 3,
		Singaporean: 1,
		"Sri Lankan": 1,
		Taiwanese: 1,
		Tajik: 1,
		Thai: 3,
		Tibetan: 1,
		Turkmen: 1,
		Uzbek: 2,
		Vietnamese: 3
	}],
	["Vanilla Europe", {
		Albanian: 1,
		Andorran: 1,
		Austrian: 2,
		Belarusian: 1,
		Belgian: 2,
		Bosnian: 1,
		British: 3,
		Bulgarian: 2,
		Catalan: 1,
		Croatian: 1,
		Czech: 2,
		Danish: 2,
		Dutch: 2,
		Estonian: 2,
		Finnish: 2,
		French: 3,
		German: 3,
		Greek: 2,
		Hungarian: 2,
		Icelandic: 2,
		Irish: 2,
		Italian: 3,
		Kosovan: 1,
		Latvian: 1,
		"a Liechtensteiner": 1,
		Lithuanian: 2,
		Luxembourgian: 1,
		Macedonian: 1,
		Maltese: 1,
		Moldovan: 1,
		Monégasque: 1,
		Montenegrin: 1,
		Norwegian: 2,
		Polish: 3,
		Portuguese: 2,
		Romanian: 2,
		Russian: 4,
		Sammarinese: 1,
		Scottish: 1,
		Serbian: 2,
		Slovak: 2,
		Slovene: 1,
		Spanish: 3,
		Swedish: 2,
		Swiss: 2,
		Ukrainian: 3,
		Vatican: 1
	}],
	["Vanilla Australia", {
		Australian: 3,
		"a Cook Islander": 1,
		Fijian: 1,
		"French Polynesian": 1,
		Guamanian: 1,
		"I-Kiribati": 1,
		Marshallese: 1,
		Micronesian: 1,
		Nauruan: 1,
		"New Caledonian": 1,
		"a New Zealander": 2,
		"Ni-Vanuatu": 1,
		Niuean: 1,
		Palauan: 1,
		"Papua New Guinean": 1,
		Samoan: 1,
		"a Solomon Islander": 1,
		Tongan: 1,
		Tuvaluan: 1
	}],
]);

App.Data.NationalityPresets.Mod = new Map([
	["Realism North America", {
		American: 36503,
		Antiguan: 11,
		Aruban: 10,
		Bahamian: 45,
		Barbadian: 28,
		Belizean: 50,
		Bermudian: 5,
		Canadian: 4188,
		"Costa Rican": 555,
		Cuban: 1141,
		Curaçaoan: 17,
		Dominican: 1249,
		Dominiquais: 7,
		Greenlandic: 5,
		Grenadian: 11,
		Guatemalan: 2277,
		Haitian: 1303,
		Honduran: 1177,
		Jamaican: 290,
		Kittitian: 6,
		Mexican: 15306,
		Nicaraguan: 731,
		Panamanian: 515,
		"Puerto Rican": 354,
		"Saint Lucian": 18,
		Salvadoran: 688,
		Trinidadian: 136,
		Vincentian: 11
	}],
	["Realism South America", {
		Argentinian: 5102,
		Bolivian: 1392,
		Brazilian: 22920,
		Chilean: 2005,
		Colombian: 5105,
		Ecuadorian: 2055,
		"French Guianan": 41,
		Guyanese: 83,
		Paraguayan: 817,
		Peruvian: 3829,
		Surinamese: 63,
		Uruguayan: 362,
		Venezuelan: 3826
	}],
	["Realism Middle East", {
		Afghan: 5090,
		Armenian: 286,
		Azerbaijani: 1086,
		Bahraini: 212,
		Cypriot: 131,
		Egyptian: 12826,
		Emirati: 1164,
		Georgian: 366,
		Iranian: 9047,
		Iraqi: 5982,
		Israeli: 1062,
		Jordanian: 1184,
		Kurdish: 7258,
		Kuwaiti: 511,
		Lebanese: 533,
		Omani: 612,
		Palestinian: 746,
		Qatari: 340,
		Saudi: 4131,
		Syrian: 2888,
		Turkish: 9091,
		Yemeni: 3996
	}],
	["Realism Africa", {
		Algerian: 5107,
		Angolan: 5166,
		Beninese: 1756,
		"Bissau-Guinean": 275,
		Burkinabé: 3105,
		Burundian: 1797,
		Cameroonian: 3688,
		"Cape Verdean": 66,
		"Central African": 679,
		Chadian: 2431,
		Comorian: 116,
		Congolese: 827,
		Djiboutian: 118,
		Equatoguinean: 210,
		Eritrean: 742,
		Ethiopian: 15303,
		Gabonese: 282,
		Gambian: 338,
		Ghanan: 4071,
		Guinean: 1978,
		Ivorian: 3741,
		Kenyan: 7408,
		Liberian: 727,
		Libyan: 760,
		Malagasy: 3989,
		Malawian: 3010,
		Malian: 3098,
		Mauritanian: 676,
		Mauritian: 128,
		Moroccan: 4240,
		Mosotho: 275,
		Motswana: 297,
		Mozambican: 4824,
		Namibian: 352,
		Nigerian: 29732,
		Nigerien: 4187,
		Rwandan: 1754,
		Sahrawi: 80,
		"São Toméan": 29,
		Senegalese: 2486,
		Seychellois: 9,
		"Sierra Leonean": 1056,
		Somali: 2469,
		"South African": 6688,
		"South Sudanese": 1918,
		Sudanese: 6099,
		Swazi: 177,
		Tanzanian: 9586,
		Togolese: 1166,
		Tunisian: 1316,
		Ugandan: 7338,
		Zairian: 13815,
		Zambian: 2844,
		Zimbabwean: 2355
	}],
	["Realism Asia", {
		Bangladeshi: 19160,
		Bhutanese: 94,
		Bruneian: 50,
		Burmese: 6043,
		Cambodian: 1972,
		Chinese: 143350,
		"East Timorese": 187,
		Filipina: 13266,
		Indian: 156457,
		Indonesian: 30475,
		Japanese: 11849,
		Kazakh: 2095,
		Korean: 7977,
		Kyrgyz: 730,
		Laotian: 841,
		Malaysian: 3838,
		Maldivian: 52,
		Mongolian: 369,
		Nepalese: 3456,
		Pakistani: 26109,
		Singaporean: 647,
		"Sri Lankan": 2149,
		Taiwanese: 2410,
		Tajik: 1202,
		Thai: 6919,
		Tibetan: 435,
		Turkmen: 707,
		Uzbek: 3805,
		Vietnamese: 3255
	}],
	/* I need reweighting and possibly country additions */
	["Realism Europe", {
		Albanian: 289,
		Andorran: 7,
		Austrian: 897,
		Belarusian: 899,
		Belgian: 1215,
		Bosnian: 333,
		British: 7189,
		Bulgarian: 615,
		Catalan: 767,
		Croatian: 379,
		Czech: 1039,
		Danish: 611,
		Dutch: 1769,
		Estonian: 122,
		Finnish: 578,
		French: 6886,
		German: 8173,
		Greek: 1062,
		Hungarian: 900,
		Icelandic: 37,
		Irish: 537,
		Italian: 5753,
		Kosovan: 193,
		Latvian: 168,
		"a Liechtensteiner": 4,
		Lithuanian: 263,
		Luxembourgian: 70,
		Macedonian: 205,
		Maltese: 43,
		Moldovan: 372,
		Monégasque: 4,
		Montenegrin: 61,
		Norwegian: 619,
		Polish: 3569,
		Portuguese: 969,
		Romanian: 1797,
		Russian: 13807,
		Sammarinese: 3,
		Scottish: 575,
		Serbian: 814,
		Slovak: 530,
		Slovene: 203,
		Spanish: 4586,
		Swedish: 1094,
		Swiss: 941,
		Ukrainian: 3989,
		Vatican: 1
	}],
	["Realism Australia", {
		Australian: 2952,
		"a Cook Islander": 1,
		Fijian: 98,
		"French Polynesian": 31,
		Guamanian: 18,
		"I-Kiribati": 15,
		Marshallese: 5,
		Micronesian: 12,
		Nauruan: 1,
		"New Caledonian": 33,
		"a New Zealander": 536,
		"Ni-Vanuatu": 38,
		Niuean: 1,
		Palauan: 2,
		"Papua New Guinean": 1136,
		Samoan: 22,
		"a Solomon Islander": 83,
		Tongan: 12,
		Tuvaluan: 1
	}],
	["East Asia", {Chinese: 21, Japanese: 2, Korean: 1}],
	["USA", {American: 8, Canadian: 1, Mexican: 3}],
	["Brazil", {
		Argentinian: 4,
		Bolivian: 2,
		Brazilian: 30,
		Chilean: 2,
		Colombian: 3,
		Ecuadorian: 1,
		"French Guianan": 1,
		Guyanese: 1,
		Paraguayan: 1,
		Peruvian: 2,
		Surinamese: 1,
		Uruguayan: 2,
		Venezuelan: 2
	}],
	["Mediterranean", {
		Albanian: 29,
		Algerian: 404,
		Andorran: 1,
		Bosnian: 35,
		British: 1,
		Bulgarian: 71,
		Catalan: 75,
		Croatian: 42,
		Cypriot: 12,
		Egyptian: 948,
		French: 671,
		Georgian: 49,
		Greek: 108,
		Israeli: 89,
		Italian: 605,
		Lebanese: 60,
		Libyan: 63,
		Maltese: 5,
		Monégasque: 1,
		Montenegrin: 7,
		Moroccan: 358,
		Palestinian: 18,
		Portuguese: 102,
		Romanian: 132,
		Russian: 40,
		Sammarinese: 1,
		Slovene: 21,
		Spanish: 466,
		Syrian: 171,
		Tunisian: 113,
		Turkish: 808,
		Ukrainian: 105,
		Vatican: 1,
	}],

	/* I need reweighting */
	["Realism Global", {
		Afghan: 5090,
		Albanian: 289,
		Algerian: 5107,
		American: 36503,
		Andorran: 7,
		Angolan: 5166,
		Antiguan: 11,
		Argentinian: 5102,
		Armenian: 286,
		Aruban: 10,
		Australian: 2952,
		Austrian: 897,
		Azerbaijani: 1086,
		Bahamian: 45,
		Bahraini: 212,
		Bangladeshi: 19160,
		Barbadian: 28,
		Belarusian: 899,
		Belgian: 1215,
		Belizean: 50,
		Beninese: 1756,
		Bermudian: 5,
		Bhutanese: 94,
		"Bissau-Guinean": 275,
		Bolivian: 1392,
		Bosnian: 333,
		Brazilian: 22920,
		British: 7189,
		Bruneian: 50,
		Bulgarian: 615,
		Burkinabé: 3105,
		Burmese: 6043,
		Burundian: 1797,
		Cambodian: 1972,
		Cameroonian: 3688,
		Canadian: 4188,
		"Cape Verdean": 66,
		Catalan: 767,
		"Central African": 679,
		Chadian: 2431,
		Chilean: 2005,
		Chinese: 143350,
		Colombian: 5405,
		Comorian: 116,
		Congolese: 827,
		"a Cook Islander": 1,
		"Costa Rican": 555,
		Croatian: 379,
		Cuban: 1141,
		Curaçaoan: 17,
		Cypriot: 131,
		Czech: 1039,
		Danish: 611,
		Djiboutian: 118,
		Dominican: 1249,
		Dominiquais: 7,
		Dutch: 1769,
		"East Timorese": 187,
		Ecuadorian: 2055,
		Egyptian: 12826,
		Emirati: 1164,
		Equatoguinean: 210,
		Eritrean: 742,
		Estonian: 122,
		Ethiopian: 15303,
		Fijian: 98,
		Filipina: 13266,
		Finnish: 578,
		French: 6886,
		"French Guianan": 41,
		"French Polynesian": 31,
		Gabonese: 282,
		Gambian: 338,
		Georgian: 366,
		German: 8173,
		Ghanan: 4071,
		Greek: 1062,
		Greenlandic: 5,
		Grenadian: 11,
		Guamanian: 18,
		Guatemalan: 2277,
		Guinean: 1978,
		Guyanese: 83,
		Haitian: 1303,
		Honduran: 1177,
		Hungarian: 900,
		"I-Kiribati": 15,
		Icelandic: 37,
		Indian: 156457,
		Indonesian: 30475,
		Iranian: 9047,
		Iraqi: 5982,
		Irish: 537,
		Israeli: 1062,
		Italian: 5753,
		Ivorian: 3741,
		Jamaican: 290,
		Japanese: 11849,
		Jordanian: 1184,
		Kazakh: 2095,
		Kenyan: 7408,
		Kittitian: 6,
		Korean: 7977,
		Kosovan: 193,
		Kurdish: 7258,
		Kuwaiti: 511,
		Kyrgyz: 730,
		Laotian: 841,
		Latvian: 168,
		Lebanese: 533,
		Liberian: 727,
		Libyan: 760,
		"a Liechtensteiner": 4,
		Lithuanian: 263,
		Luxembourgian: 70,
		Macedonian: 205,
		Malagasy: 3989,
		Malawian: 3010,
		Malaysian: 3838,
		Maldivian: 52,
		Malian: 3098,
		Maltese: 43,
		Marshallese: 5,
		Mauritanian: 676,
		Mauritian: 128,
		Mexican: 15306,
		Micronesian: 12,
		Moldovan: 372,
		Monégasque: 4,
		Mongolian: 369,
		Montenegrin: 61,
		Moroccan: 4240,
		Mosotho: 275,
		Motswana: 297,
		Mozambican: 4824,
		Namibian: 352,
		Nauruan: 1,
		Nepalese: 3456,
		"New Caledonian": 33,
		"a New Zealander": 536,
		"Ni-Vanuatu": 38,
		Nicaraguan: 731,
		Nigerian: 29732,
		Nigerien: 4187,
		Niuean: 1,
		Norwegian: 619,
		Omani: 612,
		Pakistani: 26109,
		Palauan: 2,
		Palestinian: 746,
		Panamanian: 515,
		"Papua New Guinean": 1136,
		Paraguayan: 817,
		Peruvian: 3829,
		Polish: 3569,
		Portuguese: 969,
		"Puerto Rican": 354,
		Qatari: 340,
		Romanian: 1797,
		Russian: 13807,
		Rwandan: 1754,
		Sahrawi: 80,
		"Saint Lucian": 18,
		Salvadoran: 688,
		Sammarinese: 3,
		Samoan: 22,
		"São Toméan": 29,
		Saudi: 4131,
		Scottish: 575,
		Senegalese: 2486,
		Serbian: 814,
		Seychellois: 9,
		"Sierra Leonean": 1056,
		Singaporean: 647,
		Slovak: 530,
		Slovene: 203,
		"a Solomon Islander": 83,
		Somali: 2469,
		"South African": 6688,
		"South Sudanese": 1918,
		Spanish: 4586,
		"Sri Lankan": 2149,
		Sudanese: 6099,
		Surinamese: 63,
		Swazi: 177,
		Swedish: 1094,
		Swiss: 941,
		Syrian: 2888,
		Taiwanese: 2410,
		Tajik: 1202,
		Tanzanian: 9586,
		Thai: 6919,
		Tibetan: 435,
		Togolese: 1166,
		Tongan: 12,
		Trinidadian: 136,
		Tunisian: 1316,
		Turkish: 9091,
		Turkmen: 707,
		Tuvaluan: 1,
		Ugandan: 7338,
		Ukrainian: 3989,
		Uruguayan: 362,
		Uzbek: 3805,
		Vatican: 1,
		Venezuelan: 3826,
		Vietnamese: 10898,
		Vincentian: 11,
		Yemeni: 3996,
		Zairian: 13815,
		Zambian: 2844,
		Zimbabwean: 2355
	}],
]);


code:
App.Art.cacheArtData = function() {
	/** @param {Element} node */
	function removeBadNamespaces(node) {
		const attrs = node.attributes;
		for (let index = 0; index < attrs.length; ++index) {
			const attr = attrs[index];
			if (attr.name.startsWith("sodipodi") || attr.name.startsWith("inkscape")) {
				node.attributes.removeNamedItem(attr.name);
			}
			for (const child of node.children) {
				removeBadNamespaces(child);
			}
		}
	}

	/**
	 * @param {NodeListOf<Element>} imagePassages
	 * @returns {Map<string, Element>}
	 */
	function makeCache(imagePassages) {
		const dict = new Map();

		for (const ip of imagePassages) {
			const name = ip.attributes.getNamedItem("name").value;
			let div = document.createElement("div");
			const svgData = atob(ip.innerHTML.replace(/data:image\/svg\+xml;base64,/, ''));
			div.innerHTML = svgData.trim();
			removeBadNamespaces(div.children.item(0));
			dict.set(name, div.children.item(0));
		}

		return dict;
	}

	App.Data.Art = {};
	App.Data.Art.Vector = makeCache(document.querySelectorAll('[tags="Twine.image"][name^="Art_Vector"]:not([ame^="Art_Vector_Revamp"])'));
	App.Data.Art.VectorRevamp = makeCache(document.querySelectorAll('[tags="Twine.image"][name^="Art_Vector_Revamp"]'));
};

App.Art.SvgQueue = class {
	/**
	 * @param {{trigger:string, action:string, value:string}[]} transformRules - when a 'data-transform' attribute with value "trigger" is seen on an element, perform 'action' with 'value'
	 * @param {Map<string, Element>} cache
	 * @param {string} displayClass
	 */
	constructor(transformRules, cache, displayClass) {
		this._transformRules = transformRules;
		/** @type {{attrs: NamedNodeMap, nodes: Element[]}[]} */
		this._container = [];
		this._cache = cache;
		this._displayClass = displayClass;
	}

	/** transform a node via the transform rules
	 * @param {Element} node
	 */
	_transform(node) {
		const trigger = node.getAttribute("data-transform");
		if (trigger) {
			const rule = this._transformRules.find((r) => r.trigger === trigger);
			if (rule && rule.value) {
				if (rule.action === "text-content") {
					node.textContent = rule.value;
				} else {
					// by default, set attribute (usually 'transform')
					node.setAttribute(rule.action, rule.value);
				}
			}
		}
	}

	/** add an SVG from the cache to the render queue
	 * @param {string} id
	 */
	add(id) {
		const res = this._cache.get(id);
		let clones = [];
		if (!res) {
			console.error(`Missing art resource: ${id}`);
			return;
		}
		for (const srcNode of res.children) {
			/** @type {Element} */
			const node = srcNode.cloneNode(true);
			this._transform(node);
			let transformNodes = node.querySelectorAll('g[data-transform]');
			for (const child of transformNodes) {
				this._transform(child);
			}
			clones.push(node);
		}
		this._container.push({attrs: res.attributes, nodes: clones});
	}

	/** concatenate the contents of a second queue into this one.
	 * displayClass must match.  cache and transformFunc may differ (they are used only by add).
	 * @param {App.Art.SvgQueue} queue
	 */
	concat(queue) {
		if (this._displayClass !== queue._displayClass) {
			throw "Incompatible SVG queues. displayClass must match.";
		}
		this._container.push(...queue._container);
	}

	/** merge consecutive svg child nodes in the queue with the same svg attributes into bigger svg nodes, and write them out
	 * this prevents re-evaluating viewboxes and classes unnecessarily and improves layout performance with lots of art
	 * @returns {DocumentFragment}
	 */
	output() {
		/** evaluate whether an attribute list is equivalent or not
		 * @param {NamedNodeMap} left
		 * @param {NamedNodeMap} right
		 */
		function equalAttributes(left, right) {
			/** get all the attribute names from an attribute list
			 * @param {NamedNodeMap} attrs
			 * @returns {string[]}
			 */
			function attrNames(attrs) {
				let names = [];
				for (let index = 0; index < attrs.length; ++index) {
					names.push(attrs[index].nodeName);
				}
				return names;
			}

			if (!left && !right) {
				return true; // both are nullish, treat as equal
			} else if (!left || !right) {
				return false; // only one is nullish, not equal
			}

			const leftNames = attrNames(left), rightNames = attrNames(right);
			const intersectionLength = _.intersection(leftNames, rightNames).length;
			if (leftNames.length !== intersectionLength || rightNames.length !== intersectionLength) {
				return false; // contain different attributes, not equal
			}
			// are all values equal?
			return leftNames.every((attr) => left.getNamedItem(attr).nodeValue === right.getNamedItem(attr).nodeValue);
		}

		let frag = document.createDocumentFragment();
		let currentAttributes, outSvg;
		for (const svg of this._container) {
			if (!equalAttributes(currentAttributes, svg.attrs)) {
				outSvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
				outSvg.setAttribute("class", this._displayClass);
				frag.appendChild(outSvg);
				for (let index = 0; index < svg.attrs.length; ++index) {
					outSvg.setAttribute(svg.attrs[index].nodeName, svg.attrs[index].nodeValue);
				}
				currentAttributes = svg.attrs;
			}
			outSvg.append(...svg.nodes);
		}
		return frag;
	}
};