Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
8c12f22140
|
@ -1015,11 +1015,15 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
// Need to translate to MXP somehow
|
// Need to translate to MXP somehow
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTeleportLocationStart()
|
public void SendTeleportStart(uint flags)
|
||||||
{
|
{
|
||||||
// Need to translate to MXP somehow
|
// Need to translate to MXP somehow
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
||||||
{
|
{
|
||||||
// Need to translate to MXP somehow
|
// Need to translate to MXP somehow
|
||||||
|
|
|
@ -573,7 +573,12 @@ namespace OpenSim.Client.Sirikata.ClientStack
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTeleportLocationStart()
|
public void SendTeleportStart(uint flags)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -579,7 +579,12 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTeleportLocationStart()
|
public void SendTeleportStart(uint flags)
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1011,7 +1011,9 @@ namespace OpenSim.Framework
|
||||||
uint flags, string capsURL);
|
uint flags, string capsURL);
|
||||||
|
|
||||||
void SendTeleportFailed(string reason);
|
void SendTeleportFailed(string reason);
|
||||||
void SendTeleportLocationStart();
|
void SendTeleportStart(uint flags);
|
||||||
|
void SendTeleportProgress(uint flags, string message);
|
||||||
|
|
||||||
void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance);
|
void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance);
|
||||||
void SendPayPrice(UUID objectID, int[] payPrice);
|
void SendPayPrice(UUID objectID, int[] payPrice);
|
||||||
|
|
||||||
|
|
|
@ -1432,16 +1432,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendTeleportLocationStart()
|
public void SendTeleportStart(uint flags)
|
||||||
{
|
{
|
||||||
//TeleportStartPacket tpStart = (TeleportStartPacket)PacketPool.Instance.GetPacket(PacketType.TeleportStart);
|
TeleportStartPacket tpStart = (TeleportStartPacket)PacketPool.Instance.GetPacket(PacketType.TeleportStart);
|
||||||
TeleportStartPacket tpStart = new TeleportStartPacket();
|
//TeleportStartPacket tpStart = new TeleportStartPacket();
|
||||||
tpStart.Info.TeleportFlags = 16; // Teleport via location
|
tpStart.Info.TeleportFlags = flags; //16; // Teleport via location
|
||||||
|
|
||||||
// Hack to get this out immediately and skip throttles
|
// Hack to get this out immediately and skip throttles
|
||||||
OutPacket(tpStart, ThrottleOutPacketType.Unknown);
|
OutPacket(tpStart, ThrottleOutPacketType.Unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
|
{
|
||||||
|
TeleportProgressPacket tpProgress = (TeleportProgressPacket)PacketPool.Instance.GetPacket(PacketType.TeleportProgress);
|
||||||
|
tpProgress.AgentData.AgentID = this.AgentId;
|
||||||
|
tpProgress.Info.TeleportFlags = flags;
|
||||||
|
tpProgress.Info.Message = Util.StringToBytes256(message);
|
||||||
|
|
||||||
|
// Hack to get this out immediately and skip throttles
|
||||||
|
OutPacket(tpProgress, ThrottleOutPacketType.Unknown);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
||||||
{
|
{
|
||||||
MoneyBalanceReplyPacket money = (MoneyBalanceReplyPacket)PacketPool.Instance.GetPacket(PacketType.MoneyBalanceReply);
|
MoneyBalanceReplyPacket money = (MoneyBalanceReplyPacket)PacketPool.Instance.GetPacket(PacketType.MoneyBalanceReply);
|
||||||
|
@ -3022,7 +3033,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
OSDMap GroupDataMap = new OSDMap(6);
|
OSDMap GroupDataMap = new OSDMap(6);
|
||||||
OSDMap NewGroupDataMap = new OSDMap(1);
|
OSDMap NewGroupDataMap = new OSDMap(1);
|
||||||
GroupDataMap.Add("GroupPowers", OSD.FromBinary(m.GroupPowers));
|
GroupDataMap.Add("GroupPowers", OSD.FromULong(m.GroupPowers));
|
||||||
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices));
|
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices));
|
||||||
GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle));
|
GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle));
|
||||||
GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID));
|
GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID));
|
||||||
|
|
|
@ -174,9 +174,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
position.Z = newPosZ;
|
position.Z = newPosZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only send this if the event queue is null
|
sp.ControllingClient.SendTeleportStart(teleportFlags);
|
||||||
if (eq == null)
|
|
||||||
sp.ControllingClient.SendTeleportLocationStart();
|
|
||||||
|
|
||||||
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
|
sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
|
||||||
sp.Teleport(position);
|
sp.Teleport(position);
|
||||||
|
@ -257,9 +255,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
ulong destinationHandle = finalDestination.RegionHandle;
|
ulong destinationHandle = finalDestination.RegionHandle;
|
||||||
|
|
||||||
if (eq == null)
|
|
||||||
sp.ControllingClient.SendTeleportLocationStart();
|
|
||||||
|
|
||||||
// Let's do DNS resolution only once in this process, please!
|
// Let's do DNS resolution only once in this process, please!
|
||||||
// This may be a costly operation. The reg.ExternalEndPoint field is not a passive field,
|
// This may be a costly operation. The reg.ExternalEndPoint field is not a passive field,
|
||||||
// it's actually doing a lot of work.
|
// it's actually doing a lot of work.
|
||||||
|
@ -277,6 +272,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sp.ControllingClient.SendTeleportStart(teleportFlags);
|
||||||
|
|
||||||
// the avatar.Close below will clear the child region list. We need this below for (possibly)
|
// the avatar.Close below will clear the child region list. We need this below for (possibly)
|
||||||
// closing the child agents, so save it here (we need a copy as it is Clear()-ed).
|
// closing the child agents, so save it here (we need a copy as it is Clear()-ed).
|
||||||
//List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList());
|
//List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList());
|
||||||
|
@ -320,6 +317,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
|
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
|
||||||
{
|
{
|
||||||
|
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent...");
|
||||||
|
|
||||||
#region IP Translation for NAT
|
#region IP Translation for NAT
|
||||||
IClientIPEndpoint ipepClient;
|
IClientIPEndpoint ipepClient;
|
||||||
if (sp.ClientView.TryGet(out ipepClient))
|
if (sp.ClientView.TryGet(out ipepClient))
|
||||||
|
@ -397,6 +396,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
agent.Position = position;
|
agent.Position = position;
|
||||||
SetCallbackURL(agent, sp.Scene.RegionInfo);
|
SetCallbackURL(agent, sp.Scene.RegionInfo);
|
||||||
|
|
||||||
|
//sp.ControllingClient.SendTeleportProgress(teleportFlags, "Updating agent...");
|
||||||
|
|
||||||
if (!UpdateAgent(reg, finalDestination, agent))
|
if (!UpdateAgent(reg, finalDestination, agent))
|
||||||
{
|
{
|
||||||
// Region doesn't take it
|
// Region doesn't take it
|
||||||
|
|
|
@ -158,7 +158,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
info.Add("SimAccess", OSD.FromInteger(simAccess));
|
info.Add("SimAccess", OSD.FromInteger(simAccess));
|
||||||
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
|
info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes()));
|
||||||
info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port));
|
info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port));
|
||||||
info.Add("TeleportFlags", OSD.FromBinary(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
|
info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation
|
||||||
|
|
||||||
OSDArray infoArr = new OSDArray();
|
OSDArray infoArr = new OSDArray();
|
||||||
infoArr.Add(info);
|
infoArr.Add(info);
|
||||||
|
|
|
@ -343,7 +343,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
{
|
{
|
||||||
if (!s.IsChildAgent)
|
if (!s.IsChildAgent)
|
||||||
{
|
{
|
||||||
s.ControllingClient.SendTeleportLocationStart();
|
|
||||||
m_scene.TeleportClientHome(user, s.ControllingClient);
|
m_scene.TeleportClientHome(user, s.ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -478,7 +477,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
ScenePresence s = m_scene.GetScenePresence(prey);
|
ScenePresence s = m_scene.GetScenePresence(prey);
|
||||||
if (s != null)
|
if (s != null)
|
||||||
{
|
{
|
||||||
s.ControllingClient.SendTeleportLocationStart();
|
|
||||||
m_scene.TeleportClientHome(prey, s.ControllingClient);
|
m_scene.TeleportClientHome(prey, s.ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -498,7 +496,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
// Also make sure they are actually in the region
|
// Also make sure they are actually in the region
|
||||||
if (p != null && !p.IsChildAgent)
|
if (p != null && !p.IsChildAgent)
|
||||||
{
|
{
|
||||||
p.ControllingClient.SendTeleportLocationStart();
|
|
||||||
m_scene.TeleportClientHome(p.UUID, p.ControllingClient);
|
m_scene.TeleportClientHome(p.UUID, p.ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -520,7 +520,11 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendTeleportLocationStart()
|
public virtual void SendTeleportStart(uint flags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendTeleportProgress(uint flags, string message)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1035,11 +1035,15 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTeleportLocationStart()
|
public void SendTeleportStart(uint flags)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
public void SendMoneyBalance(UUID transaction, bool success, byte[] description, int balance)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -1129,7 +1129,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
OSDMap NewGroupDataMap = new OSDMap(1);
|
OSDMap NewGroupDataMap = new OSDMap(1);
|
||||||
|
|
||||||
GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID));
|
GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID));
|
||||||
GroupDataMap.Add("GroupPowers", OSD.FromBinary(membership.GroupPowers));
|
GroupDataMap.Add("GroupPowers", OSD.FromULong(membership.GroupPowers));
|
||||||
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices));
|
GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices));
|
||||||
GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture));
|
GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture));
|
||||||
GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution));
|
GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution));
|
||||||
|
|
|
@ -611,7 +611,11 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendTeleportLocationStart()
|
public virtual void SendTeleportStart(uint flags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void SendTeleportProgress(uint flags, string message)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3505,6 +3505,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
UUID invItemID = InventorySelf();
|
||||||
|
UUID targetID;
|
||||||
|
|
||||||
|
if (!UUID.TryParse(target, out targetID))
|
||||||
|
return;
|
||||||
|
|
||||||
TaskInventoryItem item;
|
TaskInventoryItem item;
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
|
@ -3524,7 +3528,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
client = sp.ControllingClient;
|
client = sp.ControllingClient;
|
||||||
|
|
||||||
SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)target);
|
SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)targetID);
|
||||||
|
|
||||||
if (targetPart.ParentGroup.RootPart.AttachmentPoint != 0)
|
if (targetPart.ParentGroup.RootPart.AttachmentPoint != 0)
|
||||||
return; // Fail silently if attached
|
return; // Fail silently if attached
|
||||||
|
@ -4070,7 +4074,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (m_host.OwnerID == World.LandChannel.GetLandObject(
|
if (m_host.OwnerID == World.LandChannel.GetLandObject(
|
||||||
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
|
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
|
||||||
{
|
{
|
||||||
presence.ControllingClient.SendTeleportLocationStart();
|
|
||||||
World.TeleportClientHome(agentId, presence.ControllingClient);
|
World.TeleportClientHome(agentId, presence.ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -664,7 +664,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
regionName = regInfo.RegionName;
|
regionName = regInfo.RegionName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
presence.ControllingClient.SendTeleportLocationStart();
|
|
||||||
World.RequestTeleportLocation(presence.ControllingClient, regionName,
|
World.RequestTeleportLocation(presence.ControllingClient, regionName,
|
||||||
new Vector3((float)position.x, (float)position.y, (float)position.z),
|
new Vector3((float)position.x, (float)position.y, (float)position.z),
|
||||||
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);
|
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);
|
||||||
|
@ -696,7 +695,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
== World.LandChannel.GetLandObject(
|
== World.LandChannel.GetLandObject(
|
||||||
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
|
presence.AbsolutePosition.X, presence.AbsolutePosition.Y).LandData.OwnerID)
|
||||||
{
|
{
|
||||||
presence.ControllingClient.SendTeleportLocationStart();
|
|
||||||
World.RequestTeleportLocation(presence.ControllingClient, regionHandle,
|
World.RequestTeleportLocation(presence.ControllingClient, regionHandle,
|
||||||
new Vector3((float)position.x, (float)position.y, (float)position.z),
|
new Vector3((float)position.x, (float)position.y, (float)position.z),
|
||||||
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);
|
new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation);
|
||||||
|
|
|
@ -53,9 +53,20 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
MethodBase.GetCurrentMethod().DeclaringType);
|
MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
string m_ServerURL;
|
string m_ServerURL;
|
||||||
|
Uri m_Uri;
|
||||||
public UserAgentServiceConnector(string url)
|
public UserAgentServiceConnector(string url)
|
||||||
{
|
{
|
||||||
m_ServerURL = url;
|
m_ServerURL = url;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_Uri = new Uri(m_ServerURL);
|
||||||
|
IPAddress ip = Util.GetHostFromDNS(m_Uri.Host);
|
||||||
|
m_ServerURL = "http://" + ip.ToString() + ":" + m_Uri.Port;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[USER AGENT CONNECTOR]: Malformed Uri {0}: {1}", m_ServerURL, e.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserAgentServiceConnector(IConfigSource config)
|
public UserAgentServiceConnector(IConfigSource config)
|
||||||
|
@ -373,7 +384,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
|
|
||||||
if (response.IsFault)
|
if (response.IsFault)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[HGrid]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
|
m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} returned an error: {1}", m_ServerURL, response.FaultString);
|
||||||
reason = "XMLRPC Fault";
|
reason = "XMLRPC Fault";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -403,7 +414,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[HGrid]: Got exception on GetBoolResponse response.");
|
m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got exception on GetBoolResponse response.");
|
||||||
if (hash.ContainsKey("result") && hash["result"] != null)
|
if (hash.ContainsKey("result") && hash["result"] != null)
|
||||||
m_log.ErrorFormat("Reply was ", (string)hash["result"]);
|
m_log.ErrorFormat("Reply was ", (string)hash["result"]);
|
||||||
reason = "Exception: " + e.Message;
|
reason = "Exception: " + e.Message;
|
||||||
|
|
|
@ -614,7 +614,11 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendTeleportLocationStart()
|
public virtual void SendTeleportStart(uint flags)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendTeleportProgress(uint flags, string message)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue