	local _detalhes = 		_G.Details
	local _ = nil
	_detalhes.custom_function_cache = {}
	local addonName, Details222 = ...
	---@type details
	local Details = _detalhes
	local detailsFramework = DetailsFramework

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--local pointers
	local format = string.format
	local floor = math.floor
	local sort = table.sort
	local tinsert = table.insert
	local ipairs = ipairs
	local unpack = table.unpack or unpack
	local _GetSpellInfo = Details.getspellinfo
	local IsInRaid = IsInRaid
	local IsInGroup = IsInGroup
	local stringReplace = Details.string.replace
    local GetSpellLink = GetSpellLink or C_Spell.GetSpellLink --api local

	local Loc = LibStub("AceLocale-3.0"):GetLocale("Details")

	---@class details : table
	---@field DoesCustomDisplayExists fun(self:details, customDisplayName:string):number? return the index of the custom display if it exists, otherwise nil
	---@field GetClassCustom fun(self:details):table return the custom class
	---@field CreateCustomDisplayObject fun(self:details, name:string, icon:any, searchScript:string, tooltipScript:string?, totalScript:string?, percentScript:string?):table return a custom display object
	---@field InstallCustomObject fun(self:details, customObject:table):boolean install a custom display object
	---@field GetNumCustomDisplays fun(self:details):number return the number of custom displays
	---@field GetCustomDisplay fun(self:details, index:number):table return the custom display object at the given index
	---@field RemoveCustomObject fun(self:details, customObjectName:string):boolean remove a custom display object

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--constants

	local classCustom = Details.atributo_custom
	classCustom.mt = {__index = classCustom}

	local combatContainers = {
		["damagedone"] = 1,
		["healdone"] = 2,
	}

	--hold the mini custom objects
	classCustom._InstanceActorContainer = {}
	classCustom._InstanceLastCustomShown = {}
	classCustom._InstanceLastCombatShown = {}
	classCustom._TargetActorsProcessed = {}

	local ToKFunctions = Details.ToKFunctions
	local SelectedToKFunction = ToKFunctions[1]
	local UsingCustomRightText = false
	local UsingCustomLeftText = false

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--core

	function Details:GetCustomClass()
		return classCustom
	end

	function Details:DoesCustomDisplayExists(customDisplayName)
		for index, customDisplayObject in ipairs(Details.custom) do
			if (customDisplayObject:GetName() == customDisplayName) then
				return index
			end
		end
	end

	---@param self details
	---@param name string
	---@param icon any
	---@param searchScript string
	---@param tooltipScript string?
	---@param totalScript string?
	---@param percentScript string?
	function Details:CreateCustomDisplayObject(name, icon, searchScript, tooltipScript, totalScript, percentScript)
		local customObject = classCustom:CreateCustomDisplayObject()
		customObject.name = name
		customObject.icon = icon
		customObject.script = searchScript
		customObject.tooltip = tooltipScript
		customObject.total_script = totalScript
		customObject.percent_script = percentScript
		customObject.script_version = 1
		return customObject
	end

	function Details:GetNumCustomDisplays()
		return #Details.custom
	end

	function Details:GetCustomDisplay(index)
		return Details.custom[index]
	end

	function classCustom:GetCombatContainerIndex (attribute)
		return combatContainers [attribute]
	end

	function classCustom:RefreshWindow(instanceObject, combatObject, force, export)
		if not Details222.UpdateIsAllowed() then return end --temporary stop updates in th new dlc

		--get the custom object
		local customObject = instanceObject:GetCustomObject()

		if (not customObject) then
			return instanceObject:ResetAttribute()
		end

		--save the custom name in the instance
		instanceObject.customName = customObject.name

		--get the container holding the custom actor objects for this instance
		local instance_container = classCustom:GetInstanceCustomActorContainer (instanceObject)

		local last_shown = classCustom._InstanceLastCustomShown [instanceObject:GetId()]
		if (last_shown and last_shown ~= customObject:GetName()) then
			instance_container:WipeCustomActorContainer()
		end
		classCustom._InstanceLastCustomShown [instanceObject:GetId()] = customObject:GetName()

		local last_combat_shown = classCustom._InstanceLastCombatShown [instanceObject:GetId()]
		if (last_combat_shown and last_combat_shown ~= combatObject) then
			instance_container:WipeCustomActorContainer()
		end
		classCustom._InstanceLastCombatShown [instanceObject:GetId()] = combatObject

		--declare the main locals
		local total = 0
		local top = 0
		local amount = 0

		--check if is a custom script (if has .script)
		if (customObject:IsScripted()) then
			--be save reseting the values on every refresh
			instance_container:ResetCustomActorContainer()

			local func
			local scriptTypeName = "search"

			if (Details.custom_function_cache [instanceObject.customName]) then
				func = Details.custom_function_cache [instanceObject.customName]
			else
				--for k,v in pairs(customObject) do
				--	print(k,v)
				--end

				local errortext
				func, errortext = loadstring (customObject.script)
				if (func) then
					DetailsFramework:SetEnvironment(func)
					Details.custom_function_cache [instanceObject.customName] = func
				else
					Details:Msg("|cFFFF9900error compiling code for custom display " .. (instanceObject.customName or "") ..  " |r:", errortext)
				end

				if (customObject.tooltip and type(customObject.tooltip) == "string") then
					local tooltip_script, errortext = loadstring (customObject.tooltip)
					if (tooltip_script) then
						DetailsFramework:SetEnvironment(tooltip_script)
						Details.custom_function_cache [instanceObject.customName .. "Tooltip"] = tooltip_script
					else
						Details:Msg("|cFFFF9900error compiling tooltip code for custom display " .. (instanceObject.customName or "") ..  " |r:", errortext)
					end
					scriptTypeName = "tooltip"
				end

				if (customObject.total_script) then
					local total_script, errortext = loadstring (customObject.total_script)
					if (total_script) then
						DetailsFramework:SetEnvironment(total_script)
						Details.custom_function_cache [instanceObject.customName .. "Total"] = total_script
					else
						Details:Msg("|cFFFF9900error compiling total code for custom display " .. (instanceObject.customName or "") ..  " |r:", errortext)
					end
					scriptTypeName = "total"
				end

				if (customObject.percent_script) then
					local percent_script, errortext = loadstring (customObject.percent_script)
					if (percent_script) then
						DetailsFramework:SetEnvironment(percent_script)
						Details.custom_function_cache [instanceObject.customName .. "Percent"] = percent_script
					else
						Details:Msg("|cFFFF9900error compiling percent code for custom display " .. (instanceObject.customName or "") ..  " |r:", errortext)
					end
					scriptTypeName = "percent"
				end
			end

			if (not func) then
				Details:Msg(Loc ["STRING_CUSTOM_FUNC_INVALID"], func)
				Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
			end

			local okey, _total, _top, _amount = xpcall (func, geterrorhandler(), combatObject, instance_container, instanceObject)
			if (not okey) then
				local errorText = _total
				Details:Msg("|cFFFF9900error on display " .. customObject:GetName() .. " (" .. scriptTypeName .. ")|r:", errorText)
				return Details:EndRefresh(instanceObject, 0, combatObject, combatObject[1])
			end

			total = _total or 0
			top = _top or 0
			amount = _amount or 0

		else --does not have a .script
			--get the attribute
			local attribute = customObject:GetAttribute() --"damagedone"

			--get the custom function(actor, source, target, spellid)
			local func = classCustom [attribute]

			--get the combat container
			local container_index = self:GetCombatContainerIndex (attribute)
			local combat_container = combatObject [container_index]._ActorTable

			--build container
			total, top, amount = classCustom:BuildActorList (func, customObject.source, customObject.target, customObject.spellid, combatObject, combat_container, container_index, instance_container, instanceObject, customObject)
		end

		if (customObject:IsSpellTarget()) then
			amount = classCustom._TargetActorsProcessedAmt
			total = classCustom._TargetActorsProcessedTotal
			top = classCustom._TargetActorsProcessedTop
		end

		if (amount == 0) then
			if (force) then
				if (instanceObject:IsGroupMode()) then
					for i = 1, instanceObject.rows_fit_in_window  do
						Details.FadeHandler.Fader(instanceObject.barras [i], "in", Details.fade_speed)
					end
				end
			end
			instanceObject:EsconderScrollBar()
			return Details:EndRefresh (instanceObject, total, combatObject, nil)
		end

		if (amount > #instance_container._ActorTable) then
			amount = #instance_container._ActorTable
		end

		combatObject.totals [customObject:GetName()] = total

		instance_container:Sort()
		instance_container:Remap()

		if (export) then

			-- key name value need to be formated
			if (customObject) then

				local percent_script = Details.custom_function_cache [instanceObject.customName .. "Percent"]
				local total_script = Details.custom_function_cache [instanceObject.customName .. "Total"]
				local okey

				for index, actor in ipairs(instance_container._ActorTable) do

					local percent, ptotal

					if (percent_script) then
						okey, percent = xpcall (percent_script, geterrorhandler(), floor(actor.value), top, total, combatObject, instanceObject, actor)
						if (not okey) then
							Details:Msg("|cFFFF9900percent script error|r:", percent)
							return Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
						end
					else
						percent = format ("%.1f", floor(actor.value) / total * 100)
					end

					if (total_script) then
						local okey, value = xpcall (total_script, geterrorhandler(), floor(actor.value), top, total, combatObject, instanceObject, actor)
						if (not okey) then
							Details:Msg("|cFFFF9900total script error|r:", value)
							return Details:EndRefresh (instanceObject, 0, combatObject, combatObject [1])
						end

						if (type(value) == "number") then
							value = SelectedToKFunction (_, value)
						end
						ptotal = value
					else
						ptotal = SelectedToKFunction (_, floor(actor.value))
					end

					actor.report_value = ptotal .. " (" .. percent .. "%)"

					if (actor.id) then
						if (actor.id == 1) then
							actor.report_name = GetSpellLink(6603)
						elseif (actor.id > 10) then
							actor.report_name = GetSpellLink(actor.id)
						else
							actor.report_name = actor.nome
						end
					else
						actor.report_name = actor.nome
					end
				end

			end

			return total, instance_container._ActorTable, top, amount, "report_name"
		end

		instanceObject:RefreshScrollBar (amount)

		classCustom:Refresh (instanceObject, instance_container, combatObject, force, total, top, customObject)

		return Details:EndRefresh (instanceObject, total, combatObject, combatObject [container_index])

	end

	function classCustom:BuildActorList (func, source, target, spellid, combat, combat_container, container_index, instance_container, instance, custom_object)
		local total = 0
		local top = 0
		local amount = 0
		---@cast instance instance

		--check if is a spell target custom
		if (custom_object:IsSpellTarget()) then
			Details:Destroy(classCustom._TargetActorsProcessed)
			classCustom._TargetActorsProcessedAmt = 0
			classCustom._TargetActorsProcessedTotal = 0
			classCustom._TargetActorsProcessedTop = 0
			instance_container:ResetCustomActorContainer()
		end

		if (source == "[all]") then

			for _, actor in ipairs(combat_container) do
				local actortotal = func (_, actor, source, target, spellid, combat, instance_container)
				if (actortotal > 0) then
					total = total + actortotal
					amount = amount + 1

					if (actortotal > top) then
						top = actortotal
					end

					instance_container:SetValue(actor, actortotal)
				end
			end

		elseif (source == "[raid]") then

			if (Details.in_combat and instance.segmento == 0 and not export) then
				if (container_index == 1) then
					combat_container = Details.cache_damage_group
				elseif (container_index == 2) then
					combat_container = Details.cache_healing_group
				end
			end

			for _, actor in ipairs(combat_container) do
				if (actor.grupo) then
					if (not func) then
						Details:Msg("error on class_custom 'func' is invalid, backtrace:", debugstack())
						return
					end
					local actortotal = func (_, actor, source, target, spellid, combat, instance_container)

					if (actortotal > 0) then
						total = total + actortotal
						amount = amount + 1

						if (actortotal > top) then
							top = actortotal
						end

						instance_container:SetValue(actor, actortotal)
					end

				end
			end

		elseif (source == "[player]") then
			local pindex = combat [container_index]._NameIndexTable [Details.playername]
			if (pindex) then
				local actor = combat [container_index]._ActorTable [pindex]
				local actortotal = func (_, actor, source, target, spellid, combat, instance_container)

				if (actortotal > 0) then
					total = total + actortotal
					amount = amount + 1

					if (actortotal > top) then
						top = actortotal
					end

					instance_container:SetValue(actor, actortotal)
				end
			end
		else

			local pindex = combat [container_index]._NameIndexTable [source]
			if (pindex) then
				local actor = combat [container_index]._ActorTable [pindex]
				local actortotal = func (_, actor, source, target, spellid, combat, instance_container)

				if (actortotal > 0) then
					total = total + actortotal
					amount = amount + 1

					if (actortotal > top) then
						top = actortotal
					end

					instance_container:SetValue(actor, actortotal)
				end
			end
		end

		return total, top, amount
	end

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--refresh functions

	function classCustom:Refresh (instance, instance_container, combat, force, total, top, custom_object)
		---@cast instance instance
		local whichRowLine = 1
		local barContainer = instance.barras
		local percentageType = instance.row_info.percent_type

		local combatElapsedTime = combat:GetCombatTime()
		UsingCustomLeftText = instance.row_info.textL_enable_custom_text
		UsingCustomRightText = instance.row_info.textR_enable_custom_text

		--total bar
		local bUseTotalbar = false
		if (instance.total_bar.enabled) then
			bUseTotalbar = true
			if (instance.total_bar.only_in_group and (not IsInGroup() and not IsInRaid())) then
				bUseTotalbar = false
			end
		end

		local percent_script = Details.custom_function_cache [instance.customName .. "Percent"]
		local total_script = Details.custom_function_cache [instance.customName .. "Total"]

		local bars_show_data = instance.row_info.textR_show_data
		local bars_brackets = instance:GetBarBracket()
		local bars_separator = instance:GetBarSeparator()

		if (instance.bars_sort_direction == 1) then --top to bottom

			if (bUseTotalbar and instance.barraS[1] == 1) then

				whichRowLine = 2
				local iter_last = instance.barraS[2]
				if (iter_last == instance.rows_fit_in_window) then
					iter_last = iter_last - 1
				end

				local row1 = barContainer [1]
				row1.minha_tabela = nil
				row1.lineText1:SetText(Loc ["STRING_TOTAL"])
				row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combatElapsedTime) .. ")")

				row1:SetValue(100)
				local r, g, b = unpack(instance.total_bar.color)
				row1.textura:SetVertexColor(r, g, b)

				row1.icone_classe:SetTexture(instance.total_bar.icon)
				row1.icone_classe:SetTexCoord(0.0625, 0.9375, 0.0625, 0.9375)

				Details.FadeHandler.Fader(row1, "out")

				for i = instance.barraS[1], iter_last, 1 do
					instance_container._ActorTable[i]:UpdateBar (barContainer, whichRowLine, percentageType, i, total, top, instance, force, percent_script, total_script, combat, bars_show_data, bars_brackets, bars_separator)
					whichRowLine = whichRowLine+1
				end

			else
				for i = instance.barraS[1], instance.barraS[2], 1 do
					instance_container._ActorTable[i]:UpdateBar (barContainer, whichRowLine, percentageType, i, total, top, instance, force, percent_script, total_script, combat, bars_show_data, bars_brackets, bars_separator)
					whichRowLine = whichRowLine+1
				end
			end

		elseif (instance.bars_sort_direction == 2) then --bottom to top

			if (bUseTotalbar and instance.barraS[1] == 1) then

				whichRowLine = 2
				local iter_last = instance.barraS[2]
				if (iter_last == instance.rows_fit_in_window) then
					iter_last = iter_last - 1
				end

				local row1 = barContainer [1]
				row1.minha_tabela = nil
				row1.lineText1:SetText(Loc ["STRING_TOTAL"])
				row1.lineText4:SetText(Details:ToK2 (total) .. " (" .. Details:ToK (total / combatElapsedTime) .. ")")

				row1:SetValue(100)
				local r, g, b = unpack(instance.total_bar.color)
				row1.textura:SetVertexColor(r, g, b)

				row1.icone_classe:SetTexture(instance.total_bar.icon)
				row1.icone_classe:SetTexCoord(0.0625, 0.9375, 0.0625, 0.9375)

				Details.FadeHandler.Fader(row1, "out")

				for i = iter_last, instance.barraS[1], -1 do --vai atualizar s� o range que esta sendo mostrado
					instance_container._ActorTable[i]:UpdateBar (barContainer, whichRowLine, percentageType, i, total, top, instance, force, percent_script, total_script, combat, bars_show_data, bars_brackets, bars_separator)
					whichRowLine = whichRowLine+1
				end

			else
				for i = instance.barraS[2], instance.barraS[1], -1 do --vai atualizar s� o range que esta sendo mostrado
					instance_container._ActorTable[i]:UpdateBar (barContainer, whichRowLine, percentageType, i, total, top, instance, force, percent_script, total_script, combat, bars_show_data, bars_brackets, bars_separator)
					whichRowLine = whichRowLine+1
				end
			end

		end

		if (force) then
			if (instance:IsGroupMode()) then
				for i = whichRowLine, instance.rows_fit_in_window  do
					Details.FadeHandler.Fader(instance.barras [i], "in", Details.fade_speed)
				end
			end
		end

		instance:AutoAlignInLineFontStrings()

	end

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--custom object functions

	local actor_class_color_r, actor_class_color_g, actor_class_color_b

	function classCustom:UpdateBar (row_container, index, percentage_type, rank, total, top, instance, is_forced, percent_script, total_script, combat, bars_show_data, bars_brackets, bars_separator)
		---@cast instance instance
		local row = row_container[index]

		local previous_table = row.minha_tabela
		row.colocacao = rank
		row.minha_tabela = self
		self.minha_barra = row

		local percent
		local okey

		--percent
			if (percent_script) then
				--local value, top, total, combat, instance = ...
				okey, percent = xpcall (percent_script, geterrorhandler(), self.value, top, total, combat, instance, self)
				if (not okey) then
					Details:Msg("|cFFFF9900error on custom display function|r:", percent)
					return Details:EndRefresh (instance, 0, combat, combat [1])
				end
			else
				if (percentage_type == 1) then
					percent = format("%.1f", self.value / total * 100) .. "%"
				elseif (percentage_type == 2) then
					percent = format("%.1f", self.value / top * 100) .. "%"
				end
			end

			if (not percent) then
				percent = ""
			end

		--total done
			if (total_script) then
				local okey, value = xpcall (total_script, geterrorhandler(), self.value, top, total, combat, instance, self)
				if (not okey) then
					Details:Msg("|cFFFF9900error on custom display function|r:", value)
					return Details:EndRefresh (instance, 0, combat, combat [1])
				end

				if (instance.use_multi_fontstrings) then
					if (type(value) == "string") then
						instance:SetInLineTexts(row, "", value, percent) --usando essa linha
					else
						instance:SetInLineTexts(row, "", SelectedToKFunction(_, value), percent)
					end

				else
					if (type(value) == "number") then
						row.lineText4:SetText(SelectedToKFunction (_, value) .. bars_brackets[1] .. percent .. bars_brackets[2])
					else
						row.lineText4:SetText(value .. bars_brackets[1] .. percent .. bars_brackets[2])
					end
					row.lineText3:SetText("")
					row.lineText2:SetText("")
				end
			else
				local formatedValue = SelectedToKFunction(_, self.value)
				local rightText = formatedValue .. bars_brackets[1] .. percent .. bars_brackets[2]

				if (UsingCustomRightText) then
					row.lineText4:SetText(stringReplace(instance.row_info.textR_custom_text, formatedValue, "", percent, self, combat, instance, rightText))
				else
					if (instance.use_multi_fontstrings) then
						instance:SetInLineTexts(row, "", formatedValue, percent)
					else
						row.lineText4:SetText(rightText)
						row.lineText3:SetText("")
						row.lineText2:SetText("")
					end
				end
			end

		local row_value = floor((self.value / top) * 100)

		-- update tooltip function --

		if (self.id) then
			---@type spelltable
			local spellTable = self.my_actor
			local school = Details.spell_school_cache[self.nome] or (spellTable and spellTable.spellschool)
			if (school) then
				local schoolColor = Details.spells_school[school]
				if (not schoolColor) then
					schoolColor = Details.spells_school[1]
				end
				actor_class_color_r, actor_class_color_g, actor_class_color_b = unpack(schoolColor.decimals)
			else
				local schoolColor = Details.spells_school[1]
				actor_class_color_r, actor_class_color_g, actor_class_color_b = unpack(schoolColor.decimals)
			end
		else
			actor_class_color_r, actor_class_color_g, actor_class_color_b = self:GetBarColor()
		end

		self:RefreshBarra2(row, instance, previous_table, is_forced, row_value, index, row_container)

	end

	function classCustom:RefreshBarra2 (esta_barra, instance, tabela_anterior, forcar, esta_porcentagem, whichRowLine, barras_container)
		---@cast instance instance
		--primeiro colocado
		if (esta_barra.colocacao == 1) then
			if (not tabela_anterior or tabela_anterior ~= esta_barra.minha_tabela or forcar) then
				esta_barra:SetValue(100)

				if (esta_barra.hidden or esta_barra.fading_in or esta_barra.faded) then
					Details.FadeHandler.Fader(esta_barra, "out")
				end

				return self:RefreshBarra(esta_barra, instance)
			else
				return
			end
		else

			if (esta_barra.hidden or esta_barra.fading_in or esta_barra.faded) then

				esta_barra:SetValue(esta_porcentagem)
				Details.FadeHandler.Fader(esta_barra, "out")

				if (instance.row_info.texture_class_colors) then
					esta_barra.textura:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b)
				end
				if (instance.row_info.texture_background_class_color) then
					esta_barra.background:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b)
				end

				return self:RefreshBarra(esta_barra, instance)

			else
				--agora esta comparando se a tabela da barra � diferente da tabela na atualiza��o anterior
				if (not tabela_anterior or tabela_anterior ~= esta_barra.minha_tabela or forcar) then --aqui diz se a barra do jogador mudou de posi��o ou se ela apenas ser� atualizada

					esta_barra:SetValue(esta_porcentagem)

					esta_barra.last_value = esta_porcentagem --reseta o ultimo valor da barra

					if (Details.is_using_row_animations and forcar) then
						esta_barra.tem_animacao = 0
						esta_barra:SetScript("OnUpdate", nil)
					end

					return self:RefreshBarra(esta_barra, instance)

				elseif (esta_porcentagem ~= esta_barra.last_value) then --continua mostrando a mesma tabela ent�o compara a porcentagem
					--apenas atualizar
					if (Details.is_using_row_animations) then

						local upRow = barras_container [whichRowLine-1]
						if (upRow) then
							if (upRow.statusbar:GetValue() < esta_barra.statusbar:GetValue()) then
								esta_barra:SetValue(esta_porcentagem)
							else
								instance:AnimarBarra (esta_barra, esta_porcentagem)
							end
						else
							instance:AnimarBarra (esta_barra, esta_porcentagem)
						end
					else
						esta_barra:SetValue(esta_porcentagem)
					end
					esta_barra.last_value = esta_porcentagem
				end
			end
		end
	end

	function classCustom:RefreshBarra(thisBar, instanceObject, bFromResize)
		---@cast instanceObject instance
		local class, enemy, arena_enemy, arena_ally = self.classe, self.enemy, self.arena_enemy, self.arena_ally

		if (bFromResize) then
			if (self.id) then
				---@type spelltable
				local spellTable = self.my_actor
				local schoolData = Details.spell_school_cache[self.nome] or (spellTable and spellTable.spellschool)
				if (schoolData) then
					local schoolColor = Details.spells_school[schoolData]
					if (not schoolColor) then
						schoolColor = Details.spells_school[1]
					end
					actor_class_color_r, actor_class_color_g, actor_class_color_b = unpack(schoolColor.decimals)
				else
					local schoolColor = Details.spells_school[1]
					actor_class_color_r, actor_class_color_g, actor_class_color_b = unpack(schoolColor.decimals)
				end
			else
				actor_class_color_r, actor_class_color_g, actor_class_color_b = self:GetBarColor()
			end
		end

		self:SetBarColors(thisBar, instanceObject, actor_class_color_r, actor_class_color_g, actor_class_color_b)

		--we need a customized icon settings for custom displays.
		if (self.classe == "UNKNOW") then
			thisBar.icone_classe:SetTexture("Interface\\LFGFRAME\\LFGROLE_BW")
			thisBar.icone_classe:SetTexCoord(.25, .5, 0, 1)
			thisBar.icone_classe:SetVertexColor(1, 1, 1)

		elseif (self.classe == "UNGROUPPLAYER") then
			if (self.enemy) then
				if (Details.faction_against == "Horde") then
					thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
					thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
				else
					thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
					thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
				end
			else
				if (Details.faction_against == "Horde") then
					thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Human_Male")
					thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
				else
					thisBar.icone_classe:SetTexture("Interface\\ICONS\\Achievement_Character_Orc_Male")
					thisBar.icone_classe:SetTexCoord(0, 1, 0, 1)
				end
			end
			thisBar.icone_classe:SetVertexColor(1, 1, 1)

		elseif (self.classe == "PET") then
			thisBar.icone_classe:SetTexture(instanceObject.row_info.icon_file)
			thisBar.icone_classe:SetTexCoord(0.25, 0.49609375, 0.75, 1)
			thisBar.icone_classe:SetVertexColor(actor_class_color_r, actor_class_color_g, actor_class_color_b)

		else
			if (self.id) then
				thisBar.icone_classe:SetTexCoord(0.078125, 0.921875, 0.078125, 0.921875)
				thisBar.icone_classe:SetTexture(self.icon)
			else
				if (instanceObject.row_info.use_spec_icons) then
					local specId = (self.spec and self.spec ~= 0 and self.spec) or (self.my_actor.spec and self.my_actor.spec ~= 0 and self.my_actor.spec)
					if (specId and _detalhes.class_specs_coords[specId]) then
						thisBar.icone_classe:SetTexture(instanceObject.row_info.spec_file)
						thisBar.icone_classe:SetTexCoord(unpack(Details.class_specs_coords[specId]))
					else
						thisBar.icone_classe:SetTexture([[Interface\AddOns\Details\images\classes_small]])
						thisBar.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
					end
				else
					thisBar.icone_classe:SetTexture(instanceObject.row_info.icon_file)
					thisBar.icone_classe:SetTexCoord(unpack(Details.class_coords[self.classe]))
				end
			end
			thisBar.icone_classe:SetVertexColor(1, 1, 1)
		end

		--left text
		self:SetBarLeftText(thisBar, instanceObject, enemy, arena_enemy, arena_ally, UsingCustomLeftText)

		thisBar.lineText1:SetSize(thisBar:GetWidth() - thisBar.lineText4:GetStringWidth() - 20, 15)

	end

	function classCustom:CreateCustomActorContainer()
		return setmetatable({
			_NameIndexTable = {},
			_ActorTable = {}
		}, {__index = classCustom})
	end

	function classCustom:ResetCustomActorContainer()
		for _, actor in ipairs(self._ActorTable) do
			actor.value = actor.value - floor(actor.value)
			--actor.value = _detalhes:GetOrderNumber(actor.nome)
		end
	end

	function classCustom:WipeCustomActorContainer()
		Details:Destroy(self._ActorTable)
		Details:Destroy(self._NameIndexTable)
	end

	function classCustom:GetValue (actor)
		local actor_table = self:GetActorTable(actor)
		return actor_table.value
	end

	-- ~add
	function classCustom:AddValue (actor, actortotal, checktop, name_complement)
		local actor_table = self:GetActorTable(actor, name_complement)
		if (not getmetatable(actor)) then
			setmetatable(actor,classCustom.mt)
		end
		actor_table.my_actor = actor
		actor_table.value = actor_table.value + actortotal

		if (checktop) then
			if (actor_table.value > classCustom._TargetActorsProcessedTop) then
				classCustom._TargetActorsProcessedTop = actor_table.value
			end
		end

		return actor_table.value
	end

	function classCustom:SetValue(actor, actortotal, name_complement)
		local actor_table = self:GetActorTable(actor, name_complement)
		actor_table.my_actor = actor
		actor_table.value = actortotal
	end

	function classCustom:UpdateClass(actors)
		actors.new_actor.classe = actors.actor.classe
	end

	function classCustom:HasActor(actor)
		return self._NameIndexTable[actor.nome or actor.name] and true or false
	end

	function classCustom:GetNumActors()
		return #self._ActorTable
	end

	function classCustom:GetTotalAndHighestValue()
		local total, top = 0, 0
		for i, actor in ipairs(self._ActorTable) do
			if (actor.value > top) then
				top = actor.value
			end
			total = total + actor.value
		end
		return total, top
	end

	local icon_cache = {}

	function classCustom:GetActorTable(actor, name_complement)
		local index = self._NameIndexTable[actor.nome or actor.name]

		if (index) then
			return self._ActorTable[index]
		else
			--if is a spell object
			local class
			if (actor.id) then
				local spellname, _, icon = _GetSpellInfo(actor.id)
				if (not icon_cache[spellname] and spellname) then
					icon_cache[spellname] = icon
				elseif (not spellname) then
					spellname = ""
				end

				actor.nome = spellname
				actor.name = spellname
				actor.classe = actor.spellschool
				class = actor.spellschool

				local index = self._NameIndexTable[actor.nome]
				if (index) then
					return self._ActorTable[index]
				end

			else
				class = actor.classe or actor.class
				if (not class or class == "UNKNOWN") then
					class = "UNKNOW"
				end
				if (class == "UNKNOW") then
					--try once again
					class = Details:GetClass(actor.nome or actor.name)
					if (class and class ~= "UNKNOW") then
						actor.classe = class
					end
				end
			end

			local newActor = setmetatable({
				nome = actor.nome or actor.name,
				classe = class,
				value = Details:GetOrderNumber(),
				is_custom = true,
				color = actor.color,
			}, classCustom.mt)

			newActor.customColor = actor.customColor

			newActor.name_complement = name_complement
			newActor.displayName = actor.displayName or (Details:GetOnlyName(newActor.nome) .. (name_complement or ""))

			newActor:SetSpecId(actor.spec)

			newActor.enemy = actor.enemy
			newActor.role = actor.role
			newActor.arena_enemy = actor.arena_enemy
			newActor.arena_ally = actor.arena_ally
			newActor.arena_team = actor.arena_team

			if (actor.id) then
				newActor.id = actor.id
				--icon
				if (icon_cache[actor.nome]) then
					newActor.icon = icon_cache[actor.nome]
				else
					local _, _, icon = _GetSpellInfo(actor.id)
					if (icon) then
						icon_cache[actor.nome] = icon
						newActor.icon =  icon
					end
				end
			else
				if (not newActor.classe) then
					newActor.classe = Details:GetClass(actor.nome or actor.name) or "UNKNOW"
				end
				if (newActor.classe == "UNGROUPPLAYER") then
					--atributo_custom:ScheduleTimer("UpdateClass", 5, {newActor = newActor, actor = actor})
					Details.Schedules.NewTimer(5, classCustom.UpdateClass, self, {new_actor = newActor, actor = actor})
				end
			end

			index = #self._ActorTable+1

			self._ActorTable[index] = newActor
			self._NameIndexTable[actor.nome or actor.name] = index
			return newActor
		end
	end

	function classCustom:GetInstanceCustomActorContainer (instance)
		---@cast instance instance
		if (not classCustom._InstanceActorContainer [instance:GetId()]) then
			classCustom._InstanceActorContainer [instance:GetId()] = self:CreateCustomActorContainer()
		end
		return classCustom._InstanceActorContainer [instance:GetId()]
	end

	function classCustom:CreateCustomDisplayObject()
		return setmetatable({
			name = "new custom",
			icon = [[Interface\ICONS\TEMP]],
			author = "unknown",
			attribute = "damagedone",
			source = "[all]",
			target = "[all]",
			spellid = false,
			script = false,
		}, {__index = classCustom})
	end

	local custom_sort = function(t1, t2)
		return t1.value > t2.value
	end
	function classCustom:Sort (container)
		container = container or self
		sort (container._ActorTable, custom_sort)
	end

	function classCustom:Remap()
		local map = self._NameIndexTable
		local actors = self._ActorTable
		for i = 1, #actors do
			map [actors[i].nome] = i
		end
	end

	function classCustom:ToolTip (instanceObject, barNumber, rowObject, keydown)
		--get the custom object
		local customObject = instanceObject:GetCustomObject()

		if (customObject.notooltip) then
			return
		end

		--get the actor
		local actorObject = self.my_actor

		if (actorObject.id) then
			Details:AddTooltipSpellHeaderText (select(1, _GetSpellInfo(actorObject.id)), "yellow", 1, select(3, _GetSpellInfo(actorObject.id)), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
		else
			Details:AddTooltipSpellHeaderText (customObject:GetName(), "yellow", 1, customObject:GetIcon(), 0.90625, 0.109375, 0.15625, 0.875, false, 18)
		end

		Details:AddTooltipHeaderStatusbar (1, 1, 1, 0.6)

		if (customObject:IsScripted()) then
			if (customObject.tooltip) then
				local func = Details.custom_function_cache [instanceObject.customName .. "Tooltip"]
				local okey, errortext = xpcall(func, geterrorhandler(), actorObject, instanceObject.showing, instanceObject, keydown)
				if (not okey) then
					Details:Msg("|cFFFF9900error on custom display tooltip function|r:", errortext)
					return false
				end
			end
		else
			--get the attribute
			local attribute = customObject:GetAttribute()
			local container_index = classCustom:GetCombatContainerIndex (attribute)

			--get the tooltip function
			local func = classCustom [attribute .. "Tooltip"]

			--build the tooltip
			func (_, actorObject, customObject.target, customObject.spellid, instanceObject.showing, instanceObject)
		end

		return true
	end

	function classCustom:GetName()
		return self.name
	end
	function classCustom:GetIcon()
		return self.icon
	end
	function classCustom:GetAuthor()
		return self.author
	end
	function classCustom:GetDesc()
		return self.desc
	end
	function classCustom:GetAttribute()
		return self.attribute
	end
	function classCustom:GetSource()
		return self.source
	end
	function classCustom:GetTarget()
		return self.target
	end
	function classCustom:GetSpellId()
		return self.spellid
	end
	function classCustom:GetScript()
		return self.script
	end
	function classCustom:GetScriptToolip()
		return self.tooltip
	end
	function classCustom:GetScriptTotal()
		return self.total_script
	end
	function classCustom:GetScriptPercent()
		return self.percent_script
	end

	function classCustom:SetName (name)
		self.name = name
	end
	function classCustom:SetIcon (path)
		self.icon = path
	end
	function classCustom:SetAuthor (author)
		self.author = author
	end
	function classCustom:SetDesc (desc)
		self.desc = desc
	end
	function classCustom:SetAttribute (newattribute)
		self.attribute = newattribute
	end
	function classCustom:SetSource (source)
		self.source = source
	end
	function classCustom:SetTarget (target)
		self.target = target
	end
	function classCustom:SetSpellId (spellid)
		self.spellid = spellid
	end
	function classCustom:SetScript(code)
		self.script = code
	end
	function classCustom:SetScriptToolip (code)
		self.tooltip = code
	end

	function classCustom:IsScripted()
		return self.script and true or false
	end

	function classCustom:IsSpellTarget()
		return self.spellid and self.target and true
	end

	function classCustom:RemoveCustom (index)

		if (not Details.tabela_instancias) then
			--do not remove customs while the addon is loading.
			return false
		end

		table.remove (Details.custom, index)

		for _, instance in ipairs(Details.tabela_instancias) do
			---@cast instance instance
			if (instance.atributo == 5 and instance.sub_atributo == index) then
				instance:ResetAttribute()
			elseif (instance.atributo == 5 and instance.sub_atributo > index) then
				instance.sub_atributo = instance.sub_atributo - 1
				instance.sub_atributo_last [5] = 1
			else
				instance.sub_atributo_last [5] = 1
			end
		end

		Details.switch:OnRemoveCustom (index)

		return true
	end

	--export for plugins
	function Details:RemoveCustomObject (object_name)
		for index, object in ipairs(Details.custom) do
			if (object.name == object_name) then
				return classCustom:RemoveCustom (index)
			end
		end
	end

	function Details:ResetCustomFunctionsCache()
		Details:Destroy(Details.custom_function_cache or {})
	end

	function Details.refresh:r_atributo_custom()
		--check for non used temp displays
		if (Details.tabela_instancias) then

			for i = #Details.custom, 1, -1 do
				local custom_object = Details.custom [i]
				if (custom_object.temp) then
					--check if there is a instance showing this custom
					local showing = false

					for index, instance in ipairs(Details.tabela_instancias) do
						if (instance.atributo == 5 and instance.sub_atributo == i) then
							showing = true
						end
					end

					if (not showing) then
						classCustom:RemoveCustom (i)
					end
				end
			end
		end

		--restore metatable and indexes
		for index, custom_object in ipairs(Details.custom) do
			setmetatable(custom_object, classCustom)
			custom_object.__index = classCustom
		end
	end

	function Details.clear:c_atributo_custom()
		for _, custom_object in ipairs(Details.custom) do
			custom_object.__index = nil
		end
	end

	function classCustom:UpdateSelectedToKFunction()
		SelectedToKFunction = ToKFunctions [Details.ps_abbreviation]
		FormatTooltipNumber = ToKFunctions [Details.tooltip.abbreviation]
		TooltipMaximizedMethod = Details.tooltip.maximize_method
		classCustom:UpdateDamageDoneBracket()
		classCustom:UpdateHealingDoneBracket()
	end

	function Details:InstallCustomObject (object)
		local have = false
		if (object.script_version) then
			for _, custom in ipairs(Details.custom) do
				if (custom.name == object.name and (custom.script_version and custom.script_version >= object.script_version) ) then
					have = true
					break
				end
			end
		else
			for _, custom in ipairs(Details.custom) do
				if (custom.name == object.name) then
					have = true
					break
				end
			end
		end

		if (not have) then
			for i, custom in ipairs(Details.custom) do
				if (custom.name == object.name) then
					table.remove (Details.custom, i)
					break
				end
			end
			setmetatable(object, Details.atributo_custom)
			object.__index = Details.atributo_custom
			Details.custom [#Details.custom+1] = object
			return true
		end

		return false
	end

	function Details222.GetCustomDisplayIDByName(customDisplayName)
		for customDisplayID, customObject in ipairs(Details.custom) do
			if (customObject.name == customDisplayName) then
				return customDisplayID
			end
		end
	end

	if detailsFramework.IsAddonApocalypseWow() then
		--make the add default function to not cause errors
		function Details:AddDefaultCustomDisplays()
		end
		Details:ResetCustomFunctionsCache()
	else
		function Details:AddDefaultCustomDisplays()
			local PotionUsed = {
				name = Loc ["STRING_CUSTOM_POT_DEFAULT"],
				icon = [[Interface\ICONS\INV_Potion_03]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_POT_DEFAULT_DESC"],
				source = false,
				target = false,
				script_version = 9,
				import_string = "1EvBVnkoq4FlxKwDWDjCn6Q0kfD7kL(YwruUMOLK7JaoGPX3rSrgZwLV4F73yJ5LMxjPDfBBzHXZZZmEMhg7p0FHVxoRGhH9x57HkeRzCFVhWcejn)x89YWWROIG8iojt47LYIqPYWFGslW9LHcwM(3cuk83i2MvibCdHMlq0iSm8lYqhhh5e5e9s0pydsS2jjLX4w6hAREnhlk4uzyVEYWbdYfCc9fNeghm2Q3NCgM0RVb2)qd3Vn8MBSvohwYN6P8GCIVxmopY3ZBn7vz4RRzkMid3cXNmKJiXYWICm8BKmmJjim4LXfkKGyynqomnIvqfyUJVNgLpG4UkW2pQljV6Fg2tIyu)Nh(N3(5H367rrBW(EZn8CjqCyRkdNMsIv7vce)fSqD3oCSKnZw9V4ifNIkYfSn3ZOWwkfZBXYstA4Qz9vrvzmI2OYiAJUPV5hfBhmaq3K22qYJalJemUcEds1omLKlMLSuqsjITJvwLR9xBIo6jSq)QPGXwp84IXUt9cgVyX3DVB5Ihd(BxV7TlXnMzGfYLzJKtsuOg03qGQGsTXtYqeEU1bWhs(GBMidlVgmGrt3cffPOTaX1l(foRiRXesIm0QfcJCZFszXC9sSST1KI2SGQltsy13G8yC1Uje9jO0C8(MV)tANP17)a3XRksacvKjiBWVjNFe4lxXsT911cAE0oMGnbpfc1wy1RCH9S33Z6mYb97rZfnHuv7hdCscdQrbFfHO)Qq3IcScEqghBSd2CZzQkxrEtfjrDF6ROTWFhECSmjaniTs)hK41jG6kWVn7(LEbZNTWD2ZbUpyFCC0PJwOC2Kq1LUFtZjZD)(jJNQR9kOe8c85xMMMqRTm8Vay6mjBiBMgSoqqmn(8gnyakoUzpvu1BB6ep763rDB0444)rPU2UvTVoqNCr88WKVl9MxAN5v2xEYUYRPNulJQJb34(vFFCo71k9WsT0PU3fmB(Jph89XUpemE6utVH3okQNPBuJZc0Q0YpvEYwrdNS7yTDJRV4IBd5kNr4lTzPdSBq(bogTr0D3PPJzGdA9ShFf(a6fZStPvOD7f7PRu(4eX4x1QdxDOTRcZ1fwDs05891)SLTUszmvoXU7EVtjJtA07rBSujQvz2zlnAnRz1Th(BHVHb6)t5tGPdlh3EuZC3hCCw942ibCkJvfc9rFemwQGKvpf9Bt87mt9XMGUEK33POENfX)5iA)HksFPIYVtr4par32H)ZWHW6xE8IYqmYixwf5U0e2f8jQNqQ0NUut1KpfYIwTbQJD474gfRSQ5NAEhZpMdY7yQUDsb8cwJjVSwC632boywTc)fLo4ou0)Po2engoDQOiFfcoy07rCPQ12x47))d",
				script = [[
					local combatObject, customContainer, instanceObject = ...
					local total, top, amount = 0, 0, 0
					
					--get the misc actor container
					local listOfUtilityActors = combatObject:GetActorList(DETAILS_ATTRIBUTE_MISC)
					
					--do the loop:
					for _, actorObject in ipairs(listOfUtilityActors) do
						--only player in group
						if (actorObject:IsGroupPlayer()) then
							local bFoundPotion = false
							
							--get the spell debuff uptime container
							local debuffUptimeContainer = actorObject:GetSpellContainer("debuff")
							if (debuffUptimeContainer) then
								--potion of focus (can't use as pre-potion, so, its amount is always 1
								local focusPotion = debuffUptimeContainer:GetSpell(DETAILS_FOCUS_POTION_ID)
								if (focusPotion) then
									total = total + 1
									bFoundPotion = true
									if (top < 1) then
										top = 1
									end
									--add amount to the player
									customContainer:AddValue(actorObject, 1)
								end
							end
							
							--get the spell buff uptime container
							local buffUptimeContainer = actorObject:GetSpellContainer("buff")
							if (buffUptimeContainer) then
								for spellId, potionPower in pairs(LIB_OPEN_RAID_ALL_POTIONS) do
									local spellTable = buffUptimeContainer:GetSpell(spellId)
									if (spellTable) then
										local used = spellTable.activedamt
										if (used and used > 0) then
											total = total + used
											bFoundPotion = true
											if (used > top) then
												top = used
											end
											
											--add amount to the player
											customContainer:AddValue(actorObject, used)
										end
									end
								end
							end
							
							if (bFoundPotion) then
								amount = amount + 1
							end
						end
					end
					
					--return:
					return total, top, amount
					]],

				tooltip = [[
					local actorObject, combatObject, instanceObject = ...

					local iconSize = 20
					
					local buffUptimeContainer = actorObject:GetSpellContainer("buff")
					if (buffUptimeContainer) then
						for spellId, potionPower in pairs(LIB_OPEN_RAID_ALL_POTIONS) do
							local spellTable = buffUptimeContainer:GetSpell(spellId)
							if (spellTable) then
								local used = spellTable.activedamt
								if (used and used > 0) then
									local spellName, _, spellIcon = Details.GetSpellInfo(spellId)
									GameCooltip:AddLine(spellName, used)
									GameCooltip:AddIcon(spellIcon, 1, 1, iconSize, iconSize)
									Details:AddTooltipBackgroundStatusbar()
								end
							end
						end
					end
				]],

				total_script = [[
					local value, top, total, combat, instance = ...
					return math.floor(value) .. " "
				]],

				percent_script = [[
					local value, top, total, combat, instance = ...
					value = math.floor(value)
					return ""
				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_POT_DEFAULT"] and (custom.script_version and custom.script_version >= PotionUsed.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_POT_DEFAULT"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(PotionUsed, Details.atributo_custom)
				PotionUsed.__index = Details.atributo_custom
				self.custom [#self.custom+1] = PotionUsed
			end

			------------------------------------------------------------------------------------------------------------------------------------------------------------------------
			--		/run _detalhes:AddDefaultCustomDisplays()

				local Healthstone = {
				name = Loc ["STRING_CUSTOM_HEALTHSTONE_DEFAULT"],
				icon = [[Interface\ICONS\INV_Stone_04]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_HEALTHSTONE_DEFAULT_DESC"],
				source = false,
				target = false,
				apoc = true,
				script = [[
					local combatObject, instanceContainer, instanceObject = ...
					local total, top, amount = 0, 0, 0
					
					local listOfHealingActors = combatObject:GetActorList(DETAILS_ATTRIBUTE_HEAL)
					for _, actorObject in ipairs(listOfHealingActors) do
						local listOfSpells = actorObject:GetSpellList()
						local found = false
						
						for spellId, spellTable in pairs(listOfSpells) do
							if (LIB_OPEN_RAID_HEALING_POTIONS[spellId]) then
								instanceContainer:AddValue(actorObject, spellTable.total)
								total = total + spellTable.total
								if (top < spellTable.total) then
									top = spellTable.total
								end
								found = true
							end
						end
						
						if (found) then
							amount = amount + 1
						end
					end
					
					return total, top, amount
				]],

				tooltip = [[
					local actorObject, combatObject, instanceObject = ...
					local spellContainer = actorObject:GetSpellContainer("spell")
					
					local iconSize = 20
					
					local allHealingPotions = {6262}
					for spellId, potionPower in pairs(LIB_OPEN_RAID_ALL_POTIONS) do
						allHealingPotions[#allHealingPotions+1] = spellId
					end
					
					for i = 1, #allHealingPotions do
						local spellId = allHealingPotions[i]
						local spellTable = spellContainer:GetSpell(spellId)
						if (spellTable) then
							local spellName, _, spellIcon = Details.GetSpellInfo(spellId)
							GameCooltip:AddLine(spellName, Details:ToK(spellTable.total))
							GameCooltip:AddIcon(spellIcon, 1, 1, iconSize, iconSize)
							GameCooltip:AddStatusBar (100, 1, 0, 0, 0, 0.75)
						end
					end
				]],
				percent_script = false,
				total_script = false,
				script_version = 19,
			}

			--	/run _detalhes:AddDefaultCustomDisplays()
			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_HEALTHSTONE_DEFAULT"] and (custom.script_version and custom.script_version >= Healthstone.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_HEALTHSTONE_DEFAULT"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(Healthstone, Details.atributo_custom)
				Healthstone.__index = Details.atributo_custom
				self.custom [#self.custom+1] = Healthstone
			end

			---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

			local DamageActivityTime = {
				name = Loc ["STRING_CUSTOM_ACTIVITY_DPS"],
				icon = [[Interface\Buttons\UI-MicroStream-Red]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_ACTIVITY_DPS_DESC"],
				source = false,
				target = false,
				script_version = 4,
				total_script = [[
					local value, top, total, combat, instance = ...
					local minutos, segundos = math.floor(value/60), math.floor(value%60)
					return minutos .. "m " .. segundos .. "s"
				]],
				percent_script = [[
					local value, top, total, combat, instance = ...
					return string.format("%.1f", value/top*100)
				]],
				script = [[
					local combatObject, instanceContainer, instanceObject = ...
					local total, amount = 0, 0

					--get the damager actors
					local listOfDamageActors = combatObject:GetActorList(DETAILS_ATTRIBUTE_DAMAGE)

					for _, actorObject in ipairs(listOfDamageActors) do
						if (actorObject:IsGroupPlayer()) then
							local activity = actorObject:Tempo()
							total = total + activity
							amount = amount + 1
							--add amount to the player
							instanceContainer:AddValue(actorObject, activity)
						end
					end

					--return:
					return total, combatObject:GetCombatTime(), amount
				]],
				tooltip = [[

				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_ACTIVITY_DPS"] and (custom.script_version and custom.script_version >= DamageActivityTime.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_ACTIVITY_DPS"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(DamageActivityTime, Details.atributo_custom)
				DamageActivityTime.__index = Details.atributo_custom
				self.custom [#self.custom+1] = DamageActivityTime
			end

			local HealActivityTime = {
				name = Loc ["STRING_CUSTOM_ACTIVITY_HPS"],
				icon = [[Interface\Buttons\UI-MicroStream-Green]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_ACTIVITY_HPS_DESC"],
				source = false,
				target = false,
				script_version = 3,
				total_script = [[
					local value, top, total, combat, instance = ...
					local minutos, segundos = math.floor(value/60), math.floor(value%60)
					return minutos .. "m " .. segundos .. "s"
				]],
				percent_script = [[
					local value, top, total, combat, instance = ...
					return string.format("%.1f", value/top*100)
				]],
				script = [[
					local combatObject, instanceContainer, instanceObject = ...
					local total, amount = 0, 0

					--get the healing actors
					local listOfHealingActors = combatObject:GetActorList(DETAILS_ATTRIBUTE_HEAL)

					for _, actorObject in ipairs(listOfHealingActors) do
						if (actorObject:IsGroupPlayer()) then
							local activity = actorObject:Tempo()
							total = total + activity
							amount = amount + 1
							--add amount to the player
							instanceContainer:AddValue (actorObject, activity)
						end
					end

					--return:
					return total, combatObject:GetCombatTime(), amount
				]],
				tooltip = [[

				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_ACTIVITY_HPS"] and (custom.script_version and custom.script_version >= HealActivityTime.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_ACTIVITY_HPS"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(HealActivityTime, Details.atributo_custom)
				HealActivityTime.__index = Details.atributo_custom
				self.custom [#self.custom+1] = HealActivityTime
			end

			---------------------------------------

			----------------------------------------------------------------------------------------------------------------------------------------------------
			--doas
			local CC_Done = {
				name = Loc ["STRING_CUSTOM_CC_DONE"],
				icon = [[Interface\ICONS\Spell_Frost_FreezingBreath]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = "Show the crowd control amount for each player.",
				source = false,
				target = false,
				script_version = 12,
				script = [[
					local combat, instance_container, instance = ...
					local total, top, amount = 0, 0, 0

					local misc_actors = combat:GetActorList (DETAILS_ATTRIBUTE_MISC)

					for index, character in ipairs(misc_actors) do
						if (character.cc_done and character:IsPlayer()) then
							local cc_done = floor(character.cc_done)
							instance_container:AddValue (character, cc_done)
							total = total + cc_done
							if (cc_done > top) then
								top = cc_done
							end
							amount = amount + 1
						end
					end

					return total, top, amount
				]],
				tooltip = [[
					local actor, combat, instance = ...
					local spells = {}
					for spellid, spell in pairs(actor.cc_done_spells._ActorTable) do
						tinsert(spells, {spellid, spell.counter})
					end

					table.sort (spells, _detalhes.Sort2)

					for index, spell in ipairs(spells) do
						local name, _, icon = Details.GetSpellInfo(spell [1])
						GameCooltip:AddLine(name, spell [2])
						_detalhes:AddTooltipBackgroundStatusbar()
						GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
					end

					local targets = {}
					for playername, amount in pairs(actor.cc_done_targets) do
						tinsert(targets, {playername, amount})
					end

					table.sort (targets, _detalhes.Sort2)

					_detalhes:AddTooltipSpellHeaderText ("Targets", "yellow", #targets)
					local class, _, _, _, _, r, g, b = _detalhes:GetClass(actor.nome)
					_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 0.6)

					for index, target in ipairs(targets) do
						GameCooltip:AddLine(target[1], target [2])
						_detalhes:AddTooltipBackgroundStatusbar()

						local class, _, _, _, _, r, g, b = _detalhes:GetClass(target [1])
						if (class and class ~= "UNKNOW") then
						local texture, l, r, t, b = _detalhes:GetClassIcon(class)
						GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small_alpha", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height, l, r, t, b)
						else
						GameCooltip:AddIcon ("Interface\\GossipFrame\\IncompleteQuestIcon", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						end
						--
					end
				]],
				total_script = [[
					local value, top, total, combat, instance = ...
					return floor(value)
				]],
			}

			--		/run _detalhes:AddDefaultCustomDisplays()

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_CC_DONE"] and (custom.script_version and custom.script_version >= CC_Done.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				setmetatable(CC_Done, Details.atributo_custom)
				CC_Done.__index = Details.atributo_custom

				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_CC_DONE"]) then
						table.remove (self.custom, i)
						tinsert(self.custom, i, CC_Done)
						have = true
					end
				end
				if (not have) then
					self.custom [#self.custom+1] = CC_Done
				end
			end

			----------------------------------------------------------------------------------------------------------------------------------------------------

			local CC_Received = {
				name = Loc ["STRING_CUSTOM_CC_RECEIVED"],
				icon = [[Interface\ICONS\Spell_Frost_ChainsOfIce]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = "Show the amount of crowd control received for each player.",
				source = false,
				target = false,
				script_version = 4,
				script = [[
					local combat, instance_container, instance = ...
					local total, top, amt = 0, 0, 0

					local misc_actors = combat:GetActorList (DETAILS_ATTRIBUTE_MISC)
					DETAILS_CUSTOM_CC_RECEIVED_CACHE = DETAILS_CUSTOM_CC_RECEIVED_CACHE or {}
					wipe (DETAILS_CUSTOM_CC_RECEIVED_CACHE)

					for index, character in ipairs(misc_actors) do
						if (character.cc_done and character:IsPlayer()) then

						for player_name, amount in pairs(character.cc_done_targets) do
							local target = combat (1, player_name) or combat (2, player_name)
							if (target and target:IsPlayer()) then
							instance_container:AddValue (target, amount)
							total = total + amount
							if (amount > top) then
								top = amount
							end
							if (not DETAILS_CUSTOM_CC_RECEIVED_CACHE [player_name]) then
								DETAILS_CUSTOM_CC_RECEIVED_CACHE [player_name] = true
								amt = amt + 1
							end
							end
						end

						end
					end

					return total, top, amt
				]],
				tooltip = [[
					local actor, combat, instance = ...
					local name = actor:name()
					local spells, from = {}, {}
					local misc_actors = combat:GetActorList (DETAILS_ATTRIBUTE_MISC)

					for index, character in ipairs(misc_actors) do
						if (character.cc_done and character:IsPlayer()) then
						local on_actor = character.cc_done_targets [name]
						if (on_actor) then
							tinsert(from, {character:name(), on_actor})

							for spellid, spell in pairs(character.cc_done_spells._ActorTable) do

							local spell_on_actor = spell.targets [name]
							if (spell_on_actor) then
								local has_spell
								for index, spell_table in ipairs(spells) do
								if (spell_table [1] == spellid) then
									spell_table [2] = spell_table [2] + spell_on_actor
									has_spell = true
								end
								end
								if (not has_spell) then
								tinsert(spells, {spellid, spell_on_actor})
								end
							end

							end
						end
						end
					end

					table.sort (from, _detalhes.Sort2)
					table.sort (spells, _detalhes.Sort2)

					for index, spell in ipairs(spells) do
						local name, _, icon = Details.GetSpellInfo(spell [1])
						GameCooltip:AddLine(name, spell [2])
						_detalhes:AddTooltipBackgroundStatusbar()
						GameCooltip:AddIcon (icon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
					end

					_detalhes:AddTooltipSpellHeaderText ("From", "yellow", #from)
					_detalhes:AddTooltipHeaderStatusbar (1, 1, 1, 0.6)

					for index, t in ipairs(from) do
						GameCooltip:AddLine(t[1], t[2])
						_detalhes:AddTooltipBackgroundStatusbar()

						local class, _, _, _, _, r, g, b = _detalhes:GetClass(t [1])
						if (class and class ~= "UNKNOW") then
						local texture, l, r, t, b = _detalhes:GetClassIcon(class)
						GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\classes_small_alpha", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height, l, r, t, b)
						else
						GameCooltip:AddIcon ("Interface\\GossipFrame\\IncompleteQuestIcon", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						end

					end
				]],
				total_script = [[
					local value, top, total, combat, instance = ...
					return floor(value)
				]],
			}

			--		/run _detalhes:AddDefaultCustomDisplays()

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_CC_RECEIVED"] and (custom.script_version and custom.script_version >= CC_Received.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				setmetatable(CC_Received, Details.atributo_custom)
				CC_Received.__index = Details.atributo_custom

				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_CC_RECEIVED"]) then
						table.remove (self.custom, i)
						tinsert(self.custom, i, CC_Received)
						have = true
					end
				end
				if (not have) then
					self.custom [#self.custom+1] = CC_Received
				end
			end

			----------------------------------------------------------------------------------------------------------------------------------------------------

			local MySpells = {
				name = Loc ["STRING_CUSTOM_MYSPELLS"],
				icon = [[Interface\CHATFRAME\UI-ChatIcon-Battlenet]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_MYSPELLS_DESC"],
				source = false,
				target = false,
				script_version = 12,
				script = [[
					--get the parameters passed
					local combat, instance_container, instance = ...
					--declade the values to return
					local total, top, amount = 0, 0, 0

					local player
					local pet_attribute

					local role = DetailsFramework.UnitGroupRolesAssigned("player")
					local spec = DetailsFramework.GetSpecialization()
					role = spec and DetailsFramework.GetSpecializationRole (spec) or role

					if (role == "DAMAGER") then
						player = combat (DETAILS_ATTRIBUTE_DAMAGE, _detalhes.playername)
						pet_attribute = DETAILS_ATTRIBUTE_DAMAGE
					elseif (role == "HEALER") then
						player = combat (DETAILS_ATTRIBUTE_HEAL, _detalhes.playername)
						pet_attribute = DETAILS_ATTRIBUTE_HEAL
					else
						player = combat (DETAILS_ATTRIBUTE_DAMAGE, _detalhes.playername)
						pet_attribute = DETAILS_ATTRIBUTE_DAMAGE
					end

					--do the loop

					if (player) then
						local spells = player:GetSpellList()
						for spellid, spell in pairs(spells) do
							instance_container:AddValue (spell, spell.total)
							total = total + spell.total
							if (top < spell.total) then
								top = spell.total
							end
							amount = amount + 1
						end

						for _, PetName in ipairs(player.pets) do
							local pet = combat (pet_attribute, PetName)
							if (pet) then
								for spellid, spell in pairs(pet:GetSpellList()) do
									instance_container:AddValue (spell, spell.total, nil, " (" .. PetName:gsub((" <.*"), "") .. ")")
									total = total + spell.total
									if (top < spell.total) then
										top = spell.total
									end
									amount = amount + 1
								end
							end
						end
					end

					--return the values
					return total, top, amount
				]],

				tooltip = [[
					--config:
					--Background RBG and Alpha:
					local R, G, B, A = 0, 0, 0, 0.75
					local R, G, B, A = 0.1960, 0.1960, 0.1960, 0.8697

					--get the parameters passed
					local spell, combat, instance = ...

					local iconTexture = "Interface\\BUTTONS\\UI-GuildButton-PublicNote-Disabled"
					local iconSize = 16

					--get the cooltip object (we dont use the convencional GameTooltip here)
					local GC = GameCooltip

					GC:SetOption("YSpacingMod", -6)

					local role = DetailsFramework.UnitGroupRolesAssigned("player")

					if (spell.n_total) then
						
						local spellschool, schooltext = spell.spellschool, ""
						if (spellschool) then
							local t = Details.spells_school [spellschool]
							if (t and t.name) then
								schooltext = t.formated
							end
						end
						
						local total_hits = spell.counter
						local combat_time = instance.showing:GetCombatTime()
						
						local debuff_uptime_total, cast_string = "", ""
						local misc_actor = instance.showing (4, Details.playername)
						if (misc_actor) then
							local debuff_uptime = misc_actor.debuff_uptime_spells and misc_actor.debuff_uptime_spells._ActorTable [spell.id] and misc_actor.debuff_uptime_spells._ActorTable [spell.id].uptime
							if (debuff_uptime) then
								debuff_uptime_total = floor(debuff_uptime / instance.showing:GetCombatTime() * 100)
							end
							
							local spellName = Details.GetSpellInfo(spell.id)
							local amountOfCasts = combat:GetSpellCastAmount(Details.playername, spellName)
							
							if (amountOfCasts == 0) then
								amountOfCasts = "(|cFFFFFF00?|r)"
							end
							cast_string = cast_string .. amountOfCasts
						end
						
						
						--Cooltip code
						GC:AddLine("Casts:", cast_string or "?")
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						if (debuff_uptime_total ~= "") then
							GC:AddLine("Uptime:", (debuff_uptime_total or "?") .. "%")
							GC:AddStatusBar (100, 1, R, G, B, A)
							GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						end
						
						GC:AddLine("Hits:", spell.counter)
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						local average = spell.total / total_hits
						GC:AddLine("Average:", _detalhes:ToK (average))
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						GC:AddLine("E-Dps:", _detalhes:ToK (spell.total / combat_time))
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						GC:AddLine("School:", schooltext)
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						GC:AddLine("Normal Hits: ", spell.n_amt .. " (" ..floor( spell.n_amt/total_hits*100) .. "%)")
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						if (spell.n_amt and spell.n_amt > 0) then
							local n_average = spell.n_total / spell.n_amt
							local T = (combat_time*spell.n_total)/spell.total
							local P = average/n_average*100
							T = P*T/100
							
							GC:AddLine("Average / E-Dps: ",  _detalhes:ToK (n_average) .. " / " .. format("%.1f",spell.n_total / T ))
							GC:AddStatusBar (100, 1, R, G, B, A)
							GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						end
						
						GC:AddLine("Critical Hits: ", spell.c_amt .. " (" ..floor( spell.c_amt/total_hits*100) .. "%)")
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						if (spell.c_amt > 0) then
							local c_average = spell.c_total/spell.c_amt
							local T = (combat_time*spell.c_total)/spell.total
							local P = average/c_average*100
							T = P*T/100
							local crit_dps = spell.c_total / T
							
							GC:AddLine("Average / E-Dps: ",  _detalhes:ToK (c_average) .. " / " .. _detalhes:comma_value (crit_dps))
						else
							GC:AddLine("Average / E-Dps: ",  "0 / 0")
						end
						
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
					elseif (spell.n_total) then
						
						local spellschool, schooltext = spell.spellschool, ""
						if (spellschool) then
							local t = _detalhes.spells_school [spellschool]
							if (t and t.name) then
								schooltext = t.formated
							end
						end
						
						local total_hits = spell.counter
						local combat_time = instance.showing:GetCombatTime()
						
						--Cooltip code
						GC:AddLine("Hits:", spell.counter)
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						local average = spell.total / total_hits
						GC:AddLine("Average:", _detalhes:ToK (average))
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)    
						
						GC:AddLine("E-Hps:", _detalhes:ToK (spell.total / combat_time))
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						GC:AddLine("School:", schooltext)
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						--GC:AddLine(" ")
						
						GC:AddLine("Normal Hits: ", spell.n_amt .. " (" ..floor( spell.n_amt/total_hits*100) .. "%)")
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						local n_average = spell.n_total / spell.n_amt
						local T = (combat_time*spell.n_total)/spell.total
						local P = average/n_average*100
						T = P*T/100
						
						GC:AddLine("Average / E-Dps: ",  _detalhes:ToK (n_average) .. " / " .. format("%.1f",spell.n_total / T ))
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						GC:AddLine("Critical Hits: ", spell.c_amt .. " (" ..floor( spell.c_amt/total_hits*100) .. "%)")
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
						
						if (spell.c_amt > 0) then
							local c_average = spell.c_total/spell.c_amt
							local T = (combat_time*spell.c_total)/spell.total
							local P = average/c_average*100
							T = P*T/100
							local crit_dps = spell.c_total / T
							
							GC:AddLine("Average / E-Hps: ",  _detalhes:ToK (c_average) .. " / " .. _detalhes:comma_value (crit_dps))
						else
							GC:AddLine("Average / E-Hps: ",  "0 / 0")
						end
						
						GC:AddStatusBar (100, 1, R, G, B, A)
						GC:AddIcon(iconTexture, 1, 1, iconSize, iconSize)
					end

				]],

				percent_script = [[
					local value, top, total, combat, instance = ...
					local dps = _detalhes:ToK (floor(value) / combat:GetCombatTime())
					local percent = string.format("%.1f", value/total*100)
					return dps .. ", " .. percent
				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_MYSPELLS"] and (custom.script_version and custom.script_version >= MySpells.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				setmetatable(MySpells, Details.atributo_custom)
				MySpells.__index = Details.atributo_custom

				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_MYSPELLS"]) then
						table.remove (self.custom, i)
						tinsert(self.custom, i, MySpells)
						have = true
					end
				end
				if (not have) then
					self.custom [#self.custom+1] = MySpells
				end
			end

			----------------------------------------------------------------------------------------------------------------------------------------------------

			local DamageOnSkullTarget = {
				name = Loc ["STRING_CUSTOM_DAMAGEONSKULL"],
				icon = [[Interface\TARGETINGFRAME\UI-RaidTargetingIcon_8]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_DAMAGEONSKULL_DESC"],
				source = false,
				target = false,
				script_version = 3,
				script = [[
					--get the parameters passed
					local Combat, CustomContainer, Instance = ...
					--declade the values to return
					local total, top, amount = 0, 0, 0

					--raid target flags:
					-- 128: skull
					-- 64: cross
					-- 32: square
					-- 16: moon
					-- 8: triangle
					-- 4: diamond
					-- 2: circle
					-- 1: star

					--do the loop
					for _, actor in ipairs(Combat:GetActorList (DETAILS_ATTRIBUTE_DAMAGE)) do
						if (actor:IsPlayer()) then
						if (actor.raid_targets [128]) then
							CustomContainer:AddValue (actor, actor.raid_targets [128])
						end
						end
					end

					--if not managed inside the loop, get the values of total, top and amount
					total, top = CustomContainer:GetTotalAndHighestValue()
					amount = CustomContainer:GetNumActors()

					--return the values
					return total, top, amount
				]],
				tooltip = [[
					--get the parameters passed
					local actor, combat, instance = ...

					--get the cooltip object (we dont use the convencional GameTooltip here)
					local GameCooltip = GameCooltip

					--Cooltip code
					local format_func = Details:GetCurrentToKFunction()

					--Cooltip code
					local RaidTargets = actor.raid_targets

					local DamageOnStar = RaidTargets [128]
					if (DamageOnStar) then
						--RAID_TARGET_8 is the built-in localized word for 'Skull'.
						GameCooltip:AddLine(RAID_TARGET_8 .. ":", format_func (_, DamageOnStar))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_8", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end
				]],
			}

			--		/run _detalhes:AddDefaultCustomDisplays()

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONSKULL"] and (custom.script_version and custom.script_version >= DamageOnSkullTarget.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				setmetatable(DamageOnSkullTarget, Details.atributo_custom)
				DamageOnSkullTarget.__index = Details.atributo_custom

				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONSKULL"]) then
						table.remove (self.custom, i)
						tinsert(self.custom, i, DamageOnSkullTarget)
						have = true
					end
				end
				if (not have) then
					self.custom [#self.custom+1] = DamageOnSkullTarget
				end
			end

			----------------------------------------------------------------------------------------------------------------------------------------------------

			local DamageOnAnyTarget = {
				name = Loc ["STRING_CUSTOM_DAMAGEONANYMARKEDTARGET"],
				icon = [[Interface\TARGETINGFRAME\UI-RaidTargetingIcon_5]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = Loc ["STRING_CUSTOM_DAMAGEONANYMARKEDTARGET_DESC"],
				source = false,
				target = false,
				script_version = 3,
				script = [[
					--get the parameters passed
					local Combat, CustomContainer, Instance = ...
					--declade the values to return
					local total, top, amount = 0, 0, 0

					--do the loop
					for _, actor in ipairs(Combat:GetActorList (DETAILS_ATTRIBUTE_DAMAGE)) do
						if (actor:IsPlayer()) then
						local total = (actor.raid_targets [1] or 0) --star
						total = total + (actor.raid_targets [2] or 0) --circle
						total = total + (actor.raid_targets [4] or 0) --diamond
						total = total + (actor.raid_targets [8] or 0) --tiangle
						total = total + (actor.raid_targets [16] or 0) --moon
						total = total + (actor.raid_targets [32] or 0) --square
						total = total + (actor.raid_targets [64] or 0) --cross

						if (total > 0) then
							CustomContainer:AddValue (actor, total)
						end
						end
					end

					--if not managed inside the loop, get the values of total, top and amount
					total, top = CustomContainer:GetTotalAndHighestValue()
					amount = CustomContainer:GetNumActors()

					--return the values
					return total, top, amount
				]],
				tooltip = [[
					--get the parameters passed
					local actor, combat, instance = ...

					--get the cooltip object
					local GameCooltip = GameCooltip

					local format_func = Details:GetCurrentToKFunction()

					--Cooltip code
					local RaidTargets = actor.raid_targets

					local DamageOnStar = RaidTargets [1]
					if (DamageOnStar) then
						GameCooltip:AddLine(RAID_TARGET_1 .. ":", format_func (_, DamageOnStar))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_1", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnCircle = RaidTargets [2]
					if (DamageOnCircle) then
						GameCooltip:AddLine(RAID_TARGET_2 .. ":", format_func (_, DamageOnCircle))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_2", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnDiamond = RaidTargets [4]
					if (DamageOnDiamond) then
						GameCooltip:AddLine(RAID_TARGET_3 .. ":", format_func (_, DamageOnDiamond))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_3", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnTriangle = RaidTargets [8]
					if (DamageOnTriangle) then
						GameCooltip:AddLine(RAID_TARGET_4 .. ":", format_func (_, DamageOnTriangle))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_4", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnMoon = RaidTargets [16]
					if (DamageOnMoon) then
						GameCooltip:AddLine(RAID_TARGET_5 .. ":", format_func (_, DamageOnMoon))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_5", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnSquare = RaidTargets [32]
					if (DamageOnSquare) then
						GameCooltip:AddLine(RAID_TARGET_6 .. ":", format_func (_, DamageOnSquare))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_6", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end

					local DamageOnCross = RaidTargets [64]
					if (DamageOnCross) then
						GameCooltip:AddLine(RAID_TARGET_7 .. ":", format_func (_, DamageOnCross))
						GameCooltip:AddIcon ("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_7", 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height)
						Details:AddTooltipBackgroundStatusbar()
					end
				]],
			}

			--		/run _detalhes:AddDefaultCustomDisplays()

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONANYMARKEDTARGET"] and (custom.script_version and custom.script_version >= DamageOnAnyTarget.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				setmetatable(DamageOnAnyTarget, Details.atributo_custom)
				DamageOnAnyTarget.__index = Details.atributo_custom

				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONANYMARKEDTARGET"]) then
						table.remove (self.custom, i)
						tinsert(self.custom, i, DamageOnAnyTarget)
						have = true
					end
				end
				if (not have) then
					self.custom [#self.custom+1] = DamageOnAnyTarget
				end
			end

			----------------------------------------------------------------------------------------------------------------------------------------------------


				---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

			local DynamicOverallDamage = {
				name = Loc ["STRING_CUSTOM_DYNAMICOVERAL"], --"Dynamic Overall Damage",
				displayName = Loc ["STRING_ATTRIBUTE_DAMAGE_DONE"],
				icon = [[Interface\Buttons\Spell-Reset]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = "Show overall damage done on the fly.",
				source = false,
				target = false,
				script_version = 8,
				script = [[
					--init:
					local combat, instance_container, instance = ...
					local total, top, amount = 0, 0, 0

					--get the overall combat
					local OverallCombat = Details:GetCombat(-1)
					--get the current combat
					local CurrentCombat = Details:GetCombat(0)

					if (not OverallCombat.GetActorList or not CurrentCombat.GetActorList) then
						return 0, 0, 0
					end

					--get the damage actor container for overall
					local damage_container_overall = OverallCombat:GetActorList ( DETAILS_ATTRIBUTE_DAMAGE )
					--get the damage actor container for current
					local damage_container_current = CurrentCombat:GetActorList ( DETAILS_ATTRIBUTE_DAMAGE )

					--do the loop:
					for _, player in ipairs( damage_container_overall ) do
						--only player in group
						if (player:IsGroupPlayer()) then
							instance_container:AddValue (player, player.total)
						end
					end

					if (Details.in_combat) then
						for _, player in ipairs( damage_container_current ) do
							--only player in group
							if (player:IsGroupPlayer()) then
								instance_container:AddValue (player, player.total)
							end
						end
					end

					total, top =  instance_container:GetTotalAndHighestValue()
					amount =  instance_container:GetNumActors()

					--return:
					return total, top, amount
				]],

				tooltip = [[
					--get the parameters passed
					local actor, combat, instance = ...

					--get the cooltip object (we dont use the convencional GameTooltip here)
					local GameCooltip = GameCooltip2

					--Cooltip code
					--get the overall combat
					local OverallCombat = Details:GetCombat(-1)
					--get the current combat
					local CurrentCombat = Details:GetCombat(0)

					local AllSpells = {}

					local playerTotal = 0

					--overall
					local player = OverallCombat [1]:GetActor(actor.nome)
					if (player) then
						playerTotal = playerTotal + player.total
						local playerSpells = player:GetSpellList()
						for spellID, spellTable in pairs(playerSpells) do
							AllSpells [spellID] = spellTable.total
						end
					end
					--current
					if (Details.in_combat) then
						local player = CurrentCombat [1]:GetActor(actor.nome)
						if (player) then
							playerTotal = playerTotal + player.total
							local playerSpells = player:GetSpellList()
							for spellID, spellTable in pairs(playerSpells) do
								AllSpells [spellID] = (AllSpells [spellID] or 0) + (spellTable.total or 0)
							end
						end
					end

					local sortedList = {}
					for spellID, total in pairs(AllSpells) do
						tinsert(sortedList, {spellID, total})
					end
					table.sort (sortedList, Details.Sort2)

					local format_func = Details:GetCurrentToKFunction()

					--build the tooltip

					local topSpellTotal = sortedList and sortedList[1] and sortedList[1][2] or 0

					for i, t in ipairs(sortedList) do
						local spellID, total = unpack(t)
						if (total > 1) then
							local spellName, _, spellIcon = Details.GetSpellInfo(spellID)

							local spellPercent = total / playerTotal * 100
							local formatedSpellPercent = format("%.1f", spellPercent)

							if (string.len(formatedSpellPercent) < 4) then
								formatedSpellPercent = formatedSpellPercent  .. "0"
							end

							GameCooltip:AddLine(spellName, format_func (_, total) .. "    " .. formatedSpellPercent  .. "%")

							Details:AddTooltipBackgroundStatusbar(false, total / topSpellTotal * 100)
							GameCooltip:AddIcon (spellIcon, 1, 1, _detalhes.tooltip.line_height, _detalhes.tooltip.line_height, 0.078125, 0.921875, 0.078125, 0.921875)

						end
					end
				]],

				total_script = [[
					local value, top, total, combat, instance = ...
					return value
				]],

				percent_script = [[
					local value, top, total, combat, instance = ...

					--get the time of overall combat
					local OverallCombatTime = Details:GetCombat(-1):GetCombatTime()

					--get the time of current combat if the player is in combat
					if (Details.in_combat) then
						local CurrentCombatTime = Details:GetCombat(0):GetCombatTime()
						OverallCombatTime = OverallCombatTime + CurrentCombatTime
					end

					--calculate the DPS and return it as percent
					local totalValue = value

					--build the string
					local ToK = Details:GetCurrentToKFunction()
					local s = ToK (_, value / OverallCombatTime)

					return s
				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_DYNAMICOVERAL"] and (custom.script_version and custom.script_version >= DynamicOverallDamage.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_DYNAMICOVERAL"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(DynamicOverallDamage, Details.atributo_custom)
				DynamicOverallDamage.__index = Details.atributo_custom
				self.custom [#self.custom+1] = DynamicOverallDamage
			end

			---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

			local DamageOnShields = {
				name = Loc ["STRING_CUSTOM_DAMAGEONSHIELDS"],
				icon = [[Interface\ICONS\Spell_Holy_PowerWordShield]],
				attribute = false,
				spellid = false,
				author = "Terciob",
				desc = "Damage done to shields",
				source = false,
				target = false,
				script_version = 1,
				script = [[
					--get the parameters passed
					local Combat, CustomContainer, Instance = ...
					--declade the values to return
					local total, top, amount = 0, 0, 0

					--do the loop
					for index, actor in ipairs(Combat:GetActorList(1)) do
						if (actor:IsPlayer()) then

						--get the actor total damage absorbed
						local totalAbsorb = actor.totalabsorbed

						--get the damage absorbed by all the actor pets
						for petIndex, petName in ipairs(actor.pets) do
							local pet = Combat :GetActor(1, petName)
							if (pet) then
							totalAbsorb = totalAbsorb + pet.totalabsorbed
							end
						end

						--add the value to the actor on the custom container
						CustomContainer:AddValue (actor, totalAbsorb)

						end
					end
					--loop end

					--if not managed inside the loop, get the values of total, top and amount
					total, top = CustomContainer:GetTotalAndHighestValue()
					amount = CustomContainer:GetNumActors()

					--return the values
					return total, top, amount
				]],
				tooltip = [[
					--get the parameters passed
					local actor, Combat, instance = ...

					--get the cooltip object (we dont use the convencional GameTooltip here)
					local GameCooltip = GameCooltip

					--Cooltip code
					--get the actor total damage absorbed
					local totalAbsorb = actor.totalabsorbed
					local format_func = Details:GetCurrentToKFunction()

					--get the damage absorbed by all the actor pets
					for petIndex, petName in ipairs(actor.pets) do
						local pet = Combat :GetActor(1, petName)
						if (pet) then
						totalAbsorb = totalAbsorb + pet.totalabsorbed
						end
					end

					GameCooltip:AddLine(actor:Name(), format_func (_, actor.totalabsorbed))
					Details:AddTooltipBackgroundStatusbar()

					for petIndex, petName in ipairs(actor.pets) do
						local pet = Combat :GetActor(1, petName)
						if (pet) then
						totalAbsorb = totalAbsorb + pet.totalabsorbed

						GameCooltip:AddLine(petName, format_func (_, pet.totalabsorbed))
						Details:AddTooltipBackgroundStatusbar()

						end
					end
				]],
			}

			local have = false
			for _, custom in ipairs(self.custom) do
				if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONSHIELDS"] and (custom.script_version and custom.script_version >= DamageOnShields.script_version) ) then
					have = true
					break
				end
			end
			if (not have) then
				for i, custom in ipairs(self.custom) do
					if (custom.name == Loc ["STRING_CUSTOM_DAMAGEONSHIELDS"]) then
						table.remove (self.custom, i)
					end
				end
				setmetatable(DamageOnShields, Details.atributo_custom)
				DamageOnShields.__index = Details.atributo_custom
				self.custom [#self.custom+1] = DamageOnShields
			end

				---------------------------------------

			Details:ResetCustomFunctionsCache()

		end
	end
