local Srendarr		= _G['Srendarr'] -- grab addon table from global
local L				= Srendarr:GetLocale()

-- UPVALUES --
local GetAbilityName		= GetAbilityName

-- Major & Minor Effect Identifiers
local EFFECT_BERSERK		= 1
local EFFECT_BREACH			= 2
local EFFECT_BRUTALITY		= 3
local EFFECT_DEFILE			= 4
local EFFECT_ENDURANCE		= 5
local EFFECT_EROSION		= 6
local EFFECT_EVASION		= 7
local EFFECT_EXPEDITION		= 8
local EFFECT_FORCE			= 9
local EFFECT_FORTITUDE		= 10
local EFFECT_FRACTURE		= 11
local EFFECT_HEROISM		= 12
local EFFECT_INTELLECT		= 13
local EFFECT_MAIM			= 14
local EFFECT_MANGLE			= 15
local EFFECT_MENDING		= 16
local EFFECT_PROPHECY		= 17
local EFFECT_PROTECTION		= 18
local EFFECT_RESOLVE		= 19
local EFFECT_SAVAGERY		= 20
local EFFECT_SORCERY		= 21
local EFFECT_SPELL_SHATTER	= 22
local EFFECT_VITALITY		= 23
local EFFECT_WARD			= 24
local EFFECT_WOUND			= 25

local minorEffects, majorEffects -- populated at the end of file due to how large they are (legibility reasons)

local fakeAuras = { -- used to spawn fake auras to handle mismatch of information provided by the API to what user's want|need
	[GetAbilityName(23634)] = {unitTag = 'groundaoe', duration = 18, abilityID = 200000},	-- Summon Storm Atronach
	[GetAbilityName(23492)] = {unitTag = 'groundaoe', duration = 28, abilityID = 200001},	-- Greater Storm Atronach
	[GetAbilityName(23495)] = {unitTag = 'groundaoe', duration = 18, abilityID = 200002},	-- Summon Charged Atronach
	[GetAbilityName(33376)] = {unitTag = 'groundaoe', duration = 30, abilityID = 200003},	-- Caltrops
	[GetAbilityName(40242)] = {unitTag = 'groundaoe', duration = 30, abilityID = 200004},	-- Razor Caltrops
	[GetAbilityName(40255)] = {unitTag = 'groundaoe', duration = 35, abilityID = 200005},	-- Anti-Cavalry Caltrops
}

local procAbilityNames = { -- using names rather than IDs to ease matching multiple IDs to multiple different IDs
	[GetAbilityName(46324)] = false,	-- Crystal Fragments -- special case, controlled by the actual aura
	[GetAbilityName(61907)] = true,		-- Assassin's Will
	[GetAbilityName(23903)] = true,		-- Power Lash
	[GetAbilityName(62549)] = true,		-- Deadly Throw
}

Srendarr.crystalFragments			= GetAbilityName(46324) -- special case for merging frags procs
Srendarr.crystalFragmentsPassive	= GetAbilityName(46327) -- with the general proc system

local toggledAuras = { -- there is a seperate abilityID for every rank of a skill
	[23316] = true,			-- Volatile Familiar
	[30664] = true,			-- Volatile Familiar
	[30669] = true,			-- Volatile Familiar
	[30674] = true,			-- Volatile Familiar
	[23304] = true,			-- Unstable Familiar
	[30631] = true,			-- Unstable Familiar
	[30636] = true,			-- Unstable Familiar
	[30641] = true,			-- Unstable Familiar
	[23319] = true,			-- Unstable Clannfear
	[30647] = true,			-- Unstable Clannfear
	[30652] = true,			-- Unstable Clannfear
	[30657] = true,			-- Unstable Clannfear
	[24613] = true,			-- Summon Winged Twilight
	[30581] = true,			-- Summon Winged Twilight
	[30584] = true,			-- Summon Winged Twilight
	[30587] = true,			-- Summon Winged Twilight
	[24639] = true,			-- Summon Twilight Matriarch
	[30618] = true,			-- Summon Twilight Matriarch
	[30622] = true,			-- Summon Twilight Matriarch
	[30626] = true,			-- Summon Twilight Matriarch
	[24636] = true,			-- Summon Twilight Tormentor
	[30592] = true,			-- Summon Twilight Tormentor
	[30595] = true,			-- Summon Twilight Tormentor
	[30598] = true,			-- Summon Twilight Tormentor
	[61529] = true,			-- Stalwart Guard
	[63341] = true,			-- Stalwart Guard
	[63346] = true,			-- Stalwart Guard
	[63351] = true,			-- Stalwart Guard
--	[32881] = true,			-- Sea of Flames
--	[34088] = true,			-- Sea of Flames
--	[34094] = true,			-- Sea of Flames
--	[34100] = true,			-- Sea of Flames
--	[40483] = true,			-- Radiant Magelight
--	[42443] = true,			-- Radiant Magelight
--	[42449] = true,			-- Radiant Magelight
--	[42455] = true,			-- Radiant Magelight
	[61536] = true,			-- Mystic Guard
	[63323] = true,			-- Mystic Guard
	[63329] = true,			-- Mystic Guard
	[63335] = true,			-- Mystic Guard
--	[30920] = true,			-- Magelight
--	[42410] = true,			-- Magelight
--	[42414] = true,			-- Magelight
--	[42418] = true,			-- Magelight
	[36908] = true,			-- Leeching Strikes
	[37989] = true,			-- Leeching Strikes
	[38002] = true,			-- Leeching Strikes
	[38015] = true,			-- Leeching Strikes
--	[40478] = true,			-- Inner Light
--	[42422] = true,			-- Inner Light
--	[42426] = true,			-- Inner Light
--	[42430] = true,			-- Inner Light
--	[28967] = true,			-- Inferno
--	[34051] = true,			-- Inferno
--	[34056] = true,			-- Inferno
--	[34061] = true,			-- Inferno
	[61511] = true,			-- Guard
	[63308] = true,			-- Guard
	[63313] = true,			-- Guard
	[63318] = true,			-- Guard
--	[32853] = true,			-- Flames of Oblivion
--	[34066] = true,			-- Flames of Oblivion
--	[34073] = true,			-- Flames of Oblivion
--	[34080] = true,			-- Flames of Oblivion
	[24158] = true,			-- Bound Armor
	[30410] = true,			-- Bound Armor
	[30414] = true,			-- Bound Armor
	[30418] = true,			-- Bound Armor
	[24165] = true,			-- Bound Armaments
	[30422] = true,			-- Bound Armaments
	[30427] = true,			-- Bound Armaments
	[30432] = true,			-- Bound Armaments
	[24163] = true,			-- Bound Aegis
	[30437] = true,			-- Bound Aegis
	[30441] = true,			-- Bound Aegis
	[30445] = true,			-- Bound Aegis
	[116007] = true,		-- Sample Aura (FAKE)
	[116008] = true,		-- Sample Aura (FAKE)
}


-- ------------------------
-- MAIN FILTER TABLES
-- ------------------------
local filterAlwaysIgnored = {
	[29667] = true,		-- Concentration (Light Armour)
	[40359] = true,		-- Fed On Ally (Vampire)
	[45569] = true,		-- Medicinal Use (Alchemy)
	[62760] = true,		-- Spell Shield (Champion Point Ability)
	[63601] = true,		-- ESO Plus Member
	[64160] = true,		-- Crystal Fragments Passive (Not Timed)
	[36603] = true,		-- Soul Siphoner Passive I
	[45155] = true,		-- Soul Siphoner Passive II
	[57472] = true,		-- Rapid Maneuver (Extra Aura)
	[57475] = true,		-- Rapid Maneuver (Extra Aura)
	[57474] = true,		-- Rapid Maneuver (Extra Aura)
	[57476] = true,		-- Rapid Maneuver (Extra Aura)
	[57480]	= true,		-- Rapid Maneuver (Extra Aura)
	[57481]	= true,		-- Rapid Maneuver (Extra Aura)
	[64945] = true,		-- Guard Regen (Guarded Extra)
	[64946] = true,		-- Guard Regen (Guarded Extra)
	[46672] = true,		-- Propelling Shield (Extra Aura)
	[42197] = true,		-- Spinal Surge (Extra Aura)
	[42198] = true,		-- Spinal Surge (Extra Aura)
	[62587] = true,		-- Focused Aim (2s Refreshing Aura)
	[42589] = true,		-- Flawless Dawnbreaker (2s aura on Weaponswap)
}

local filterAuraGroups = {
	['block'] = {
		[14890]	= true,		-- Brace (Generic)
	},
	['cyrodiil'] = {
--		[11341] = true,		-- Enemy Keep Bonus I
		[15058]	= true,		-- Offensive Scroll Bonus I
		[15060]	= true,		-- Defensive Scroll Bonus I
		[16348]	= true,		-- Offensive Scroll Bonus II
		[16350]	= true,		-- Defensive Scroll Bonus II
		[39671]	= true,		-- Emperorship Alliance Bonus
	},
	['disguise'] = {
		-- intentionally empty table just so setup can iterate through filters more simply
	},
	['mundusBoon'] = {
		[13940]	= true,		-- Boon: The Warrior
		[13943]	= true,		-- Boon: The Mage
		[13974]	= true,		-- Boon: The Serpent
		[13975]	= true,		-- Boon: The Thief
		[13976]	= true,		-- Boon: The Lady
		[13977]	= true,		-- Boon: The Steed
		[13978]	= true,		-- Boon: The Lord
		[13979]	= true,		-- Boon: The Apprentice
		[13980]	= true,		-- Boon: The Ritual
		[13981]	= true,		-- Boon: The Lover
		[13982]	= true,		-- Boon: The Atronach
		[13984]	= true,		-- Boon: The Shadow
		[13985]	= true,		-- Boon: The Tower
	},
	['soulSummons'] = {
		[39269] = true,		-- Soul Summons (Rank 1)
		[45590] = true,		-- Soul Summons (Rank 2)
	},
	['vampLycan'] = {
		[35658] = true,		-- Lycanthropy
		[35771]	= true,		-- Stage 1 Vampirism (trivia: has a duration even though others don't)
		[35773]	= true,		-- Stage 2 Vampirism
		[35780]	= true,		-- Stage 3 Vampirism
		[35786]	= true,		-- Stage 4 Vampirism
		[35792]	= true,		-- Stage 4 Vampirism
		[39472] = true,		-- Vampirism
		[40521] = true,		-- Sanies Lupinus
	},
	['vampLycanBite'] = {
		[40525] = true,		-- Bit an ally
		[40539] = true,		-- Fed on ally
	},
}

local filteredAuras = { -- used to hold the abilityIDs of filtered auras
	['player']		= {},
	['reticleover']	= {},
	['groundaoe']	= {}
}

for id in pairs(filterAlwaysIgnored) do -- populate initial ignored auras to filters
	filteredAuras['player'][id]			= true
	filteredAuras['reticleover'][id]	= true
	filteredAuras['groundaoe'][id]		= true
end	-- run once on init of addon

Srendarr.fakeAuras			= fakeAuras			-- set external reference
Srendarr.filteredAuras		= filteredAuras		-- set external reference
Srendarr.procAbilityNames	= procAbilityNames	-- set external reference


-- ------------------------
-- AURA DATA FUNCTIONS
-- ------------------------
function Srendarr.IsToggledAura(abilityID)
	return toggledAuras[abilityID] and true or false
end

function Srendarr.IsMajorEffect(abilityID)
	return majorEffects[abilityID] and true or false
end

function Srendarr.IsMinorEffect(abilityID)
	return minorEffects[abilityID] and true or false
end

function Srendarr:PopulateFilteredAuras()
	for _, filterUnitTag in pairs(filteredAuras) do
		for id in pairs(filterUnitTag) do
			if (not filterAlwaysIgnored[id]) then
				filterUnitTag[id] = nil -- clean out existing filters unless always ignored
			end
		end
	end

	-- populate player aura filters
	for filterGroup, doFilter in pairs(self.db.filtersPlayer) do
		if (filterAuraGroups[filterGroup] and doFilter) then -- filtering this group for player
			for id in pairs(filterAuraGroups[filterGroup]) do
				filteredAuras.player[id] = true
			end
		end
	end

	-- populate target aura filters
	for filterGroup, doFilter in pairs(self.db.filtersTarget) do
		if (doFilter) then
			if (filterGroup == 'majorEffects') then			-- special case for majorEffects
				for id in pairs(majorEffects) do
					filteredAuras.reticleover[id] = true
				end
			elseif (filterGroup == 'minorEffects') then		-- special case for minorEffects
				for id in pairs(minorEffects) do
					filteredAuras.reticleover[id] = true
				end
			elseif (filterAuraGroups[filterGroup]) then
				for id in pairs(filterAuraGroups[filterGroup]) do
					filteredAuras.reticleover[id] = true
				end
			end
		end
	end

	-- populate ground aoe filters
	--

	-- add blacklisted auras to all filter tables
	for _, filterForUnitTag in pairs(filteredAuras) do
		for _, abilityIDs in pairs(self.db.blacklist) do
			for id in pairs(abilityIDs) do
				filterForUnitTag[id] = true
			end
		end
	end
end


-- ------------------------
-- MINOR & MAJOR EFFECT DATA
-- ------------------------
minorEffects = {
	[3929]	= EFFECT_PROTECTION,
	[9611]	= EFFECT_WOUND,
	[28347] = EFFECT_PROTECTION,
	[29308] = EFFECT_MAIM,
	[31818] = EFFECT_RESOLVE,
	[31899] = EFFECT_MAIM,
	[32733] = EFFECT_VITALITY,
	[32761] = EFFECT_WARD,
	[33228] = EFFECT_MAIM,
	[37027] = EFFECT_VITALITY,
	[37031] = EFFECT_VITALITY,
	[37032] = EFFECT_VITALITY,
	[37033] = EFFECT_VITALITY,
	[37247] = EFFECT_RESOLVE,
	[37472] = EFFECT_MAIM,
	[38068] = EFFECT_MAIM,
	[38072] = EFFECT_MAIM,
	[38076] = EFFECT_MAIM,
	[38688] = EFFECT_FRACTURE,
	[38746] = EFFECT_HEROISM,
	[38817] = EFFECT_MAIM,
	[39168] = EFFECT_MANGLE,
	[39180] = EFFECT_MANGLE,
	[39181] = EFFECT_MANGLE,
	[40185] = EFFECT_PROTECTION,
	[42197] = EFFECT_VITALITY,
	[42984] = EFFECT_MANGLE,
	[42986] = EFFECT_MANGLE,
	[42991] = EFFECT_MANGLE,
	[42993] = EFFECT_MANGLE,
	[42998] = EFFECT_MANGLE,
	[43000] = EFFECT_MANGLE,
	[61768] = EFFECT_RESOLVE,
	[61769] = EFFECT_RESOLVE,
	[61770] = EFFECT_RESOLVE,
	[61798] = EFFECT_BRUTALITY,
	[61799] = EFFECT_BRUTALITY,
	[61817] = EFFECT_RESOLVE,
	[61818] = EFFECT_RESOLVE,
	[61819] = EFFECT_RESOLVE,
	[61822] = EFFECT_RESOLVE,
	[61854] = EFFECT_MAIM,
	[61855] = EFFECT_MAIM,
	[61856] = EFFECT_MAIM,
	[61862] = EFFECT_WARD,
	[61863] = EFFECT_WARD,
	[61864] = EFFECT_WARD,
	[61882] = EFFECT_SAVAGERY,
	[61892] = EFFECT_VITALITY,
	[61894] = EFFECT_VITALITY,
	[61896] = EFFECT_VITALITY,
	[61898] = EFFECT_SAVAGERY,
	[62056] = EFFECT_ENDURANCE,
	[62102] = EFFECT_ENDURANCE,
	[62106] = EFFECT_ENDURANCE,
	[62110] = EFFECT_ENDURANCE,
	[62245] = EFFECT_PROTECTION,
	[62246] = EFFECT_PROTECTION,
	[62247] = EFFECT_PROTECTION,
	[62319] = EFFECT_PROPHECY,
	[62320] = EFFECT_PROPHECY,
	[62336] = EFFECT_HEROISM,
	[62337] = EFFECT_HEROISM,
	[62338] = EFFECT_HEROISM,
	[62339] = EFFECT_MAIM,
	[62340] = EFFECT_MAIM,
	[62341] = EFFECT_MAIM,
	[62475] = EFFECT_RESOLVE,
	[62477] = EFFECT_RESOLVE,
	[62481] = EFFECT_RESOLVE,
	[62483] = EFFECT_RESOLVE,
	[62492] = EFFECT_MAIM,
	[62493] = EFFECT_MAIM,
	[62494] = EFFECT_MAIM,
	[62495] = EFFECT_MAIM,
	[62500] = EFFECT_MAIM,
	[62501] = EFFECT_MAIM,
	[62503] = EFFECT_MAIM,
	[62504] = EFFECT_MAIM,
	[62505] = EFFECT_HEROISM,
	[62507] = EFFECT_MAIM,
	[62508] = EFFECT_HEROISM,
	[62509] = EFFECT_MAIM,
	[62510] = EFFECT_HEROISM,
	[62511] = EFFECT_MAIM,
	[62512] = EFFECT_HEROISM,
	[62582] = EFFECT_FRACTURE,
	[62585] = EFFECT_FRACTURE,
	[62588] = EFFECT_FRACTURE,
	[62619] = EFFECT_WARD,
	[62620] = EFFECT_RESOLVE,
	[62621] = EFFECT_WARD,
	[62622] = EFFECT_RESOLVE,
	[62623] = EFFECT_WARD,
	[62624] = EFFECT_RESOLVE,
	[62625] = EFFECT_WARD,
	[62626] = EFFECT_RESOLVE,
	[62627] = EFFECT_WARD,
	[62628] = EFFECT_RESOLVE,
	[62629] = EFFECT_WARD,
	[62630] = EFFECT_RESOLVE,
	[62631] = EFFECT_WARD,
	[62632] = EFFECT_RESOLVE,
	[62633] = EFFECT_WARD,
	[62634] = EFFECT_RESOLVE,
	[62635] = EFFECT_WARD,
	[62636] = EFFECT_BERSERK,
	[62637] = EFFECT_RESOLVE,
	[62638] = EFFECT_WARD,
	[62639] = EFFECT_BERSERK,
	[62640] = EFFECT_RESOLVE,
	[62641] = EFFECT_WARD,
	[62642] = EFFECT_BERSERK,
	[62643] = EFFECT_RESOLVE,
	[62644] = EFFECT_WARD,
	[62645] = EFFECT_BERSERK,
	[62799] = EFFECT_SORCERY,
	[62800] = EFFECT_SORCERY,
	[63340] = EFFECT_VITALITY,
	[63532] = EFFECT_RESOLVE,
	[63558] = EFFECT_EXPEDITION,
	[63561] = EFFECT_EXPEDITION,
	[63562] = EFFECT_EXPEDITION,
	[63563] = EFFECT_EXPEDITION,
	[63571] = EFFECT_WARD,
	[63599] = EFFECT_RESOLVE,
	[63600] = EFFECT_WARD,
	[63602] = EFFECT_RESOLVE,
	[63603] = EFFECT_WARD,
	[63606] = EFFECT_RESOLVE,
	[63607] = EFFECT_WARD,
	[64047] = EFFECT_BERSERK,
	[64048] = EFFECT_BERSERK,
	[64050] = EFFECT_BERSERK,
	[64051] = EFFECT_BERSERK,
	[64052] = EFFECT_BERSERK,
	[64053] = EFFECT_BERSERK,
	[64054] = EFFECT_BERSERK,
	[64055] = EFFECT_BERSERK,
	[64056] = EFFECT_BERSERK,
	[64057] = EFFECT_BERSERK,
	[64058] = EFFECT_BERSERK,
	[64080] = EFFECT_VITALITY,
	[64081] = EFFECT_VITALITY,
	[64082] = EFFECT_VITALITY,
	[64144] = EFFECT_FRACTURE,
	[64145] = EFFECT_FRACTURE,
	[64146] = EFFECT_FRACTURE,
	[64147] = EFFECT_FRACTURE,
	[64178] = EFFECT_BERSERK,
	[64255] = EFFECT_FRACTURE,
	[64256] = EFFECT_BREACH,
	[64258] = EFFECT_SORCERY,
	[64259] = EFFECT_BRUTALITY,
	[64260] = EFFECT_SAVAGERY,
	[64261] = EFFECT_PROPHECY,
	[64954] = EFFECT_EROSION,
	[64955] = EFFECT_EROSION,
	[64956] = EFFECT_EROSION,
	[64957] = EFFECT_EROSION,
	[68359] = EFFECT_MAIM,
	[68512] = EFFECT_WARD,
	[68513] = EFFECT_WARD,
	[68514] = EFFECT_WARD,
	[68515] = EFFECT_WARD,
	[68588] = EFFECT_BREACH,
	[68589] = EFFECT_BREACH,
	[68591] = EFFECT_BREACH,
	[68592] = EFFECT_BREACH,
	[68595] = EFFECT_FORCE,
	[68596] = EFFECT_FORCE,
	[68597] = EFFECT_FORCE,
	[68598] = EFFECT_FORCE,
	[68628] = EFFECT_FORCE,
	[68629] = EFFECT_FORCE,
	[68630] = EFFECT_FORCE,
	[68631] = EFFECT_FORCE,
	[68632] = EFFECT_FORCE,
	[68636] = EFFECT_FORCE,
	[68638] = EFFECT_FORCE,
	[68640] = EFFECT_FORCE,
	[76037] = EFFECT_BERSERK,
	[76564] = EFFECT_FORCE,
	[76724] = EFFECT_PROTECTION,
	[76725] = EFFECT_PROTECTION,
	[76726] = EFFECT_PROTECTION,
	[76727] = EFFECT_PROTECTION,
	[77056] = EFFECT_PROTECTION,
	[77057] = EFFECT_PROTECTION,
	[77058] = EFFECT_PROTECTION,
	[77059] = EFFECT_PROTECTION,
	[77418] = EFFECT_INTELLECT,
	[77419] = EFFECT_INTELLECT,
	[77420] = EFFECT_INTELLECT,
	[77421] = EFFECT_INTELLECT,
}

majorEffects = {
	[18868] = EFFECT_WARD,
	[21927] = EFFECT_DEFILE,
	[22236] = EFFECT_RESOLVE,
	[23216] = EFFECT_EXPEDITION,
	[23673] = EFFECT_BRUTALITY,
	[24153] = EFFECT_DEFILE,
	[24686] = EFFECT_DEFILE,
	[24702] = EFFECT_DEFILE,
	[24703] = EFFECT_DEFILE,
	[26220] = EFFECT_ENDURANCE,
	[26795] = EFFECT_SAVAGERY,
	[26809] = EFFECT_ENDURANCE,
	[26999] = EFFECT_ENDURANCE,
	[27005] = EFFECT_ENDURANCE,
	[27011] = EFFECT_ENDURANCE,
	[27020] = EFFECT_ENDURANCE,
	[27026] = EFFECT_ENDURANCE,
	[27032] = EFFECT_ENDURANCE,
	[27190] = EFFECT_SAVAGERY,
	[27194] = EFFECT_SAVAGERY,
	[27198] = EFFECT_SAVAGERY,
	[28307] = EFFECT_FRACTURE,
	[29011] = EFFECT_FORTITUDE,
	[29230] = EFFECT_DEFLIE,
	[31759] = EFFECT_MENDING,
	[32748] = EFFECT_ENDURANCE,
	[33210] = EFFECT_EXPEDITION,
	[33317] = EFFECT_BRUTALITY,
	[33328] = EFFECT_EXPEDITION,
	[33363] = EFFECT_BREACH,
	[33399] = EFFECT_DEFILE,
	[34734] = EFFECT_FRACTURE,
	[36050] = EFFECT_EXPEDITION,
	[36228] = EFFECT_FRACTURE,
	[36232] = EFFECT_FRACTURE,
	[36236] = EFFECT_FRACTURE,
	[36509] = EFFECT_DEFILE,
	[36515] = EFFECT_DEFILE,
	[36894] = EFFECT_BRUTALITY,
	[36903] = EFFECT_BRUTALITY,
	[36946] = EFFECT_EXPEDITION,
	[36959] = EFFECT_EXPEDITION,
	[36972] = EFFECT_BREACH,
	[36973] = EFFECT_BERSERK,
	[36980] = EFFECT_BREACH,
	[37511] = EFFECT_DEFILE,
	[37515] = EFFECT_DEFILE,
	[37519] = EFFECT_DEFILE,
	[37523] = EFFECT_DEFILE,
	[37528] = EFFECT_DEFILE,
	[37533] = EFFECT_DEFILE,
	[37538] = EFFECT_DEFILE,
	[37542] = EFFECT_DEFILE,
	[37546] = EFFECT_DEFILE,
	[37591] = EFFECT_BREACH,
	[37599] = EFFECT_BREACH,
	[37607] = EFFECT_BREACH,
	[37618] = EFFECT_BREACH,
	[37627] = EFFECT_BREACH,
	[37636] = EFFECT_BREACH,
	[37645] = EFFECT_BERSERK,
	[37654] = EFFECT_BERSERK,
	[37663] = EFFECT_BERSERK,
	[37789] = EFFECT_EXPEDITION,
	[37793] = EFFECT_EXPEDITION,
	[37797] = EFFECT_EXPEDITION,
	[37852] = EFFECT_EXPEDITION,
	[37859] = EFFECT_EXPEDITION,
	[37866] = EFFECT_EXPEDITION,
	[37873] = EFFECT_EXPEDITION,
	[37881] = EFFECT_EXPEDITION,
	[37889] = EFFECT_EXPEDITION,
	[37897] = EFFECT_EXPEDITION,
	[37906] = EFFECT_EXPEDITION,
	[37915] = EFFECT_EXPEDITION,
	[37924] = EFFECT_BRUTALITY,
	[37927] = EFFECT_BRUTALITY,
	[37930] = EFFECT_BRUTALITY,
	[37933] = EFFECT_BRUTALITY,
	[37936] = EFFECT_BRUTALITY,
	[37939] = EFFECT_BRUTALITY,
	[37942] = EFFECT_BRUTALITY,
	[37947] = EFFECT_BRUTALITY,
	[37952] = EFFECT_BRUTALITY,
	[38686] = EFFECT_DEFILE,
	[38838] = EFFECT_DEFILE,
	[40175] = EFFECT_FORTITUDE,
	[40225] = EFFECT_FORCE,
	[40443] = EFFECT_FORTITUDE,
	[42285] = EFFECT_FORTITUDE,
	[42288] = EFFECT_FORTITUDE,
	[42291] = EFFECT_FORTITUDE,
	[44820] = EFFECT_WARD,
	[44821] = EFFECT_WARD,
	[44822] = EFFECT_RESOLVE,
	[44823] = EFFECT_WARD,
	[44824] = EFFECT_RESOLVE,
	[44825] = EFFECT_WARD,
	[44826] = EFFECT_RESOLVE,
	[44827] = EFFECT_WARD,
	[44828] = EFFECT_RESOLVE,
	[44829] = EFFECT_WARD,
	[44830] = EFFECT_RESOLVE,
	[44831] = EFFECT_WARD,
	[44832] = EFFECT_RESOLVE,
	[44833] = EFFECT_WARD,
	[44834] = EFFECT_RESOLVE,
	[44835] = EFFECT_WARD,
	[44836] = EFFECT_RESOLVE,
	[44838] = EFFECT_WARD,
	[44839] = EFFECT_RESOLVE,
	[44840] = EFFECT_WARD,
	[44841] = EFFECT_RESOLVE,
	[44842] = EFFECT_WARD,
	[44843] = EFFECT_RESOLVE,
	[44854] = EFFECT_PROTECTION,
	[44857] = EFFECT_PROTECTION,
	[44859] = EFFECT_PROTECTION,
	[44860] = EFFECT_PROTECTION,
	[44862] = EFFECT_PROTECTION,
	[44863] = EFFECT_PROTECTION,
	[44864] = EFFECT_PROTECTION,
	[44865] = EFFECT_PROTECTION,
	[44866] = EFFECT_PROTECTION,
	[44867] = EFFECT_PROTECTION,
	[44868] = EFFECT_PROTECTION,
	[44869] = EFFECT_PROTECTION,
	[44871] = EFFECT_PROTECTION,
	[44872] = EFFECT_PROTECTION,
	[44874] = EFFECT_PROTECTION,
	[44876] = EFFECT_PROTECTION,
	[45076] = EFFECT_WARD,
	[48078] = EFFECT_BERSERK,
	[48946] = EFFECT_FRACTURE,
	[53881] = EFFECT_SPELL_SHATTER,
	[55033] = EFFECT_MENDING,
	[58869] = EFFECT_DEFILE,
	[61670] = EFFECT_BRUTALITY,
	[61758] = EFFECT_MENDING,
	[61759] = EFFECT_MENDING,
	[61760] = EFFECT_MENDING,
	[61815] = EFFECT_RESOLVE,
	[61816] = EFFECT_WARD,
	[61820] = EFFECT_RESOLVE,
	[61821] = EFFECT_WARD,
	[61823] = EFFECT_RESOLVE,
	[61824] = EFFECT_WARD,
	[61825] = EFFECT_RESOLVE,
	[61826] = EFFECT_WARD,
	[61827] = EFFECT_RESOLVE,
	[61828] = EFFECT_WARD,
	[61829] = EFFECT_RESOLVE,
	[61830] = EFFECT_WARD,
	[61831] = EFFECT_RESOLVE,
	[61832] = EFFECT_WARD,
	[61833] = EFFECT_EXPEDITION,
	[61834] = EFFECT_WARD,
	[61835] = EFFECT_RESOLVE,
	[61836] = EFFECT_RESOLVE,
	[61837] = EFFECT_WARD,
	[61838] = EFFECT_EXPEDITION,
	[61839] = EFFECT_EXPEDITION,
	[61840] = EFFECT_EXPEDITION,
	[61841] = EFFECT_RESOLVE,
	[61842] = EFFECT_WARD,
	[61843] = EFFECT_WARD,
	[61844] = EFFECT_RESOLVE,
	[61845] = EFFECT_WARD,
	[61846] = EFFECT_RESOLVE,
	[61871] = EFFECT_FORTITUDE,
	[61872] = EFFECT_FORTITUDE,
	[61873] = EFFECT_FORTITUDE,
	[61884] = EFFECT_FORTITUDE,
	[61885] = EFFECT_FORTITUDE,
	[61886] = EFFECT_ENDURANCE,
	[61887] = EFFECT_FORTITUDE,
	[61888] = EFFECT_ENDURANCE,
	[61889] = EFFECT_ENDURANCE,
	[61890] = EFFECT_FORTITUDE,
	[61891] = EFFECT_FORTITUDE,
	[61893] = EFFECT_FORTITUDE,
	[61895] = EFFECT_FORTITUDE,
	[61897] = EFFECT_FORTITUDE,
	[61909] = EFFECT_FRACTURE,
	[61910] = EFFECT_FRACTURE,
	[61911] = EFFECT_FRACTURE,
	[62057] = EFFECT_BRUTALITY,
	[62058] = EFFECT_BRUTALITY,
	[62059] = EFFECT_BRUTALITY,
	[62060] = EFFECT_BRUTALITY,
	[62062] = EFFECT_SORCERY,
	[62063] = EFFECT_BRUTALITY,
	[62064] = EFFECT_SORCERY,
	[62065] = EFFECT_BRUTALITY,
	[62066] = EFFECT_SORCERY,
	[62067] = EFFECT_BRUTALITY,
	[62068] = EFFECT_SORCERY,
	[62147] = EFFECT_BRUTALITY,
	[62150] = EFFECT_BRUTALITY,
	[62153] = EFFECT_BRUTALITY,
	[62156] = EFFECT_BRUTALITY,
	[62159] = EFFECT_RESOLVE,
	[62160] = EFFECT_WARD,
	[62161] = EFFECT_RESOLVE,
	[62162] = EFFECT_WARD,
	[62163] = EFFECT_RESOLVE,
	[62164] = EFFECT_WARD,
	[62165] = EFFECT_RESOLVE,
	[62166] = EFFECT_WARD,
	[62167] = EFFECT_WARD,
	[62168] = EFFECT_RESOLVE,
	[62169] = EFFECT_RESOLVE,
	[62170] = EFFECT_WARD,
	[62171] = EFFECT_RESOLVE,
	[62172] = EFFECT_WARD,
	[62173] = EFFECT_RESOLVE,
	[62174] = EFFECT_WARD,
	[62175] = EFFECT_RESOLVE,
	[62176] = EFFECT_WARD,
	[62179] = EFFECT_RESOLVE,
	[62180] = EFFECT_WARD,
	[62181] = EFFECT_EXPEDITION,
	[62184] = EFFECT_RESOLVE,
	[62185] = EFFECT_WARD,
	[62186] = EFFECT_EXPEDITION,
	[62189] = EFFECT_RESOLVE,
	[62190] = EFFECT_WARD,
	[62191] = EFFECT_EXPEDITION,
	[62195] = EFFECT_BERSERK,
	[62240] = EFFECT_SORCERY,
	[62241] = EFFECT_SORCERY,
	[62242] = EFFECT_SORCERY,
	[62243] = EFFECT_SORCERY,
	[62249] = EFFECT_EXPEDITION,
	[62250] = EFFECT_FORTITUDE,
	[62251] = EFFECT_ENDURANCE,
	[62252] = EFFECT_INTELLECT,
	[62256] = EFFECT_EXPEDITION,
	[62257] = EFFECT_FORTITUDE,
	[62258] = EFFECT_ENDURANCE,
	[62259] = EFFECT_INTELLECT,
	[62263] = EFFECT_EXPEDITION,
	[62264] = EFFECT_FORTITUDE,
	[62265] = EFFECT_ENDURANCE,
	[62266] = EFFECT_INTELLECT,
	[62270] = EFFECT_EXPEDITION,
	[62271] = EFFECT_FORTITUDE,
	[62272] = EFFECT_ENDURANCE,
	[62273] = EFFECT_INTELLECT,
	[62344] = EFFECT_BRUTALITY,
	[62347] = EFFECT_BRUTALITY,
	[62350] = EFFECT_BRUTALITY,
	[62387] = EFFECT_BRUTALITY,
	[62392] = EFFECT_BRUTALITY,
	[62396] = EFFECT_BRUTALITY,
	[62400] = EFFECT_BRUTALITY,
	[62415] = EFFECT_BRUTALITY,
	[62425] = EFFECT_BRUTALITY,
	[62441] = EFFECT_BRUTALITY,
	[62448] = EFFECT_BRUTALITY,
	[62470] = EFFECT_FRACTURE,
	[62471] = EFFECT_FRACTURE,
	[62473] = EFFECT_FRACTURE,
	[62474] = EFFECT_FRACTURE,
	[62476] = EFFECT_FRACTURE,
	[62480] = EFFECT_FRACTURE,
	[62482] = EFFECT_FRACTURE,
	[62484] = EFFECT_FRACTURE,
	[62485] = EFFECT_BREACH,
	[62486] = EFFECT_BREACH,
	[62487] = EFFECT_FRACTURE,
	[62488] = EFFECT_FRACTURE,
	[62489] = EFFECT_BREACH,
	[62490] = EFFECT_FRACTURE,
	[62491] = EFFECT_BREACH,
	[62513] = EFFECT_DEFILE,
	[62514] = EFFECT_DEFILE,
	[62515] = EFFECT_DEFILE,
	[62531] = EFFECT_EXPEDITION,
	[62537] = EFFECT_EXPEDITION,
	[62540] = EFFECT_EXPEDITION,
	[62543] = EFFECT_EXPEDITION,
	[62578] = EFFECT_DEFILE,
	[62579] = EFFECT_DEFILE,
	[62580] = EFFECT_DEFILE,
	[62747] = EFFECT_PROPHECY,
	[62748] = EFFECT_PROPHECY,
	[62749] = EFFECT_PROPHECY,
	[62750] = EFFECT_PROPHECY,
	[62751] = EFFECT_PROPHECY,
	[62752] = EFFECT_PROPHECY,
	[62753] = EFFECT_PROPHECY,
	[62754] = EFFECT_PROPHECY,
	[62755] = EFFECT_PROPHECY,
	[62756] = EFFECT_PROPHECY,
	[62757] = EFFECT_PROPHECY,
	[62758] = EFFECT_PROPHECY,
	[62772] = EFFECT_SPELL_SHATTER,
	[62773] = EFFECT_SPELL_SHATTER,
	[62774] = EFFECT_SPELL_SHATTER,
	[62775] = EFFECT_SPELL_SHATTER,
	[62780] = EFFECT_SPELL_SHATTER,
	[62783] = EFFECT_SPELL_SHATTER,
	[62786] = EFFECT_SPELL_SHATTER,
	[62787] = EFFECT_SPELL_SHATTER,
	[62789] = EFFECT_SPELL_SHATTER,
	[62792] = EFFECT_SPELL_SHATTER,
	[62795] = EFFECT_SPELL_SHATTER,
	[63015] = EFFECT_EVASION,
	[63016] = EFFECT_EVASION,
	[63017] = EFFECT_EVASION,
	[63018] = EFFECT_EVASION,
	[63019] = EFFECT_EVASION,
	[63023] = EFFECT_EVASION,
	[63026] = EFFECT_EVASION,
	[63028] = EFFECT_EVASION,
	[63030] = EFFECT_EVASION,
	[63036] = EFFECT_EVASION,
	[63040] = EFFECT_EVASION,
	[63042] = EFFECT_EVASION,
	[63084] = EFFECT_RESOLVE,
	[63085] = EFFECT_WARD,
	[63088] = EFFECT_RESOLVE,
	[63089] = EFFECT_WARD,
	[63091] = EFFECT_RESOLVE,
	[63092] = EFFECT_WARD,
	[63116] = EFFECT_RESOLVE,
	[63117] = EFFECT_WARD,
	[63119] = EFFECT_RESOLVE,
	[63120] = EFFECT_WARD,
	[63123] = EFFECT_RESOLVE,
	[63124] = EFFECT_WARD,
	[63127] = EFFECT_RESOLVE,
	[63128] = EFFECT_WARD,
	[63131] = EFFECT_RESOLVE,
	[63132] = EFFECT_WARD,
	[63134] = EFFECT_RESOLVE,
	[63135] = EFFECT_WARD,
	[63137] = EFFECT_RESOLVE,
	[63138] = EFFECT_WARD,
	[63140] = EFFECT_RESOLVE,
	[63141] = EFFECT_WARD,
	[63143] = EFFECT_RESOLVE,
	[63144] = EFFECT_WARD,
	[63148] = EFFECT_DEFILE,
	[63223] = EFFECT_SORCERY,
	[63224] = EFFECT_SORCERY,
	[63225] = EFFECT_SORCERY,
	[63226] = EFFECT_SORCERY,
	[63227] = EFFECT_SORCERY,
	[63228] = EFFECT_SORCERY,
	[63229] = EFFECT_SORCERY,
	[63230] = EFFECT_SORCERY,
	[63231] = EFFECT_SORCERY,
	[63232] = EFFECT_SORCERY,
	[63233] = EFFECT_SORCERY,
	[63234] = EFFECT_SORCERY,
	[63533] = EFFECT_VITALITY,
	[63534] = EFFECT_VITALITY,
	[63535] = EFFECT_VITALITY,
	[63536] = EFFECT_VITALITY,
	[63909] = EFFECT_FRACTURE,
	[63912] = EFFECT_FRACTURE,
	[63913] = EFFECT_FRACTURE,
	[63914] = EFFECT_FRACTURE,
	[63915] = EFFECT_FRACTURE,
	[63916] = EFFECT_FRACTURE,
	[63917] = EFFECT_FRACTURE,
	[63918] = EFFECT_FRACTURE,
	[63919] = EFFECT_FRACTURE,
	[63920] = EFFECT_FRACTURE,
	[63921] = EFFECT_BREACH,
	[63922] = EFFECT_FRACTURE,
	[63923] = EFFECT_BREACH,
	[63924] = EFFECT_FRACTURE,
	[63925] = EFFECT_BREACH,
	[63987] = EFFECT_EXPEDITION,
	[63993] = EFFECT_EXPEDITION,
	[63999] = EFFECT_EXPEDITION,
	[64005] = EFFECT_EXPEDITION,
	[64012] = EFFECT_EXPEDITION,
	[64019] = EFFECT_EXPEDITION,
	[64026] = EFFECT_EXPEDITION,
	[64166] = EFFECT_PROTECTION,
	[64251] = EFFECT_BREACH,
	[64254] = EFFECT_FRACTURE,
	[64562] = EFFECT_WARD,
	[64952] = EFFECT_SAVAGERY,
	[65133] = EFFECT_HEROISM,
	[66075] = EFFECT_RESOLVE,
	[66083] = EFFECT_RESOLVE,
	[67708] = EFFECT_EXPEDITION,
	[67714] = EFFECT_EXPEDITION,
	[67715] = EFFECT_EXPEDITION,
	[67716] = EFFECT_EXPEDITION,
	[68163] = EFFECT_DEFILE,
	[68164] = EFFECT_DEFILE,
	[68165] = EFFECT_DEFILE,
	[68793] = EFFECT_EXPEDITION,
	[68795] = EFFECT_EXPEDITION,
	[68797] = EFFECT_ENDURANCE,
	[68799] = EFFECT_ENDURANCE,
	[68800] = EFFECT_ENDURANCE,
	[68801] = EFFECT_ENDURANCE,
	[68804] = EFFECT_BRUTALITY,
	[68805] = EFFECT_BRUTALITY,
	[68806] = EFFECT_BRUTALITY,
	[68807] = EFFECT_BRUTALITY,
	[68814] = EFFECT_BRUTALITY,
	[68815] = EFFECT_BRUTALITY,
	[68816] = EFFECT_BRUTALITY,
	[68817] = EFFECT_BRUTALITY,
	[68843] = EFFECT_BRUTALITY,
	[68845] = EFFECT_BRUTALITY,
	[68852] = EFFECT_BRUTALITY,
	[68859] = EFFECT_BRUTALITY,
	[69685] = EFFECT_EVASION,
	[72655] = EFFECT_EXPEDITION,
	[72656] = EFFECT_EXPEDITION,
	[72657] = EFFECT_EXPEDITION,
	[72658] = EFFECT_EXPEDITION,
	[76044] = EFFECT_EXPEDITION,
	[76057] = EFFECT_PROPHECY,
	[76498] = EFFECT_EXPEDITION,
	[76499] = EFFECT_EXPEDITION,
	[76500] = EFFECT_EXPEDITION,
	[76501] = EFFECT_EXPEDITION,
	[76502] = EFFECT_EXPEDITION,
	[76503] = EFFECT_EXPEDITION,
	[76504] = EFFECT_EXPEDITION,
	[76505] = EFFECT_EXPEDITION,
	[76506] = EFFECT_EXPEDITION,
	[76507] = EFFECT_EXPEDITION,
	[76509] = EFFECT_EXPEDITION,
	[76510] = EFFECT_EXPEDITION,
	[76518] = EFFECT_BRUTALITY,
	[76519] = EFFECT_BRUTALITY,
	[76520] = EFFECT_BRUTALITY,
	[76521] = EFFECT_BRUTALITY,
	[77031] = EFFECT_INTELLECT,
	[77033] = EFFECT_INTELLECT,
	[77034] = EFFECT_INTELLECT,
	[77035] = EFFECT_INTELLECT,
	[77082] = EFFECT_MENDING,
	[77918] = EFFECT_MENDING,
	[77922] = EFFECT_MENDING,
}


-- ------------------------
-- AURA DATA DEBUG & PATCH FUNCTIONS
-- Used after patches to assist in getting hold of changed abilityIDs (messy, only uncomment when needed to use)
-- ------------------------

--[[
function GetToggled()
	-- returns all abilityIDs that match the names used as toggledAuras
	-- used to grab ALL the nessecary abilityIDs for the table after a patch changes things
	local data, names, saved = {}, {}, {}

	for k, v in pairs(toggledAuras) do
		names[GetAbilityName(k)] = true
	end

	for x = 1, 100000 do
		if (DoesAbilityExist(x) and names[GetAbilityName(x)] and GetAbilityDuration(x) == 0 and GetAbilityDescription(x) ~= '') then
			table.insert(data, {(GetAbilityName(x)), x, GetAbilityDescription(x)})
		end
	end

	table.sort(data, function(a, b)	return a[1] > b[1] end)

	for k, v in ipairs(data) do
		d(v[2] .. ' ' .. v[1] .. '      ' .. string.sub(v[3], 1, 30))
		table.insert(saved, v[2] .. '|' .. v[1]..'||' ..string.sub(v[3],1,30))
	end

	--SrendarrDB.toggled = saved
end

function GetMajorEffects()
	local name
	SrendarrDB.majorBuffs = {}

	for id = 3000, 100000 do -- haven't seen any outside of these ids so compact search space a bit
		if (DoesAbilityExist(id) and GetAbilityDuration(id) > 0) then
			name = string.sub(GetAbilityName(id), 1, 6)

			if (name == 'Major ') then
--				table.insert(SrendarrDB.majorBuffs, string.format('[%d] = %s, ', id, GetAbilityName(id)))
				table.insert(SrendarrDB.majorBuffs, string.format('%d|%s|%d|%s', id, GetAbilityName(id), GetAbilityDuration(id), GetAbilityIcon(id)))
			end
		end
	end
end

function GetMinorEffects()
	local name
	SrendarrDB.minorBuffs = {}

	for id = 3000, 100000 do -- haven't seen any outside of these ids so compact search space a bit
		if (DoesAbilityExist(id) and GetAbilityDuration(id) > 0) then
			name = string.sub(GetAbilityName(id), 1, 6)

			if (name == 'Minor ') then
--				table.insert(SrendarrDB.minorBuffs, string.format('[%d] = %s, ', id, GetAbilityName(id)))
				table.insert(SrendarrDB.minorBuffs, string.format('%d|%s|%d|%s', id, GetAbilityName(id), GetAbilityDuration(id), GetAbilityIcon(id)))
			end
		end
	end
end


function GetAurasByName(name)
	for x = 1, 100000 do
		if (DoesAbilityExist(x) and GetAbilityName(x) == name and GetAbilityDuration(x) > 0) then
			d('['..x ..'] '..GetAbilityName(x) .. '-' .. GetAbilityDuration(x) .. '-' .. GetAbilityDescription(x))
		end
	end
end

function GetAuraInfo(idA, idB)
	d(string.format('[%d] %s (%ds) - %s', idA, GetAbilityName(idA), GetAbilityDuration(idA), GetAbilityDescription(idA)))
	d(string.format('[%d] %s (%ds) - %s', idB, GetAbilityName(idB), GetAbilityDuration(idB), GetAbilityDescription(idB)))
end
]]