function Basic.HasProperty(N,T)local g=rawget(CachedProperties,N.ClassName)and rawget(rawget(CachedProperties,N.ClassName),T)if g then return g end local r=pcall(function()return N[T]end)if not rawget(CachedProperties,N.ClassName)then rawset(CachedProperties,N.ClassName,{})end rawset(rawget(CachedProperties,N.ClassName),T,r)return r end

function Basic.HasProperty(instance, Property)
	local CachedProp = rawget(CachedProperties, instance.ClassName) and rawget(rawget(CachedProperties, instance.ClassName), Property)
	if CachedProp then return CachedProp end
	
	local success = pcall(function()
		return instance[Property]
	end)
		
	if not rawget(CachedProperties, instance.ClassName) then rawset(CachedProperties, instance.ClassName, {}) end
	rawset(rawget(CachedProperties, instance.ClassName), Property, success)
	
	return success
end
