function Table.deepEquivalent(D,R)if D==R then return true end if type(D)~=type(R)then return false end if type(D)=="\116\097\098\108\101"then for D,j in pairs(D)do if not Table.deepEquivalent(j,R[D])then return false end end for R,j in pairs(R)do if not Table.deepEquivalent(j,D[R])then return false end end return true else return false end end

function Table.deepEquivalent(target, source)
	if target == source then
		return true
	end

	if type(target) ~= type(source) then
		return false
	end

	if type(target) == "table" then
		for key, value in pairs(target) do
			if not Table.deepEquivalent(value, source[key]) then
				return false
			end
		end

		for key, value in pairs(source) do
			if not Table.deepEquivalent(value, target[key]) then
				return false
			end
		end

		return true
	else
		-- target == source should do it.
		return false
	end
end
