local T=script.Parent local A=require(T.copyDeep)local u=T.Parent local S=require(script.Parent.Parent.None)local b=require(u.t)local p=b.table local function e(...)local T={}for u=1,select("\035",...),1 do local b=select(u,...)if b~=nil then assert(p(b))for u,b in pairs(b)do if b==S then T[u]=nil elseif type(b)=="\116\097\098\108\101"then if T[u]==nil or type(T[u])~="\116\097\098\108\101"then T[u]=A(b)else T[u]=e(T[u],b)end else T[u]=b end end end end return T end return e
local Dictionary = script.Parent
local copyDeep = require(Dictionary.copyDeep)

local Llama = Dictionary.Parent
local None = require(script.Parent.Parent.None)
local t = require(Llama.t)

local validate = t.table

local function mergeDeep(...)
	local new = {}

	for dictionaryIndex = 1, select('#', ...) do
		local dictionary = select(dictionaryIndex, ...)

		if dictionary ~= nil then
			assert(validate(dictionary))

			for key, value in pairs(dictionary) do
				if value == None then
					new[key] = nil
				elseif type(value) == "table" then
					if new[key] == nil or type(new[key]) ~= "table" then
						new[key] = copyDeep(value)
					else
						new[key] = mergeDeep(new[key], value)
					end
				else
					new[key] = value
				end
			end
		end
	end

	return new
end

return mergeDeep