From f048f7ba139343743814d7cbc953b50786c6bad7 Mon Sep 17 00:00:00 2001 From: Treeku Date: Tue, 16 Jul 2013 15:40:52 +0100 Subject: [PATCH 01/13] Addded SWGList system for baselines --- src/protocol/swg/AttributeListMessage.java | 1 - .../objects/CurrentServerGCWZonePercent.java | 64 -------- ...entServerGCWZoneInfo.java => GCWZone.java} | 55 ++++--- src/resources/objects/ListObject.java | 7 + .../objects/ObjectMessageBuilder.java | 4 +- .../objects/OtherServerGCWZonePercent.java | 74 --------- src/resources/objects/SWGList.java | 153 ++++++++++++++++++ .../creature/CreatureMessageBuilder.java | 11 +- .../objects/guild/GuildMessageBuilder.java | 51 +++--- src/resources/objects/guild/GuildObject.java | 52 +++--- .../objects/player/PlayerMessageBuilder.java | 6 +- .../tangible/TangibleMessageBuilder.java | 11 +- .../objects/weapon/WeaponMessageBuilder.java | 10 +- src/services/gcw/GCWService.java | 132 +++++---------- 14 files changed, 323 insertions(+), 308 deletions(-) delete mode 100644 src/resources/objects/CurrentServerGCWZonePercent.java rename src/resources/objects/{CurrentServerGCWZoneInfo.java => GCWZone.java} (65%) create mode 100644 src/resources/objects/ListObject.java delete mode 100644 src/resources/objects/OtherServerGCWZonePercent.java create mode 100644 src/resources/objects/SWGList.java diff --git a/src/protocol/swg/AttributeListMessage.java b/src/protocol/swg/AttributeListMessage.java index eb3f4f57..da681a16 100644 --- a/src/protocol/swg/AttributeListMessage.java +++ b/src/protocol/swg/AttributeListMessage.java @@ -22,7 +22,6 @@ package protocol.swg; import java.nio.ByteOrder; -import java.util.Map; import java.util.Map.Entry; import org.apache.mina.core.buffer.IoBuffer; diff --git a/src/resources/objects/CurrentServerGCWZonePercent.java b/src/resources/objects/CurrentServerGCWZonePercent.java deleted file mode 100644 index 1f0316c0..00000000 --- a/src/resources/objects/CurrentServerGCWZonePercent.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects; - -public class CurrentServerGCWZonePercent { - - private byte unknown = 0; - private String zone = ""; - private int percent = 50; - - public CurrentServerGCWZonePercent(byte unknown, String zone, int percent) { - this.unknown = unknown; - this.zone = zone; - this.percent = percent; - } - - public CurrentServerGCWZonePercent(String zone) { - this.zone = zone; - } - - public byte getUnknown() { - return unknown; - } - - public void setUnknown(byte unknown) { - this.unknown = unknown; - } - - public String getZone() { - return zone; - } - - public void setZone(String zone) { - this.zone = zone; - } - - public int getPercent() { - return percent; - } - - public void setPercent(int percent) { - this.percent = percent; - } - -} diff --git a/src/resources/objects/CurrentServerGCWZoneInfo.java b/src/resources/objects/GCWZone.java similarity index 65% rename from src/resources/objects/CurrentServerGCWZoneInfo.java rename to src/resources/objects/GCWZone.java index d181c088..35db8508 100644 --- a/src/resources/objects/CurrentServerGCWZoneInfo.java +++ b/src/resources/objects/GCWZone.java @@ -21,24 +21,28 @@ ******************************************************************************/ package resources.objects; -public class CurrentServerGCWZoneInfo { +public class GCWZone implements ListObject { private byte unknown1 = 0; + private String server = "current"; private String zone = ""; - private int unknown2 = 0x0D05EA4E; + private int lastUpdateTime = ((int) System.currentTimeMillis()); private int percent = 50; - - public CurrentServerGCWZoneInfo(byte unknown1, String zone, int unknown2, int percent) { - this.unknown1 = unknown1; + private int gcwPoints = 0; + + public GCWZone(String server, String zone) { + this.server = server; this.zone = zone; - this.unknown2 = unknown2; - this.percent = percent; } - public CurrentServerGCWZoneInfo(String zone) { + public GCWZone(String zone) { this.zone = zone; } + public GCWZone() { + + } + public byte getUnknown1() { return unknown1; } @@ -47,20 +51,16 @@ public class CurrentServerGCWZoneInfo { this.unknown1 = unknown1; } + public String getServer() { + return server; + } + public String getZone() { return zone; } - public void setZone(String zone) { - this.zone = zone; - } - - public int getUnknown2() { - return unknown2; - } - - public void setUnknown2(int unknown2) { - this.unknown2 = unknown2; + public int getLastUpdateTime() { + return lastUpdateTime; } public int getPercent() { @@ -69,6 +69,25 @@ public class CurrentServerGCWZoneInfo { public void setPercent(int percent) { this.percent = percent; + this.lastUpdateTime = ((int) System.currentTimeMillis()); + } + + public int getGCWPoints() { + return gcwPoints; + } + + public void addGCWPoints(int gcwPoints) { + this.gcwPoints += gcwPoints; + } + + public void removeGCWPoints(int gcwPoints) { + this.gcwPoints = (((this.gcwPoints - gcwPoints) < 0) ? 0 : this.gcwPoints - gcwPoints); + } + + @Override + public byte[] getBytes() { + // TODO Auto-generated method stub + return null; } } diff --git a/src/resources/objects/ListObject.java b/src/resources/objects/ListObject.java new file mode 100644 index 00000000..2d4cd295 --- /dev/null +++ b/src/resources/objects/ListObject.java @@ -0,0 +1,7 @@ +package resources.objects; + +public interface ListObject { + + public byte[] getBytes(); + +} diff --git a/src/resources/objects/ObjectMessageBuilder.java b/src/resources/objects/ObjectMessageBuilder.java index 05fd207a..53b4ab66 100644 --- a/src/resources/objects/ObjectMessageBuilder.java +++ b/src/resources/objects/ObjectMessageBuilder.java @@ -79,6 +79,8 @@ public abstract class ObjectMessageBuilder { public SWGObject getObject() { return object; } public void setObject(SWGObject object) { this.object = object; } + public abstract void sendListDelta(short updateType, IoBuffer buffer); + public abstract void sendBaselines(); private String reverse(String reverseString) { @@ -112,6 +114,7 @@ public abstract class ObjectMessageBuilder { return result; } + private byte[] getString(String string, String charFormat) { ByteBuffer result; int length = 2 + string.length(); @@ -132,5 +135,4 @@ public abstract class ObjectMessageBuilder { return result.array(); } - } diff --git a/src/resources/objects/OtherServerGCWZonePercent.java b/src/resources/objects/OtherServerGCWZonePercent.java deleted file mode 100644 index 992100ba..00000000 --- a/src/resources/objects/OtherServerGCWZonePercent.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects; - -public class OtherServerGCWZonePercent { - - private byte unknown = 0; - private String server = "SWG"; - private String zone = ""; - private int percent = 50; - - public OtherServerGCWZonePercent(byte unknown, String server, String zone, int percent) { - this.unknown = unknown; - this.server = server; - this.zone = zone; - this.percent = percent; - } - - public OtherServerGCWZonePercent(String zone) { - this.zone = zone; - } - - public byte getUnknown() { - return unknown; - } - - public void setUnknown(byte unknown) { - this.unknown = unknown; - } - - public String getServer() { - return server; - } - - public void setServer(String server) { - this.server = server; - } - - public String getZone() { - return zone; - } - - public void setZone(String zone) { - this.zone = zone; - } - - public int getPercent() { - return percent; - } - - public void setPercent(int percent) { - this.percent = percent; - } - -} diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java new file mode 100644 index 00000000..329192ea --- /dev/null +++ b/src/resources/objects/SWGList.java @@ -0,0 +1,153 @@ +package resources.objects; + +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; + +import org.apache.mina.core.buffer.IoBuffer; + +import com.sleepycat.persist.model.NotPersistent; + +public class SWGList { + + private List list = new ArrayList(); + @NotPersistent + private int updateCounter; + + private ObjectMessageBuilder messageBuilder; + private short updateType; + + protected final Object objectMutex = new Object(); + + public SWGList(ObjectMessageBuilder messageBuilder, short updateType) { + this.messageBuilder = messageBuilder; + this.updateType = updateType; + } + + public void add(ListObject e) { + synchronized(objectMutex) { + byte[] bytes = e.getBytes(); + list.add(e); + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate((bytes.length + 11), false).order(ByteOrder.LITTLE_ENDIAN);; + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put((byte) 1); + buffer.putShort((short) list.lastIndexOf(e)); + buffer.put(bytes); + messageBuilder.sendListDelta(updateType, buffer); + } + } + + public ListObject get(int index) { + synchronized(objectMutex) { + return list.get(index); + } + } + + public void set(int index, ListObject element) { + synchronized(objectMutex) { + byte[] bytes = element.getBytes(); + list.set(index, element); + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate((bytes.length + 11), false).order(ByteOrder.LITTLE_ENDIAN);; + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put((byte) 2); + buffer.putShort((short) index); + buffer.put(bytes); + messageBuilder.sendListDelta(updateType, buffer); + } + } + + public List get() { + synchronized(objectMutex) { + return list; + } + } + + public void set(List list) { + synchronized(objectMutex) { + this.list = list; + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(list.size()); + buffer.putInt(updateCounter); + buffer.put((byte) 3); + buffer.putShort((short) list.size()); + + for (ListObject object : list) { + buffer = messageBuilder.bufferPool.allocate(buffer.position(), false).put(buffer.array(), 0, buffer.position()); + buffer.put(object.getBytes()); + } + + messageBuilder.sendListDelta(updateType, buffer); + } + } + + public boolean contains(ListObject o) { + synchronized(objectMutex) { + return list.contains(o); + } + } + + public void remove(int index) { + synchronized(objectMutex) { + list.remove(index); + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN);; + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put((byte) 0); + buffer.putShort((short) index); + messageBuilder.sendListDelta(updateType, buffer); + } + } + + public void remove(ListObject o) { + synchronized(objectMutex) { + int index = list.indexOf(o); + + list.remove(index); + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN);; + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put((byte) 0); + buffer.putShort((short) index); + messageBuilder.sendListDelta(updateType, buffer); + } + + } + + public void clear() { + synchronized(objectMutex) { + list.clear(); + updateCounter++; + + IoBuffer buffer = messageBuilder.bufferPool.allocate(9, false).order(ByteOrder.LITTLE_ENDIAN);; + buffer.putInt(0); + buffer.putInt(updateCounter); + buffer.put((byte) 0); + messageBuilder.sendListDelta(updateType, buffer); + } + } + + public int getUpdateCounter() { + synchronized(objectMutex) { + return updateCounter; + } + } + + public int size() { + synchronized(objectMutex) { + return list.size(); + } + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index cc39f1b3..4d92919a 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -593,13 +593,16 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; } - + + @Override + public void sendListDelta(short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } @Override public void sendBaselines() { - - } - + } diff --git a/src/resources/objects/guild/GuildMessageBuilder.java b/src/resources/objects/guild/GuildMessageBuilder.java index 15ab22d1..fb10d893 100644 --- a/src/resources/objects/guild/GuildMessageBuilder.java +++ b/src/resources/objects/guild/GuildMessageBuilder.java @@ -25,11 +25,9 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.CurrentServerGCWZoneInfo; -import resources.objects.CurrentServerGCWZonePercent; +import resources.objects.GCWZone; import resources.objects.Guild; import resources.objects.ObjectMessageBuilder; -import resources.objects.OtherServerGCWZonePercent; public class GuildMessageBuilder extends ObjectMessageBuilder { @@ -66,11 +64,10 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { GuildObject guilds = (GuildObject) object; int capacity = 82; - //int capacity = 77; capacity += (guilds.getCurrentServerGCWZonePercentList().size() * 30); capacity += (guilds.getCurrentServerGCWTotalPercentList().size() * 14); - capacity += (guilds.getCurrentServerGCWZoneInfoList().size() * 34); - capacity += (guilds.getCurrentServerGCWTotalInfoList().size() * 18); + capacity += (guilds.getCurrentServerGCWZoneHistoryList().size() * 34); + capacity += (guilds.getCurrentServerGCWTotalHistoryList().size() * 18); capacity += (guilds.getOtherServerGCWZonePercentList().size() * 45); capacity += (guilds.getOtherServerGCWTotalPercentList().size() * 29); @@ -82,46 +79,46 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { buffer.putShort(guilds.getUnknown2()); buffer.putInt(guilds.getCurrentServerGCWZonePercentList().size()); buffer.putInt(guilds.getCurrentServerGCWZonePercentListUpdateCounter()); - for (CurrentServerGCWZonePercent object : guilds.getCurrentServerGCWZonePercentList()) { - buffer.put(object.getUnknown()); + for (GCWZone object : guilds.getCurrentServerGCWZonePercentList()) { + buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getCurrentServerGCWTotalPercentList().size()); buffer.putInt(guilds.getCurrentServerGCWTotalPercentListUpdateCounter()); - for (CurrentServerGCWZonePercent object : guilds.getCurrentServerGCWTotalPercentList()) { - buffer.put(object.getUnknown()); + for (GCWZone object : guilds.getCurrentServerGCWTotalPercentList()) { + buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } - buffer.putInt(guilds.getCurrentServerGCWZoneInfoList().size()); - buffer.putInt(guilds.getCurrentServerGCWZoneInfoListUpdateCounter()); - for (CurrentServerGCWZoneInfo object : guilds.getCurrentServerGCWZoneInfoList()) { + buffer.putInt(guilds.getCurrentServerGCWZoneHistoryList().size()); + buffer.putInt(guilds.getCurrentServerGCWZoneHistoryListUpdateCounter()); + for (GCWZone object : guilds.getCurrentServerGCWZoneHistoryList()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); - buffer.putInt(object.getUnknown2()); + buffer.putInt(object.getLastUpdateTime()); buffer.putInt(object.getPercent()); } - buffer.putInt(guilds.getCurrentServerGCWTotalInfoList().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalInfoListUpdateCounter()); - for (CurrentServerGCWZoneInfo object : guilds.getCurrentServerGCWTotalInfoList()) { + buffer.putInt(guilds.getCurrentServerGCWTotalHistoryList().size()); + buffer.putInt(guilds.getCurrentServerGCWTotalHistoryListUpdateCounter()); + for (GCWZone object : guilds.getCurrentServerGCWTotalHistoryList()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); - buffer.putInt(object.getUnknown2()); + buffer.putInt(object.getLastUpdateTime()); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getOtherServerGCWZonePercentList().size()); buffer.putInt(guilds.getOtherServerGCWZonePercentListUpdateCounter()); - for (OtherServerGCWZonePercent object : guilds.getOtherServerGCWZonePercentList()) { - buffer.put(object.getUnknown()); + for (GCWZone object : guilds.getOtherServerGCWZonePercentList()) { + buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getServer())); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getOtherServerGCWTotalPercentList().size()); buffer.putInt(guilds.getOtherServerGCWTotalPercentListUpdateCounter()); - for (OtherServerGCWZonePercent object : guilds.getOtherServerGCWTotalPercentList()) { - buffer.put(object.getUnknown()); + for (GCWZone object : guilds.getOtherServerGCWTotalPercentList()) { + buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getServer())); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); @@ -136,10 +133,18 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { return buffer; } + @Override + public void sendListDelta(short updateType, IoBuffer buffer) { + switch (updateType) { + default: + return; + } + } + @Override public void sendBaselines() { // TODO Auto-generated method stub } - + } diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index ce826634..e06f7767 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -24,10 +24,8 @@ package resources.objects.guild; import java.util.ArrayList; import java.util.List; -import resources.objects.CurrentServerGCWZoneInfo; -import resources.objects.CurrentServerGCWZonePercent; +import resources.objects.GCWZone; import resources.objects.Guild; -import resources.objects.OtherServerGCWZonePercent; import com.sleepycat.persist.model.NotPersistent; @@ -56,27 +54,27 @@ public class GuildObject extends SWGObject { private int unknown1 = 0; private short unknown2 = 0; - private List currentServerGCWZonePercentList = new ArrayList(); + private List currentServerGCWZonePercentList = new ArrayList(); @NotPersistent private int currentServerGCWZonePercentListUpdateCounter = 0; - private List currentServerGCWTotalPercentList = new ArrayList(); + private List currentServerGCWTotalPercentList = new ArrayList(); @NotPersistent private int currentServerGCWTotalPercentListUpdateCounter = 0; - private List currentServerGCWZoneInfoList = new ArrayList(); + private List currentServerGCWZoneHistoryList = new ArrayList(); @NotPersistent - private int currentServerGCWZoneInfoListUpdateCounter = 0; + private int currentServerGCWZoneHistoryListUpdateCounter = 0; - private List currentServerGCWTotalInfoList = new ArrayList(); + private List currentServerGCWTotalHistoryList = new ArrayList(); @NotPersistent - private int currentServerGCWTotalInfoListUpdateCounter = 0; + private int currentServerGCWTotalHistoryListUpdateCounter = 0; - private List otherServerGCWZonePercentList = new ArrayList(); + private List otherServerGCWZonePercentList = new ArrayList(); @NotPersistent private int otherServerGCWZonePercentListUpdateCounter = 0; - private List otherServerGCWTotalPercentList = new ArrayList(); + private List otherServerGCWTotalPercentList = new ArrayList(); @NotPersistent private int otherServerGCWTotalPercentListUpdateCounter = 0; @@ -212,7 +210,7 @@ public class GuildObject extends SWGObject { } } - public List getCurrentServerGCWZonePercentList() { + public List getCurrentServerGCWZonePercentList() { return currentServerGCWZonePercentList; } @@ -228,7 +226,7 @@ public class GuildObject extends SWGObject { } } - public List getCurrentServerGCWTotalPercentList() { + public List getCurrentServerGCWTotalPercentList() { return currentServerGCWTotalPercentList; } @@ -244,39 +242,39 @@ public class GuildObject extends SWGObject { } } - public List getCurrentServerGCWZoneInfoList() { - return currentServerGCWZoneInfoList; + public List getCurrentServerGCWZoneHistoryList() { + return currentServerGCWZoneHistoryList; } - public int getCurrentServerGCWZoneInfoListUpdateCounter() { + public int getCurrentServerGCWZoneHistoryListUpdateCounter() { synchronized(objectMutex) { - return currentServerGCWZoneInfoListUpdateCounter; + return currentServerGCWZoneHistoryListUpdateCounter; } } - public void setCurrentServerGCWZoneInfoListUpdateCounter(int currentServerGCWZoneInfoListUpdateCounter) { + public void setCurrentServerGCWZoneHistoryListUpdateCounter(int currentServerGCWZoneHistoryListUpdateCounter) { synchronized(objectMutex) { - this.currentServerGCWZoneInfoListUpdateCounter = currentServerGCWZoneInfoListUpdateCounter; + this.currentServerGCWZoneHistoryListUpdateCounter = currentServerGCWZoneHistoryListUpdateCounter; } } - public List getCurrentServerGCWTotalInfoList() { - return currentServerGCWTotalInfoList; + public List getCurrentServerGCWTotalHistoryList() { + return currentServerGCWTotalHistoryList; } - public int getCurrentServerGCWTotalInfoListUpdateCounter() { + public int getCurrentServerGCWTotalHistoryListUpdateCounter() { synchronized(objectMutex) { - return currentServerGCWTotalInfoListUpdateCounter; + return currentServerGCWTotalHistoryListUpdateCounter; } } - public void setCurrentServerGCWTotalInfoListUpdateCounter(int currentServerGCWTotalInfoListUpdateCounter) { + public void setCurrentServerGCWTotalHistoryListUpdateCounter(int currentServerGCWTotalHistoryListUpdateCounter) { synchronized(objectMutex) { - this.currentServerGCWTotalInfoListUpdateCounter = currentServerGCWTotalInfoListUpdateCounter; + this.currentServerGCWTotalHistoryListUpdateCounter = currentServerGCWTotalHistoryListUpdateCounter; } } - public List getOtherServerGCWZonePercentList() { + public List getOtherServerGCWZonePercentList() { return otherServerGCWZonePercentList; } @@ -292,7 +290,7 @@ public class GuildObject extends SWGObject { } } - public List getOtherServerGCWTotalPercentList() { + public List getOtherServerGCWTotalPercentList() { return otherServerGCWTotalPercentList; } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 6d3fbf72..381ae5f4 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -391,7 +391,11 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { } } - + @Override + public void sendListDelta(short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } @Override public void sendBaselines() { diff --git a/src/resources/objects/tangible/TangibleMessageBuilder.java b/src/resources/objects/tangible/TangibleMessageBuilder.java index 09bb2270..e36ad1d8 100644 --- a/src/resources/objects/tangible/TangibleMessageBuilder.java +++ b/src/resources/objects/tangible/TangibleMessageBuilder.java @@ -122,12 +122,17 @@ public class TangibleMessageBuilder extends ObjectMessageBuilder { return buffer; } - + + @Override + public void sendListDelta(short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + @Override public void sendBaselines() { // TODO Auto-generated method stub } - - + } diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index fc1de3cb..7251fb1f 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -132,13 +132,17 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { return buffer; } - - + @Override + public void sendListDelta(short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + @Override public void sendBaselines() { // TODO Auto-generated method stub } - + } diff --git a/src/services/gcw/GCWService.java b/src/services/gcw/GCWService.java index c1549499..f3668f1e 100644 --- a/src/services/gcw/GCWService.java +++ b/src/services/gcw/GCWService.java @@ -28,9 +28,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import resources.objects.CurrentServerGCWZoneInfo; -import resources.objects.CurrentServerGCWZonePercent; -import resources.objects.OtherServerGCWZonePercent; +import resources.objects.GCWZone; import resources.objects.guild.GuildObject; import main.NGECore; @@ -44,103 +42,30 @@ public class GCWService implements INetworkDispatch { private NGECore core; private GuildObject object; private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - + + List zoneList = Arrays.asList(new String[] { "corellia_airspace", "corellia_pve", "corellia_pvp", "dantooine_airspace", "dantooine_pve", "dantooine_pvp", "dathomir_airspace", "dathomir_pve", "dathomir_pvp", "endor_airspace", "endor_pve", "endor_pvp", "endor_pvp_battlefield", "gcw_region_corellia_1", "gcw_region_corellia_10", "gcw_region_corellia_11", "gcw_region_corellia_12", "gcw_region_corellia_13", "gcw_region_corellia_14", "gcw_region_corellia_2", "gcw_region_corellia_3", "gcw_region_corellia_4", "gcw_region_corellia_5", "gcw_region_corellia_6", "gcw_region_corellia_7", "gcw_region_corellia_8", "gcw_region_corellia_9", "gcw_region_dantooine_1", "gcw_region_dantooine_10", "gcw_region_dantooine_11", "gcw_region_dantooine_12", "gcw_region_dantooine_13", "gcw_region_dantooine_14", "gcw_region_dantooine_15", "gcw_region_dantooine_16", "gcw_region_dantooine_17", "gcw_region_dantooine_2", "gcw_region_dantooine_3", "gcw_region_dantooine_4", "gcw_region_dantooine_5", "gcw_region_dantooine_6", "gcw_region_dantooine_7", "gcw_region_dantooine_8", "gcw_region_dantooine_9", "gcw_region_dathomir_1", "gcw_region_dathomir_10", "gcw_region_dathomir_11", "gcw_region_dathomir_12", "gcw_region_dathomir_13", "gcw_region_dathomir_2", "gcw_region_dathomir_3", "gcw_region_dathomir_4", "gcw_region_dathomir_5", "gcw_region_dathomir_6", "gcw_region_dathomir_7", "gcw_region_dathomir_8", "gcw_region_dathomir_9", "gcw_region_endor_1", "gcw_region_endor_10", "gcw_region_endor_11", "gcw_region_endor_12", "gcw_region_endor_13", "gcw_region_endor_14", "gcw_region_endor_15", "gcw_region_endor_16", "gcw_region_endor_2", "gcw_region_endor_3", "gcw_region_endor_4", "gcw_region_endor_5", "gcw_region_endor_6", "gcw_region_endor_7", "gcw_region_endor_8", "gcw_region_endor_9", "gcw_region_lok_1", "gcw_region_lok_10", "gcw_region_lok_11", "gcw_region_lok_12", "gcw_region_lok_13", "gcw_region_lok_14", "gcw_region_lok_2", "gcw_region_lok_3", "gcw_region_lok_4", "gcw_region_lok_5", "gcw_region_lok_6", "gcw_region_lok_7", "gcw_region_lok_8", "gcw_region_lok_9", "gcw_region_naboo_1", "gcw_region_naboo_10", "gcw_region_naboo_11", "gcw_region_naboo_12", "gcw_region_naboo_13", "gcw_region_naboo_14", "gcw_region_naboo_2", "gcw_region_naboo_3", "gcw_region_naboo_4", "gcw_region_naboo_5", "gcw_region_naboo_6", "gcw_region_naboo_7", "gcw_region_naboo_8", "gcw_region_naboo_9", "gcw_region_rori_1", "gcw_region_rori_10", "gcw_region_rori_11", "gcw_region_rori_12", "gcw_region_rori_13", "gcw_region_rori_2", "gcw_region_rori_3", "gcw_region_rori_4", "gcw_region_rori_5", "gcw_region_rori_6", "gcw_region_rori_7", "gcw_region_rori_8", "gcw_region_rori_9", "gcw_region_talus_1", "gcw_region_talus_10", "gcw_region_talus_11", "gcw_region_talus_12", "gcw_region_talus_13", "gcw_region_talus_14", "gcw_region_talus_15", "gcw_region_talus_16", "gcw_region_talus_2", "gcw_region_talus_3", "gcw_region_talus_4", "gcw_region_talus_5", "gcw_region_talus_6", "gcw_region_talus_7", "gcw_region_talus_8", "gcw_region_talus_9", "gcw_region_tatooine_1", "gcw_region_tatooine_10", "gcw_region_tatooine_11", "gcw_region_tatooine_12", "gcw_region_tatooine_13", "gcw_region_tatooine_2", "gcw_region_tatooine_3", "gcw_region_tatooine_4", "gcw_region_tatooine_5", "gcw_region_tatooine_6", "gcw_region_tatooine_7", "gcw_region_tatooine_8", "gcw_region_tatooine_9", "gcw_region_yavin4_1", "gcw_region_yavin4_10", "gcw_region_yavin4_11", "gcw_region_yavin4_12", "gcw_region_yavin4_13", "gcw_region_yavin4_14", "gcw_region_yavin4_15", "gcw_region_yavin4_16", "gcw_region_yavin4_17", "gcw_region_yavin4_18", "gcw_region_yavin4_2", "gcw_region_yavin4_3", "gcw_region_yavin4_4", "gcw_region_yavin4_5", "gcw_region_yavin4_6", "gcw_region_yavin4_7", "gcw_region_yavin4_8", "gcw_region_yavin4_9", "lok_airspace", "lok_pve", "lok_pvp", "naboo_airspace", "naboo_pve", "naboo_pvp", "rori_airspace", "rori_pve", "rori_pvp", "space_corellia_space_pve", "space_corellia_space_pvp", "space_dantooine_space_pve", "space_dantooine_space_pvp", "space_dathomir_space_pve", "space_dathomir_space_pvp", "space_endor_space_pve", "space_endor_space_pvp", "space_lok_space_pve", "space_lok_space_pvp", "space_naboo_space_pve", "space_naboo_space_pvp", "space_tatooine_space_pve", "space_tatooine_space_pvp", "space_yavin4_space_pve", "space_yavin4_space_pvp", "talus_airspace", "talus_pve", "talus_pvp", "tatooine_airspace", "tatooine_pve", "tatooine_pvp", "yavin4_airspace", "yavin4_pve", "yavin4_pvp", "yavin4_pvp_battlefield" }); + List totalList = Arrays.asList(new String[] { "corellia", "dantooine", "dathomir", "endor", "galaxy", "lok", "naboo", "rori", "talus", "tatooine", "yavin4" }); + public GCWService(final NGECore core) { this.core = core; - // The GCW object is also the guild object; someone at SOE got lazy object = this.core.guildService.getGuildObject(); - // Load GCW Zones - // TODO load from the stf file in future - String[] zones = - { - "corellia_airspace", "corellia_pve", "corellia_pvp", "dantooine_airspace", - "dantooine_pve", "dantooine_pvp", "dathomir_airspace", "dathomir_pve", "dathomir_pvp", - "endor_airspace", "endor_pve", "endor_pvp", "endor_pvp_battlefield", - "gcw_region_corellia_1", "gcw_region_corellia_10", "gcw_region_corellia_11", - "gcw_region_corellia_12", "gcw_region_corellia_13", "gcw_region_corellia_14", - "gcw_region_corellia_2", "gcw_region_corellia_3", "gcw_region_corellia_4", - "gcw_region_corellia_5", "gcw_region_corellia_6", "gcw_region_corellia_7", - "gcw_region_corellia_8", "gcw_region_corellia_9", "gcw_region_dantooine_1", - "gcw_region_dantooine_10", "gcw_region_dantooine_11", "gcw_region_dantooine_12", - "gcw_region_dantooine_13", "gcw_region_dantooine_14", "gcw_region_dantooine_15", - "gcw_region_dantooine_16", "gcw_region_dantooine_17", "gcw_region_dantooine_2", - "gcw_region_dantooine_3", "gcw_region_dantooine_4", "gcw_region_dantooine_5", - "gcw_region_dantooine_6", "gcw_region_dantooine_7", "gcw_region_dantooine_8", - "gcw_region_dantooine_9", "gcw_region_dathomir_1", "gcw_region_dathomir_10", - "gcw_region_dathomir_11", "gcw_region_dathomir_12", "gcw_region_dathomir_13", - "gcw_region_dathomir_2", "gcw_region_dathomir_3", "gcw_region_dathomir_4", - "gcw_region_dathomir_5", "gcw_region_dathomir_6", "gcw_region_dathomir_7", - "gcw_region_dathomir_8", "gcw_region_dathomir_9", "gcw_region_endor_1", - "gcw_region_endor_10", "gcw_region_endor_11", "gcw_region_endor_12", - "gcw_region_endor_13", "gcw_region_endor_14", "gcw_region_endor_15", - "gcw_region_endor_16", "gcw_region_endor_2", "gcw_region_endor_3", - "gcw_region_endor_4", "gcw_region_endor_5", "gcw_region_endor_6", - "gcw_region_endor_7", "gcw_region_endor_8", "gcw_region_endor_9", "gcw_region_lok_1", - "gcw_region_lok_10", "gcw_region_lok_11", "gcw_region_lok_12", "gcw_region_lok_13", - "gcw_region_lok_14", "gcw_region_lok_2", "gcw_region_lok_3", "gcw_region_lok_4", - "gcw_region_lok_5", "gcw_region_lok_6", "gcw_region_lok_7", "gcw_region_lok_8", - "gcw_region_lok_9", "gcw_region_naboo_1", "gcw_region_naboo_10", - "gcw_region_naboo_11", "gcw_region_naboo_12", "gcw_region_naboo_13", - "gcw_region_naboo_14", "gcw_region_naboo_2", "gcw_region_naboo_3", - "gcw_region_naboo_4", "gcw_region_naboo_5", "gcw_region_naboo_6", "gcw_region_naboo_7", - "gcw_region_naboo_8", "gcw_region_naboo_9", "gcw_region_rori_1", "gcw_region_rori_10", - "gcw_region_rori_11", "gcw_region_rori_12", "gcw_region_rori_13", "gcw_region_rori_2", - "gcw_region_rori_3", "gcw_region_rori_4", "gcw_region_rori_5", "gcw_region_rori_6", - "gcw_region_rori_7", "gcw_region_rori_8", "gcw_region_rori_9", "gcw_region_talus_1", - "gcw_region_talus_10", "gcw_region_talus_11", "gcw_region_talus_12", "gcw_region_talus_13", - "gcw_region_talus_14", "gcw_region_talus_15", "gcw_region_talus_16", "gcw_region_talus_2", - "gcw_region_talus_3", "gcw_region_talus_4", "gcw_region_talus_5", "gcw_region_talus_6", - "gcw_region_talus_7", "gcw_region_talus_8", "gcw_region_talus_9", "gcw_region_tatooine_1", - "gcw_region_tatooine_10", "gcw_region_tatooine_11", "gcw_region_tatooine_12", - "gcw_region_tatooine_13", "gcw_region_tatooine_2", "gcw_region_tatooine_3", - "gcw_region_tatooine_4", "gcw_region_tatooine_5", "gcw_region_tatooine_6", - "gcw_region_tatooine_7", "gcw_region_tatooine_8", "gcw_region_tatooine_9", - "gcw_region_yavin4_1", "gcw_region_yavin4_10", "gcw_region_yavin4_11", - "gcw_region_yavin4_12", "gcw_region_yavin4_13", "gcw_region_yavin4_14", - "gcw_region_yavin4_15", "gcw_region_yavin4_16", "gcw_region_yavin4_17", - "gcw_region_yavin4_18", "gcw_region_yavin4_2", "gcw_region_yavin4_3", - "gcw_region_yavin4_4", "gcw_region_yavin4_5", "gcw_region_yavin4_6", - "gcw_region_yavin4_7", "gcw_region_yavin4_8", "gcw_region_yavin4_9", "lok_airspace", - "lok_pve", "lok_pvp", "naboo_airspace", "naboo_pve", "naboo_pvp", "rori_airspace", - "rori_pve", "rori_pvp", "space_corellia_space_pve", "space_corellia_space_pvp", - "space_dantooine_space_pve", "space_dantooine_space_pvp", "space_dathomir_space_pve", - "space_dathomir_space_pvp", "space_endor_space_pve", "space_endor_space_pvp", - "space_lok_space_pve", "space_lok_space_pvp", "space_naboo_space_pve", - "space_naboo_space_pvp", "space_tatooine_space_pve", "space_tatooine_space_pvp", - "space_yavin4_space_pve", "space_yavin4_space_pvp", "talus_airspace", "talus_pve", - "talus_pvp", "tatooine_airspace", "tatooine_pve", "tatooine_pvp", "yavin4_airspace", - "yavin4_pve", "yavin4_pvp", "yavin4_pvp_battlefield" - }; - - List zoneList = Arrays.asList(zones); - for (int i = 0; i < zoneList.size(); i++) { - object.getCurrentServerGCWZonePercentList().add(new CurrentServerGCWZonePercent(zoneList.get(i))); - object.getCurrentServerGCWZoneInfoList().add(new CurrentServerGCWZoneInfo(zoneList.get(i))); - object.getOtherServerGCWZonePercentList().add(new OtherServerGCWZonePercent(zoneList.get(i))); + object.getCurrentServerGCWZonePercentList().add(new GCWZone(zoneList.get(i))); + object.getCurrentServerGCWZoneHistoryList().add(new GCWZone(zoneList.get(i))); + object.getOtherServerGCWZonePercentList().add(new GCWZone(zoneList.get(i))); object.setCurrentServerGCWZonePercentListUpdateCounter(object.getCurrentServerGCWZonePercentListUpdateCounter() + 1); - object.setCurrentServerGCWZoneInfoListUpdateCounter(object.getCurrentServerGCWZoneInfoListUpdateCounter() + 1); + object.setCurrentServerGCWZoneHistoryListUpdateCounter(object.getCurrentServerGCWZoneHistoryListUpdateCounter() + 1); object.setOtherServerGCWZonePercentListUpdateCounter(object.getOtherServerGCWZonePercentListUpdateCounter() + 1); } - // Load GCW Totals - // TODO load from the stf file in future - String[] totals = - { - "corellia", "dantooine", "dathomir", "endor", "galaxy", - "lok", "naboo", "rori", "talus", "tatooine", "yavin4" - }; - - List totalList = Arrays.asList(totals); - for (int i = 0; i < totalList.size(); i++) { - object.getCurrentServerGCWTotalPercentList().add(new CurrentServerGCWZonePercent(totalList.get(i))); - object.getCurrentServerGCWTotalInfoList().add(new CurrentServerGCWZoneInfo(totalList.get(i))); - object.getOtherServerGCWTotalPercentList().add(new OtherServerGCWZonePercent(totalList.get(i))); + object.getCurrentServerGCWTotalPercentList().add(new GCWZone(totalList.get(i))); + object.getCurrentServerGCWTotalHistoryList().add(new GCWZone(totalList.get(i))); + object.getOtherServerGCWTotalPercentList().add(new GCWZone(totalList.get(i))); object.setCurrentServerGCWTotalPercentListUpdateCounter(object.getCurrentServerGCWTotalPercentListUpdateCounter() + 1); - object.setCurrentServerGCWTotalInfoListUpdateCounter(object.getCurrentServerGCWTotalInfoListUpdateCounter() + 1); + object.setCurrentServerGCWTotalHistoryListUpdateCounter(object.getCurrentServerGCWTotalHistoryListUpdateCounter() + 1); object.setOtherServerGCWTotalPercentListUpdateCounter(object.getOtherServerGCWTotalPercentListUpdateCounter() + 1); } @@ -152,13 +77,42 @@ public class GCWService implements INetworkDispatch { synchronized(core.getActiveConnectionsMap()) { for (Client c : core.getActiveConnectionsMap().values()) { if (c.getParent() != null) { - // + addGCWPointsToZonesWithFactionalPresence(c); + removeGCWPointFromZonesWithNoFactionalPresence(c); } } } } }, 1, 1, TimeUnit.MINUTES); + + // Reset weak GCW zones every 2 days as in live + scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + synchronized(core.getActiveConnectionsMap()) { + for (Client c : core.getActiveConnectionsMap().values()) { + if (c.getParent() != null) { + resetWeakGCWZones(); + } + } + } + } + + }, 2, 2, TimeUnit.DAYS); + } + + private void addGCWPointsToZonesWithFactionalPresence(Client client) { + + } + + private void removeGCWPointFromZonesWithNoFactionalPresence(Client client) { + + } + + private void resetWeakGCWZones() { + } @Override From 99a7314294c81cfae554b32e03564b1dd9f6753d Mon Sep 17 00:00:00 2001 From: Waverunner Date: Tue, 16 Jul 2013 19:57:42 -0400 Subject: [PATCH 02/13] /pvp command added /pvp imperial or /pvp rebel to claim a faction for now. (will be removed when NPCs in) --- scripts/commands/pvp.py | 28 ++++++++++++++++++++++++++++ src/services/SimulationService.java | 1 + 2 files changed, 29 insertions(+) create mode 100644 scripts/commands/pvp.py diff --git a/scripts/commands/pvp.py b/scripts/commands/pvp.py new file mode 100644 index 00000000..7ed57c66 --- /dev/null +++ b/scripts/commands/pvp.py @@ -0,0 +1,28 @@ +from resources.objects.creature import CreatureObject +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + actorFaction = actor.getFaction() + actorStatus = actor.getFactionStatus() + if commandString.startswith('imperial') and actorFaction != "imperial": + actor.setFaction('imperial') + return + + if commandString.startswith('rebel') and actorFaction != "rebel": + actor.setFaction('rebel') + return + + if actorStatus != 0 and actorStatus == 1: + actor.setFactionStatus(2) + actor.sendSystemMessage('@faction_recruiter:overt_complete', 0) + return + + if actorStatus == 2: + actor.setFactionStatus(1) + actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) + return + return + \ No newline at end of file diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 0aa3428a..660ae50f 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -109,6 +109,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("giveitem"); core.commandService.registerCommand("object"); core.commandService.registerCommand("getattributesbatch"); + core.commandService.registerCommand("pvp"); } From d3c242d8dc9ba5f9487ce6b96408d030a97abde9 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 19 Jul 2013 10:29:01 -0400 Subject: [PATCH 03/13] Added inputBox method --- src/services/sui/SUIService.java | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 14a7407a..8cccd2cc 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -79,12 +79,12 @@ public class SUIService implements INetworkDispatch { if(target == null || owner == null) return; - + core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "createRadial", core, owner, target, request.getRadialOptions()); if(getRadialFilename(target).equals("default")) return; - + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); } @@ -290,7 +290,30 @@ public class SUIService implements INetworkDispatch { return window; } + + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance) { + SUIWindow window = createSUIWindow("Script.inputBox", owner, rangeObject, maxDistance); + window.setProperty("bg.caption.lblTitle:Text", title); + window.setProperty("Prompt.lblPrompt:Text", promptText); + + switch(type) { + case InputBoxType.INPUT_BOX_OK: + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:visible", "False"); + window.setProperty("cmbInput:visible", "False"); + break; + case InputBoxType.INPUT_BOX_OK_CANCEL: + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnCancel:Text", "@cancel"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("cmbInput:visible", "False"); + } + return window; + } + public void closeSUIWindow(SWGObject owner, int id) { if(owner.getClient() == null || owner.getClient().getSession() == null) From 2a10c12df356c2dfbb5a4b02ca9e36faa44aae12 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Tue, 23 Jul 2013 18:11:44 -0400 Subject: [PATCH 04/13] Delta for changing titles added --- src/resources/objects/player/PlayerMessageBuilder.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 381ae5f4..c8d2dc2c 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -365,6 +365,16 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { } + public IoBuffer buildTitleDelta(String title) { + IoBuffer buffer = bufferPool.allocate(4 + getAsciiString(title).length, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(title)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 0x07, buffer, size + 4); + return buffer; + + } + public int getProfData(String profession) { switch (profession) { From de0255b3c7f73c174074400fdcc3f217f72fe73b Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 17 Jul 2013 10:50:46 -0400 Subject: [PATCH 05/13] /setcurrentskilltitle added --- scripts/commands/setcurrentskilltitle.py | 9 +++++++++ src/services/SimulationService.java | 1 + 2 files changed, 10 insertions(+) create mode 100644 scripts/commands/setcurrentskilltitle.py diff --git a/scripts/commands/setcurrentskilltitle.py b/scripts/commands/setcurrentskilltitle.py new file mode 100644 index 00000000..9ae1cb6e --- /dev/null +++ b/scripts/commands/setcurrentskilltitle.py @@ -0,0 +1,9 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + playerObject = actor.getSlottedObject('ghost') + playerObject.setTitle(str(commandString)) + return \ No newline at end of file diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 660ae50f..e47f5bf1 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -110,6 +110,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("object"); core.commandService.registerCommand("getattributesbatch"); core.commandService.registerCommand("pvp"); + core.commandService.registerCommand("setcurrentskilltitle"); } From 04dabef565f8a8785123a8efca89b9519e0f4cc4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 24 Jul 2013 01:41:02 +0100 Subject: [PATCH 06/13] Added SWGMap system --- src/resources/objects/SWGMap.java | 185 ++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/resources/objects/SWGMap.java diff --git a/src/resources/objects/SWGMap.java b/src/resources/objects/SWGMap.java new file mode 100644 index 00000000..d9563d49 --- /dev/null +++ b/src/resources/objects/SWGMap.java @@ -0,0 +1,185 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +import java.nio.ByteOrder; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.StringUtilities; + +import com.sleepycat.persist.model.NotPersistent; + +@SuppressWarnings("unused") + +public class SWGMap implements Map { + + private Map map = new TreeMap(); + @NotPersistent + private int updateCounter; + + private ObjectMessageBuilder messageBuilder; + private byte viewType; + private short updateType; + + protected final Object objectMutex = new Object(); + + public SWGMap(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { + this.messageBuilder = messageBuilder; + this.viewType = (byte) viewType; + this.updateType = (short) updateType; + } + + public void clear() { + throw new UnsupportedOperationException(); + } + + public boolean containsKey(Object key) { + synchronized(objectMutex) { + return map.containsKey(key); + } + } + + public boolean containsValue(Object value) { + synchronized(objectMutex) { + return map.containsValue(value); + } + } + + public Set> entrySet() { + synchronized(objectMutex) { + return map.entrySet(); + } + } + + public V get(Object key) { + synchronized(objectMutex) { + return map.get(key); + } + } + + public boolean isEmpty() { + synchronized(objectMutex) { + return map.isEmpty(); + } + } + + public Set keySet() { + synchronized(objectMutex) { + return map.keySet(); + } + } + + public V put(K key, V value) { + synchronized(objectMutex) { + if (key instanceof String && value instanceof IListObject) { + if (map.containsKey(key)) { + // Changing an existing map + V oldValue = map.put(key, value); + + queue(item(2, key, ((IListObject) value).getBytes(), true, true)); + + return oldValue; + } else { + // Adding to the map + V oldValue = map.put(key, value); + + queue(item(0, key, ((IListObject) value).getBytes(), true, true)); + + return oldValue; + } + } + + return null; + } + } + + public void putAll(Map m) { + throw new UnsupportedOperationException(); + } + + public V remove(Object arg0) { + throw new UnsupportedOperationException(); + } + + public int size() { + synchronized(objectMutex) { + return map.size(); + } + } + + public Collection values() { + synchronized(objectMutex) { + return map.values(); + } + } + + public int getUpdateCounter() { + return updateCounter; + } + + private byte[] item(int type, K index, byte[] data, boolean useIndex, boolean useData) { + if (index instanceof String) { + int size = 1 + ((useIndex) ? (2 + ((String) index).getBytes().length) : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) type); + if (useIndex) buffer.put(((index instanceof String) ? StringUtilities.getAsciiString((String) index) : Integer.toString(0).getBytes())); + if (useData) buffer.put(data); + + updateCounter++; + + return buffer.array(); + } else { + throw new IllegalArgumentException(); + } + } + + private void queue(byte[] data) { + IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put(data); + messageBuilder.sendListDelta(viewType, updateType, buffer); + } + + private void queue(List data) { + int size = 0; + + for (byte[] queued : data) { + size += queued.length; + } + + IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(data.size()); + buffer.putInt(updateCounter); + for (byte[] queued : data) buffer.put(queued); + + messageBuilder.sendListDelta(viewType, updateType, buffer); + } + +} From a0afc196f4db9c5aadcdce02a5b804c9f015eebf Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 24 Jul 2013 01:50:51 +0100 Subject: [PATCH 07/13] Update SWGList, add gild deltas, play title delta --- src/resources/common/Opcodes.java | 1 + src/resources/common/StringUtilities.java | 71 ++++ ....java => CurrentServerGCWZoneHistory.java} | 72 ++-- .../objects/CurrentServerGCWZonePercent.java | 117 ++++++ src/resources/objects/IListObject.java | 28 ++ src/resources/objects/ListObject.java | 27 +- .../objects/ObjectMessageBuilder.java | 80 ++-- .../objects/OtherServerGCWZonePercent.java | 121 ++++++ src/resources/objects/SWGList.java | 394 +++++++++++++----- .../creature/CreatureMessageBuilder.java | 2 +- .../objects/guild/GuildMessageBuilder.java | 206 ++++++++- src/resources/objects/guild/GuildObject.java | 194 ++++----- .../objects/player/PlayerMessageBuilder.java | 14 +- .../objects/player/PlayerObject.java | 2 + .../tangible/TangibleMessageBuilder.java | 2 +- .../objects/weapon/WeaponMessageBuilder.java | 2 +- src/services/gcw/GCWService.java | 97 +++-- src/services/object/ObjectService.java | 2 +- 18 files changed, 1092 insertions(+), 340 deletions(-) create mode 100644 src/resources/common/StringUtilities.java rename src/resources/objects/{GCWZone.java => CurrentServerGCWZoneHistory.java} (63%) create mode 100644 src/resources/objects/CurrentServerGCWZonePercent.java create mode 100644 src/resources/objects/IListObject.java create mode 100644 src/resources/objects/OtherServerGCWZonePercent.java diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index a84429ad..1991054c 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -43,5 +43,6 @@ public class Opcodes { public static int RequestGalaxyLoopTimes = 0x7D842D68; public static int SelectCharacter = 0xB5098D76; public static int SuiEventNotification = 0x092D3564; + public static int DeltasMessage = 0x12862153; } diff --git a/src/resources/common/StringUtilities.java b/src/resources/common/StringUtilities.java new file mode 100644 index 00000000..a613f4df --- /dev/null +++ b/src/resources/common/StringUtilities.java @@ -0,0 +1,71 @@ +package resources.common; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +public class StringUtilities { + + public static String getAsciiString(ByteBuffer buffer) { + return getString(buffer, "US-ASCII"); + } + + public static String getUnicodeString(ByteBuffer buffer) { + return getString(buffer, "UTF-16LE"); + } + + public static byte[] getAsciiString(String string) { + return getString(string, "US-ASCII"); + } + + public static byte[] getUnicodeString(String string) { + return getString(string, "UTF-16LE"); + } + + private static String getString(ByteBuffer buffer, String charFormat) { + String result; + int length; + + if (charFormat == "UTF-16LE") { + length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); + } else { + length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); + } + + int bufferPosition = buffer.position(); + + try { + result = new String(buffer.array(), bufferPosition, length, charFormat); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return ""; + } + + buffer.position(bufferPosition + length); + + return result; + } + + private static byte[] getString(String string, String charFormat) { + ByteBuffer result; + int length = 2 + string.length(); + + if (charFormat == "UTF-16LE") { + result = ByteBuffer.allocate(length * 2).order(ByteOrder.LITTLE_ENDIAN); + result.putInt(string.length()); + } else { + result = ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short)string.length()); + } + + try { + result.put(string.getBytes(charFormat)); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return new byte[] { }; + } + + return result.array(); + } + +} diff --git a/src/resources/objects/GCWZone.java b/src/resources/objects/CurrentServerGCWZoneHistory.java similarity index 63% rename from src/resources/objects/GCWZone.java rename to src/resources/objects/CurrentServerGCWZoneHistory.java index 35db8508..3e652481 100644 --- a/src/resources/objects/GCWZone.java +++ b/src/resources/objects/CurrentServerGCWZoneHistory.java @@ -21,73 +21,71 @@ ******************************************************************************/ package resources.objects; -public class GCWZone implements ListObject { +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class CurrentServerGCWZoneHistory extends ListObject { private byte unknown1 = 0; - private String server = "current"; private String zone = ""; private int lastUpdateTime = ((int) System.currentTimeMillis()); private int percent = 50; - private int gcwPoints = 0; - - public GCWZone(String server, String zone) { - this.server = server; + + public CurrentServerGCWZoneHistory(String zone, int percent) { this.zone = zone; + this.percent = percent; } - public GCWZone(String zone) { + public CurrentServerGCWZoneHistory(String zone) { this.zone = zone; } - public GCWZone() { - - } - public byte getUnknown1() { - return unknown1; + synchronized(objectMutex) { + return unknown1; + } } public void setUnknown1(byte unknown1) { - this.unknown1 = unknown1; - } - - public String getServer() { - return server; + synchronized(objectMutex) { + this.unknown1 = unknown1; + } } public String getZone() { - return zone; + synchronized(objectMutex) { + return zone; + } } public int getLastUpdateTime() { - return lastUpdateTime; + synchronized(objectMutex) { + return lastUpdateTime; + } } public int getPercent() { - return percent; + synchronized(objectMutex) { + return percent; + } } public void setPercent(int percent) { - this.percent = percent; - this.lastUpdateTime = ((int) System.currentTimeMillis()); + synchronized(objectMutex) { + this.percent = percent; + this.lastUpdateTime = ((int) System.currentTimeMillis()); + } } - public int getGCWPoints() { - return gcwPoints; - } - - public void addGCWPoints(int gcwPoints) { - this.gcwPoints += gcwPoints; - } - - public void removeGCWPoints(int gcwPoints) { - this.gcwPoints = (((this.gcwPoints - gcwPoints) < 0) ? 0 : this.gcwPoints - gcwPoints); - } - - @Override public byte[] getBytes() { - // TODO Auto-generated method stub - return null; + synchronized(objectMutex) { + IoBuffer buffer = bufferPool.allocate((8 + zone.length() + 2), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(zone)); + buffer.putInt(lastUpdateTime); + buffer.putInt(percent); + return buffer.array(); + } } } diff --git a/src/resources/objects/CurrentServerGCWZonePercent.java b/src/resources/objects/CurrentServerGCWZonePercent.java new file mode 100644 index 00000000..96402caa --- /dev/null +++ b/src/resources/objects/CurrentServerGCWZonePercent.java @@ -0,0 +1,117 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class CurrentServerGCWZonePercent extends ListObject { + + private byte unknown1 = 0; + private String zone = ""; + private int percent = 60; + private int gcwPoints = 0; + + public CurrentServerGCWZonePercent(String zone) { + this.zone = zone; + } + + public byte getUnknown1() { + synchronized(objectMutex) { + return unknown1; + } + } + + public void setUnknown1(byte unknown1) { + synchronized(objectMutex) { + this.unknown1 = unknown1; + } + } + + public String getZone() { + synchronized(objectMutex) { + return zone; + } + } + + public int getPercent() { + synchronized(objectMutex) { + return percent; + } + } + + public void setPercent(int percent, SWGList historyList) { + synchronized(objectMutex) { + int historyCount = 0; + int firstHistoryIndex = historyList.get().size(); + int lastHistoryIndex = historyList.get().size(); + + for (int i = 0; i < historyList.size(); i++) { + if (historyList.get(i).getZone() == getZone()) { + historyCount++; + lastHistoryIndex = i; + + if (historyCount == 1) { + firstHistoryIndex = i; + } + } + } + + if (historyCount > 10) { + historyList.remove(firstHistoryIndex); + } + + historyList.add(lastHistoryIndex, new CurrentServerGCWZoneHistory(zone, percent)); + + this.percent = percent; + } + } + + public int getGCWPoints() { + synchronized(objectMutex) { + return gcwPoints; + } + } + + public void addGCWPoints(int gcwPoints) { + synchronized(objectMutex) { + this.gcwPoints += gcwPoints; + } + } + + public void removeGCWPoints(int gcwPoints) { + synchronized(objectMutex) { + this.gcwPoints = (((this.gcwPoints - gcwPoints) < 0) ? 0 : this.gcwPoints - gcwPoints); + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = bufferPool.allocate((4 + zone.length() + 2), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(zone)); + buffer.putInt(percent); + return buffer.array(); + } + } + +} diff --git a/src/resources/objects/IListObject.java b/src/resources/objects/IListObject.java new file mode 100644 index 00000000..0af809cf --- /dev/null +++ b/src/resources/objects/IListObject.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +public interface IListObject { + + public byte[] getBytes(); + +} diff --git a/src/resources/objects/ListObject.java b/src/resources/objects/ListObject.java index 2d4cd295..e643d075 100644 --- a/src/resources/objects/ListObject.java +++ b/src/resources/objects/ListObject.java @@ -1,7 +1,30 @@ package resources.objects; -public interface ListObject { +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.SimpleBufferAllocator; + +import resources.common.StringUtilities; + +public abstract class ListObject implements IListObject { - public byte[] getBytes(); + protected final Object objectMutex = new Object(); + public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + protected String getAsciiString(ByteBuffer buffer) { + return StringUtilities.getAsciiString(buffer); + } + + protected String getUnicodeString(ByteBuffer buffer) { + return StringUtilities.getUnicodeString(buffer); + } + + protected byte[] getAsciiString(String string) { + return StringUtilities.getAsciiString(string); + } + + protected byte[] getUnicodeString(String string) { + return StringUtilities.getUnicodeString(string); + } + } diff --git a/src/resources/objects/ObjectMessageBuilder.java b/src/resources/objects/ObjectMessageBuilder.java index 53b4ab66..8a0ebbbd 100644 --- a/src/resources/objects/ObjectMessageBuilder.java +++ b/src/resources/objects/ObjectMessageBuilder.java @@ -28,6 +28,8 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; +import resources.common.Opcodes; + import engine.resources.objects.SWGObject; public abstract class ObjectMessageBuilder { @@ -36,50 +38,78 @@ public abstract class ObjectMessageBuilder { public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); public IoBuffer createBaseline(String objectType, byte viewType, IoBuffer data, int size) { + IoBuffer buffer = bufferPool.allocate(23 + size, false).order(ByteOrder.LITTLE_ENDIAN); - IoBuffer buf = bufferPool.allocate(23 + size, false).order(ByteOrder.LITTLE_ENDIAN); - buf.putShort((short) 5); - buf.putInt(0x68A75F0C); - buf.putLong(object.getObjectID()); + buffer.putShort((short) 5); + buffer.putInt(0x68A75F0C); + buffer.putLong(object.getObjectID()); try { - buf.put(reverse(objectType).getBytes("US-ASCII")); + buffer.put(reverse(objectType).getBytes("US-ASCII")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - buf.put(viewType); - buf.putInt(size); // size - buf.put(data); - buf.flip(); - return buf; + buffer.put(viewType); + buffer.putInt(size); + buffer.put(data); + buffer.flip(); + + return buffer; } public IoBuffer createDelta(String objectType, byte viewType, short updateCount, short updateType, IoBuffer data, int size) { + IoBuffer buffer = bufferPool.allocate(27 + size, false).order(ByteOrder.LITTLE_ENDIAN); - IoBuffer buf = bufferPool.allocate(27 + size, false).order(ByteOrder.LITTLE_ENDIAN); - buf.putShort((short) 5); - buf.putInt(0x12862153); - buf.putLong(object.getObjectID()); + buffer.putShort((short) 5); + buffer.putInt(Opcodes.DeltasMessage); + buffer.putLong(object.getObjectID()); try { - buf.put(reverse(objectType).getBytes("US-ASCII")); + buffer.put(reverse(objectType).getBytes("US-ASCII")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } - buf.put(viewType); - buf.putInt(size); // size - buf.putShort(updateCount); - buf.putShort(updateType); - buf.put(data); - - buf.flip(); - return buf; - + buffer.put(viewType); + buffer.putInt(size); + buffer.putShort(updateCount); + buffer.putShort(updateType); + buffer.put(data); + buffer.flip(); + return buffer; + } + + public IoBuffer createDelta(String objectType, byte viewType, short updateCount, IoBuffer data, int size) { + IoBuffer buffer = bufferPool.allocate(25 + size, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 5); + buffer.putInt(Opcodes.DeltasMessage); + buffer.putLong(object.getObjectID()); + try { + buffer.put(reverse(objectType).getBytes("US-ASCII")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + buffer.put(viewType); + buffer.putInt(size); + buffer.putShort(updateCount); + buffer.put(data); + buffer.flip(); + + return buffer; + } + + public IoBuffer createDeltaObject(short updateType, IoBuffer data, int size) { + IoBuffer buffer = bufferPool.allocate(2 + size, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort(updateType); + buffer.put(data.array()); + + return buffer; } public SWGObject getObject() { return object; } public void setObject(SWGObject object) { this.object = object; } - public abstract void sendListDelta(short updateType, IoBuffer buffer); + public abstract void sendListDelta(byte viewType, short updateType, IoBuffer buffer); public abstract void sendBaselines(); diff --git a/src/resources/objects/OtherServerGCWZonePercent.java b/src/resources/objects/OtherServerGCWZonePercent.java new file mode 100644 index 00000000..677ec790 --- /dev/null +++ b/src/resources/objects/OtherServerGCWZonePercent.java @@ -0,0 +1,121 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class OtherServerGCWZonePercent extends ListObject { + + private byte unknown1 = 0; + private String server = "SWG"; + private String zone = ""; + private int lastUpdateTime = ((int) System.currentTimeMillis()); + private int percent = 50; + private int gcwPoints = 0; + + public OtherServerGCWZonePercent(String server, String zone) { + this.server = server; + this.zone = zone; + } + + public OtherServerGCWZonePercent(String zone) { + this.zone = zone; + } + + public OtherServerGCWZonePercent() { + + } + + public byte getUnknown1() { + synchronized(objectMutex) { + return unknown1; + } + } + + public void setUnknown1(byte unknown1) { + synchronized(objectMutex) { + this.unknown1 = unknown1; + } + } + + public String getServer() { + synchronized(objectMutex) { + return server; + } + } + + public String getZone() { + synchronized(objectMutex) { + return zone; + } + } + + public int getLastUpdateTime() { + synchronized(objectMutex) { + return lastUpdateTime; + } + } + + public int getPercent() { + synchronized(objectMutex) { + return percent; + } + } + + public void setPercent(int percent) { + synchronized(objectMutex) { + this.percent = percent; + this.lastUpdateTime = ((int) System.currentTimeMillis()); + } + } + + public int getGCWPoints() { + synchronized(objectMutex) { + return gcwPoints; + } + } + + public void addGCWPoints(int gcwPoints) { + synchronized(objectMutex) { + this.gcwPoints += gcwPoints; + } + } + + public void removeGCWPoints(int gcwPoints) { + synchronized(objectMutex) { + this.gcwPoints = (((this.gcwPoints - gcwPoints) < 0) ? 0 : this.gcwPoints - gcwPoints); + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = bufferPool.allocate((4 + server.length() + zone.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(zone)); + buffer.putInt(percent); + return buffer.array(); + } + } + +} diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 329192ea..f33d38be 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -1,146 +1,294 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package resources.objects; import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; import java.util.List; +import java.util.ListIterator; import org.apache.mina.core.buffer.IoBuffer; import com.sleepycat.persist.model.NotPersistent; -public class SWGList { +/* A SWGList element MUST implement IListObject, or it will refuse to work with it */ + +public class SWGList implements List { - private List list = new ArrayList(); + private List list = new ArrayList(); @NotPersistent private int updateCounter; private ObjectMessageBuilder messageBuilder; + private byte viewType; private short updateType; protected final Object objectMutex = new Object(); - public SWGList(ObjectMessageBuilder messageBuilder, short updateType) { + public SWGList(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { this.messageBuilder = messageBuilder; - this.updateType = updateType; + this.viewType = (byte) viewType; + this.updateType = (short) updateType; } - public void add(ListObject e) { + public boolean add(E e) { synchronized(objectMutex) { - byte[] bytes = e.getBytes(); - list.add(e); - updateCounter++; - - IoBuffer buffer = messageBuilder.bufferPool.allocate((bytes.length + 11), false).order(ByteOrder.LITTLE_ENDIAN);; - buffer.putInt(1); - buffer.putInt(updateCounter); - buffer.put((byte) 1); - buffer.putShort((short) list.lastIndexOf(e)); - buffer.put(bytes); - messageBuilder.sendListDelta(updateType, buffer); - } - } - - public ListObject get(int index) { - synchronized(objectMutex) { - return list.get(index); - } - } - - public void set(int index, ListObject element) { - synchronized(objectMutex) { - byte[] bytes = element.getBytes(); - list.set(index, element); - updateCounter++; - - IoBuffer buffer = messageBuilder.bufferPool.allocate((bytes.length + 11), false).order(ByteOrder.LITTLE_ENDIAN);; - buffer.putInt(1); - buffer.putInt(updateCounter); - buffer.put((byte) 2); - buffer.putShort((short) index); - buffer.put(bytes); - messageBuilder.sendListDelta(updateType, buffer); - } - } - - public List get() { - synchronized(objectMutex) { - return list; - } - } - - public void set(List list) { - synchronized(objectMutex) { - this.list = list; - updateCounter++; - - IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(list.size()); - buffer.putInt(updateCounter); - buffer.put((byte) 3); - buffer.putShort((short) list.size()); - - for (ListObject object : list) { - buffer = messageBuilder.bufferPool.allocate(buffer.position(), false).put(buffer.array(), 0, buffer.position()); - buffer.put(object.getBytes()); + if (e instanceof IListObject) { + if (list.add(e)) { + queue(item(1, list.lastIndexOf(e), ((IListObject) e).getBytes(), true, true)); + + return true; + } } - messageBuilder.sendListDelta(updateType, buffer); + return false; } } - public boolean contains(ListObject o) { + public void add(int index, E element) { synchronized(objectMutex) { - return list.contains(o); + if (element instanceof IListObject) { + list.add(index, element); + queue(item(1, index, ((IListObject) element).getBytes(), true, true)); + } } } - public void remove(int index) { + public boolean addAll(Collection c) { synchronized(objectMutex) { - list.remove(index); - updateCounter++; + if (!c.isEmpty()) { + List buffer = new ArrayList(); + boolean success = false; + + for (E element : c) { + if (element instanceof IListObject) { + if (list.add(element)) { + buffer.add(item(1, list.lastIndexOf(element), ((IListObject) element).getBytes(), true, true)); + success = true; + } + } else { + return false; + } + } + + if (success == true) { + queue(buffer); + } else { + return false; + } + } - IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN);; - buffer.putInt(1); - buffer.putInt(updateCounter); - buffer.put((byte) 0); - buffer.putShort((short) index); - messageBuilder.sendListDelta(updateType, buffer); + return false; } } - public void remove(ListObject o) { + public boolean addAll(int index, Collection c) { synchronized(objectMutex) { - int index = list.indexOf(o); + if (!c.isEmpty()) { + List buffer = new ArrayList(); + + for (E element : c) { + if (element instanceof IListObject) { + list.add(index, element); + buffer.add(item(1, index, ((IListObject) element).getBytes(), true, true)); + index++; + } else { + return false; + } + } + + queue(buffer); + + return true; + } - list.remove(index); - updateCounter++; - - IoBuffer buffer = messageBuilder.bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN);; - buffer.putInt(1); - buffer.putInt(updateCounter); - buffer.put((byte) 0); - buffer.putShort((short) index); - messageBuilder.sendListDelta(updateType, buffer); + return false; } - } public void clear() { synchronized(objectMutex) { list.clear(); - updateCounter++; - - IoBuffer buffer = messageBuilder.bufferPool.allocate(9, false).order(ByteOrder.LITTLE_ENDIAN);; - buffer.putInt(0); - buffer.putInt(updateCounter); - buffer.put((byte) 0); - messageBuilder.sendListDelta(updateType, buffer); + queue(item(4, 0, null, false, false)); } } - public int getUpdateCounter() { + public boolean contains(Object o) { synchronized(objectMutex) { - return updateCounter; + return list.contains(o); + } + } + + public boolean containsAll(Collection c) { + synchronized(objectMutex) { + return list.containsAll(c); + } + } + + public E get(int index) { + synchronized(objectMutex) { + return list.get(index); + } + } + + public List get() { + synchronized(objectMutex) { + return list; + } + } + + public int indexOf(Object o) { + synchronized(objectMutex) { + return list.indexOf(o); + } + } + + public boolean isEmpty() { + synchronized(objectMutex) { + return list.isEmpty(); + } + } + + public Iterator iterator() { + synchronized(objectMutex) { + return list.iterator(); + } + } + + public int lastIndexOf(Object o) { + synchronized(objectMutex) { + return list.lastIndexOf(o); + } + } + + public ListIterator listIterator() { + synchronized(objectMutex) { + return list.listIterator(); + } + } + + public ListIterator listIterator(int index) { + synchronized(objectMutex) { + return listIterator(index); + } + } + + public boolean remove(Object o) { + synchronized(objectMutex) { + int index = list.indexOf(o); + + if (list.remove(o)) { + queue(item(1, index, null, true, false)); + return true; + } else { + return false; + } + } + } + + public E remove(int index) { + synchronized(objectMutex) { + E element = list.remove(index); + + queue(item(1, index, null, true, false)); + + return (E) element; + } + } + + public boolean removeAll(Collection c) { + synchronized(objectMutex) { + if (!c.isEmpty()) { + List buffer = new ArrayList(); + int index; + boolean success = false; + + for (Object element : c) { + index = list.indexOf(element); + + if (list.remove(element)) { + buffer.add(item(0, index, null, true, false)); + success = true; + } + } + + if (success) { + queue(buffer); + } + + return success; + } + + return false; + } + } + + public boolean retainAll(Collection c) { + synchronized(objectMutex) { + return list.retainAll(c); + } + } + + public E set(int index, E element) { + synchronized(objectMutex) { + if (element instanceof IListObject) { + E previousElement = list.set(index, element); + + queue(item(2, index, ((IListObject) element).getBytes(), true, true)); + + return previousElement; + } + + return null; + } + } + + public boolean set(List list) { + synchronized(objectMutex) { + byte[] newListData = { 0x03 }; + + if (!list.isEmpty()) { + for (E element : list) { + if (element instanceof IListObject) { + IoBuffer buffer = messageBuilder.bufferPool.allocate((newListData.length + ((IListObject) element).getBytes().length), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(newListData); + buffer.put(((IListObject) element).getBytes()); + newListData = buffer.array(); + } else { + return false; + } + } + + this.list = list; + + updateCounter++; + queue(newListData); + + return true; + } + + return false; } } @@ -149,5 +297,63 @@ public class SWGList { return list.size(); } } + + public List subList(int fromIndex, int toIndex) { + synchronized(objectMutex) { + return list.subList(fromIndex, toIndex); + } + } + + public Object[] toArray() { + synchronized(objectMutex) { + return list.toArray(); + } + } + + public T[] toArray(T[] a) { + synchronized(objectMutex) { + return list.toArray(a); + } + } + + public int getUpdateCounter() { + return updateCounter; + } + + private byte[] item(int type, int index, byte[] data, boolean useIndex, boolean useData) { + int size = 1 + ((useIndex) ? 2 : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) type); + if (useIndex) buffer.putShort((short) index); + if (useData) buffer.put(data); + + updateCounter++; + + return buffer.array(); + } + + private void queue(byte[] data) { + IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put(data); + messageBuilder.sendListDelta(viewType, updateType, buffer); + } + + private void queue(List data) { + int size = 0; + + for (byte[] queued : data) { + size += queued.length; + } + + IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(data.size()); + buffer.putInt(updateCounter); + for (byte[] queued : data) buffer.put(queued); + + messageBuilder.sendListDelta(viewType, updateType, buffer); + } } diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 4d92919a..86c38910 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -595,7 +595,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } @Override - public void sendListDelta(short updateType, IoBuffer buffer) { + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub } diff --git a/src/resources/objects/guild/GuildMessageBuilder.java b/src/resources/objects/guild/GuildMessageBuilder.java index fb10d893..1aabcb20 100644 --- a/src/resources/objects/guild/GuildMessageBuilder.java +++ b/src/resources/objects/guild/GuildMessageBuilder.java @@ -22,15 +22,21 @@ package resources.objects.guild; import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.GCWZone; +import resources.objects.CurrentServerGCWZoneHistory; +import resources.objects.CurrentServerGCWZonePercent; import resources.objects.Guild; import resources.objects.ObjectMessageBuilder; +import resources.objects.OtherServerGCWZonePercent; public class GuildMessageBuilder extends ObjectMessageBuilder { - + + private List zoneUpdates = new ArrayList(); + public GuildMessageBuilder(GuildObject guildObject) { setObject(guildObject); } @@ -47,8 +53,8 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { buffer.put(getUnicodeString(guilds.getCustomName())); buffer.putInt(guilds.getVolume()); buffer.putInt(guilds.getGuildList().size()); - buffer.putInt(guilds.getGuildListUpdateCounter()); - for (Guild object : guilds.getGuildList()) { + buffer.putInt(guilds.getGuildList().getUpdateCounter()); + for (Guild object : guilds.getGuildList().get()) { buffer.put(getAsciiString(object.getString())); } @@ -78,52 +84,52 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { buffer.putInt(guilds.getUnknown1()); buffer.putShort(guilds.getUnknown2()); buffer.putInt(guilds.getCurrentServerGCWZonePercentList().size()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentListUpdateCounter()); - for (GCWZone object : guilds.getCurrentServerGCWZonePercentList()) { + buffer.putInt(guilds.getCurrentServerGCWZonePercentList().getUpdateCounter()); + for (CurrentServerGCWZonePercent object : guilds.getCurrentServerGCWZonePercentList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getCurrentServerGCWTotalPercentList().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalPercentListUpdateCounter()); - for (GCWZone object : guilds.getCurrentServerGCWTotalPercentList()) { + buffer.putInt(guilds.getCurrentServerGCWTotalPercentList().getUpdateCounter()); + for (CurrentServerGCWZonePercent object : guilds.getCurrentServerGCWTotalPercentList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getCurrentServerGCWZoneHistoryList().size()); - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryListUpdateCounter()); - for (GCWZone object : guilds.getCurrentServerGCWZoneHistoryList()) { + buffer.putInt(guilds.getCurrentServerGCWZoneHistoryList().getUpdateCounter()); + for (CurrentServerGCWZoneHistory object : guilds.getCurrentServerGCWZoneHistoryList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getLastUpdateTime()); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getCurrentServerGCWTotalHistoryList().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryListUpdateCounter()); - for (GCWZone object : guilds.getCurrentServerGCWTotalHistoryList()) { + buffer.putInt(guilds.getCurrentServerGCWTotalHistoryList().getUpdateCounter()); + for (CurrentServerGCWZoneHistory object : guilds.getCurrentServerGCWTotalHistoryList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getLastUpdateTime()); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getOtherServerGCWZonePercentList().size()); - buffer.putInt(guilds.getOtherServerGCWZonePercentListUpdateCounter()); - for (GCWZone object : guilds.getOtherServerGCWZonePercentList()) { + buffer.putInt(guilds.getOtherServerGCWZonePercentList().getUpdateCounter()); + for (OtherServerGCWZonePercent object : guilds.getOtherServerGCWZonePercentList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getServer())); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } buffer.putInt(guilds.getOtherServerGCWTotalPercentList().size()); - buffer.putInt(guilds.getOtherServerGCWTotalPercentListUpdateCounter()); - for (GCWZone object : guilds.getOtherServerGCWTotalPercentList()) { + buffer.putInt(guilds.getOtherServerGCWTotalPercentList().getUpdateCounter()); + for (OtherServerGCWZonePercent object : guilds.getOtherServerGCWTotalPercentList().get()) { buffer.put(object.getUnknown1()); buffer.put(getAsciiString(object.getServer())); buffer.put(getAsciiString(object.getZone())); buffer.putInt(object.getPercent()); } - buffer.putInt(5); // Unknown + buffer.putInt(guilds.getUnknown3()); int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -133,14 +139,170 @@ public class GuildMessageBuilder extends ObjectMessageBuilder { return buffer; } - @Override - public void sendListDelta(short updateType, IoBuffer buffer) { - switch (updateType) { - default: - return; + public IoBuffer buildComplexity(float complexity) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putFloat(complexity); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 0, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildSTF(String STFFile, int STFSpacer, String STFName) { + IoBuffer buffer = bufferPool.allocate((STFFile.length() + STFName.length() + 8), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getAsciiString(STFFile)); + buffer.putInt(STFSpacer); + buffer.put(getAsciiString(STFName)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 1, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildCustomName(String customName) { + IoBuffer buffer = bufferPool.allocate((customName.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getUnicodeString(customName)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 2, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildVolume(int volume) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(volume); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 3, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildServerId(int serverId) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(serverId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 0, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildUnknowns(int unknown1, short unknown2) { + IoBuffer buffer = bufferPool.allocate(6, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(unknown1); + buffer.putShort(unknown2); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 1, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildGCWDelta() { + synchronized(zoneUpdates) { + if (zoneUpdates.size() > 0) { + int updates = zoneUpdates.size(); + int size = 4; + + for (int i = 0; i < zoneUpdates.size(); i++) { + size += zoneUpdates.get(i).position(); + } + + IoBuffer buffer = bufferPool.allocate(size, false).order(ByteOrder.LITTLE_ENDIAN); + + for (int i = 0; i < zoneUpdates.size(); i++) { + buffer.put(zoneUpdates.get(i).array()); + } + + zoneUpdates.clear(); + + buffer.flip(); + + return createDelta("GILD", (byte) 6, (short) updates, buffer, size); + } else { + return null; + } } } + public IoBuffer buildUnknown3(int unknown3) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(unknown3); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 8, buffer, size + 4); + + return buffer; + } + + final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + int v; + for ( int j = 0; j < bytes.length; j++ ) { + v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + synchronized(zoneUpdates) { + switch (viewType) { + case 3: + { + switch (updateType) { + case 4: + { + buffer.flip(); + buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 4, buffer, buffer.position() + 4); + + for (int i = 0; i < ((GuildObject) object).core.getActiveConnectionsMap().size(); i++) { + ((GuildObject) object).core.getActiveConnectionsMap().get(i).getSession().write(buffer); + } + + break; + } + } + } + case 6: + { + switch (updateType) { + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + { + buffer = createDeltaObject(updateType, buffer, buffer.position()); + //System.out.println("Packet: " + bytesToHex(buffer.array())); + zoneUpdates.add(buffer); + break; + } + default: + { + return; + } + } + } + } + } + } + @Override public void sendBaselines() { // TODO Auto-generated method stub diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index e06f7767..f268af3b 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -21,11 +21,15 @@ ******************************************************************************/ package resources.objects.guild; -import java.util.ArrayList; -import java.util.List; +import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.GCWZone; +import main.NGECore; + +import resources.objects.CurrentServerGCWZoneHistory; +import resources.objects.CurrentServerGCWZonePercent; import resources.objects.Guild; +import resources.objects.OtherServerGCWZonePercent; +import resources.objects.SWGList; import com.sleepycat.persist.model.NotPersistent; @@ -37,6 +41,10 @@ import engine.resources.scene.Quaternion; public class GuildObject extends SWGObject { + protected NGECore core; + @NotPersistent + private GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); + // GILD 3 private float complexity = 0x803F0F00; private String STFFile = "string_id_table"; @@ -44,46 +52,24 @@ public class GuildObject extends SWGObject { private String STFName = ""; private String customName = ""; private int volume = 0; - private List guildList = new ArrayList(); - @NotPersistent - private int guildListUpdateCounter = 0; + private SWGList guildList = new SWGList(messageBuilder, 3, 4); // GILD 6 private int serverId = 0x00000041; //private String STFName = "string_id_table"; private int unknown1 = 0; private short unknown2 = 0; - - private List currentServerGCWZonePercentList = new ArrayList(); - @NotPersistent - private int currentServerGCWZonePercentListUpdateCounter = 0; - - private List currentServerGCWTotalPercentList = new ArrayList(); - @NotPersistent - private int currentServerGCWTotalPercentListUpdateCounter = 0; - - private List currentServerGCWZoneHistoryList = new ArrayList(); - @NotPersistent - private int currentServerGCWZoneHistoryListUpdateCounter = 0; + private SWGList currentServerGCWZonePercentList = new SWGList(messageBuilder, 6, 2); + private SWGList currentServerGCWTotalPercentList = new SWGList(messageBuilder, 6, 3); + private SWGList currentServerGCWZoneHistoryList = new SWGList(messageBuilder, 6, 4); + private SWGList currentServerGCWTotalHistoryList = new SWGList(messageBuilder, 6, 5); + private SWGList otherServerGCWZonePercentList = new SWGList(messageBuilder, 6, 6); + private SWGList otherServerGCWTotalPercentList = new SWGList(messageBuilder, 6, 7); + private int unknown3 = 5; - private List currentServerGCWTotalHistoryList = new ArrayList(); - @NotPersistent - private int currentServerGCWTotalHistoryListUpdateCounter = 0; - - private List otherServerGCWZonePercentList = new ArrayList(); - @NotPersistent - private int otherServerGCWZonePercentListUpdateCounter = 0; - - private List otherServerGCWTotalPercentList = new ArrayList(); - @NotPersistent - private int otherServerGCWTotalPercentListUpdateCounter = 0; - - @NotPersistent - private GuildMessageBuilder messageBuilder; - - public GuildObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + public GuildObject(NGECore core, long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - messageBuilder = new GuildMessageBuilder(this); + this.core = core; } public float getComplexity() { @@ -96,6 +82,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.complexity = complexity; } + + notifyAll(messageBuilder.buildComplexity(complexity)); } public String getSTFFile() { @@ -108,6 +96,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.STFFile = STFFile; } + + notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); } public int getSTFSpacer() { @@ -120,6 +110,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.STFSpacer = STFSpacer; } + + notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); } public String getSTFName() { @@ -132,6 +124,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.STFName = STFName; } + + notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); } public String getCustomName() { @@ -144,6 +138,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.customName = customName; } + + notifyAll(messageBuilder.buildCustomName(customName)); } public int getVolume() { @@ -156,24 +152,14 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.volume = volume; } + + notifyAll(messageBuilder.buildVolume(volume)); } - public List getGuildList() { + public SWGList getGuildList() { return guildList; } - public int getGuildListUpdateCounter() { - synchronized(objectMutex) { - return guildListUpdateCounter; - } - } - - public void setGuildListUpdateCounter(int guildListUpdateCounter) { - synchronized(objectMutex) { - this.guildListUpdateCounter = guildListUpdateCounter; - } - } - public int getServerId() { synchronized(objectMutex) { return serverId; @@ -184,6 +170,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.serverId = serverId; } + + notifyAll(messageBuilder.buildServerId(serverId)); } public int getUnknown1() { @@ -196,6 +184,8 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.unknown1 = unknown1; } + + notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); } public short getUnknown2() { @@ -208,101 +198,53 @@ public class GuildObject extends SWGObject { synchronized(objectMutex) { this.unknown2 = unknown2; } + + notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); } - public List getCurrentServerGCWZonePercentList() { + public SWGList getCurrentServerGCWZonePercentList() { return currentServerGCWZonePercentList; } - public int getCurrentServerGCWZonePercentListUpdateCounter() { - synchronized(objectMutex) { - return currentServerGCWZonePercentListUpdateCounter; - } - } - - public void setCurrentServerGCWZonePercentListUpdateCounter(int currentServerGCWZonePercentListUpdateCounter) { - synchronized(objectMutex) { - this.currentServerGCWZonePercentListUpdateCounter = currentServerGCWZonePercentListUpdateCounter; - } - } - - public List getCurrentServerGCWTotalPercentList() { + public SWGList getCurrentServerGCWTotalPercentList() { return currentServerGCWTotalPercentList; } - public int getCurrentServerGCWTotalPercentListUpdateCounter() { - synchronized(objectMutex) { - return currentServerGCWTotalPercentListUpdateCounter; - } - } - - public void setCurrentServerGCWTotalPercentListUpdateCounter(int currentServerGCWTotalPercentListUpdateCounter) { - synchronized(objectMutex) { - this.currentServerGCWTotalPercentListUpdateCounter = currentServerGCWTotalPercentListUpdateCounter; - } - } - - public List getCurrentServerGCWZoneHistoryList() { + public SWGList getCurrentServerGCWZoneHistoryList() { return currentServerGCWZoneHistoryList; } - public int getCurrentServerGCWZoneHistoryListUpdateCounter() { - synchronized(objectMutex) { - return currentServerGCWZoneHistoryListUpdateCounter; - } - } - - public void setCurrentServerGCWZoneHistoryListUpdateCounter(int currentServerGCWZoneHistoryListUpdateCounter) { - synchronized(objectMutex) { - this.currentServerGCWZoneHistoryListUpdateCounter = currentServerGCWZoneHistoryListUpdateCounter; - } - } - - public List getCurrentServerGCWTotalHistoryList() { + public SWGList getCurrentServerGCWTotalHistoryList() { return currentServerGCWTotalHistoryList; } - public int getCurrentServerGCWTotalHistoryListUpdateCounter() { - synchronized(objectMutex) { - return currentServerGCWTotalHistoryListUpdateCounter; - } - } - - public void setCurrentServerGCWTotalHistoryListUpdateCounter(int currentServerGCWTotalHistoryListUpdateCounter) { - synchronized(objectMutex) { - this.currentServerGCWTotalHistoryListUpdateCounter = currentServerGCWTotalHistoryListUpdateCounter; - } - } - - public List getOtherServerGCWZonePercentList() { + public SWGList getOtherServerGCWZonePercentList() { return otherServerGCWZonePercentList; } - public int getOtherServerGCWZonePercentListUpdateCounter() { - synchronized(objectMutex) { - return otherServerGCWZonePercentListUpdateCounter; - } - } - - public void setOtherServerGCWZonePercentListUpdateCounter(int otherServerGCWZonePercentListUpdateCounter) { - synchronized(objectMutex) { - this.otherServerGCWZonePercentListUpdateCounter = otherServerGCWZonePercentListUpdateCounter; - } - } - - public List getOtherServerGCWTotalPercentList() { + public SWGList getOtherServerGCWTotalPercentList() { return otherServerGCWTotalPercentList; } - public int getOtherServerGCWTotalPercentListUpdateCounter() { + public int getUnknown3() { synchronized(objectMutex) { - return otherServerGCWTotalPercentListUpdateCounter; + return unknown3; } } - public void setOtherServerGCWTotalPercentListUpdateCounter(int otherServerGCWTotalPercentListUpdateCounter) { + public void setUnknown3(int unknown3) { synchronized(objectMutex) { - this.otherServerGCWTotalPercentListUpdateCounter = otherServerGCWTotalPercentListUpdateCounter; + this.unknown3 = unknown3; + } + + notifyAll(messageBuilder.buildUnknown3(unknown3)); + } + + public void sendGCWUpdate() { + IoBuffer buffer = messageBuilder.buildGCWDelta(); + + if (buffer != null) { + notifyAll(buffer); } } @@ -311,6 +253,20 @@ public class GuildObject extends SWGObject { destination.getSession().write(messageBuilder.buildBaseline3()); destination.getSession().write(messageBuilder.buildBaseline6()); } - + + private void notifyAll(IoBuffer buffer) { + //for (int i = 0; i < core.getActiveConnectionsMap().size(); i++) { + // core.getActiveConnectionsMap().get(i).getSession().write(buffer); + //} + System.out.println("Notifying all..."); + synchronized(core.getActiveConnectionsMap()) { + for (Client client : core.getActiveConnectionsMap().values()) { + System.out.println("Notifying..." + client.getParent().getCustomName()); + client.getSession().write(buffer); + System.out.println("Notified them."); + System.out.println("Packet: " + buffer.getHexDump()); + } + } + } } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 381ae5f4..abb2dfcb 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -390,9 +390,21 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { } } + + public IoBuffer buildTitleDelta(String title) { + + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(title)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 1, buffer, size + 4); + + return buffer; + + } @Override - public void sendListDelta(short updateType, IoBuffer buffer) { + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index d41823d3..4472829c 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -134,6 +134,8 @@ public class PlayerObject extends SWGObject { synchronized(objectMutex) { this.title = title; } + + notifyObservers(messageBuilder.buildTitleDelta(title), true); } public String getProfession() { diff --git a/src/resources/objects/tangible/TangibleMessageBuilder.java b/src/resources/objects/tangible/TangibleMessageBuilder.java index e36ad1d8..b15e4bbd 100644 --- a/src/resources/objects/tangible/TangibleMessageBuilder.java +++ b/src/resources/objects/tangible/TangibleMessageBuilder.java @@ -124,7 +124,7 @@ public class TangibleMessageBuilder extends ObjectMessageBuilder { } @Override - public void sendListDelta(short updateType, IoBuffer buffer) { + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub } diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index 7251fb1f..6e722042 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -134,7 +134,7 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { } @Override - public void sendListDelta(short updateType, IoBuffer buffer) { + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub } diff --git a/src/services/gcw/GCWService.java b/src/services/gcw/GCWService.java index f3668f1e..b1fd9b9c 100644 --- a/src/services/gcw/GCWService.java +++ b/src/services/gcw/GCWService.java @@ -28,7 +28,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import resources.objects.GCWZone; +import resources.objects.CurrentServerGCWZoneHistory; +import resources.objects.CurrentServerGCWZonePercent; +import resources.objects.OtherServerGCWZonePercent; import resources.objects.guild.GuildObject; import main.NGECore; @@ -41,32 +43,26 @@ public class GCWService implements INetworkDispatch { private NGECore core; private GuildObject object; - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - - List zoneList = Arrays.asList(new String[] { "corellia_airspace", "corellia_pve", "corellia_pvp", "dantooine_airspace", "dantooine_pve", "dantooine_pvp", "dathomir_airspace", "dathomir_pve", "dathomir_pvp", "endor_airspace", "endor_pve", "endor_pvp", "endor_pvp_battlefield", "gcw_region_corellia_1", "gcw_region_corellia_10", "gcw_region_corellia_11", "gcw_region_corellia_12", "gcw_region_corellia_13", "gcw_region_corellia_14", "gcw_region_corellia_2", "gcw_region_corellia_3", "gcw_region_corellia_4", "gcw_region_corellia_5", "gcw_region_corellia_6", "gcw_region_corellia_7", "gcw_region_corellia_8", "gcw_region_corellia_9", "gcw_region_dantooine_1", "gcw_region_dantooine_10", "gcw_region_dantooine_11", "gcw_region_dantooine_12", "gcw_region_dantooine_13", "gcw_region_dantooine_14", "gcw_region_dantooine_15", "gcw_region_dantooine_16", "gcw_region_dantooine_17", "gcw_region_dantooine_2", "gcw_region_dantooine_3", "gcw_region_dantooine_4", "gcw_region_dantooine_5", "gcw_region_dantooine_6", "gcw_region_dantooine_7", "gcw_region_dantooine_8", "gcw_region_dantooine_9", "gcw_region_dathomir_1", "gcw_region_dathomir_10", "gcw_region_dathomir_11", "gcw_region_dathomir_12", "gcw_region_dathomir_13", "gcw_region_dathomir_2", "gcw_region_dathomir_3", "gcw_region_dathomir_4", "gcw_region_dathomir_5", "gcw_region_dathomir_6", "gcw_region_dathomir_7", "gcw_region_dathomir_8", "gcw_region_dathomir_9", "gcw_region_endor_1", "gcw_region_endor_10", "gcw_region_endor_11", "gcw_region_endor_12", "gcw_region_endor_13", "gcw_region_endor_14", "gcw_region_endor_15", "gcw_region_endor_16", "gcw_region_endor_2", "gcw_region_endor_3", "gcw_region_endor_4", "gcw_region_endor_5", "gcw_region_endor_6", "gcw_region_endor_7", "gcw_region_endor_8", "gcw_region_endor_9", "gcw_region_lok_1", "gcw_region_lok_10", "gcw_region_lok_11", "gcw_region_lok_12", "gcw_region_lok_13", "gcw_region_lok_14", "gcw_region_lok_2", "gcw_region_lok_3", "gcw_region_lok_4", "gcw_region_lok_5", "gcw_region_lok_6", "gcw_region_lok_7", "gcw_region_lok_8", "gcw_region_lok_9", "gcw_region_naboo_1", "gcw_region_naboo_10", "gcw_region_naboo_11", "gcw_region_naboo_12", "gcw_region_naboo_13", "gcw_region_naboo_14", "gcw_region_naboo_2", "gcw_region_naboo_3", "gcw_region_naboo_4", "gcw_region_naboo_5", "gcw_region_naboo_6", "gcw_region_naboo_7", "gcw_region_naboo_8", "gcw_region_naboo_9", "gcw_region_rori_1", "gcw_region_rori_10", "gcw_region_rori_11", "gcw_region_rori_12", "gcw_region_rori_13", "gcw_region_rori_2", "gcw_region_rori_3", "gcw_region_rori_4", "gcw_region_rori_5", "gcw_region_rori_6", "gcw_region_rori_7", "gcw_region_rori_8", "gcw_region_rori_9", "gcw_region_talus_1", "gcw_region_talus_10", "gcw_region_talus_11", "gcw_region_talus_12", "gcw_region_talus_13", "gcw_region_talus_14", "gcw_region_talus_15", "gcw_region_talus_16", "gcw_region_talus_2", "gcw_region_talus_3", "gcw_region_talus_4", "gcw_region_talus_5", "gcw_region_talus_6", "gcw_region_talus_7", "gcw_region_talus_8", "gcw_region_talus_9", "gcw_region_tatooine_1", "gcw_region_tatooine_10", "gcw_region_tatooine_11", "gcw_region_tatooine_12", "gcw_region_tatooine_13", "gcw_region_tatooine_2", "gcw_region_tatooine_3", "gcw_region_tatooine_4", "gcw_region_tatooine_5", "gcw_region_tatooine_6", "gcw_region_tatooine_7", "gcw_region_tatooine_8", "gcw_region_tatooine_9", "gcw_region_yavin4_1", "gcw_region_yavin4_10", "gcw_region_yavin4_11", "gcw_region_yavin4_12", "gcw_region_yavin4_13", "gcw_region_yavin4_14", "gcw_region_yavin4_15", "gcw_region_yavin4_16", "gcw_region_yavin4_17", "gcw_region_yavin4_18", "gcw_region_yavin4_2", "gcw_region_yavin4_3", "gcw_region_yavin4_4", "gcw_region_yavin4_5", "gcw_region_yavin4_6", "gcw_region_yavin4_7", "gcw_region_yavin4_8", "gcw_region_yavin4_9", "lok_airspace", "lok_pve", "lok_pvp", "naboo_airspace", "naboo_pve", "naboo_pvp", "rori_airspace", "rori_pve", "rori_pvp", "space_corellia_space_pve", "space_corellia_space_pvp", "space_dantooine_space_pve", "space_dantooine_space_pvp", "space_dathomir_space_pve", "space_dathomir_space_pvp", "space_endor_space_pve", "space_endor_space_pvp", "space_lok_space_pve", "space_lok_space_pvp", "space_naboo_space_pve", "space_naboo_space_pvp", "space_tatooine_space_pve", "space_tatooine_space_pvp", "space_yavin4_space_pve", "space_yavin4_space_pvp", "talus_airspace", "talus_pve", "talus_pvp", "tatooine_airspace", "tatooine_pve", "tatooine_pvp", "yavin4_airspace", "yavin4_pve", "yavin4_pvp", "yavin4_pvp_battlefield" }); - List totalList = Arrays.asList(new String[] { "corellia", "dantooine", "dathomir", "endor", "galaxy", "lok", "naboo", "rori", "talus", "tatooine", "yavin4" }); - + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private List zoneList = Arrays.asList(new String[] { "corellia_airspace", "corellia_pve", "corellia_pvp", "dantooine_airspace", "dantooine_pve", "dantooine_pvp", "dathomir_airspace", "dathomir_pve", "dathomir_pvp", "endor_airspace", "endor_pve", "endor_pvp", "endor_pvp_battlefield", "gcw_region_corellia_1", "gcw_region_corellia_10", "gcw_region_corellia_11", "gcw_region_corellia_12", "gcw_region_corellia_13", "gcw_region_corellia_14", "gcw_region_corellia_2", "gcw_region_corellia_3", "gcw_region_corellia_4", "gcw_region_corellia_5", "gcw_region_corellia_6", "gcw_region_corellia_7", "gcw_region_corellia_8", "gcw_region_corellia_9", "gcw_region_dantooine_1", "gcw_region_dantooine_10", "gcw_region_dantooine_11", "gcw_region_dantooine_12", "gcw_region_dantooine_13", "gcw_region_dantooine_14", "gcw_region_dantooine_15", "gcw_region_dantooine_16", "gcw_region_dantooine_17", "gcw_region_dantooine_2", "gcw_region_dantooine_3", "gcw_region_dantooine_4", "gcw_region_dantooine_5", "gcw_region_dantooine_6", "gcw_region_dantooine_7", "gcw_region_dantooine_8", "gcw_region_dantooine_9", "gcw_region_dathomir_1", "gcw_region_dathomir_10", "gcw_region_dathomir_11", "gcw_region_dathomir_12", "gcw_region_dathomir_13", "gcw_region_dathomir_2", "gcw_region_dathomir_3", "gcw_region_dathomir_4", "gcw_region_dathomir_5", "gcw_region_dathomir_6", "gcw_region_dathomir_7", "gcw_region_dathomir_8", "gcw_region_dathomir_9", "gcw_region_endor_1", "gcw_region_endor_10", "gcw_region_endor_11", "gcw_region_endor_12", "gcw_region_endor_13", "gcw_region_endor_14", "gcw_region_endor_15", "gcw_region_endor_16", "gcw_region_endor_2", "gcw_region_endor_3", "gcw_region_endor_4", "gcw_region_endor_5", "gcw_region_endor_6", "gcw_region_endor_7", "gcw_region_endor_8", "gcw_region_endor_9", "gcw_region_lok_1", "gcw_region_lok_10", "gcw_region_lok_11", "gcw_region_lok_12", "gcw_region_lok_13", "gcw_region_lok_14", "gcw_region_lok_2", "gcw_region_lok_3", "gcw_region_lok_4", "gcw_region_lok_5", "gcw_region_lok_6", "gcw_region_lok_7", "gcw_region_lok_8", "gcw_region_lok_9", "gcw_region_naboo_1", "gcw_region_naboo_10", "gcw_region_naboo_11", "gcw_region_naboo_12", "gcw_region_naboo_13", "gcw_region_naboo_14", "gcw_region_naboo_2", "gcw_region_naboo_3", "gcw_region_naboo_4", "gcw_region_naboo_5", "gcw_region_naboo_6", "gcw_region_naboo_7", "gcw_region_naboo_8", "gcw_region_naboo_9", "gcw_region_rori_1", "gcw_region_rori_10", "gcw_region_rori_11", "gcw_region_rori_12", "gcw_region_rori_13", "gcw_region_rori_2", "gcw_region_rori_3", "gcw_region_rori_4", "gcw_region_rori_5", "gcw_region_rori_6", "gcw_region_rori_7", "gcw_region_rori_8", "gcw_region_rori_9", "gcw_region_talus_1", "gcw_region_talus_10", "gcw_region_talus_11", "gcw_region_talus_12", "gcw_region_talus_13", "gcw_region_talus_14", "gcw_region_talus_15", "gcw_region_talus_16", "gcw_region_talus_2", "gcw_region_talus_3", "gcw_region_talus_4", "gcw_region_talus_5", "gcw_region_talus_6", "gcw_region_talus_7", "gcw_region_talus_8", "gcw_region_talus_9", "gcw_region_tatooine_1", "gcw_region_tatooine_10", "gcw_region_tatooine_11", "gcw_region_tatooine_12", "gcw_region_tatooine_13", "gcw_region_tatooine_2", "gcw_region_tatooine_3", "gcw_region_tatooine_4", "gcw_region_tatooine_5", "gcw_region_tatooine_6", "gcw_region_tatooine_7", "gcw_region_tatooine_8", "gcw_region_tatooine_9", "gcw_region_yavin4_1", "gcw_region_yavin4_10", "gcw_region_yavin4_11", "gcw_region_yavin4_12", "gcw_region_yavin4_13", "gcw_region_yavin4_14", "gcw_region_yavin4_15", "gcw_region_yavin4_16", "gcw_region_yavin4_17", "gcw_region_yavin4_18", "gcw_region_yavin4_2", "gcw_region_yavin4_3", "gcw_region_yavin4_4", "gcw_region_yavin4_5", "gcw_region_yavin4_6", "gcw_region_yavin4_7", "gcw_region_yavin4_8", "gcw_region_yavin4_9", "lok_airspace", "lok_pve", "lok_pvp", "naboo_airspace", "naboo_pve", "naboo_pvp", "rori_airspace", "rori_pve", "rori_pvp", "space_corellia_space_pve", "space_corellia_space_pvp", "space_dantooine_space_pve", "space_dantooine_space_pvp", "space_dathomir_space_pve", "space_dathomir_space_pvp", "space_endor_space_pve", "space_endor_space_pvp", "space_lok_space_pve", "space_lok_space_pvp", "space_naboo_space_pve", "space_naboo_space_pvp", "space_tatooine_space_pve", "space_tatooine_space_pvp", "space_yavin4_space_pve", "space_yavin4_space_pvp", "talus_airspace", "talus_pve", "talus_pvp", "tatooine_airspace", "tatooine_pve", "tatooine_pvp", "yavin4_airspace", "yavin4_pve", "yavin4_pvp", "yavin4_pvp_battlefield" }); + private List totalList = Arrays.asList(new String[] { "corellia", "dantooine", "dathomir", "endor", "galaxy", "lok", "naboo", "rori", "talus", "tatooine", "yavin4" }); + public GCWService(final NGECore core) { this.core = core; - - object = this.core.guildService.getGuildObject(); + this.object = this.core.guildService.getGuildObject(); for (int i = 0; i < zoneList.size(); i++) { - object.getCurrentServerGCWZonePercentList().add(new GCWZone(zoneList.get(i))); - object.getCurrentServerGCWZoneHistoryList().add(new GCWZone(zoneList.get(i))); - object.getOtherServerGCWZonePercentList().add(new GCWZone(zoneList.get(i))); - object.setCurrentServerGCWZonePercentListUpdateCounter(object.getCurrentServerGCWZonePercentListUpdateCounter() + 1); - object.setCurrentServerGCWZoneHistoryListUpdateCounter(object.getCurrentServerGCWZoneHistoryListUpdateCounter() + 1); - object.setOtherServerGCWZonePercentListUpdateCounter(object.getOtherServerGCWZonePercentListUpdateCounter() + 1); + object.getCurrentServerGCWZonePercentList().add(new CurrentServerGCWZonePercent(zoneList.get(i))); + object.getCurrentServerGCWZoneHistoryList().add(new CurrentServerGCWZoneHistory(zoneList.get(i))); + object.getOtherServerGCWZonePercentList().add(new OtherServerGCWZonePercent(zoneList.get(i))); } for (int i = 0; i < totalList.size(); i++) { - object.getCurrentServerGCWTotalPercentList().add(new GCWZone(totalList.get(i))); - object.getCurrentServerGCWTotalHistoryList().add(new GCWZone(totalList.get(i))); - object.getOtherServerGCWTotalPercentList().add(new GCWZone(totalList.get(i))); - object.setCurrentServerGCWTotalPercentListUpdateCounter(object.getCurrentServerGCWTotalPercentListUpdateCounter() + 1); - object.setCurrentServerGCWTotalHistoryListUpdateCounter(object.getCurrentServerGCWTotalHistoryListUpdateCounter() + 1); - object.setOtherServerGCWTotalPercentListUpdateCounter(object.getOtherServerGCWTotalPercentListUpdateCounter() + 1); + object.getCurrentServerGCWTotalPercentList().add(new CurrentServerGCWZonePercent(totalList.get(i))); + object.getCurrentServerGCWTotalHistoryList().add(new CurrentServerGCWZoneHistory(totalList.get(i))); + object.getOtherServerGCWTotalPercentList().add(new OtherServerGCWZonePercent(totalList.get(i))); } // Update the GCW Zones every minute as in live @@ -74,33 +70,46 @@ public class GCWService implements INetworkDispatch { @Override public void run() { - synchronized(core.getActiveConnectionsMap()) { - for (Client c : core.getActiveConnectionsMap().values()) { - if (c.getParent() != null) { - addGCWPointsToZonesWithFactionalPresence(c); - removeGCWPointFromZonesWithNoFactionalPresence(c); - } - } - } + //object.sendGCWUpdate(); + //addGCWPointsToZonesWithFactionalPresence(new Client()); + //removeGCWPointFromZonesWithNoFactionalPresence(new Client()); } }, 1, 1, TimeUnit.MINUTES); - // Reset weak GCW zones every 2 days as in live + // Update other server GCW Zones every 15 minutes (roughly like live I think) scheduler.scheduleAtFixedRate(new Runnable() { @Override public void run() { - synchronized(core.getActiveConnectionsMap()) { - for (Client c : core.getActiveConnectionsMap().values()) { - if (c.getParent() != null) { - resetWeakGCWZones(); - } - } + /* + for (int i = 0; i < object.getOtherServerGCWZonePercentList().size(); i++) { + object.getOtherServerGCWZonePercentList().get(i).setPercent(object.getCurrentServerGCWZonePercentList().get(i).getPercent()); + object.getOtherServerGCWZonePercentList().set(i, object.getOtherServerGCWZonePercentList().get(i)); } + + for (int i = 0; i < object.getOtherServerGCWTotalPercentList().size(); i++) { + object.getOtherServerGCWTotalPercentList().get(i).setPercent(object.getCurrentServerGCWTotalPercentList().get(i).getPercent()); + object.getOtherServerGCWZonePercentList().set(i, object.getOtherServerGCWZonePercentList().get(i)); + } + */ } - }, 2, 2, TimeUnit.DAYS); + //}, 15, 15, TimeUnit.MINUTES); + }, 2, 5, TimeUnit.MINUTES); + + // Reset weak GCW Zones every 2 days as in live + scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + /* + resetWeakGCWZones(); + */ + } + + //}, 2, 2, TimeUnit.DAYS); + }, 2, 5, TimeUnit.MINUTES); } private void addGCWPointsToZonesWithFactionalPresence(Client client) { @@ -112,7 +121,23 @@ public class GCWService implements INetworkDispatch { } private void resetWeakGCWZones() { + for (int i = 0; i < object.getCurrentServerGCWZonePercentList().size(); i++) { + CurrentServerGCWZonePercent zone = object.getCurrentServerGCWZonePercentList().get(i); + + if (zone.getGCWPoints() == 0 && zone.getPercent() != 50) { + zone.setPercent(50, object.getCurrentServerGCWZoneHistoryList()); + object.getCurrentServerGCWZonePercentList().set(i, zone); + } + } + for (int i = 0; i < object.getCurrentServerGCWTotalPercentList().size(); i++) { + CurrentServerGCWZonePercent zone = object.getCurrentServerGCWTotalPercentList().get(i); + + if (zone.getGCWPoints() == 0 && zone.getPercent() != 50) { + zone.setPercent(50, object.getCurrentServerGCWTotalHistoryList()); + object.getCurrentServerGCWTotalPercentList().set(i, zone); + } + } } @Override diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 6c3d4f83..79ac9bee 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -155,7 +155,7 @@ public class ObjectService implements INetworkDispatch { } else if(Template.startsWith("object/guild")) { - object = new GuildObject(objectID, planet, position, orientation, Template); + object = new GuildObject(core, objectID, planet, position, orientation, Template); } else { From ff7af01658e6bba4abf40ee19ce0fcb68f8b57a4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Wed, 24 Jul 2013 01:51:26 +0100 Subject: [PATCH 08/13] Added some guild functions --- src/resources/objects/Guild.java | 63 ++++++++++++++++++++++++---- src/services/guild/GuildService.java | 13 +++--- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/resources/objects/Guild.java b/src/resources/objects/Guild.java index 0729983e..6f841817 100644 --- a/src/resources/objects/Guild.java +++ b/src/resources/objects/Guild.java @@ -21,44 +21,89 @@ ******************************************************************************/ package resources.objects; -public class Guild { +import java.nio.ByteOrder; +import java.util.List; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.SWGObject; + +public class Guild extends ListObject { private int id; private String abbreviation; private String name; + private SWGObject leader; + private List members; - public Guild(int id, String abbreviation, String name) { + public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; this.abbreviation = abbreviation; this.name = name; + this.leader = leader; + this.members.add(leader); } public int getId() { - return id; + synchronized(objectMutex) { + return id; + } } public void setId(int id) { - this.id = id; + synchronized(objectMutex) { + this.id = id; + } } public String getAbbreviation() { - return abbreviation; + synchronized(objectMutex) { + return abbreviation; + } } public void setAbbreviation(String abbreviation) { - this.abbreviation = abbreviation; + synchronized(objectMutex) { + this.abbreviation = abbreviation; + } } public String getName() { - return name; + synchronized(objectMutex) { + return name; + } } public void setName(String name) { - this.name = name; + synchronized(objectMutex) { + this.name = name; + } } public String getString() { - return (Integer.toString(id) + ":" + abbreviation); + synchronized(objectMutex) { + return (Integer.toString(id) + ":" + abbreviation); + } + } + + public SWGObject getLeader() { + return leader; + } + + public void setLeader(SWGObject leader) { + this.leader = leader; + } + + public List getMembers() { + return members; + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = bufferPool.allocate((getString().length() + 2), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(getString())); + return buffer.array(); + } } } diff --git a/src/services/guild/GuildService.java b/src/services/guild/GuildService.java index 39d7dbf6..7666a6eb 100644 --- a/src/services/guild/GuildService.java +++ b/src/services/guild/GuildService.java @@ -21,7 +21,6 @@ ******************************************************************************/ package services.guild; -import java.util.List; import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; @@ -29,11 +28,13 @@ import org.apache.mina.core.session.IoSession; import resources.common.Opcodes; import resources.objects.Guild; +import resources.objects.SWGList; import resources.objects.guild.GuildObject; import main.NGECore; import engine.clients.Client; +import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -48,24 +49,20 @@ public class GuildService implements INetworkDispatch { object = (GuildObject) this.core.objectService.createObject("object/guild/shared_guild_object.iff", core.terrainService.getPlanetList().get(0)); } - public Guild createGuild(String abbreviation, String name) { + public Guild createGuild(String abbreviation, String name, SWGObject leader) { int id = ((object.getGuildList().get(object.getGuildList().size()).getId()) + 1); - Guild guild = new Guild(id, abbreviation, name); + Guild guild = new Guild(id, abbreviation, name, leader); object.getGuildList().add(guild); return guild; } - public void addGuild(Guild guild) { - object.getGuildList().add(guild); - } - public GuildObject getGuildObject() { return object; } - public List getGuildList() { + public SWGList getGuildList() { return object.getGuildList(); } From e7b01a437716634d5fca9da533dd8eb2bfc93ecb Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 25 Jul 2013 20:20:28 -0400 Subject: [PATCH 09/13] Trade Service added --- src/main/NGECore.java | 7 +- .../AbortTradeMessage.java | 25 ++ .../AcceptTransactionMessage.java | 25 ++ .../AddItemMessage.java | 54 ++++ .../BeginTradeMessage.java | 33 +++ .../BeginVerificationMessage.java | 22 ++ .../DenyTradeMessage.java | 24 ++ .../GiveMoneyMessage.java | 39 +++ .../RemoveItemMessage.java | 39 +++ .../TradeCompleteMessage.java | 24 ++ .../UnAcceptTransactionMessage.java | 24 ++ .../VerifyTradeMessage.java | 24 ++ .../objectControllerObjects/SecureTrade.java | 63 ++++ .../common/ObjControllerOpcodes.java | 1 + src/resources/common/Opcodes.java | 10 +- .../objects/group/GroupMessageBuilder.java | 26 -- .../objects/player/PlayerMessageBuilder.java | 12 - src/services/LoginService.java | 6 + src/services/trade/TradeService.java | 279 ++++++++++++++++++ 19 files changed, 697 insertions(+), 40 deletions(-) create mode 100644 src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/AddItemMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java create mode 100644 src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java create mode 100644 src/protocol/swg/objectControllerObjects/SecureTrade.java delete mode 100644 src/resources/objects/group/GroupMessageBuilder.java create mode 100644 src/services/trade/TradeService.java diff --git a/src/main/NGECore.java b/src/main/NGECore.java index f8cae0d5..34602e3f 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -45,6 +45,7 @@ import services.map.MapService; import services.object.ObjectService; import services.object.UpdateService; import services.sui.SUIService; +import services.trade.TradeService; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; @@ -99,6 +100,7 @@ public class NGECore { public SUIService suiService; public GuildService guildService; public GCWService gcwService; + public TradeService tradeService; // Login Server public NetworkDispatch loginDispatch; @@ -178,7 +180,7 @@ public class NGECore { terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true); terrainService.loadSnapShotObjects(); - + // Zone services that need to be loaded after the above simulationService = new SimulationService(this); zoneDispatch.addService(simulationService); @@ -189,6 +191,9 @@ public class NGECore { gcwService = new GCWService(this); zoneDispatch.addService(gcwService); + tradeService = new TradeService(this); + zoneDispatch.addService(tradeService); + didServerCrash = false; System.out.println("Started Server."); } diff --git a/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java new file mode 100644 index 00000000..fda11b4a --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java @@ -0,0 +1,25 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class AbortTradeMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0x9CA80F98); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java b/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java new file mode 100644 index 00000000..2a50786a --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java @@ -0,0 +1,25 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class AcceptTransactionMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0xB131CA17); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java b/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java new file mode 100644 index 00000000..5013afcf --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java @@ -0,0 +1,54 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.SWGObject; +import protocol.swg.SWGMessage; + +public class AddItemMessage extends SWGMessage { + + private NGECore core; + private SWGObject tradeObject; + private long tradeObjectID; + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + setTradeObjectID(data.getLong()); + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(200).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putShort((short) 2); + result.putInt(0x1E8D1356); + result.putLong(tradeObjectID); + return result.flip(); + } + + public long getTradeObjectID() { + return this.tradeObjectID; + + } + + public SWGObject getTradeObject() { + return this.tradeObject; + } + + public void setTradeObject(SWGObject object) { + this.tradeObject = object; + this.tradeObjectID = object.getObjectID(); + } + + public void setTradeObjectID(long objectID) { + this.tradeObjectID = objectID; + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java new file mode 100644 index 00000000..b5481cd9 --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java @@ -0,0 +1,33 @@ +package protocol.swg.clientSecureTradeManager; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class BeginTradeMessage extends SWGMessage { + + private long objectId; + + public BeginTradeMessage(long objectId) { + this.objectId = objectId; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 2); + result.putInt(0x325932D8); + result.putLong(objectId); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java b/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java new file mode 100644 index 00000000..3ea0b7e0 --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java @@ -0,0 +1,22 @@ +package protocol.swg.clientSecureTradeManager; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class BeginVerificationMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20); + result.putShort((short) 1); + result.putInt(0xE7491DF5); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java new file mode 100644 index 00000000..7a8b97a7 --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java @@ -0,0 +1,24 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class DenyTradeMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0x6EC28670); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java b/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java new file mode 100644 index 00000000..0cbbe5e8 --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java @@ -0,0 +1,39 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class GiveMoneyMessage extends SWGMessage { + + private int credits; + + @Override + public void deserialize(IoBuffer data) { + + data.getShort(); + data.getInt(); + + setTradingCredits(data.getInt()); + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(40).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 2); + result.putInt(0xD1527EE8); + result.putInt(credits); + return result.flip(); + } + + public int getTradingCredits() { + return this.credits; + } + + public void setTradingCredits(int credits) { + this.credits = credits; + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java b/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java new file mode 100644 index 00000000..ef5873f8 --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java @@ -0,0 +1,39 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.SWGObject; +import protocol.swg.SWGMessage; + +public class RemoveItemMessage extends SWGMessage { + + private long objectID; + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + + setObjectID(data.getLong()); + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0x4417AF8B); + result.putLong(objectID); + return result.flip(); + } + + public void setObjectID(long objectID) { + this.objectID = objectID; + } + + public long getObjectID() { + return this.objectID; + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java b/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java new file mode 100644 index 00000000..b557ba8c --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java @@ -0,0 +1,24 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class TradeCompleteMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0xC542038B); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java b/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java new file mode 100644 index 00000000..246888dd --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java @@ -0,0 +1,24 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class UnAcceptTransactionMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0xE81E4382); + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java new file mode 100644 index 00000000..7e10fdbc --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java @@ -0,0 +1,24 @@ +package protocol.swg.clientSecureTradeManager; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class VerifyTradeMessage extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 1); + result.putInt(0x9AE247EE); + return result.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/SecureTrade.java b/src/protocol/swg/objectControllerObjects/SecureTrade.java new file mode 100644 index 00000000..ddc089b7 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/SecureTrade.java @@ -0,0 +1,63 @@ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.SWGObject; +import protocol.swg.ObjControllerMessage; +import resources.objects.creature.CreatureObject; + +public class SecureTrade extends ObjControllerObject{ + + private long senderID; + private long recieverID; + private short unknown; + + public SecureTrade() { + } + + @Override + public void deserialize(IoBuffer data) { + + //setUnknown(data.getShort()); + System.out.println("SecureTrade deserialize Dump: " + data.getHexDump()); + setSenderID(data.getLong()); // FINE AT SPOT GOT RIGHT SENDER ID. DUMPING DUMPS IT HERE. + data.getLong(); // skip through 0's + data.getLong(); // skip through 0's + setRecieverID(data.getLong()); + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.SPACIAL_CHAT); + result.putInt(1); + result.putLong(senderID); + result.putLong(0); + result.putLong(0); + result.putLong(recieverID); + + return result.flip(); + } + + public long getSenderID() { return this.senderID; } + public long getRecieverID() { return this.recieverID; } + public short getUnkn() { return this.unknown; } + + public void setUnknown(short unknown) { + this.unknown = unknown; + } + public void setSenderID(long senderID) { + this.senderID = senderID; + } + + public void setRecieverID(long recieverID) { + this.recieverID = recieverID; + } + + +} diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 00d21831..21b58e82 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -28,5 +28,6 @@ public class ObjControllerOpcodes { public static final int COMMAND_QUEUE_ENQUEUE = 0x16010000; public static final int TARGET_UPDATE = 0x26010000; public static final int OBJECT_MENU_REQUEST = 0x46010000; + public static final int SECURE_TRADE = 0x15010000; } diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index 1991054c..785e784d 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -44,5 +44,13 @@ public class Opcodes { public static int SelectCharacter = 0xB5098D76; public static int SuiEventNotification = 0x092D3564; public static int DeltasMessage = 0x12862153; - + public static int ChatAddFriend = 0x6FE7BD90; + public static int AbortTradeMessage = 0x9CA80F98; + public static int TradeCompleteMessage = 0xC542038B; + public static int AddItemMessage = 0x1E8D1356; + public static int RemoveItemMessage = 0x4417AF8B; + public static int GiveMoneyMessage = 0xD1527EE8; + public static int AcceptTransactionMessage = 0xB131CA17; + public static int UnAcceptTransactionMessage = 0xE81E4382; + public static int VerifyTradeMessage = 0x9AE247EE; } diff --git a/src/resources/objects/group/GroupMessageBuilder.java b/src/resources/objects/group/GroupMessageBuilder.java deleted file mode 100644 index e23f3ee6..00000000 --- a/src/resources/objects/group/GroupMessageBuilder.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.objects.group; - -public class GroupMessageBuilder { - -} diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index 0f49ec38..a7041609 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -400,18 +400,6 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { } } - - public IoBuffer buildTitleDelta(String title) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(title)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - - } @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 9f634be6..92a3d42c 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -136,6 +136,12 @@ public class LoginService implements INetworkDispatch{ StationIdHasJediSlot jediSlot = new StationIdHasJediSlot(false); ServerNowEpochTime time = new ServerNowEpochTime((int) (System.currentTimeMillis() / 1000)); + if (client.getSession().containsAttribute("tradeSession") == true) { + System.out.println("Has attribute: " + session.getAttribute("tradeSession").toString()); + client.getSession().removeAttribute("tradeSession"); + System.out.println("Removed tradeSession Attribute @ LoginService.java"); + } + session.write(time.serialize()); session.write(clientToken.serialize()); session.write(servers.serialize()); diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java new file mode 100644 index 00000000..8ba2e9a3 --- /dev/null +++ b/src/services/trade/TradeService.java @@ -0,0 +1,279 @@ +package services.trade; + +import java.nio.ByteOrder; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ObjControllerMessage; +import protocol.swg.clientSecureTradeManager.AbortTradeMessage; +import protocol.swg.clientSecureTradeManager.AcceptTransactionMessage; +import protocol.swg.clientSecureTradeManager.AddItemMessage; +import protocol.swg.clientSecureTradeManager.BeginTradeMessage; +import protocol.swg.clientSecureTradeManager.GiveMoneyMessage; +import protocol.swg.clientSecureTradeManager.RemoveItemMessage; +import protocol.swg.clientSecureTradeManager.TradeCompleteMessage; +import protocol.swg.clientSecureTradeManager.UnAcceptTransactionMessage; +import protocol.swg.objectControllerObjects.SecureTrade; +import resources.common.ObjControllerOpcodes; +import resources.common.Opcodes; +import resources.objects.creature.CreatureObject; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class TradeService implements INetworkDispatch{ + + private NGECore core; + + private long recieverID; + private long senderID; + + public TradeService(NGECore core) { + this.core = core; + } + + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + objControllerOpcodes.put(ObjControllerOpcodes.SECURE_TRADE, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + + SecureTrade request = new SecureTrade(); + request.deserialize(data); + + senderID = request.getSenderID(); + recieverID = request.getRecieverID(); + + CreatureObject recieverObject = (CreatureObject) core.objectService.getObject(recieverID); + CreatureObject senderObject = (CreatureObject) core.objectService.getObject(senderID); + + Client senderClient = senderObject.getClient(); + Client recieverClient = recieverObject.getClient(); + + int senderClientId = senderClient.getConnectionId(); + int recieverClientId = recieverClient.getConnectionId(); + + //System.out.println("Sender isConnected: " + senderObject.getClient().getSession().isConnected()); + //System.out.println("Reciever isConnected: " + recieverObject.getClient().getSession().isConnected()); + + if (recieverClient.getSession().containsAttribute("tradeSession") == true) { + + if(senderClient.getSession().containsAttribute("tradeSession") == false) { + { + senderClient.getSession().setAttribute("tradeSession", recieverID); + } + + BeginTradeMessage senderResponse = new BeginTradeMessage(recieverID); + senderClient.getSession().write(senderResponse.serialize()); + + BeginTradeMessage recieverResponse = new BeginTradeMessage(senderID); + recieverClient.getSession().write(recieverResponse.serialize()); + + } + + } + else { + + // creates a new trade session for the user who sent the request. It's given the objectID + // that the player wants to trade with. + senderClient.getSession().setAttribute("tradeSession", recieverID); + //System.out.println("Added trade session to " + senderClient.getParent().getCustomName() + " with the key of: " + senderClient.getSession().getAttribute("tradeSession").toString()); + + recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0); + + } + } + + }); + + swgOpcodes.put(Opcodes.AbortTradeMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradee = (CreatureObject) core.objectService.getObject(tradingWithClient); + Client tradeeClient = tradee.getClient(); + + + if(client == null || client.getSession() == null) + return; + + SWGObject object = client.getParent(); + SWGObject tradeeObject = tradeeClient.getParent(); + if(object == null) + return; + + TradeCompleteMessage completeTrade = new TradeCompleteMessage(); + AbortTradeMessage response = new AbortTradeMessage(); + + tradeeClient.getSession().write(response.serialize()); + client.getSession().write(response.serialize()); + + client.getSession().removeAttribute("tradeSession"); + tradeeClient.getSession().removeAttribute("tradeSession"); + + if (tradeeClient.getSession().containsAttribute("tradeSession") && client.getSession().containsAttribute("tradeSession")) + return; + + client.getSession().write(completeTrade.serialize()); + tradeeClient.getSession().write(completeTrade.serialize()); + + } + + + }); + + swgOpcodes.put(Opcodes.AddItemMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + AddItemMessage addItem = new AddItemMessage(); + addItem.deserialize(data); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + + long tradeItemID = addItem.getTradeObjectID(); + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradee = (CreatureObject) core.objectService.getObject(tradingWithClient); + SWGObject objectToTrade = (SWGObject) core.objectService.getObject(tradeItemID); + + if (objectToTrade == null) { + System.out.println("objectToTrade is null: " + tradeItemID); + return; + } + + System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); + + AddItemMessage tradeeResponse = new AddItemMessage(); + tradeeResponse.setTradeObjectID(tradeItemID); + tradee.getClient().getSession().write(tradeeResponse.serialize()); + + //System.out.println("AddItemMessage in TradeService: " + data.getHexDump()); + + } + + }); + + swgOpcodes.put(Opcodes.GiveMoneyMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradingPartner = (CreatureObject) core.objectService.getObject(tradingWithClient); + CreatureObject sender = (CreatureObject) client.getParent(); + + GiveMoneyMessage fromClient = new GiveMoneyMessage(); + fromClient.deserialize(data); + + int givingCredits = fromClient.getTradingCredits(); + + if (givingCredits <= sender.getCashCredits()) { + + GiveMoneyMessage toTradingPartner = new GiveMoneyMessage(); + toTradingPartner.setTradingCredits(givingCredits); + + tradingPartner.getClient().getSession().write(toTradingPartner.serialize()); + } + + } + + }); + + swgOpcodes.put(Opcodes.RemoveItemMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.position(0); + + RemoveItemMessage request = new RemoveItemMessage(); + + long tradingObjectID = request.getObjectID(); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); + + RemoveItemMessage response = new RemoveItemMessage(); + response.setObjectID(tradingObjectID); + tradePartner.getClient().getSession().write(response.serialize()); + + } + + }); + + swgOpcodes.put(Opcodes.AcceptTransactionMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + // client sends this packet to the server and then the server sends it to client. + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); + + AcceptTransactionMessage acceptedTrade = new AcceptTransactionMessage(); + tradePartner.getClient().getSession().write(acceptedTrade.serialize()); + + } + + }); + + swgOpcodes.put(Opcodes.UnAcceptTransactionMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); + + CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); + + UnAcceptTransactionMessage undoAccept = new UnAcceptTransactionMessage(); + tradePartner.getClient().getSession().write(undoAccept.serialize()); + } + + }); + + // TODO: Add verification system and item lists + + } + + + @Override + public void shutdown() { + // XXX Auto-generated method stub + + } + +} From 853948b97187f987eae3538eebb561497d7bcfe2 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 26 Jul 2013 14:10:15 -0400 Subject: [PATCH 10/13] Finished up TradeService, moved trading opcodes --- nge.cfg | 2 +- .../TradeOpcodes.java | 15 ++ .../objectControllerObjects/SecureTrade.java | 4 +- src/resources/common/Opcodes.java | 9 +- src/services/trade/TradeService.java | 238 ++++++++++++++++-- 5 files changed, 229 insertions(+), 39 deletions(-) create mode 100644 src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java diff --git a/nge.cfg b/nge.cfg index 7c755fa7..9d193de7 100644 --- a/nge.cfg +++ b/nge.cfg @@ -8,6 +8,6 @@ PING.PORT=44462 DB.NAME=nge DB.USER=postgres DB.URL=localhost -DB.PASS= +DB.PASS=nge GALAXY_ID=2 GALAXY_NAME=Local Connection \ No newline at end of file diff --git a/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java b/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java new file mode 100644 index 00000000..dfea8dcd --- /dev/null +++ b/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java @@ -0,0 +1,15 @@ +package protocol.swg.clientSecureTradeManager; + +public class TradeOpcodes { + + public static int AbortTradeMessage = 0x9CA80F98; + public static int TradeCompleteMessage = 0xC542038B; + public static int AddItemMessage = 0x1E8D1356; + public static int RemoveItemMessage = 0x4417AF8B; + public static int GiveMoneyMessage = 0xD1527EE8; + public static int AcceptTransactionMessage = 0xB131CA17; + public static int UnAcceptTransactionMessage = 0xE81E4382; + public static int VerifyTradeMessage = 0x9AE247EE; + public static int AddItemFailedMessage = 0x69D3E1D2; + public static int BeginVerificationMessage = 0xE7491DF5; +} diff --git a/src/protocol/swg/objectControllerObjects/SecureTrade.java b/src/protocol/swg/objectControllerObjects/SecureTrade.java index ddc089b7..f07f1709 100644 --- a/src/protocol/swg/objectControllerObjects/SecureTrade.java +++ b/src/protocol/swg/objectControllerObjects/SecureTrade.java @@ -20,9 +20,7 @@ public class SecureTrade extends ObjControllerObject{ @Override public void deserialize(IoBuffer data) { - //setUnknown(data.getShort()); - System.out.println("SecureTrade deserialize Dump: " + data.getHexDump()); - setSenderID(data.getLong()); // FINE AT SPOT GOT RIGHT SENDER ID. DUMPING DUMPS IT HERE. + setSenderID(data.getLong()); data.getLong(); // skip through 0's data.getLong(); // skip through 0's setRecieverID(data.getLong()); diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index 785e784d..9501563f 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -45,12 +45,5 @@ public class Opcodes { public static int SuiEventNotification = 0x092D3564; public static int DeltasMessage = 0x12862153; public static int ChatAddFriend = 0x6FE7BD90; - public static int AbortTradeMessage = 0x9CA80F98; - public static int TradeCompleteMessage = 0xC542038B; - public static int AddItemMessage = 0x1E8D1356; - public static int RemoveItemMessage = 0x4417AF8B; - public static int GiveMoneyMessage = 0xD1527EE8; - public static int AcceptTransactionMessage = 0xB131CA17; - public static int UnAcceptTransactionMessage = 0xE81E4382; - public static int VerifyTradeMessage = 0x9AE247EE; + } diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 8ba2e9a3..6757d951 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -1,6 +1,8 @@ package services.trade; import java.nio.ByteOrder; +import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -14,13 +16,15 @@ import protocol.swg.clientSecureTradeManager.AbortTradeMessage; import protocol.swg.clientSecureTradeManager.AcceptTransactionMessage; import protocol.swg.clientSecureTradeManager.AddItemMessage; import protocol.swg.clientSecureTradeManager.BeginTradeMessage; +import protocol.swg.clientSecureTradeManager.BeginVerificationMessage; +import protocol.swg.clientSecureTradeManager.DenyTradeMessage; import protocol.swg.clientSecureTradeManager.GiveMoneyMessage; import protocol.swg.clientSecureTradeManager.RemoveItemMessage; import protocol.swg.clientSecureTradeManager.TradeCompleteMessage; +import protocol.swg.clientSecureTradeManager.TradeOpcodes; import protocol.swg.clientSecureTradeManager.UnAcceptTransactionMessage; import protocol.swg.objectControllerObjects.SecureTrade; import resources.common.ObjControllerOpcodes; -import resources.common.Opcodes; import resources.objects.creature.CreatureObject; import engine.clients.Client; import engine.resources.objects.SWGObject; @@ -34,6 +38,14 @@ public class TradeService implements INetworkDispatch{ private long recieverID; private long senderID; + + private Hashtable tradingObjectsTable = new Hashtable(); + // key = objectToGive, value = giver's ID + + // need to be sure that no giver ID exists in table before adding value + private Hashtable tradingCreditsTable = new Hashtable(); + // key = ID of giver value = amnt recieving + public TradeService(NGECore core) { this.core = core; } @@ -67,7 +79,7 @@ public class TradeService implements INetworkDispatch{ //System.out.println("Reciever isConnected: " + recieverObject.getClient().getSession().isConnected()); if (recieverClient.getSession().containsAttribute("tradeSession") == true) { - + if(senderClient.getSession().containsAttribute("tradeSession") == false) { { senderClient.getSession().setAttribute("tradeSession", recieverID); @@ -87,7 +99,6 @@ public class TradeService implements INetworkDispatch{ // creates a new trade session for the user who sent the request. It's given the objectID // that the player wants to trade with. senderClient.getSession().setAttribute("tradeSession", recieverID); - //System.out.println("Added trade session to " + senderClient.getParent().getCustomName() + " with the key of: " + senderClient.getSession().getAttribute("tradeSession").toString()); recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0); @@ -96,7 +107,7 @@ public class TradeService implements INetworkDispatch{ }); - swgOpcodes.put(Opcodes.AbortTradeMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.AbortTradeMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -105,13 +116,24 @@ public class TradeService implements INetworkDispatch{ Client client = core.getClient((Integer) session.getAttribute("connectionId")); + if (client == null) + return; + + if (client.getSession().getAttribute("tradeSession") == null) + { + TradeCompleteMessage completeTrade = new TradeCompleteMessage(); + AbortTradeMessage nullResponse = new AbortTradeMessage(); + client.getSession().write(completeTrade.serialize()); + client.getSession().write(nullResponse.serialize()); + } + long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); CreatureObject tradee = (CreatureObject) core.objectService.getObject(tradingWithClient); Client tradeeClient = tradee.getClient(); - if(client == null || client.getSession() == null) + if(client.getSession() == null) return; SWGObject object = client.getParent(); @@ -119,18 +141,32 @@ public class TradeService implements INetworkDispatch{ if(object == null) return; + SWGObject tradeObject = null; + + Iterator> itr = tradingObjectsTable.entrySet().iterator(); + + while (itr.hasNext()) { + Map.Entry entry = itr.next(); + + if(tradingWithClient == entry.getValue()) { + tradeObject = entry.getKey(); + itr.remove(); + } + } + + client.getSession().removeAttribute("tradeSession"); + tradeeClient.getSession().removeAttribute("tradeSession"); + + // make sure that tradeSession got removed. + if (tradeeClient.getSession().containsAttribute("tradeSession") && client.getSession().containsAttribute("tradeSession")) + return; + TradeCompleteMessage completeTrade = new TradeCompleteMessage(); AbortTradeMessage response = new AbortTradeMessage(); tradeeClient.getSession().write(response.serialize()); client.getSession().write(response.serialize()); - client.getSession().removeAttribute("tradeSession"); - tradeeClient.getSession().removeAttribute("tradeSession"); - - if (tradeeClient.getSession().containsAttribute("tradeSession") && client.getSession().containsAttribute("tradeSession")) - return; - client.getSession().write(completeTrade.serialize()); tradeeClient.getSession().write(completeTrade.serialize()); @@ -139,7 +175,7 @@ public class TradeService implements INetworkDispatch{ }); - swgOpcodes.put(Opcodes.AddItemMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.AddItemMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -151,6 +187,9 @@ public class TradeService implements INetworkDispatch{ Client client = core.getClient((Integer) session.getAttribute("connectionId")); + if (client == null) + return; + long tradeItemID = addItem.getTradeObjectID(); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); @@ -162,19 +201,23 @@ public class TradeService implements INetworkDispatch{ return; } - System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); - - AddItemMessage tradeeResponse = new AddItemMessage(); - tradeeResponse.setTradeObjectID(tradeItemID); - tradee.getClient().getSession().write(tradeeResponse.serialize()); - - //System.out.println("AddItemMessage in TradeService: " + data.getHexDump()); - + else { + + addItemForTrade(objectToTrade, tradingWithClient); + System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); + + System.out.println("tradingObjectTable: " + tradingObjectsTable.toString()); + AddItemMessage tradeeResponse = new AddItemMessage(); + tradeeResponse.setTradeObjectID(tradeItemID); + tradee.getClient().getSession().write(tradeeResponse.serialize()); + + //System.out.println("AddItemMessage in TradeService: " + data.getHexDump()); + } } }); - swgOpcodes.put(Opcodes.GiveMoneyMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.GiveMoneyMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -195,6 +238,8 @@ public class TradeService implements INetworkDispatch{ if (givingCredits <= sender.getCashCredits()) { + addMoneyForTrade(tradingWithClient, givingCredits); + GiveMoneyMessage toTradingPartner = new GiveMoneyMessage(); toTradingPartner.setTradingCredits(givingCredits); @@ -205,7 +250,7 @@ public class TradeService implements INetworkDispatch{ }); - swgOpcodes.put(Opcodes.RemoveItemMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.RemoveItemMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { @@ -215,7 +260,7 @@ public class TradeService implements INetworkDispatch{ RemoveItemMessage request = new RemoveItemMessage(); - long tradingObjectID = request.getObjectID(); + long objectToKeepID = request.getObjectID(); Client client = core.getClient((Integer) session.getAttribute("connectionId")); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); @@ -223,14 +268,15 @@ public class TradeService implements INetworkDispatch{ CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); RemoveItemMessage response = new RemoveItemMessage(); - response.setObjectID(tradingObjectID); + response.setObjectID(objectToKeepID); tradePartner.getClient().getSession().write(response.serialize()); + removeItemForTrade(core.objectService.getObject(objectToKeepID)); } }); - swgOpcodes.put(Opcodes.AcceptTransactionMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.AcceptTransactionMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { @@ -249,7 +295,7 @@ public class TradeService implements INetworkDispatch{ }); - swgOpcodes.put(Opcodes.UnAcceptTransactionMessage, new INetworkRemoteEvent() { + swgOpcodes.put(TradeOpcodes.UnAcceptTransactionMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { @@ -263,12 +309,150 @@ public class TradeService implements INetworkDispatch{ tradePartner.getClient().getSession().write(undoAccept.serialize()); } + }); + // not used, but just in case.... VerifyTradeMessage is sent instead when a user + // hits the Accept button. Can use this as an additional check if need to. + swgOpcodes.put(TradeOpcodes.BeginVerificationMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + System.out.println("Got BeginVerificationMessage"); + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + client.getSession().setAttribute("tradeSessionIsVerified"); + System.out.println("Verified client"); + + } + }); - // TODO: Add verification system and item lists + swgOpcodes.put(TradeOpcodes.VerifyTradeMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + // Sent first! + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + long tradingWithClient = (long) getTradeAttribute(client); + + CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); + CreatureObject actingTrader = (CreatureObject) client.getParent(); + CreatureObject tradePartnerContainer = (CreatureObject) tradePartner.getContainer(); + + SWGObject tradePartnerInventory = tradePartner.getSlottedObject("inventory"); + SWGObject actingTraderInventory = actingTrader.getSlottedObject("inventory"); + SWGObject tradeObject = null; + + //if (tradePartner == null || actingTrader == null) + //return; + + //BeginVerificationMessage verifyMessage = new BeginVerificationMessage(); + //client.getSession().write(verifyMessage.serialize()); + //client.getSession().setAttribute("tradeSessionIsVerified"); + //tradePartner.getClient().getSession().write(verifyMessage.serialize()); + //tradePartner.getClient().getSession().setAttribute("tradeSessionIsVerified"); + + client.getSession().setAttribute("tradeSessionIsVerified"); + + if (tradePartner.getClient().getSession().getAttribute("tradeSessionIsVerified") == null) + return; + + else if (tradePartner.getClient().getSession().containsAttribute("tradeSessionIsVerified")) + { + + Iterator> itr = tradingObjectsTable.entrySet().iterator(); + + while (itr.hasNext()) { + Map.Entry entry = itr.next(); + + if(tradingWithClient == entry.getValue()) { + tradeObject = entry.getKey(); + if (actingTrader == null || tradePartnerContainer == null || tradePartner == null) + { + cleanTradeSession(client, tradePartner.getClient()); + } + actingTraderInventory.transferTo(tradePartner, tradePartnerInventory, tradeObject); + itr.remove(); + } + + } + + int moneyToGive = 0; + + for(Map.Entry entry : tradingCreditsTable.entrySet()) { + if(tradingWithClient == entry.getKey()) { + moneyToGive = entry.getValue(); + tradingCreditsTable.remove(tradingWithClient); + } + } + + int tradePartnerCredits = tradePartner.getCashCredits(); + + if (moneyToGive != 0) { + actingTrader.setCashCredits(tradePartnerCredits - moneyToGive); + tradePartner.setCashCredits(tradePartnerCredits + moneyToGive); + } + + + System.out.println("Finished trading items/credits"); + + cleanTradeSession(client, tradePartner.getClient()); + + } + + } + + }); } + public long getTradeAttribute(Client client) { + long tradeSessionValue; + tradeSessionValue = (long) client.getSession().getAttribute("tradeSession"); + return tradeSessionValue; + } + + public Hashtable getTradingObjectMap() { + return tradingObjectsTable; + } + + public void addItemForTrade(SWGObject swgObject, long tradePartnerID) { + if (tradingObjectsTable.containsKey(swgObject)) { + removeItemForTrade(swgObject); + } + tradingObjectsTable.put(swgObject, tradePartnerID); + } + + public void removeItemForTrade(SWGObject swgObject) { + tradingObjectsTable.remove(swgObject); + } + + public void addMoneyForTrade(long tradePartnerID, int creditsAmount) { + if (tradingCreditsTable.containsKey(tradePartnerID)) + { + removeMoneyForTrade(tradePartnerID); + } + tradingCreditsTable.put(tradePartnerID, creditsAmount); + } + + public void removeMoneyForTrade(long tradePartnerID) { + tradingCreditsTable.remove(tradePartnerID); + } + + public void cleanTradeSession(Client actorClient, Client targetTradeClient) { + + TradeCompleteMessage partnerCompleteTrade = new TradeCompleteMessage(); + targetTradeClient.getSession().write(partnerCompleteTrade.serialize()); + + TradeCompleteMessage clientCompleteTrade = new TradeCompleteMessage(); + actorClient.getSession().write(clientCompleteTrade.serialize()); + + actorClient.getSession().removeAttribute("tradeSession"); + actorClient.getSession().removeAttribute("tradeSessionIsVerified"); + targetTradeClient.getSession().removeAttribute("tradeSession"); + targetTradeClient.getSession().removeAttribute("tradeSessionIsVerified"); + + } @Override public void shutdown() { From d7214773af9cc997c5a92ce43ec329378e4d1170 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sun, 28 Jul 2013 15:57:36 +0100 Subject: [PATCH 11/13] Fixed nge.cfg but not ignoring for some reason --- nge.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nge.cfg b/nge.cfg index 7c755fa7..78171239 100644 --- a/nge.cfg +++ b/nge.cfg @@ -10,4 +10,4 @@ DB.USER=postgres DB.URL=localhost DB.PASS= GALAXY_ID=2 -GALAXY_NAME=Local Connection \ No newline at end of file +GALAXY_NAME=Local Connection From 719024493e91e6bd5cbce39aaa6cb71fe09a2183 Mon Sep 17 00:00:00 2001 From: Treeku Date: Mon, 29 Jul 2013 01:02:55 +0100 Subject: [PATCH 12/13] GCW Zones now display on the Planet Map --- src/protocol/swg/GcwGroupsRsp.java | 73 +++++++++++++++++++ src/protocol/swg/GcwRegionsReq.java | 40 ++++++++++ src/protocol/swg/GcwRegionsRsp.java | 62 ++++++++++++++++ .../AbortTradeMessage.java | 21 ++++++ .../AcceptTransactionMessage.java | 21 ++++++ .../AddItemMessage.java | 23 ++++++ .../BeginTradeMessage.java | 23 +++++- .../BeginVerificationMessage.java | 21 ++++++ .../DenyTradeMessage.java | 21 ++++++ .../GiveMoneyMessage.java | 21 ++++++ .../RemoveItemMessage.java | 22 +++++- .../TradeCompleteMessage.java | 21 ++++++ .../TradeOpcodes.java | 21 ++++++ .../UnAcceptTransactionMessage.java | 21 ++++++ .../VerifyTradeMessage.java | 21 ++++++ .../objectControllerObjects/SecureTrade.java | 2 - src/resources/common/Opcodes.java | 7 +- src/resources/common/StringUtilities.java | 21 ++++++ src/resources/objects/ListObject.java | 21 ++++++ src/services/gcw/GCWService.java | 51 ++++++++++++- src/services/trade/TradeService.java | 6 +- 21 files changed, 526 insertions(+), 14 deletions(-) create mode 100644 src/protocol/swg/GcwGroupsRsp.java create mode 100644 src/protocol/swg/GcwRegionsReq.java create mode 100644 src/protocol/swg/GcwRegionsRsp.java diff --git a/src/protocol/swg/GcwGroupsRsp.java b/src/protocol/swg/GcwGroupsRsp.java new file mode 100644 index 00000000..1020f020 --- /dev/null +++ b/src/protocol/swg/GcwGroupsRsp.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.Opcodes; + +public class GcwGroupsRsp extends SWGMessage { + + + public GcwGroupsRsp() { + + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(9948).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 2); + result.putInt(Opcodes.GcwGroupsRsp); + result.put(new byte[] { + (byte) 0x0B, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x0C, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x0C, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x32, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x33, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x34, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x35, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x36, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x37, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x38, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x39, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, + (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x09, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x16, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x0D, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x23, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x0D, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x23, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x37, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x41, (byte) 0x3F, (byte) 0x05, + (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x19, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x19, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x08, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x47, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x0C, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xB0, (byte) 0xF5, (byte) 0xD7, (byte) 0x05, (byte) 0x0C, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xB0, (byte) 0xF5, (byte) 0xD7, (byte) 0x05, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x47, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x47, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x47, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0xB0, (byte) 0xF5, (byte) 0xD7, (byte) 0x05, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, + (byte) 0x5F, (byte) 0x35, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x46, (byte) 0x62, (byte) 0x56, (byte) 0x02, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xAF, (byte) 0xF5, (byte) 0xD7, (byte) 0x05, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xAF, (byte) 0xF5, (byte) 0xD7, (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x16, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x09, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x09, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x15, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x5F, (byte) 0x62, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x6C, (byte) 0x65, (byte) 0x66, (byte) 0x69, (byte) 0x65, (byte) 0x6C, (byte) 0x64, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, + (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x35, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x4E, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x4E, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x06, (byte) 0x00, (byte) 0x67, (byte) 0x61, (byte) 0x6C, (byte) 0x61, (byte) 0x78, (byte) 0x79, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0D, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0D, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x5F, (byte) 0x62, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x6C, (byte) 0x65, (byte) 0x66, (byte) 0x69, (byte) 0x65, (byte) 0x6C, (byte) 0x64, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, + (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x37, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x38, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x39, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, + (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x37, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, + (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, + (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x32, (byte) 0x93, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x33, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x34, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x35, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x36, (byte) 0x3B, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x38, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x39, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, + (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x36, (byte) 0xE9, (byte) 0x88, (byte) 0xD6, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x38, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x39, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x33, (byte) 0xE9, (byte) 0x88, (byte) 0xD6, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, + (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x38, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x39, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0xE9, (byte) 0x88, (byte) 0xD6, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x38, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x39, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0xE9, (byte) 0x88, (byte) 0xD6, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, + (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x38, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x32, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x33, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x34, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x35, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x36, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x37, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x38, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x39, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0D, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, + (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x19, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x19, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, + (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x09, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0C, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0F, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x0A, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x0A, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x92, (byte) 0x15, (byte) 0x86, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x5F, (byte) 0x62, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x6C, (byte) 0x65, (byte) 0x66, (byte) 0x69, (byte) 0x65, (byte) 0x6C, (byte) 0x64, (byte) 0x3A, (byte) 0xA2, (byte) 0x35, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x32, (byte) 0x53, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x33, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x34, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x35, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x36, (byte) 0xEE, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x37, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x38, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x39, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x0C, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x61, (byte) 0x69, + (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0xED, (byte) 0xF4, (byte) 0x20, (byte) 0x02, (byte) 0x07, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x07, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x13, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x13, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x52, (byte) 0x64, (byte) 0x52, (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x2A, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x2A, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x32, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x33, (byte) 0x11, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x34, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x35, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x36, (byte) 0x42, (byte) 0xE0, (byte) 0xB0, (byte) 0x07, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x37, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x38, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x39, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x0E, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x10, (byte) 0x38, (byte) 0xEC, (byte) 0x01, (byte) 0x09, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x29, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x09, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x29, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x15, + (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x29, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x29, (byte) 0x8C, (byte) 0xCE, (byte) 0x04, (byte) 0x04, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x23, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x42, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x32, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x33, (byte) 0x04, (byte) 0xFD, (byte) 0x14, (byte) 0x08, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x34, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x35, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x36, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x37, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x38, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x39, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x0D, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x41, (byte) 0x3F, (byte) 0x05, (byte) 0x02, (byte) 0x08, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x08, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x22, (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x15, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x22, + (byte) 0x1E, (byte) 0x0D, (byte) 0x05, (byte) 0x05, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x16, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0xC5, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x3C, (byte) 0x01, (byte) 0x56, (byte) 0x07, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x32, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x33, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x34, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x35, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x36, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x37, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x38, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x39, (byte) 0x4F, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, + (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x0E, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x4E, (byte) 0x80, (byte) 0xD5, (byte) 0x01, (byte) 0x09, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x09, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xC4, (byte) 0xC0, (byte) 0x95, (byte) 0x04, (byte) 0x08, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x56, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x56, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0xD6, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0xD6, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x56, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x56, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0x55, (byte) 0x81, (byte) 0xF2, (byte) 0x07, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xD5, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x18, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xD5, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x11, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, + (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x55, (byte) 0xA0, (byte) 0xFC, (byte) 0x01, (byte) 0x0C, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0xD5, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x0C, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0xD5, (byte) 0x90, (byte) 0xF7, (byte) 0x04, (byte) 0x06, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x37, (byte) 0x37, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x38, (byte) 0x08, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x32, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x33, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x34, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x35, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x36, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x37, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, + (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x38, (byte) 0x07, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x39, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x16, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x07, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x16, (byte) 0x00, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x07, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x0F, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x61, (byte) 0x69, (byte) 0x72, (byte) 0x73, (byte) 0x70, (byte) 0x61, (byte) 0x63, (byte) 0x65, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, (byte) 0x0A, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x65, (byte) 0x07, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x0A, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x07, (byte) 0xF8, (byte) 0x83, (byte) 0x04, (byte) 0x16, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x70, (byte) 0x76, (byte) 0x70, (byte) 0x5F, (byte) 0x62, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x6C, (byte) 0x65, (byte) 0x66, (byte) 0x69, (byte) 0x65, (byte) 0x6C, (byte) 0x64, (byte) 0x36, (byte) 0x63, (byte) 0xCE, (byte) 0x01, + }); + + return result.flip(); + } + +} diff --git a/src/protocol/swg/GcwRegionsReq.java b/src/protocol/swg/GcwRegionsReq.java new file mode 100644 index 00000000..0180762d --- /dev/null +++ b/src/protocol/swg/GcwRegionsReq.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +public class GcwRegionsReq extends SWGMessage { + + public GcwRegionsReq() { + + } + + public void deserialize(IoBuffer buffer) { + + } + + public IoBuffer serialize() { + return null; + } + +} diff --git a/src/protocol/swg/GcwRegionsRsp.java b/src/protocol/swg/GcwRegionsRsp.java new file mode 100644 index 00000000..ffcd676a --- /dev/null +++ b/src/protocol/swg/GcwRegionsRsp.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.Opcodes; + +public class GcwRegionsRsp extends SWGMessage { + + + public GcwRegionsRsp() { + + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(4473).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 2); + result.putInt(Opcodes.GcwRegionsRsp); + result.put(new byte[] { + (byte) 0x0A, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x0C, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0xC0, (byte) 0xB7, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xA2, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x0E, (byte) 0xC3, (byte) 0x00, (byte) 0x10, (byte) 0x8C, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0xA0, (byte) 0x50, (byte) 0x45, (byte) 0x00, (byte) 0x30, (byte) 0xA8, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0xD0, (byte) 0xCE, (byte) 0x45, (byte) 0x00, (byte) 0x10, (byte) 0xAF, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xAC, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x59, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x49, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0x81, (byte) 0xC4, (byte) 0x00, (byte) 0x60, (byte) 0xB2, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x00, (byte) 0x97, (byte) 0xC3, (byte) 0x00, (byte) 0x20, (byte) 0x08, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0xE0, (byte) 0x29, (byte) 0x45, (byte) 0x00, (byte) 0x70, (byte) 0x9D, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x00, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x0B, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0x00, (byte) 0xC7, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0x92, (byte) 0xC4, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x40, (byte) 0x29, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x88, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0x1C, (byte) 0x45, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x63, (byte) 0x6F, (byte) 0x72, (byte) 0x65, (byte) 0x6C, (byte) 0x6C, (byte) 0x69, (byte) 0x61, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x60, (byte) 0xAF, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0xCA, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x09, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x0F, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, + (byte) 0x31, (byte) 0x00, (byte) 0x40, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x8A, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x1C, (byte) 0x45, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0xA0, (byte) 0xC7, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x0C, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0xA0, (byte) 0xBA, (byte) 0xC5, (byte) 0x00, (byte) 0xE0, (byte) 0xAC, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0x40, (byte) 0x28, (byte) 0xC5, (byte) 0x00, (byte) 0xE0, (byte) 0xC0, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x00, (byte) 0x80, (byte) 0xC6, (byte) 0x44, (byte) 0x00, (byte) 0xC0, (byte) 0xCC, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xAF, (byte) 0x44, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x00, (byte) 0xB8, (byte) 0x8A, (byte) 0x45, (byte) 0x00, (byte) 0x68, (byte) 0x8B, (byte) 0xC5, (byte) 0x00, (byte) 0x60, (byte) 0xFB, (byte) 0x44, (byte) 0x17, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x00, (byte) 0xB8, (byte) 0xD5, (byte) 0x45, (byte) 0x00, (byte) 0x10, (byte) 0x07, (byte) 0xC5, (byte) 0x00, (byte) 0x20, (byte) 0x91, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x69, (byte) 0xC4, (byte) 0x00, (byte) 0x60, (byte) 0xB2, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x20, (byte) 0xCC, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x7C, (byte) 0xC3, (byte) 0x00, (byte) 0x80, (byte) 0xB7, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x80, (byte) 0x51, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x1D, (byte) 0x44, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x80, (byte) 0x02, (byte) 0xC4, (byte) 0x00, (byte) 0xE0, (byte) 0x0B, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0xA8, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0xE0, (byte) 0x33, (byte) 0x45, (byte) 0x00, (byte) 0xE0, (byte) 0x65, (byte) 0x45, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0x70, (byte) 0x8B, (byte) 0xC5, (byte) 0x00, (byte) 0x20, (byte) 0x1B, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x00, (byte) 0xE0, (byte) 0xC2, (byte) 0x00, (byte) 0xC0, (byte) 0x25, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x2F, (byte) 0x45, (byte) 0x16, (byte) 0x00, + (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x6E, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x60, (byte) 0x80, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xB0, (byte) 0xC3, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x08, (byte) 0x00, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x0B, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x6B, (byte) 0x44, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x50, (byte) 0x8B, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x6B, (byte) 0xC4, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x30, (byte) 0xD8, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x51, (byte) 0x44, (byte) 0x00, (byte) 0x40, (byte) 0x87, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x20, (byte) 0x75, (byte) 0xC5, (byte) 0x00, (byte) 0xA0, (byte) 0x28, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0xB3, (byte) 0xC4, (byte) 0x00, (byte) 0x60, (byte) 0x99, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0xC0, (byte) 0xF4, (byte) 0x44, (byte) 0x00, (byte) 0x70, (byte) 0x98, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x20, (byte) 0x75, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x5C, (byte) 0xC4, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x00, (byte) 0x6E, (byte) 0x43, (byte) 0x00, (byte) 0x80, (byte) 0x60, (byte) 0x44, (byte) 0x00, (byte) 0xE0, (byte) 0x2B, (byte) 0x45, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0xF0, (byte) 0x8B, (byte) 0x45, (byte) 0x00, (byte) 0x20, (byte) 0x26, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x00, (byte) 0xB3, (byte) 0xC4, (byte) 0x00, (byte) 0xE0, (byte) 0x41, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x64, (byte) 0x61, (byte) 0x74, (byte) 0x68, (byte) 0x6F, (byte) 0x6D, (byte) 0x69, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0xC0, (byte) 0xF4, (byte) 0x44, (byte) 0x00, (byte) 0xC0, (byte) 0x43, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x05, (byte) 0x00, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x0E, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0xE0, (byte) 0xDD, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0xDD, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x3B, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, + (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x30, (byte) 0xCB, (byte) 0xC5, (byte) 0x00, (byte) 0x30, (byte) 0xDA, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x3B, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x80, (byte) 0xF1, (byte) 0xC4, (byte) 0x00, (byte) 0xC0, (byte) 0xA9, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0xC0, (byte) 0xAE, (byte) 0x44, (byte) 0x00, (byte) 0x50, (byte) 0x97, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x00, (byte) 0x80, (byte) 0x52, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x5E, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x7A, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x00, (byte) 0xC0, (byte) 0xB6, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0xA7, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x60, (byte) 0x5D, (byte) 0xC5, (byte) 0x00, (byte) 0xA0, (byte) 0x4B, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x80, (byte) 0x5C, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0xC5, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0x7A, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x40, (byte) 0x84, (byte) 0x44, (byte) 0x00, (byte) 0x60, (byte) 0x36, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x60, (byte) 0x85, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x66, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x80, (byte) 0xE2, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0xAB, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0xC0, (byte) 0x81, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0x9F, (byte) 0x43, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x60, (byte) 0x85, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xB0, (byte) 0xC3, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x65, (byte) 0x6E, (byte) 0x64, (byte) 0x6F, (byte) 0x72, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0xC0, (byte) 0xB3, (byte) 0x44, (byte) 0x00, (byte) 0x20, (byte) 0x0C, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x03, (byte) 0x00, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x0C, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0x60, (byte) 0x95, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x5E, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0xA0, (byte) 0xA4, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, + (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x80, (byte) 0xC6, (byte) 0x44, (byte) 0x00, (byte) 0x20, (byte) 0xA9, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0x20, (byte) 0xA2, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0x57, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x95, (byte) 0xC4, (byte) 0x00, (byte) 0xA0, (byte) 0xA9, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0x97, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xEC, (byte) 0xC3, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x00, (byte) 0x9F, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0xB0, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x00, (byte) 0x0F, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x51, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0xE0, (byte) 0xB9, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x9C, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0xA0, (byte) 0xB0, (byte) 0xC5, (byte) 0x00, (byte) 0xE0, (byte) 0x93, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x80, (byte) 0xEC, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0x4B, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x10, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6C, (byte) 0x6F, (byte) 0x6B, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x00, (byte) 0xD8, (byte) 0x44, (byte) 0x00, (byte) 0x80, (byte) 0xAB, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x05, (byte) 0x00, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x0C, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0xE0, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0xE0, (byte) 0x88, (byte) 0x45, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0xC0, (byte) 0x8B, (byte) 0x44, (byte) 0x00, (byte) 0xE0, (byte) 0x50, (byte) 0xC5, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x20, (byte) 0x98, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xE7, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0xD4, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0xF0, (byte) 0x90, (byte) 0x45, (byte) 0x00, (byte) 0xF0, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x40, (byte) 0xD2, (byte) 0xC4, (byte) 0x00, (byte) 0xD0, (byte) 0xB0, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0xCE, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x40, + (byte) 0xF7, (byte) 0x44, (byte) 0x00, (byte) 0x70, (byte) 0xD2, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x9E, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x10, (byte) 0xA8, (byte) 0x45, (byte) 0x00, (byte) 0x70, (byte) 0xB1, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0xA0, (byte) 0x18, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x01, (byte) 0x44, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0xC0, (byte) 0xA9, (byte) 0x44, (byte) 0x00, (byte) 0xA0, (byte) 0x3C, (byte) 0x45, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0x70, (byte) 0xA7, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0xD9, (byte) 0x44, (byte) 0x00, (byte) 0x40, (byte) 0xE7, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x80, (byte) 0x94, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x54, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x6E, (byte) 0x61, (byte) 0x62, (byte) 0x6F, (byte) 0x6F, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x80, (byte) 0xF6, (byte) 0xC4, (byte) 0x00, (byte) 0x60, (byte) 0xAF, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x04, (byte) 0x00, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x0C, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0x60, (byte) 0x95, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x40, (byte) 0x91, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xE7, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x20, (byte) 0x95, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0xAC, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0x40, (byte) 0xA0, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xB5, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x28, (byte) 0x43, (byte) 0x00, (byte) 0x60, (byte) 0x8F, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0x41, (byte) 0x45, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0x9F, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xB5, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0xC0, (byte) 0x86, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x08, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x40, (byte) 0xBE, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0x46, (byte) 0x43, (byte) 0x00, (byte) 0x80, (byte) 0xA2, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x40, (byte) 0xAC, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0x0A, + (byte) 0x43, (byte) 0x00, (byte) 0x80, (byte) 0xA2, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0xE0, (byte) 0x8C, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFB, (byte) 0x44, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x20, (byte) 0x86, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xCE, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x11, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x72, (byte) 0x6F, (byte) 0x72, (byte) 0x69, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x00, (byte) 0x14, (byte) 0x43, (byte) 0x00, (byte) 0x00, (byte) 0x83, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x41, (byte) 0x45, (byte) 0x05, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x0F, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0x00, (byte) 0x4D, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0xAB, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0xFE, (byte) 0x43, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0xC0, (byte) 0x5D, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0x80, (byte) 0xC9, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xF9, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x00, (byte) 0xC0, (byte) 0x2F, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0x7D, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x00, (byte) 0x80, (byte) 0x0B, (byte) 0x44, (byte) 0x00, (byte) 0xA0, (byte) 0x3B, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0xE7, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x78, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0xEA, (byte) 0x43, (byte) 0x00, (byte) 0xC0, (byte) 0x89, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x80, (byte) 0x88, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xAB, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x80, (byte) 0x9E, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x8A, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x19, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x40, + (byte) 0x42, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x1B, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0xE0, (byte) 0xBE, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x9E, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0xC0, (byte) 0xA9, (byte) 0xC5, (byte) 0x00, (byte) 0x40, (byte) 0x05, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x12, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x6C, (byte) 0x75, (byte) 0x73, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0xC0, (byte) 0x16, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x4B, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0xC8, (byte) 0x44, (byte) 0x08, (byte) 0x00, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x0B, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0x40, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xA2, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x1C, (byte) 0x45, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0xD8, (byte) 0x42, (byte) 0x00, (byte) 0xA0, (byte) 0xA6, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x7A, (byte) 0x44, (byte) 0x16, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x40, (byte) 0x58, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x95, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0xDA, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x00, (byte) 0x39, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x09, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x9C, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0xB9, (byte) 0x44, (byte) 0x00, (byte) 0x80, (byte) 0x4A, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x96, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0x45, (byte) 0x00, (byte) 0x40, (byte) 0x17, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x96, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0xE0, (byte) 0x84, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x09, (byte) 0x45, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0xC3, (byte) 0x00, (byte) 0x00, (byte) 0xE0, (byte) 0x41, (byte) 0x00, (byte) 0x80, (byte) 0x09, (byte) 0x45, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0x60, (byte) 0x81, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0x6B, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0x03, (byte) 0x45, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0x40, (byte) 0xA2, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0xBA, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xD4, (byte) 0x44, (byte) 0x15, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x74, (byte) 0x61, (byte) 0x74, (byte) 0x6F, + (byte) 0x6F, (byte) 0x69, (byte) 0x6E, (byte) 0x65, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x00, (byte) 0x9A, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0x64, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x89, (byte) 0x44, (byte) 0x06, (byte) 0x00, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x00, (byte) 0xD0, (byte) 0xAD, (byte) 0xC5, (byte) 0x00, (byte) 0x50, (byte) 0xAE, (byte) 0x45, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x30, (byte) 0x00, (byte) 0xB0, (byte) 0x91, (byte) 0xC5, (byte) 0x00, (byte) 0x20, (byte) 0x7F, (byte) 0xC5, (byte) 0x00, (byte) 0x00, (byte) 0x2F, (byte) 0x45, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x31, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0xC4, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x32, (byte) 0x00, (byte) 0xC0, (byte) 0x44, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0x42, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0xC2, (byte) 0x45, (byte) 0x00, (byte) 0xA0, (byte) 0x92, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x34, (byte) 0x00, (byte) 0x60, (byte) 0x1C, (byte) 0xC5, (byte) 0x00, (byte) 0x70, (byte) 0xDB, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0x3B, (byte) 0x44, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x35, (byte) 0x00, (byte) 0x00, (byte) 0x0A, (byte) 0xC4, (byte) 0x00, (byte) 0x40, (byte) 0xAC, (byte) 0xC5, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x14, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x31, (byte) 0x36, (byte) 0x00, (byte) 0xE0, (byte) 0x79, (byte) 0x45, (byte) 0x00, (byte) 0x10, (byte) 0xC3, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x8F, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x32, (byte) 0x00, (byte) 0x20, (byte) 0x1B, (byte) 0xC5, (byte) 0x00, (byte) 0x20, (byte) 0x67, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xA2, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x33, (byte) 0x00, (byte) 0x00, (byte) 0x9C, (byte) 0xC3, (byte) 0x00, (byte) 0x60, (byte) 0x99, (byte) 0x45, (byte) 0x00, (byte) 0xC0, (byte) 0x8F, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x34, (byte) 0x00, (byte) 0xA0, (byte) 0x23, (byte) 0x45, (byte) 0x00, (byte) 0xE0, (byte) 0x29, (byte) 0x45, (byte) 0x00, (byte) 0x80, (byte) 0xD4, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x35, (byte) 0x00, (byte) 0x80, (byte) 0xA1, (byte) 0x45, (byte) 0x00, (byte) 0x60, (byte) 0xB2, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xFA, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x36, (byte) 0x00, (byte) 0xB0, (byte) 0xA0, (byte) 0xC5, (byte) 0x00, (byte) 0xC0, (byte) 0x81, (byte) 0x44, (byte) 0x00, (byte) 0xA0, (byte) 0x0C, (byte) 0x45, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x37, (byte) 0x00, (byte) 0x00, + (byte) 0xA9, (byte) 0xC4, (byte) 0x00, (byte) 0x80, (byte) 0x85, (byte) 0x44, (byte) 0x00, (byte) 0x80, (byte) 0xBB, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x38, (byte) 0x00, (byte) 0xC0, (byte) 0x95, (byte) 0x44, (byte) 0x00, (byte) 0x00, (byte) 0x1E, (byte) 0x43, (byte) 0x00, (byte) 0xC0, (byte) 0x8F, (byte) 0x44, (byte) 0x13, (byte) 0x00, (byte) 0x67, (byte) 0x63, (byte) 0x77, (byte) 0x5F, (byte) 0x72, (byte) 0x65, (byte) 0x67, (byte) 0x69, (byte) 0x6F, (byte) 0x6E, (byte) 0x5F, (byte) 0x79, (byte) 0x61, (byte) 0x76, (byte) 0x69, (byte) 0x6E, (byte) 0x34, (byte) 0x5F, (byte) 0x39, (byte) 0x00, (byte) 0x40, (byte) 0xAA, (byte) 0x45, (byte) 0x00, (byte) 0x00, (byte) 0xEA, (byte) 0x43, (byte) 0x00, (byte) 0x80, (byte) 0xED, (byte) 0x44 + }); + + return result.flip(); + } + +} diff --git a/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java index fda11b4a..b52e800b 100644 --- a/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/AbortTradeMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java b/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java index 2a50786a..7b014e67 100644 --- a/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/AcceptTransactionMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java b/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java index 5013afcf..5a6a216d 100644 --- a/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/AddItemMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; @@ -9,6 +30,8 @@ import org.apache.mina.core.buffer.IoBuffer; import engine.resources.objects.SWGObject; import protocol.swg.SWGMessage; +@SuppressWarnings("unused") + public class AddItemMessage extends SWGMessage { private NGECore core; diff --git a/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java index b5481cd9..7fc830f1 100644 --- a/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/BeginTradeMessage.java @@ -1,7 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; diff --git a/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java b/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java index 3ea0b7e0..055ce139 100644 --- a/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/BeginVerificationMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import org.apache.mina.core.buffer.IoBuffer; diff --git a/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java index 7a8b97a7..58279324 100644 --- a/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/DenyTradeMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java b/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java index 0cbbe5e8..ff82b465 100644 --- a/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/GiveMoneyMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java b/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java index ef5873f8..ae009ee9 100644 --- a/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/RemoveItemMessage.java @@ -1,10 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.objects.SWGObject; import protocol.swg.SWGMessage; public class RemoveItemMessage extends SWGMessage { diff --git a/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java b/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java index b557ba8c..74bc6eca 100644 --- a/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/TradeCompleteMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java b/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java index dfea8dcd..8d07cba7 100644 --- a/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java +++ b/src/protocol/swg/clientSecureTradeManager/TradeOpcodes.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; public class TradeOpcodes { diff --git a/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java b/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java index 246888dd..f717d448 100644 --- a/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/UnAcceptTransactionMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java b/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java index 7e10fdbc..6f073b1b 100644 --- a/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java +++ b/src/protocol/swg/clientSecureTradeManager/VerifyTradeMessage.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.clientSecureTradeManager; import java.nio.ByteOrder; diff --git a/src/protocol/swg/objectControllerObjects/SecureTrade.java b/src/protocol/swg/objectControllerObjects/SecureTrade.java index f07f1709..e621072f 100644 --- a/src/protocol/swg/objectControllerObjects/SecureTrade.java +++ b/src/protocol/swg/objectControllerObjects/SecureTrade.java @@ -4,9 +4,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.objects.SWGObject; import protocol.swg.ObjControllerMessage; -import resources.objects.creature.CreatureObject; public class SecureTrade extends ObjControllerObject{ diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index 9501563f..91adc25d 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -21,6 +21,8 @@ ******************************************************************************/ package resources.common; +import engine.resources.common.CRC; + public class Opcodes { public static int ChatDeletePersistentMessage = 0x8F251641; @@ -45,5 +47,8 @@ public class Opcodes { public static int SuiEventNotification = 0x092D3564; public static int DeltasMessage = 0x12862153; public static int ChatAddFriend = 0x6FE7BD90; - + public static int GcwRegionsReq = 0x7C8C8E0E; //CRC.StringtoCRC("GcwRegionsReq"); + public static int GcwRegionsRsp = 0x8DCAB70C; //CRC.StringtoCRC("GcwRegionsRsp"); + public static int GcwGroupsRsp = CRC.StringtoCRC("GcwGroupsRsp"); + } diff --git a/src/resources/common/StringUtilities.java b/src/resources/common/StringUtilities.java index a613f4df..7b12c96c 100644 --- a/src/resources/common/StringUtilities.java +++ b/src/resources/common/StringUtilities.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package resources.common; import java.io.UnsupportedEncodingException; diff --git a/src/resources/objects/ListObject.java b/src/resources/objects/ListObject.java index e643d075..69a4caf6 100644 --- a/src/resources/objects/ListObject.java +++ b/src/resources/objects/ListObject.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package resources.objects; import java.nio.ByteBuffer; diff --git a/src/services/gcw/GCWService.java b/src/services/gcw/GCWService.java index b1fd9b9c..b7193efa 100644 --- a/src/services/gcw/GCWService.java +++ b/src/services/gcw/GCWService.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.gcw; +import java.nio.ByteOrder; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -28,6 +29,16 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.GcwGroupsRsp; +import protocol.swg.GcwRegionsReq; +import protocol.swg.GcwRegionsRsp; +import protocol.swg.GetMapLocationsMessage; +import protocol.swg.GetMapLocationsResponseMessage; + +import resources.common.Opcodes; import resources.objects.CurrentServerGCWZoneHistory; import resources.objects.CurrentServerGCWZonePercent; import resources.objects.OtherServerGCWZonePercent; @@ -36,9 +47,12 @@ import resources.objects.guild.GuildObject; import main.NGECore; import engine.clients.Client; +import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +@SuppressWarnings("unused") + public class GCWService implements INetworkDispatch { private NGECore core; @@ -140,14 +154,43 @@ public class GCWService implements INetworkDispatch { } } - @Override - public void insertOpcodes(Map arg0, Map arg1) { + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + swgOpcodes.put(Opcodes.GcwRegionsReq, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + GcwRegionsReq gcwRegionsReq = new GcwRegionsReq(); + gcwRegionsReq.deserialize(data); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + + if (client == null || client.getSession() == null) { + return; + } + + SWGObject object = client.getParent(); + + if (object == null) { + return; + } + + session.write((new GcwRegionsRsp()).serialize()); + session.write((new GcwGroupsRsp()).serialize()); + + } + + }); } - + @Override public void shutdown() { } - + } diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 6757d951..c7a0b770 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -4,20 +4,16 @@ import java.nio.ByteOrder; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -import protocol.swg.ObjControllerMessage; import protocol.swg.clientSecureTradeManager.AbortTradeMessage; import protocol.swg.clientSecureTradeManager.AcceptTransactionMessage; import protocol.swg.clientSecureTradeManager.AddItemMessage; import protocol.swg.clientSecureTradeManager.BeginTradeMessage; -import protocol.swg.clientSecureTradeManager.BeginVerificationMessage; -import protocol.swg.clientSecureTradeManager.DenyTradeMessage; import protocol.swg.clientSecureTradeManager.GiveMoneyMessage; import protocol.swg.clientSecureTradeManager.RemoveItemMessage; import protocol.swg.clientSecureTradeManager.TradeCompleteMessage; @@ -31,6 +27,8 @@ import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +@SuppressWarnings("unused") + public class TradeService implements INetworkDispatch{ private NGECore core; From ed9f03eda17dc655b8412c6504ae8a6a2ac65201 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Mon, 29 Jul 2013 11:27:58 -0400 Subject: [PATCH 13/13] Added /tip command --- scripts/commands/tip.py | 132 ++++++++++++++++++++++++++++ src/services/SimulationService.java | 1 + 2 files changed, 133 insertions(+) create mode 100644 scripts/commands/tip.py diff --git a/scripts/commands/tip.py b/scripts/commands/tip.py new file mode 100644 index 00000000..b0b4331c --- /dev/null +++ b/scripts/commands/tip.py @@ -0,0 +1,132 @@ +from resources.objects.creature import CreatureObject +from java.util import Date +from engine.resources.objects import SWGObject +from services.chat import ChatService +from services.chat import Mail +from services.sui import SUIWindow +from services.sui import SUIService +from services.sui.SUIWindow import Trigger +from services.sui.SUIService import MessageBoxType +from java.util import Vector +import sys + +# initialize global vars (happens at compile time) +commandArgs = "" +commandLength = 0 +actorID = long(0) +targetID = long(0) +tipAmount = 0 +tipAmountBank = 0 +bankSurcharge = 0 + + +def setup(): + return + +def run(core, actor, target, commandString): + + # set the global variables + global actorID + global targetID + global commandArgs + global commandLength + global tipAmount + global tipAmountBank + global bankSurcharge + + actorID = actor.getObjectID() + targetID = target.getObjectID() + commandArgs = commandString.split(" ") + commandLength = len(commandArgs) + tipAmount = commandArgs[0] + tipAmountBank = commandArgs[0] + bankSurcharge = int(0.05) * int(tipAmountBank) + + + #/tip int || /tip target int + if commandLength == 1: + + tipAmount = commandArgs[0] + actorFunds = actor.getCashCredits() + currentTarget = core.objectService.getObject(target.getObjectId()) + + if (actor.inRange(target.getPosition(), 100)): # 100 = 10m + if int(tipAmount) > 0 and int(tipAmount) <= 1000000: + if actorFunds >= int(tipAmount): + currentTarget.setCashCredits(int(tipAmount)) + actor.setCashCredits(actorFunds - int(tipAmount)) + + currentTarget.sendSystemMessage(actor.getCustomName() + ' tips you ' + tipAmount + ' credits.', 0) + actor.sendSystemMessage('You successfully tip ' + tipAmount + ' credits to ' + currentTarget.getCustomName() + '.', 0) + return + actor.sendSystemMessage('You lack the cash funds to tip ' + tipAmount + ' credits to ' + currentTarget.getCustomName() + '.', 0) + return + actor.sendSystemMessage('Invalid tip amount, set amount between 1 and 1,000,000 credits', 0) + return + actor.sendSystemMessage('Target is too far away. Try a wire bank transfer instead.', 0) + return + + #/tip target 30000000 bank + if commandLength == 2: + suiSvc = core.suiService + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@base_player:tip_wire_title", "@base_player:tip_wire_prompt", actor, actor, 10) + + returnParams = Vector() + returnParams.add('btnOk:Text') + returnParams.add('btnCancel:Text') + suiWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnParams, handleBankTip) + suiWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnParams, handleBankTip) + + suiSvc.openSUIWindow(suiWindow) + return + return + +def handleBankTip(core, owner, eventType, returnList): + chatSvc = core.chatService + actorGlobal = core.objectService.getObject(actorID) + targetGlobal = core.objectService.getObject(targetID) + actorFunds = actorGlobal.getBankCredits() + totalLost = int(tipAmountBank) + bankSurcharge + + if eventType == 0: + if int(totalLost) > actorFunds: + actorGlobal.sendSystemMessage('You do not have ' + str(totalLost) + ' credits (surcharge included) to tip the desired amount to ' + targetGlobal.getCustomName() + '.', 0) + return + if int(tipAmount) > 0 and int(actorFunds) >= int(totalLost): + date = Date() + targetName = targetGlobal.getCustomName() + + targetMail = Mail() + targetMail.setMailId(chatSvc.generateMailId()) + targetMail.setTimeStamp((int) (date.getTime() / 1000)) + targetMail.setRecieverId(targetID) + targetMail.setStatus(Mail.NEW) + targetMail.setMessage(tipAmount + ' credits from ' + actorGlobal.getCustomName() + ' have been successfully delivered from escrow to your bank account') + targetMail.setSubject('@base_player:wire_mail_subject') + targetMail.setSenderName('bank') + + actorMail = Mail() + actorMail.setMailId(chatSvc.generateMailId()) + actorMail.setRecieverId(actorID) + actorMail.setStatus(Mail.NEW) + actorMail.setTimeStamp((int) (date.getTime() / 1000)) + actorMail.setMessage('An amount of ' + tipAmount + ' credits have been transfered from your bank to escrow. It will be delivered to ' + + targetGlobal.getCustomName() + ' as soon as possible.') + actorMail.setSubject('@base_player:wire_mail_subject') + actorMail.setSenderName('bank') + + targetGlobal.setBankCredits(int(tipAmount)) + actorGlobal.setBankCredits(int(actorFunds) - int(totalLost)) + actorGlobal.sendSystemMessage('You have successfully sent ' + tipAmount + ' bank credits to ' + targetGlobal.getCustomName(), 0) + targetGlobal.sendSystemMessage('You have successfully received ' + tipAmount + ' bank credits from ' + actorGlobal.getCustomName(), 0) + + chatSvc.storePersistentMessage(actorMail) + chatSvc.storePersistentMessage(targetMail) + chatSvc.sendPersistentMessageHeader(actorGlobal.getClient(), actorMail) + chatSvc.sendPersistentMessageHeader(targetGlobal.getClient(), targetMail) + return + + else: + actorGlobal.sendSystemMessage('You lack the bank funds to wire ' + tipAmount + ' bank funds to ' + targetGlobal.getCustomName() + '.', 0) + return + return diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index e47f5bf1..b0da63bf 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -111,6 +111,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("getattributesbatch"); core.commandService.registerCommand("pvp"); core.commandService.registerCommand("setcurrentskilltitle"); + core.commandService.registerCommand("tip"); }