local x=game:GetService("\080\108\097\121\101\114\115")local C=Vector3.new(0,0,0)local n=require(script.Parent:WaitForChild("\066\097\115\101\079\099\099\108\117\115\105\111\110"))local k=setmetatable({},n)k.__index=k local M={LIMBS=2,MOVEMENT=3,CORNERS=4;CIRCLE1=5;CIRCLE2=6,LIMBMOVE=7,SMART_CIRCLE=8,CHAR_OUTLINE=9}function k.new()local x=setmetatable(n.new(),k)x.char=nil x.humanoidRootPart=nil x.torsoPart=nil x.headPart=nil x.childAddedConn=nil x.childRemovedConn=nil x.behaviors={}x.behaviors[M.LIMBS]=x.LimbBehavior x.behaviors[M.MOVEMENT]=x.MoveBehavior x.behaviors[M.CORNERS]=x.CornerBehavior x.behaviors[M.CIRCLE1]=x.CircleBehavior x.behaviors[M.CIRCLE2]=x.CircleBehavior x.behaviors[M.LIMBMOVE]=x.LimbMoveBehavior x.behaviors[M.SMART_CIRCLE]=x.SmartCircleBehavior x.behaviors[M.CHAR_OUTLINE]=x.CharacterOutlineBehavior x.mode=M.SMART_CIRCLE x.behaviorFunction=x.SmartCircleBehavior x.savedHits={}x.trackedLimbs={}x.camera=game.Workspace.CurrentCamera x.enabled=false return x end function k.Enable(x,C)x.enabled=C if not C then x:Cleanup()end end function k.GetOcclusionMode(x)return Enum.DevCameraOcclusionMode.Invisicam end function k.LimbBehavior(x,C)for x,n in pairs(x.trackedLimbs)do C[#C+1]=x.Position end end function k.MoveBehavior(x,C)for n=1,3,1 do local k=x.humanoidRootPart.Velocity C[#C+1]=x.humanoidRootPart.Position+((n-1)*x.humanoidRootPart.CFrame.lookVector)*((Vector3.new(k.X,0,k.Z)).Magnitude/2)end end local T={Vector3.new(1,1,-1);Vector3.new(1,-1,-1);Vector3.new(-1,-1,-1);Vector3.new(-1,1,-1)}function k.CornerBehavior(x,C)local n=x.humanoidRootPart.CFrame local k=n.Position local M=n-k local i=x.char:GetExtentsSize()/2 C[#C+1]=k for x=1,#T,1 do C[#C+1]=k+M*(i*T[x])end end function k.CircleBehavior(x,C)if x.mode==M.CIRCLE1 then local C=x.humanoidRootPart.CFrame else local C=x.camera.CoordinateFrame v14=(C-C.Position)+x.humanoidRootPart.Position end C[#C+1]=v14.Position for x=0,9,1 do local n=((2*math.pi)/10)*x C[#C+1]=v14*(3*Vector3.new(math.cos(n),math.sin(n),0))end end function k.LimbMoveBehavior(x,C)x:LimbBehavior(C)x:MoveBehavior(C)end function k.CharacterOutlineBehavior(x,n)local k=x.torsoPart.CFrame.upVector.unit local M=x.torsoPart.CFrame.rightVector.unit n[#n+1]=x.torsoPart.CFrame.p n[#n+1]=x.torsoPart.CFrame.p+k n[#n+1]=x.torsoPart.CFrame.p-k n[#n+1]=x.torsoPart.CFrame.p+M n[#n+1]=x.torsoPart.CFrame.p-M if x.headPart then n[#n+1]=x.headPart.CFrame.p end local T=CFrame.new(C,Vector3.new(x.camera.CoordinateFrame.lookVector.X,0,x.camera.CoordinateFrame.lookVector.Z))local i=x.torsoPart and x.torsoPart.Position or x.humanoidRootPart.Position local t={x.torsoPart}if x.headPart then t[#t+1]=x.headPart end for x=1,24,1 do local C=((2*math.pi)*x)/24 local k=T*(3*Vector3.new(math.cos(C),math.sin(C),0))local M=Vector3.new(k.X,math.max(k.Y,-2.25),k.Z)local e,L=game.Workspace:FindPartOnRayWithWhitelist(Ray.new(i+M,-3*M),t,false)if e then n[#n+1]=L+.2*(i-L).unit end end end local i=(2*math.pi)/24 local function t(x,n,k,M)local T=n:Cross(M)local i=k.X-x.X local t=k.Y-x.Y local e=k.Z-x.Z local L=n.Y local V=-M.Y local b=T.Y local d=n.Z local J=-M.Z local I=T.Z local O=(n.X*(V*I-b*J)-(-M.X*(L*I-b*d)))+T.X*(L*J-V*d)if O==0 then return C end local K=-M.Y local g=T.Y local E=-M.Z local P=T.Z local a=n.Y local u=T.Y local y=n.Z local D=T.Z local l=x+(((i*(K*P-g*E)-(-M.X*(t*P-g*e)))+T.X*(t*E-K*e))/O)*n local N=k+(((n.X*(t*D-u*e)-i*(a*D-u*y))+T.X*(a*e-t*y))/O)*M if(N-l).Magnitude<.25 then return l+.5*(N-l)end return C end function k.SmartCircleBehavior(x,C)local n=x.torsoPart.CFrame.upVector.unit local k=x.torsoPart.CFrame.rightVector.unit C[#C+1]=x.torsoPart.CFrame.p C[#C+1]=x.torsoPart.CFrame.p+n C[#C+1]=x.torsoPart.CFrame.p-n C[#C+1]=x.torsoPart.CFrame.p+k C[#C+1]=x.torsoPart.CFrame.p-k if x.headPart then C[#C+1]=x.headPart.CFrame.p end local M=x.camera.CFrame-x.camera.CFrame.p local T=Vector3.new(0,.5,0)+(x.torsoPart and x.torsoPart.Position or x.humanoidRootPart.Position)for n=1,24,1 do local k=i*n-.5*math.pi local e=T+M*(2.5*Vector3.new(math.cos(k),math.sin(k),0))local L=e-x.camera.CFrame.p local V,b,d=game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(T,e-T),{x.char},false,false)local J=e if V then local C=b+.1*d.unit local n=C-T local k=((n:Cross(L)).unit:Cross(d)).unit if n.unit:Dot(-k)<n.unit:Dot((C-x.camera.CFrame.p).unit)then J=t(C,k,e,L)if J.Magnitude>0 then local n,k,M=game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(C,J-C),{x.char},false,false)if n then J=k+.1*M.unit end else J=C end else J=C end local M,i,V=game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(T,J-T),{x.char},false,false)if M then J=i-.1*(J-T).unit end end C[#C+1]=J end end function k.CheckTorsoReference(x)if x.char then x.torsoPart=x.char:FindFirstChild("\084\111\114\115\111")if not x.torsoPart then x.torsoPart=x.char:FindFirstChild("\085\112\112\101\114\084\111\114\115\111")if not x.torsoPart then x.torsoPart=x.char:FindFirstChild("\072\117\109\097\110\111\105\100\082\111\111\116\080\097\114\116")end end x.headPart=x.char:FindFirstChild("\072\101\097\100")end end local e={Head=true;["\076\101\102\116 \065\114\109"]=true;["\082\105\103\104\116 \065\114\109"]=true,["\076\101\102\116 \076\101\103"]=true;["\082\105\103\104\116 \076\101\103"]=true,LeftLowerArm=true,RightLowerArm=true,LeftUpperLeg=true,RightUpperLeg=true}function k.CharacterAdded(C,n,k)if k~=x.LocalPlayer then return end if C.childAddedConn then C.childAddedConn:Disconnect()C.childAddedConn=nil end if C.childRemovedConn then C.childRemovedConn:Disconnect()C.childRemovedConn=nil end C.char=n C.trackedLimbs={}C.childAddedConn=n.ChildAdded:Connect(function(x)if x:IsA("\066\097\115\101\080\097\114\116")then if e[x.Name]then C.trackedLimbs[x]=true end if x.Name=="\084\111\114\115\111"or x.Name=="\085\112\112\101\114\084\111\114\115\111"then C.torsoPart=x end if x.Name=="\072\101\097\100"then C.headPart=x end end end)C.childRemovedConn=n.ChildRemoved:Connect(function(x)C.trackedLimbs[x]=nil C:CheckTorsoReference()end)for x,n in pairs(C.char:GetChildren())do if n:IsA("\066\097\115\101\080\097\114\116")then if e[n.Name]then C.trackedLimbs[n]=true end if n.Name=="\084\111\114\115\111"or n.Name=="\085\112\112\101\114\084\111\114\115\111"then C.torsoPart=n end if n.Name=="\072\101\097\100"then C.headPart=n end end end end local function L(x,...)local C={}local n=""for x,k in pairs({...})do C[k]=true if n==""then local x=""else v77=" \111\114 "end n=n..(v77 ..k)end local k=type(x)assert(C[k],n..(" \116\121\112\101 \101\120\112\101\099\116\101\100\044 \103\111\116\058 "..k))end function k.SetMode(x,C)L(C,"\110\117\109\098\101\114")for n,k in pairs(M)do if k==C then x.mode=C x.behaviorFunction=x.behaviors[x.mode]return end end error("\073\110\118\097\108\105\100 \109\111\100\101 \110\117\109\098\101\114")end function k.GetObscuredParts(x)return x.savedHits end function k.Cleanup(x)for x,C in pairs(x.savedHits)do x.LocalTransparencyModifier=C end end function k.Update(x,C,n,k)local M=nil if not x.enabled or not x.char then return n,k end x.camera=game.Workspace.CurrentCamera if not x.humanoidRootPart then local C=x.char:FindFirstChildOfClass("\072\117\109\097\110\111\105\100")if C and C.RootPart then x.humanoidRootPart=C.RootPart else x.humanoidRootPart=x.char:FindFirstChild("\072\117\109\097\110\111\105\100\082\111\111\116\080\097\114\116")if not x.humanoidRootPart then return n,k end end local M=nil M=x.humanoidRootPart.AncestryChanged:Connect(function(C,n)if C==x.humanoidRootPart and not n then x.humanoidRootPart=nil if M and M.Connected then M:Disconnect()M=nil end end end)end if not x.torsoPart then x:CheckTorsoReference()if not x.torsoPart then return n,k end end local T={}x:behaviorFunction(T)local i={x.char}local t={}local e=0 local L={}local V=.75 local b=.75 local d=x.camera:GetPartsObscuringTarget({x.headPart and x.headPart.CFrame.p or T[1];x.torsoPart and x.torsoPart.CFrame.p or T[2]},i)for x=1,#d,1 do local C=d[x]M=e+1 L[C]=true for x,C in pairs(C:GetChildren())do if C:IsA("\068\101\099\097\108")then M=M+1 break end if C:IsA("\084\101\120\116\117\114\101")then M=M+1 break end end end if M>0 then V=math.pow(.375+.375/M,1/M)b=math.pow(.25+.25/M,1/M)end local J=x.camera:GetPartsObscuringTarget(T,i)local I={}for C=1,#J,1 do local n=J[C]I[n]=L[n]and V or b if n.Transparency<I[n]then t[n]=true if not x.savedHits[n]then x.savedHits[n]=n.LocalTransparencyModifier end end for C,k in pairs(n:GetChildren())do if(k:IsA("\068\101\099\097\108")or k:IsA("\084\101\120\116\117\114\101"))and k.Transparency<I[n]then I[k]=I[n]t[k]=true if not x.savedHits[k]then x.savedHits[k]=k.LocalTransparencyModifier end end end end for C,n in pairs(x.savedHits)do if t[C]then C.LocalTransparencyModifier=C.Transparency<1 and(I[C]-C.Transparency)/(1-C.Transparency)or 0 else C.LocalTransparencyModifier=n x.savedHits[C]=nil end end return n,k end return k


local l__Players__1 = game:GetService("Players");
local u1 = Vector3.new(0, 0, 0);
local v2 = require(script.Parent:WaitForChild("BaseOcclusion"));
local v3 = setmetatable({}, v2);
v3.__index = v3;
local u2 = {
	LIMBS = 2, 
	MOVEMENT = 3, 
	CORNERS = 4, 
	CIRCLE1 = 5, 
	CIRCLE2 = 6, 
	LIMBMOVE = 7, 
	SMART_CIRCLE = 8, 
	CHAR_OUTLINE = 9
};
function v3.new()
	local v4 = setmetatable(v2.new(), v3);
	v4.char = nil;
	v4.humanoidRootPart = nil;
	v4.torsoPart = nil;
	v4.headPart = nil;
	v4.childAddedConn = nil;
	v4.childRemovedConn = nil;
	v4.behaviors = {};
	v4.behaviors[u2.LIMBS] = v4.LimbBehavior;
	v4.behaviors[u2.MOVEMENT] = v4.MoveBehavior;
	v4.behaviors[u2.CORNERS] = v4.CornerBehavior;
	v4.behaviors[u2.CIRCLE1] = v4.CircleBehavior;
	v4.behaviors[u2.CIRCLE2] = v4.CircleBehavior;
	v4.behaviors[u2.LIMBMOVE] = v4.LimbMoveBehavior;
	v4.behaviors[u2.SMART_CIRCLE] = v4.SmartCircleBehavior;
	v4.behaviors[u2.CHAR_OUTLINE] = v4.CharacterOutlineBehavior;
	v4.mode = u2.SMART_CIRCLE;
	v4.behaviorFunction = v4.SmartCircleBehavior;
	v4.savedHits = {};
	v4.trackedLimbs = {};
	v4.camera = game.Workspace.CurrentCamera;
	v4.enabled = false;
	return v4;
end;
function v3.Enable(p1, p2)
	p1.enabled = p2;
	if not p2 then
		p1:Cleanup();
	end;
end;
function v3.GetOcclusionMode(p3)
	return Enum.DevCameraOcclusionMode.Invisicam;
end;
function v3.LimbBehavior(p4, p5)
	for v5, v6 in pairs(p4.trackedLimbs) do
		p5[#p5 + 1] = v5.Position;
	end;
end;
function v3.MoveBehavior(p6, p7)
	for v7 = 1, 3 do
		local l__Velocity__8 = p6.humanoidRootPart.Velocity;
		p7[#p7 + 1] = p6.humanoidRootPart.Position + (v7 - 1) * p6.humanoidRootPart.CFrame.lookVector * (Vector3.new(l__Velocity__8.X, 0, l__Velocity__8.Z).Magnitude / 2);
	end;
end;
local u3 = { Vector3.new(1, 1, -1), Vector3.new(1, -1, -1), Vector3.new(-1, -1, -1), Vector3.new(-1, 1, -1) };
function v3.CornerBehavior(p8, p9)
	local l__CFrame__9 = p8.humanoidRootPart.CFrame;
	local l__Position__10 = l__CFrame__9.Position;
	local v11 = l__CFrame__9 - l__Position__10;
	local v12 = p8.char:GetExtentsSize() / 2;
	p9[#p9 + 1] = l__Position__10;
	for v13 = 1, #u3 do
		p9[#p9 + 1] = l__Position__10 + v11 * (v12 * u3[v13]);
	end;
end;
function v3.CircleBehavior(p10, p11)
	if p10.mode == u2.CIRCLE1 then
		local v14 = p10.humanoidRootPart.CFrame;
	else
		local l__CoordinateFrame__15 = p10.camera.CoordinateFrame;
		v14 = l__CoordinateFrame__15 - l__CoordinateFrame__15.Position + p10.humanoidRootPart.Position;
	end;
	p11[#p11 + 1] = v14.Position;
	for v16 = 0, 9 do
		local v17 = 2 * math.pi / 10 * v16;
		p11[#p11 + 1] = v14 * (3 * Vector3.new(math.cos(v17), math.sin(v17), 0));
	end;
end;
function v3.LimbMoveBehavior(p12, p13)
	p12:LimbBehavior(p13);
	p12:MoveBehavior(p13);
end;
function v3.CharacterOutlineBehavior(p14, p15)
	local l__unit__18 = p14.torsoPart.CFrame.upVector.unit;
	local l__unit__19 = p14.torsoPart.CFrame.rightVector.unit;
	p15[#p15 + 1] = p14.torsoPart.CFrame.p;
	p15[#p15 + 1] = p14.torsoPart.CFrame.p + l__unit__18;
	p15[#p15 + 1] = p14.torsoPart.CFrame.p - l__unit__18;
	p15[#p15 + 1] = p14.torsoPart.CFrame.p + l__unit__19;
	p15[#p15 + 1] = p14.torsoPart.CFrame.p - l__unit__19;
	if p14.headPart then
		p15[#p15 + 1] = p14.headPart.CFrame.p;
	end;
	local v20 = CFrame.new(u1, Vector3.new(p14.camera.CoordinateFrame.lookVector.X, 0, p14.camera.CoordinateFrame.lookVector.Z));
	local v21 = p14.torsoPart and p14.torsoPart.Position or p14.humanoidRootPart.Position;
	local v22 = { p14.torsoPart };
	if p14.headPart then
		v22[#v22 + 1] = p14.headPart;
	end;
	for v23 = 1, 24 do
		local v24 = 2 * math.pi * v23 / 24;
		local v25 = v20 * (3 * Vector3.new(math.cos(v24), math.sin(v24), 0));
		local v26 = Vector3.new(v25.X, math.max(v25.Y, -2.25), v25.Z);
		local v27, v28 = game.Workspace:FindPartOnRayWithWhitelist(Ray.new(v21 + v26, -3 * v26), v22, false);
		if v27 then
			p15[#p15 + 1] = v28 + 0.2 * (v21 - v28).unit;
		end;
	end;
end;
local u4 = 2 * math.pi / 24;
local function u5(p16, p17, p18, p19)
	local v29 = p17:Cross(p19);
	local v30 = p18.X - p16.X;
	local v31 = p18.Y - p16.Y;
	local v32 = p18.Z - p16.Z;
	local l__Y__33 = p17.Y;
	local v34 = -p19.Y;
	local l__Y__35 = v29.Y;
	local l__Z__36 = p17.Z;
	local v37 = -p19.Z;
	local l__Z__38 = v29.Z;
	local v39 = p17.X * (v34 * l__Z__38 - l__Y__35 * v37) - -p19.X * (l__Y__33 * l__Z__38 - l__Y__35 * l__Z__36) + v29.X * (l__Y__33 * v37 - v34 * l__Z__36);
	if v39 == 0 then
		return u1;
	end;
	local v40 = -p19.Y;
	local l__Y__41 = v29.Y;
	local v42 = -p19.Z;
	local l__Z__43 = v29.Z;
	local l__Y__44 = p17.Y;
	local l__Y__45 = v29.Y;
	local l__Z__46 = p17.Z;
	local l__Z__47 = v29.Z;
	local v48 = p16 + (v30 * (v40 * l__Z__43 - l__Y__41 * v42) - -p19.X * (v31 * l__Z__43 - l__Y__41 * v32) + v29.X * (v31 * v42 - v40 * v32)) / v39 * p17;
	local v49 = p18 + (p17.X * (v31 * l__Z__47 - l__Y__45 * v32) - v30 * (l__Y__44 * l__Z__47 - l__Y__45 * l__Z__46) + v29.X * (l__Y__44 * v32 - v31 * l__Z__46)) / v39 * p19;
	if (v49 - v48).Magnitude < 0.25 then
		return v48 + 0.5 * (v49 - v48);
	end;
	return u1;
end;
function v3.SmartCircleBehavior(p20, p21)
	local l__unit__50 = p20.torsoPart.CFrame.upVector.unit;
	local l__unit__51 = p20.torsoPart.CFrame.rightVector.unit;
	p21[#p21 + 1] = p20.torsoPart.CFrame.p;
	p21[#p21 + 1] = p20.torsoPart.CFrame.p + l__unit__50;
	p21[#p21 + 1] = p20.torsoPart.CFrame.p - l__unit__50;
	p21[#p21 + 1] = p20.torsoPart.CFrame.p + l__unit__51;
	p21[#p21 + 1] = p20.torsoPart.CFrame.p - l__unit__51;
	if p20.headPart then
		p21[#p21 + 1] = p20.headPart.CFrame.p;
	end;
	local v52 = p20.camera.CFrame - p20.camera.CFrame.p;
	local v53 = Vector3.new(0, 0.5, 0) + (p20.torsoPart and p20.torsoPart.Position or p20.humanoidRootPart.Position);
	for v54 = 1, 24 do
		local v55 = u4 * v54 - 0.5 * math.pi;
		local v56 = v53 + v52 * (2.5 * Vector3.new(math.cos(v55), math.sin(v55), 0));
		local v57 = v56 - p20.camera.CFrame.p;
		local v58, v59, v60 = game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(v53, v56 - v53), { p20.char }, false, false);
		local v61 = v56;
		if v58 then
			local v62 = v59 + 0.1 * v60.unit;
			local v63 = v62 - v53;
			local l__unit__64 = v63:Cross(v57).unit:Cross(v60).unit;
			if v63.unit:Dot(-l__unit__64) < v63.unit:Dot((v62 - p20.camera.CFrame.p).unit) then
				v61 = u5(v62, l__unit__64, v56, v57);
				if v61.Magnitude > 0 then
					local v65, v66, v67 = game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(v62, v61 - v62), { p20.char }, false, false);
					if v65 then
						v61 = v66 + 0.1 * v67.unit;
					end;
				else
					v61 = v62;
				end;
			else
				v61 = v62;
			end;
			local v68, v69, v70 = game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(v53, v61 - v53), { p20.char }, false, false);
			if v68 then
				v61 = v69 - 0.1 * (v61 - v53).unit;
			end;
		end;
		p21[#p21 + 1] = v61;
	end;
end;
function v3.CheckTorsoReference(p22)
	if p22.char then
		p22.torsoPart = p22.char:FindFirstChild("Torso");
		if not p22.torsoPart then
			p22.torsoPart = p22.char:FindFirstChild("UpperTorso");
			if not p22.torsoPart then
				p22.torsoPart = p22.char:FindFirstChild("HumanoidRootPart");
			end;
		end;
		p22.headPart = p22.char:FindFirstChild("Head");
	end;
end;
local u6 = {
	Head = true, 
	["Left Arm"] = true, 
	["Right Arm"] = true, 
	["Left Leg"] = true, 
	["Right Leg"] = true, 
	LeftLowerArm = true, 
	RightLowerArm = true, 
	LeftUpperLeg = true, 
	RightUpperLeg = true
};
function v3.CharacterAdded(p23, p24, p25)
	if p25 ~= l__Players__1.LocalPlayer then
		return;
	end;
	if p23.childAddedConn then
		p23.childAddedConn:Disconnect();
		p23.childAddedConn = nil;
	end;
	if p23.childRemovedConn then
		p23.childRemovedConn:Disconnect();
		p23.childRemovedConn = nil;
	end;
	p23.char = p24;
	p23.trackedLimbs = {};
	p23.childAddedConn = p24.ChildAdded:Connect(function(p26)
		if p26:IsA("BasePart") then
			if u6[p26.Name] then
				p23.trackedLimbs[p26] = true;
			end;
			if p26.Name == "Torso" or p26.Name == "UpperTorso" then
				p23.torsoPart = p26;
			end;
			if p26.Name == "Head" then
				p23.headPart = p26;
			end;
		end;
	end);
	p23.childRemovedConn = p24.ChildRemoved:Connect(function(p27)
		p23.trackedLimbs[p27] = nil;
		p23:CheckTorsoReference();
	end);
	for v71, v72 in pairs(p23.char:GetChildren()) do
		if v72:IsA("BasePart") then
			if u6[v72.Name] then
				p23.trackedLimbs[v72] = true;
			end;
			if v72.Name == "Torso" or v72.Name == "UpperTorso" then
				p23.torsoPart = v72;
			end;
			if v72.Name == "Head" then
				p23.headPart = v72;
			end;
		end;
	end;
end;
local function u7(p28, ...)
	local v73 = {};
	local v74 = "";
	for v75, v76 in pairs({ ... }) do
		v73[v76] = true;
		if v74 == "" then
			local v77 = "";
		else
			v77 = " or ";
		end;
		v74 = v74 .. v77 .. v76;
	end;
	local v78 = type(p28);
	assert(v73[v78], v74 .. " type expected, got: " .. v78);
end;
function v3.SetMode(p29, p30)
	u7(p30, "number");
	for v79, v80 in pairs(u2) do
		if v80 == p30 then
			p29.mode = p30;
			p29.behaviorFunction = p29.behaviors[p29.mode];
			return;
		end;
	end;
	error("Invalid mode number");
end;
function v3.GetObscuredParts(p31)
	return p31.savedHits;
end;
function v3.Cleanup(p32)
	for v81, v82 in pairs(p32.savedHits) do
		v81.LocalTransparencyModifier = v82;
	end;
end;
function v3.Update(p33, p34, p35, p36)
	local v83 = nil;
	if not p33.enabled or not p33.char then
		return p35, p36;
	end;
	p33.camera = game.Workspace.CurrentCamera;
	if not p33.humanoidRootPart then
		local v84 = p33.char:FindFirstChildOfClass("Humanoid");
		if v84 and v84.RootPart then
			p33.humanoidRootPart = v84.RootPart;
		else
			p33.humanoidRootPart = p33.char:FindFirstChild("HumanoidRootPart");
			if not p33.humanoidRootPart then
				return p35, p36;
			end;
		end;
		local u8 = nil;
		u8 = p33.humanoidRootPart.AncestryChanged:Connect(function(p37, p38)
			if p37 == p33.humanoidRootPart and not p38 then
				p33.humanoidRootPart = nil;
				if u8 and u8.Connected then
					u8:Disconnect();
					u8 = nil;
				end;
			end;
		end);
	end;
	if not p33.torsoPart then
		p33:CheckTorsoReference();
		if not p33.torsoPart then
			return p35, p36;
		end;
	end;
	local v85 = {};
	p33:behaviorFunction(v85);
	local v86 = { p33.char };
	local u9 = {};
	local v87 = 0;
	local v88 = {};
	local v89 = 0.75;
	local v90 = 0.75;
	local v91 = p33.camera:GetPartsObscuringTarget({ p33.headPart and p33.headPart.CFrame.p or v85[1], p33.torsoPart and p33.torsoPart.CFrame.p or v85[2] }, v86);
	for v92 = 1, #v91 do
		local v93 = v91[v92];
		v83 = v87 + 1;
		v88[v93] = true;
		for v94, v95 in pairs(v93:GetChildren()) do
			if v95:IsA("Decal") then
				v83 = v83 + 1;
				break;
			end;
			if v95:IsA("Texture") then
				v83 = v83 + 1;
				break;
			end;
		end;
	end;
	if v83 > 0 then
		v89 = math.pow(0.375 + 0.375 / v83, 1 / v83);
		v90 = math.pow(0.25 + 0.25 / v83, 1 / v83);
	end;
	local v96 = p33.camera:GetPartsObscuringTarget(v85, v86);
	local v97 = {};
	for v98 = 1, #v96 do
		local v99 = v96[v98];
		v97[v99] = v88[v99] and v89 or v90;
		if v99.Transparency < v97[v99] then
			u9[v99] = true;
			if not p33.savedHits[v99] then
				p33.savedHits[v99] = v99.LocalTransparencyModifier;
			end;
		end;
		for v100, v101 in pairs(v99:GetChildren()) do
			if (v101:IsA("Decal") or v101:IsA("Texture")) and v101.Transparency < v97[v99] then
				v97[v101] = v97[v99];
				u9[v101] = true;
				if not p33.savedHits[v101] then
					p33.savedHits[v101] = v101.LocalTransparencyModifier;
				end;
			end;
		end;
	end;
	for v102, v103 in pairs(p33.savedHits) do
		if u9[v102] then
			v102.LocalTransparencyModifier = v102.Transparency < 1 and (v97[v102] - v102.Transparency) / (1 - v102.Transparency) or 0;
		else
			v102.LocalTransparencyModifier = v103;
			p33.savedHits[v102] = nil;
		end;
	end;
	return p35, p36;
end;
return v3;
