return function(N,f)if f then setfenv(1,f)end local z=service.PlayerGui local j=service.Players.LocalPlayer local t=script.Parent.Parent local R=t.Frame.Close local Y=t.Frame.Main local e=t.Frame.Title local Z=t.Frame.Timer local x=N.gTable local p=N.OnClick local G=N.OnClose local I=N.OnIgnore local r=N.Title local S=N.Message or N.Text or""local T=N.Time local O=nil if p and type(p)=="\115\116\114\105\110\103"then p=client.Core.LoadCode(p,GetEnv())end if G and type(G)=="\115\116\114\105\110\103"then G=client.Core.LoadCode(G,GetEnv())end if I and type(I)=="\115\116\114\105\110\103"then I=client.Core.LoadCode(I,GetEnv())end local M=client.UI.Get("\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114",nil,true)if not M then local N=service.New("\083\099\114\101\101\110\071\117\105")local f=client.UI.Register(N)local z=service.New("\083\099\114\111\108\108\105\110\103\070\114\097\109\101",N)client.UI.Prepare(N)f.Name="\078\111\116\105\102\105\099\097\116\105\111\110\072\111\108\100\101\114"z.Name="\070\114\097\109\101"z.BackgroundTransparency=1 z.Size=UDim2.new(0,200,.5,0)z.Position=UDim2.new(1,-210,.5,-10)z.CanvasSize=UDim2.new(0,0,0,0)z.ChildAdded:Connect(function(N)if#z:GetChildren()==0 then z.Visible=false else z.Visible=true end end)z.ChildRemoved:Connect(function(N)if#z:GetChildren()==0 then z.Visible=false else z.Visible=true end end)M=f f:Ready()end local function P(N,f)local z={}for N,f in pairs(N:children())do table.insert(z,1,f)end for N,z in pairs(z)do z.Position=UDim2.new(0,0,1,-75*(N+f))end N.CanvasSize=UDim2.new(0,0,0,#N:children()*75)local j=#N:children()*75-N.AbsoluteWindowSize.Y if j<0 then j=0 end N.CanvasPosition=Vector2.new(0,j)end M=M.Object.Frame e.Text=r t.Name=r Y.Text=S Y.MouseButton1Click:Connect(function()if t and t.Parent then if p then O=p()end t:Destroy()P(M,0)end end)R.MouseButton1Click:Connect(function()if t and t.Parent then if G then O=G()end x:Destroy()P(M,0)end end)P(M,1)t.Parent=M t.Size=UDim2.new(0,0,0,0)t:TweenSize(UDim2.new(1,-5,0,60),"\079\117\116","\081\117\097\100",.2)t:TweenPosition(UDim2.new(0,0,1,-75),"\079\117\116","\076\105\110\101\097\114",.2)spawn(function()local N=Instance.new("\083\111\117\110\100",service.LocalContainer())if S=="\067\108\105\099\107 \104\101\114\101 \102\111\114 \099\111\109\109\097\110\100\115\046"then N.SoundId="\114\098\120\097\115\115\101\116\105\100\058\047\047\050\056\055\049\054\052\053\050\051\053"elseif r=="\087\097\114\110\105\110\103\033"then N.SoundId="\114\098\120\097\115\115\101\116\105\100\058\047\047\049\052\050\057\049\054\057\053\056"else N.SoundId="\114\098\120\097\115\115\101\116\105\100\058\047\047\049\053\053\053\052\057\051\054\056\051"end wait(.1)N:Play()wait(1)N:Destroy()end)if T then Z.Visible=true spawn(function()repeat Z.Text=T wait(1)T=T-1 until T<=0 or not t or not t.Parent if t and t.Parent then if I then O=I()end t:Destroy()P(M,0)end end)end repeat wait()until O~=nil or not t or not t.Parent return O end
--// All global vars will be wiped/replaced except script

return function(data, env)
	if env then
		setfenv(1, env)
	end

	local playergui = service.PlayerGui
	local localplayer = service.Players.LocalPlayer

	local frame = script.Parent.Parent
	local close = frame.Frame.Close
	local main = frame.Frame.Main
	local title = frame.Frame.Title
	local timer = frame.Frame.Timer

	local gTable = data.gTable
	local clickfunc = data.OnClick
	local closefunc = data.OnClose
	local ignorefunc = data.OnIgnore

	local name = data.Title
	local text = data.Message or data.Text or ""
	local time = data.Time

	local returner = nil

	if clickfunc and type(clickfunc) == "string" then
		clickfunc = client.Core.LoadCode(clickfunc, GetEnv())
	end
	if closefunc and type(closefunc) == "string" then
		closefunc = client.Core.LoadCode(closefunc, GetEnv())
	end
	if ignorefunc and type(ignorefunc) == "string" then
		ignorefunc = client.Core.LoadCode(ignorefunc, GetEnv())
	end

	--client.UI.Make("NotificationHolder")
	local holder = client.UI.Get("NotificationHolder", nil, true)
	if not holder then
		local hold = service.New("ScreenGui")
		local hTable = client.UI.Register(hold)
		local frame = service.New("ScrollingFrame", hold)
		client.UI.Prepare(hold)
		hTable.Name = "NotificationHolder"
		frame.Name = "Frame"
		frame.BackgroundTransparency = 1
		frame.Size = UDim2.new(0, 200, 0.5, 0)
		frame.Position = UDim2.new(1, -210, 0.5, -10)
		frame.CanvasSize = UDim2.new(0, 0, 0, 0)
		frame.ChildAdded:Connect(function(c)
			if #frame:GetChildren() == 0 then
				frame.Visible = false
			else
				frame.Visible = true
			end
		end)

		frame.ChildRemoved:Connect(function(c)
			if #frame:GetChildren() == 0 then
				frame.Visible = false
			else
				frame.Visible = true
			end
		end)

		holder = hTable
		hTable:Ready()
	end

	local function moveGuis(holder, mod)
		local holdstuff = {}
		for i, v in pairs(holder:children()) do
			table.insert(holdstuff, 1, v)
		end
		for i, v in pairs(holdstuff) do
			v.Position = UDim2.new(0, 0, 1, -75 * (i + mod))
		end
		holder.CanvasSize = UDim2.new(0, 0, 0, (#holder:children() * 75))
		local pos = (((#holder:children()) * 75) - holder.AbsoluteWindowSize.Y)
		if pos < 0 then
			pos = 0
		end
		holder.CanvasPosition = Vector2.new(0, pos)
	end

	holder = holder.Object.Frame
	title.Text = name
	frame.Name = name
	main.Text = text

	main.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if clickfunc then
				returner = clickfunc()
			end
			frame:Destroy()
			moveGuis(holder, 0)
		end
	end)

	close.MouseButton1Click:Connect(function()
		if frame and frame.Parent then
			if closefunc then
				returner = closefunc()
			end
			gTable:Destroy()
			moveGuis(holder, 0)
		end
	end)

	moveGuis(holder, 1)
	frame.Parent = holder
	frame.Size = UDim2.new(0, 0, 0, 0)
	frame:TweenSize(UDim2.new(1, -5, 0, 60), "Out", "Quad", 0.2)
	frame:TweenPosition(UDim2.new(0, 0, 1, -75), "Out", "Linear", 0.2)

	spawn(function()
		local sound = Instance.new("Sound", service.LocalContainer())
		if text == "Click here for commands." then
			sound.SoundId = "rbxassetid://2871645235"
		elseif name == "Warning!" then
			sound.SoundId = "rbxassetid://142916958"
		else
			sound.SoundId = "rbxassetid://1555493683"
		end
		wait(0.1)
		sound:Play()
		wait(1)
		sound:Destroy()
	end)

	if time then
		timer.Visible = true
		spawn(function()
			repeat
				timer.Text = time
				--timer.Size=UDim2.new(0,timer.TextBounds.X,0,10)
				wait(1)
				time = time - 1
			until time <= 0 or not frame or not frame.Parent

			if frame and frame.Parent then
				if ignorefunc then
					returner = ignorefunc()
				end
				frame:Destroy()
				moveGuis(holder, 0)
			end
		end)
	end

	repeat
		wait()
	until returner ~= nil or not frame or not frame.Parent

	return returner
end
