Commit bcc351de authored by pengjun's avatar pengjun Committed by vipwzw

#302 修复节点时区不一致引起的statehash不同

parent fe703ac7
...@@ -10,7 +10,6 @@ import ( ...@@ -10,7 +10,6 @@ import (
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/33cn/chain33/account" "github.com/33cn/chain33/account"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
...@@ -510,7 +509,7 @@ func (action *Action) newGame(gameID string, start *pkt.PBGameStart) (*pkt.Poker ...@@ -510,7 +509,7 @@ func (action *Action) newGame(gameID string, start *pkt.PBGameStart) (*pkt.Poker
game = &pkt.PokerBull{ game = &pkt.PokerBull{
GameId: gameID, GameId: gameID,
Status: pkt.PBGameActionStart, Status: pkt.PBGameActionStart,
StartTime: time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05"), StartTime: action.blocktime,
StartTxHash: gameID, StartTxHash: gameID,
Value: start.GetValue(), Value: start.GetValue(),
Poker: NewPoker(), Poker: NewPoker(),
...@@ -649,7 +648,6 @@ func (action *Action) GameStart(start *pkt.PBGameStart) (*types.Receipt, error) ...@@ -649,7 +648,6 @@ func (action *Action) GameStart(start *pkt.PBGameStart) (*types.Receipt, error)
Address: action.fromaddr, Address: action.fromaddr,
TxHash: txrng, TxHash: txrng,
Ready: false, Ready: false,
MatchTime: time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05"),
}) })
// 如果人数达标,则发牌计算斗牛结果 // 如果人数达标,则发牌计算斗牛结果
...@@ -759,7 +757,6 @@ func (action *Action) GameContinue(pbcontinue *pkt.PBGameContinue) (*types.Recei ...@@ -759,7 +757,6 @@ func (action *Action) GameContinue(pbcontinue *pkt.PBGameContinue) (*types.Recei
} }
pbplayer.TxHash = txrng pbplayer.TxHash = txrng
pbplayer.Ready = true pbplayer.Ready = true
pbplayer.MatchTime = time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05")
if getReadyPlayerNum(game.Players) == int(game.PlayerNum) { if getReadyPlayerNum(game.Players) == int(game.PlayerNum) {
logger.Info(fmt.Sprintf("Game starting: %s round: %d", game.GameId, game.Round)) logger.Info(fmt.Sprintf("Game starting: %s round: %d", game.GameId, game.Round))
...@@ -864,7 +861,7 @@ func (action *Action) GameQuit(pbquit *pkt.PBGameQuit) (*types.Receipt, error) { ...@@ -864,7 +861,7 @@ func (action *Action) GameQuit(pbquit *pkt.PBGameQuit) (*types.Receipt, error) {
game.Status = pkt.PBGameActionQuit game.Status = pkt.PBGameActionQuit
game.PrevIndex = game.Index game.PrevIndex = game.Index
game.Index = action.getIndex(game) game.Index = action.getIndex(game)
game.QuitTime = time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05") game.QuitTime = action.blocktime
game.QuitTxHash = common.ToHex(action.txhash) game.QuitTxHash = common.ToHex(action.txhash)
receiptLog := action.GetReceiptLog(game) receiptLog := action.GetReceiptLog(game)
...@@ -946,7 +943,6 @@ func (action *Action) GamePlay(pbplay *pkt.PBGamePlay) (*types.Receipt, error) { ...@@ -946,7 +943,6 @@ func (action *Action) GamePlay(pbplay *pkt.PBGamePlay) (*types.Receipt, error) {
// 更新玩家信息 // 更新玩家信息
for i, player := range game.Players { for i, player := range game.Players {
player.TxHash = rands[i] player.TxHash = rands[i]
player.MatchTime = time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05")
} }
game.Round++ game.Round++
...@@ -974,14 +970,13 @@ func (action *Action) GamePlay(pbplay *pkt.PBGamePlay) (*types.Receipt, error) { ...@@ -974,14 +970,13 @@ func (action *Action) GamePlay(pbplay *pkt.PBGamePlay) (*types.Receipt, error) {
player := &pkt.PBPlayer{ player := &pkt.PBPlayer{
Address: addr, Address: addr,
TxHash: rands[i], TxHash: rands[i],
MatchTime: time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05"),
} }
game.Players = append(game.Players, player) game.Players = append(game.Players, player)
} }
game.Status = pkt.PBGameActionQuit // 更新游戏状态 game.Status = pkt.PBGameActionQuit // 更新游戏状态
game.PreStatus = pkt.PBGameActionStart game.PreStatus = pkt.PBGameActionStart
game.QuitTime = time.Unix(action.blocktime, 0).Format("2006-01-02 15:04:05") game.QuitTime = action.blocktime
game.QuitTxHash = common.ToHex(action.txhash) game.QuitTxHash = common.ToHex(action.txhash)
} }
......
...@@ -6,7 +6,7 @@ package types; ...@@ -6,7 +6,7 @@ package types;
message PokerBull { message PokerBull {
string gameId = 1; //默认是由创建这局游戏的txHash作为gameId string gameId = 1; //默认是由创建这局游戏的txHash作为gameId
int32 status = 2; // Start 1 -> Continue 2 -> Quit 3 int32 status = 2; // Start 1 -> Continue 2 -> Quit 3
string startTime = 3; //开始时间 int64 startTime = 3; //开始时间
string startTxHash = 4; //游戏启动交易hash string startTxHash = 4; //游戏启动交易hash
int64 value = 5; //赌注 int64 value = 5; //赌注
PBPoker poker = 6; //扑克牌 PBPoker poker = 6; //扑克牌
...@@ -15,7 +15,7 @@ message PokerBull { ...@@ -15,7 +15,7 @@ message PokerBull {
repeated PBResult results = 9; //游戏结果集 repeated PBResult results = 9; //游戏结果集
int64 index = 10; //索引 int64 index = 10; //索引
int64 prevIndex = 11; //上级索引 int64 prevIndex = 11; //上级索引
string quitTime = 12; //游戏结束时间 int64 quitTime = 12; //游戏结束时间
string quitTxHash = 13; //游戏结束交易hash string quitTxHash = 13; //游戏结束交易hash
string dealerAddr = 14; //下局庄家地址 string dealerAddr = 14; //下局庄家地址
bool isWaiting = 15; //游戏是否处于等待状态 bool isWaiting = 15; //游戏是否处于等待状态
...@@ -30,7 +30,6 @@ message PBHand { ...@@ -30,7 +30,6 @@ message PBHand {
string address = 3; //玩家地址 string address = 3; //玩家地址
bool isWin = 4; //是否赢庄家 bool isWin = 4; //是否赢庄家
int32 leverage = 5; //赌注倍数 int32 leverage = 5; //赌注倍数
string roundTime = 6; //本回合开始时间
} }
//玩家 //玩家
...@@ -39,7 +38,6 @@ message PBPlayer { ...@@ -39,7 +38,6 @@ message PBPlayer {
string address = 2; //玩家地址 string address = 2; //玩家地址
int64 txHash = 3; //发牌随机数因子txhash的整数格式 int64 txHash = 3; //发牌随机数因子txhash的整数格式
bool ready = 4; //continue状态下,是否ready bool ready = 4; //continue状态下,是否ready
string matchTime = 5; //玩家匹配时间
} }
//本局游戏结果 //本局游戏结果
......
...@@ -5,9 +5,8 @@ package types ...@@ -5,9 +5,8 @@ package types
import ( import (
fmt "fmt" fmt "fmt"
math "math"
proto "github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
math "math"
) )
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -25,7 +24,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package ...@@ -25,7 +24,7 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type PokerBull struct { type PokerBull struct {
GameId string `protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"` GameId string `protobuf:"bytes,1,opt,name=gameId,proto3" json:"gameId,omitempty"`
Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"`
StartTime string `protobuf:"bytes,3,opt,name=startTime,proto3" json:"startTime,omitempty"` StartTime int64 `protobuf:"varint,3,opt,name=startTime,proto3" json:"startTime,omitempty"`
StartTxHash string `protobuf:"bytes,4,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"` StartTxHash string `protobuf:"bytes,4,opt,name=startTxHash,proto3" json:"startTxHash,omitempty"`
Value int64 `protobuf:"varint,5,opt,name=value,proto3" json:"value,omitempty"` Value int64 `protobuf:"varint,5,opt,name=value,proto3" json:"value,omitempty"`
Poker *PBPoker `protobuf:"bytes,6,opt,name=poker,proto3" json:"poker,omitempty"` Poker *PBPoker `protobuf:"bytes,6,opt,name=poker,proto3" json:"poker,omitempty"`
...@@ -34,7 +33,7 @@ type PokerBull struct { ...@@ -34,7 +33,7 @@ type PokerBull struct {
Results []*PBResult `protobuf:"bytes,9,rep,name=results,proto3" json:"results,omitempty"` Results []*PBResult `protobuf:"bytes,9,rep,name=results,proto3" json:"results,omitempty"`
Index int64 `protobuf:"varint,10,opt,name=index,proto3" json:"index,omitempty"` Index int64 `protobuf:"varint,10,opt,name=index,proto3" json:"index,omitempty"`
PrevIndex int64 `protobuf:"varint,11,opt,name=prevIndex,proto3" json:"prevIndex,omitempty"` PrevIndex int64 `protobuf:"varint,11,opt,name=prevIndex,proto3" json:"prevIndex,omitempty"`
QuitTime string `protobuf:"bytes,12,opt,name=quitTime,proto3" json:"quitTime,omitempty"` QuitTime int64 `protobuf:"varint,12,opt,name=quitTime,proto3" json:"quitTime,omitempty"`
QuitTxHash string `protobuf:"bytes,13,opt,name=quitTxHash,proto3" json:"quitTxHash,omitempty"` QuitTxHash string `protobuf:"bytes,13,opt,name=quitTxHash,proto3" json:"quitTxHash,omitempty"`
DealerAddr string `protobuf:"bytes,14,opt,name=dealerAddr,proto3" json:"dealerAddr,omitempty"` DealerAddr string `protobuf:"bytes,14,opt,name=dealerAddr,proto3" json:"dealerAddr,omitempty"`
IsWaiting bool `protobuf:"varint,15,opt,name=isWaiting,proto3" json:"isWaiting,omitempty"` IsWaiting bool `protobuf:"varint,15,opt,name=isWaiting,proto3" json:"isWaiting,omitempty"`
...@@ -84,11 +83,11 @@ func (m *PokerBull) GetStatus() int32 { ...@@ -84,11 +83,11 @@ func (m *PokerBull) GetStatus() int32 {
return 0 return 0
} }
func (m *PokerBull) GetStartTime() string { func (m *PokerBull) GetStartTime() int64 {
if m != nil { if m != nil {
return m.StartTime return m.StartTime
} }
return "" return 0
} }
func (m *PokerBull) GetStartTxHash() string { func (m *PokerBull) GetStartTxHash() string {
...@@ -147,11 +146,11 @@ func (m *PokerBull) GetPrevIndex() int64 { ...@@ -147,11 +146,11 @@ func (m *PokerBull) GetPrevIndex() int64 {
return 0 return 0
} }
func (m *PokerBull) GetQuitTime() string { func (m *PokerBull) GetQuitTime() int64 {
if m != nil { if m != nil {
return m.QuitTime return m.QuitTime
} }
return "" return 0
} }
func (m *PokerBull) GetQuitTxHash() string { func (m *PokerBull) GetQuitTxHash() string {
...@@ -196,7 +195,6 @@ type PBHand struct { ...@@ -196,7 +195,6 @@ type PBHand struct {
Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"`
IsWin bool `protobuf:"varint,4,opt,name=isWin,proto3" json:"isWin,omitempty"` IsWin bool `protobuf:"varint,4,opt,name=isWin,proto3" json:"isWin,omitempty"`
Leverage int32 `protobuf:"varint,5,opt,name=leverage,proto3" json:"leverage,omitempty"` Leverage int32 `protobuf:"varint,5,opt,name=leverage,proto3" json:"leverage,omitempty"`
RoundTime string `protobuf:"bytes,6,opt,name=roundTime,proto3" json:"roundTime,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -262,20 +260,12 @@ func (m *PBHand) GetLeverage() int32 { ...@@ -262,20 +260,12 @@ func (m *PBHand) GetLeverage() int32 {
return 0 return 0
} }
func (m *PBHand) GetRoundTime() string {
if m != nil {
return m.RoundTime
}
return ""
}
//玩家 //玩家
type PBPlayer struct { type PBPlayer struct {
Hands []*PBHand `protobuf:"bytes,1,rep,name=hands,proto3" json:"hands,omitempty"` Hands []*PBHand `protobuf:"bytes,1,rep,name=hands,proto3" json:"hands,omitempty"`
Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
TxHash int64 `protobuf:"varint,3,opt,name=txHash,proto3" json:"txHash,omitempty"` TxHash int64 `protobuf:"varint,3,opt,name=txHash,proto3" json:"txHash,omitempty"`
Ready bool `protobuf:"varint,4,opt,name=ready,proto3" json:"ready,omitempty"` Ready bool `protobuf:"varint,4,opt,name=ready,proto3" json:"ready,omitempty"`
MatchTime string `protobuf:"bytes,5,opt,name=matchTime,proto3" json:"matchTime,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -334,13 +324,6 @@ func (m *PBPlayer) GetReady() bool { ...@@ -334,13 +324,6 @@ func (m *PBPlayer) GetReady() bool {
return false return false
} }
func (m *PBPlayer) GetMatchTime() string {
if m != nil {
return m.MatchTime
}
return ""
}
//本局游戏结果 //本局游戏结果
type PBResult struct { type PBResult struct {
Hands []*PBHand `protobuf:"bytes,1,rep,name=hands,proto3" json:"hands,omitempty"` Hands []*PBHand `protobuf:"bytes,1,rep,name=hands,proto3" json:"hands,omitempty"`
...@@ -1848,73 +1831,71 @@ func init() { ...@@ -1848,73 +1831,71 @@ func init() {
func init() { proto.RegisterFile("pokerbull.proto", fileDescriptor_8d22e4ee2313e311) } func init() { proto.RegisterFile("pokerbull.proto", fileDescriptor_8d22e4ee2313e311) }
var fileDescriptor_8d22e4ee2313e311 = []byte{ var fileDescriptor_8d22e4ee2313e311 = []byte{
// 1081 bytes of a gzipped FileDescriptorProto // 1054 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0x4f, 0x6f, 0xe3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x17, 0x4b, 0x8f, 0xdb, 0x44,
0x14, 0x5f, 0xdb, 0xb1, 0x93, 0x3c, 0x6f, 0x9b, 0x76, 0x80, 0x6a, 0x84, 0x10, 0x8a, 0xbc, 0x65, 0xb8, 0xb6, 0xe3, 0x3c, 0x3e, 0x77, 0x93, 0xed, 0x00, 0xab, 0x11, 0x42, 0x28, 0x72, 0x97, 0x36,
0x37, 0x20, 0xe8, 0x21, 0x95, 0x40, 0x2b, 0x24, 0xa4, 0x86, 0x03, 0xa9, 0xb4, 0x42, 0xe9, 0x74, 0x20, 0xd8, 0x43, 0x56, 0x02, 0x55, 0x48, 0x48, 0x09, 0x07, 0xb2, 0x52, 0x85, 0xb2, 0xb3, 0x95,
0xa5, 0x3d, 0x7b, 0xe3, 0xd9, 0xd6, 0xac, 0xe3, 0xa4, 0xfe, 0x53, 0x36, 0x5f, 0x80, 0x1b, 0x47, 0x7a, 0x76, 0xe3, 0xe9, 0xd6, 0xd4, 0x6b, 0x67, 0xfd, 0xd8, 0x36, 0x57, 0x0e, 0xdc, 0xf8, 0x15,
0xee, 0x48, 0x1c, 0xf8, 0x62, 0x7c, 0x10, 0x34, 0x6f, 0x66, 0xec, 0xb1, 0x1b, 0xab, 0x84, 0x9b, 0x1c, 0xf8, 0x63, 0xfc, 0x10, 0x34, 0xdf, 0xcc, 0xd8, 0x63, 0x6f, 0xac, 0x25, 0xdc, 0xfc, 0x3d,
0xdf, 0x9f, 0x79, 0xf3, 0x7b, 0x6f, 0xde, 0xfc, 0xde, 0x18, 0x46, 0x9b, 0xf5, 0x7b, 0x9e, 0xbd, 0xe6, 0x7b, 0xbf, 0x0c, 0x93, 0x6d, 0xfa, 0x9e, 0x67, 0x6f, 0xca, 0x38, 0x3e, 0xdb, 0x66, 0x69,
0x2d, 0x93, 0xe4, 0x6c, 0x93, 0xad, 0x8b, 0x35, 0x71, 0x8b, 0xed, 0x86, 0xe7, 0xc1, 0xef, 0x3d, 0x91, 0x12, 0xb7, 0xd8, 0x6d, 0x79, 0xee, 0xff, 0xd9, 0x83, 0xd1, 0x5a, 0x90, 0x96, 0x65, 0x1c,
0x18, 0x2e, 0x84, 0x69, 0x56, 0x26, 0x09, 0x39, 0x01, 0xef, 0x26, 0x5c, 0xf1, 0xcb, 0x88, 0x5a, 0x93, 0x13, 0xe8, 0x5f, 0x07, 0x37, 0xfc, 0x22, 0xa4, 0xd6, 0xd4, 0x9a, 0x8d, 0x98, 0x82, 0x04,
0x63, 0x6b, 0x32, 0x64, 0x4a, 0x12, 0xfa, 0xbc, 0x08, 0x8b, 0x32, 0xa7, 0xf6, 0xd8, 0x9a, 0xb8, 0x3e, 0x2f, 0x82, 0xa2, 0xcc, 0xa9, 0x3d, 0xb5, 0x66, 0x2e, 0x53, 0x10, 0xf9, 0x02, 0x46, 0x79,
0x4c, 0x49, 0xe4, 0x33, 0x18, 0xe6, 0x45, 0x98, 0x15, 0xaf, 0xe3, 0x15, 0xa7, 0x0e, 0x2e, 0xa9, 0x11, 0x64, 0xc5, 0xab, 0xe8, 0x86, 0x53, 0x67, 0x6a, 0xcd, 0x1c, 0x56, 0x23, 0xc8, 0x14, 0x3c,
0x15, 0x64, 0x0c, 0xbe, 0x14, 0x3e, 0xcc, 0xc3, 0xfc, 0x96, 0xf6, 0xd0, 0x6e, 0xaa, 0xc8, 0xc7, 0x09, 0x7c, 0x5c, 0x05, 0xf9, 0x3b, 0xda, 0x43, 0x91, 0x26, 0x8a, 0x7c, 0x0a, 0xee, 0x5d, 0x10,
0xe0, 0xde, 0x87, 0x49, 0xc9, 0xa9, 0x3b, 0xb6, 0x26, 0x0e, 0x93, 0x02, 0x39, 0x05, 0x17, 0xd1, 0x97, 0x9c, 0xba, 0xf8, 0x56, 0x02, 0xe4, 0x14, 0x5c, 0xb4, 0x96, 0xf6, 0xa7, 0xd6, 0xcc, 0x9b,
0x52, 0x6f, 0x6c, 0x4d, 0xfc, 0xe9, 0xe1, 0x19, 0x42, 0x3d, 0x5b, 0xcc, 0x10, 0x28, 0x93, 0x46, 0x8f, 0xcf, 0xd0, 0xd4, 0xb3, 0xf5, 0x12, 0x0d, 0x65, 0x92, 0x48, 0xbe, 0x86, 0xc1, 0x36, 0x0e,
0xf2, 0x25, 0xf4, 0x37, 0x49, 0xb8, 0xe5, 0x59, 0x4e, 0xfb, 0x63, 0x67, 0xe2, 0x4f, 0x47, 0xb5, 0x76, 0x3c, 0xcb, 0xe9, 0x60, 0xea, 0xcc, 0xbc, 0xf9, 0xa4, 0xe6, 0x43, 0x3c, 0xd3, 0x74, 0x61,
0x1f, 0xea, 0x99, 0xb6, 0x0b, 0x98, 0xf2, 0xf3, 0xe7, 0x72, 0x45, 0x07, 0x98, 0x41, 0xad, 0x10, 0xa6, 0xfc, 0xfc, 0xb5, 0xbc, 0xa1, 0x43, 0xf4, 0xa0, 0x46, 0x08, 0x41, 0x19, 0xcf, 0xcb, 0xb8,
0x81, 0x32, 0x9e, 0x97, 0x49, 0x91, 0xd3, 0x61, 0x2b, 0x10, 0x43, 0x3d, 0xd3, 0x76, 0x81, 0x37, 0xc8, 0xe9, 0xa8, 0x25, 0x88, 0x21, 0x9e, 0x69, 0xba, 0xb0, 0x37, 0x4a, 0x42, 0xfe, 0x91, 0x82,
0x4e, 0x23, 0xfe, 0x81, 0x82, 0xc4, 0x8b, 0x02, 0x86, 0xcf, 0xf8, 0xfd, 0x25, 0x5a, 0x7c, 0xb4, 0xb4, 0x17, 0x01, 0x14, 0x9f, 0xf1, 0xbb, 0x0b, 0xa4, 0x78, 0x32, 0x0a, 0x15, 0x82, 0x7c, 0x0e,
0xd4, 0x0a, 0xf2, 0x29, 0x0c, 0xee, 0xca, 0x58, 0x96, 0xe8, 0x29, 0x96, 0xa0, 0x92, 0xc9, 0xe7, 0xc3, 0xdb, 0x32, 0x92, 0x21, 0x7a, 0x8c, 0xc4, 0x0a, 0x26, 0x5f, 0x02, 0xe0, 0xb7, 0x0c, 0xd0,
0x00, 0xf8, 0x2d, 0x0b, 0x74, 0x80, 0x56, 0x43, 0x23, 0xec, 0x11, 0x0f, 0x13, 0x9e, 0x5d, 0x44, 0x11, 0x06, 0xc8, 0xc0, 0x08, 0x7a, 0xc8, 0x83, 0x98, 0x67, 0x8b, 0x30, 0xcc, 0xe8, 0x58, 0xd2,
0x51, 0x46, 0x0f, 0xa5, 0xbd, 0xd6, 0x88, 0x9d, 0xe3, 0xfc, 0x4d, 0x18, 0x17, 0x71, 0x7a, 0x43, 0x6b, 0x8c, 0xd0, 0x1c, 0xe5, 0xaf, 0x83, 0xa8, 0x88, 0x92, 0x6b, 0x3a, 0x99, 0x5a, 0xb3, 0x21,
0x47, 0x63, 0x6b, 0x32, 0x60, 0xb5, 0x42, 0xe1, 0xba, 0x96, 0x07, 0x77, 0xa4, 0xd2, 0xd6, 0x0a, 0xab, 0x11, 0xca, 0xae, 0x2b, 0x99, 0xb8, 0x63, 0xe5, 0xb6, 0x46, 0x08, 0x5f, 0xb2, 0xb4, 0x4c,
0x91, 0x4b, 0xb6, 0x2e, 0xd3, 0x88, 0x1e, 0xa3, 0x45, 0x0a, 0xc1, 0x9f, 0x16, 0x78, 0x8b, 0xd9, 0x42, 0xfa, 0x04, 0x29, 0x12, 0xf0, 0x7f, 0xb7, 0xa0, 0xbf, 0x5e, 0xae, 0x82, 0x24, 0x14, 0x0c,
0x3c, 0x4c, 0x23, 0xe1, 0xb0, 0x0c, 0xb3, 0x28, 0xa7, 0xd6, 0xd8, 0x11, 0x0e, 0x28, 0x88, 0x56, 0x9b, 0x20, 0x0b, 0x73, 0x6a, 0x4d, 0x1d, 0xc1, 0x80, 0x80, 0x28, 0x05, 0x19, 0x0d, 0x5d, 0x0a,
0x90, 0xd5, 0xd0, 0xad, 0x20, 0x25, 0x42, 0xa1, 0x1f, 0x46, 0x51, 0xc6, 0xf3, 0x5c, 0x35, 0x82, 0x12, 0x22, 0x14, 0x06, 0x41, 0x18, 0x66, 0x3c, 0xcf, 0xb1, 0x10, 0x46, 0x4c, 0x83, 0x18, 0xb4,
0x16, 0xb1, 0x68, 0xf9, 0x9b, 0x38, 0xc5, 0x06, 0x18, 0x30, 0x29, 0x88, 0xb2, 0x24, 0xfc, 0x9e, 0xfc, 0x75, 0x94, 0x60, 0x01, 0x0c, 0x99, 0x04, 0x44, 0x58, 0x62, 0x7e, 0xc7, 0xb3, 0xe0, 0x5a,
0x67, 0xe1, 0x8d, 0x3c, 0x7d, 0x97, 0x55, 0xb2, 0x00, 0x8e, 0x68, 0xb0, 0x66, 0x9e, 0x6c, 0xab, 0x66, 0xdf, 0x65, 0x15, 0xec, 0x7f, 0x80, 0xa1, 0x4e, 0x22, 0x79, 0x0a, 0xee, 0xbb, 0x20, 0x51,
0x4a, 0x11, 0xfc, 0x61, 0xc1, 0x40, 0x9f, 0x31, 0x79, 0x06, 0xee, 0x6d, 0x98, 0x2a, 0x90, 0xfe, 0x56, 0x78, 0xf3, 0xa3, 0x2a, 0x37, 0xc2, 0x46, 0x26, 0x69, 0xa6, 0x72, 0xbb, 0xa9, 0xfc, 0x04,
0xf4, 0xa0, 0x3a, 0x3a, 0x91, 0x02, 0x93, 0x36, 0x13, 0x9b, 0xdd, 0xc4, 0x76, 0x02, 0x5e, 0x21, 0xfa, 0x85, 0x8c, 0xae, 0x2c, 0x4f, 0x05, 0xa1, 0xf7, 0x3c, 0x08, 0x77, 0xda, 0x28, 0x04, 0xfc,
0x8b, 0xef, 0xe0, 0xb9, 0x29, 0x09, 0x8b, 0xc3, 0xc3, 0x68, 0xab, 0x31, 0xa3, 0x20, 0x70, 0xad, 0xbf, 0x2c, 0xa1, 0x59, 0x66, 0xfd, 0xbf, 0x69, 0x3e, 0x81, 0xfe, 0x87, 0x28, 0x49, 0x78, 0xa6,
0xc2, 0x62, 0x79, 0x8b, 0xb8, 0x5c, 0x89, 0xab, 0x52, 0x04, 0x7f, 0x21, 0x2e, 0xd9, 0x32, 0xff, 0x14, 0x2b, 0xa8, 0xe1, 0x9e, 0xd3, 0x74, 0x4f, 0xbc, 0x91, 0x39, 0x54, 0x2d, 0xa1, 0x20, 0xf2,
0x0d, 0xd7, 0x09, 0x78, 0xbf, 0xc6, 0x69, 0xca, 0x33, 0x05, 0x4b, 0x49, 0x8d, 0xda, 0x38, 0xad, 0x0c, 0xc6, 0xf2, 0xeb, 0x65, 0x33, 0x30, 0x2d, 0xac, 0xff, 0x02, 0x06, 0xaa, 0x17, 0x3a, 0x72,
0xda, 0x9c, 0x80, 0x27, 0x1b, 0x40, 0xdd, 0x27, 0x25, 0x91, 0xe7, 0x70, 0x28, 0xbf, 0x5e, 0x35, 0x44, 0x61, 0xb0, 0x4d, 0xa3, 0xa4, 0x50, 0x56, 0xb9, 0x4c, 0x83, 0xfe, 0x1f, 0x36, 0x3c, 0x5e,
0xab, 0xda, 0xd2, 0x06, 0x2f, 0xa1, 0xaf, 0x2e, 0x52, 0xc7, 0x01, 0x53, 0xe8, 0x6f, 0xd6, 0x71, 0x2f, 0x7f, 0x09, 0x6e, 0xf8, 0x62, 0x53, 0x44, 0x69, 0x42, 0xbe, 0x01, 0x17, 0x1b, 0x12, 0x1b,
0x5a, 0x28, 0x54, 0x2e, 0xd3, 0x62, 0xf0, 0x9b, 0x0d, 0x4f, 0x17, 0xb3, 0x9f, 0xc2, 0x15, 0xbf, 0xde, 0x9b, 0x93, 0xca, 0x49, 0xc1, 0x73, 0x25, 0x28, 0xab, 0x47, 0x4c, 0xb2, 0x90, 0x73, 0x18,
0x58, 0x16, 0xf1, 0x3a, 0x25, 0x5f, 0x81, 0x8b, 0xb7, 0x19, 0xd9, 0xc2, 0x9f, 0x92, 0x2a, 0x49, 0x6e, 0xd2, 0xa4, 0x88, 0x92, 0x92, 0xa3, 0x5c, 0x6f, 0xfe, 0x59, 0x83, 0xfd, 0x67, 0x45, 0x5c,
0xe1, 0x73, 0x2d, 0x2c, 0xf3, 0x27, 0x4c, 0xba, 0x90, 0x73, 0x18, 0x2c, 0xd7, 0x69, 0x11, 0xa7, 0x3d, 0x62, 0x15, 0x23, 0x79, 0x0e, 0x3d, 0x51, 0xd0, 0x18, 0x04, 0x6f, 0xfe, 0xa4, 0xf1, 0xe0,
0x25, 0xc7, 0xb8, 0xfe, 0xf4, 0x93, 0x86, 0xfb, 0x8f, 0xca, 0x38, 0x7f, 0xc2, 0x2a, 0x47, 0xf2, 0xb2, 0x8c, 0x84, 0x78, 0x64, 0x10, 0x96, 0xdc, 0x96, 0x3c, 0x93, 0x19, 0x69, 0x5b, 0x72, 0x29,
0x02, 0x7a, 0xe2, 0x36, 0x60, 0x11, 0xfc, 0xe9, 0x71, 0x63, 0xc1, 0x55, 0x19, 0x8b, 0xf0, 0xe8, 0x28, 0xc2, 0x12, 0x64, 0x11, 0x42, 0x45, 0xff, 0x62, 0x7c, 0xda, 0x42, 0x45, 0xdd, 0x08, 0xa1,
0x20, 0x90, 0xdc, 0x95, 0x3c, 0x93, 0xe7, 0xd5, 0x46, 0x72, 0x25, 0x2c, 0x02, 0x09, 0xba, 0x88, 0x82, 0x81, 0x8c, 0xc1, 0x2e, 0x76, 0xd8, 0xad, 0x2e, 0xb3, 0x8b, 0xdd, 0x72, 0xa0, 0x06, 0x8e,
0xa0, 0xe2, 0xf2, 0x63, 0x7d, 0xda, 0x41, 0x45, 0x57, 0x89, 0xa0, 0xc2, 0x81, 0x1c, 0x82, 0x5d, 0xbf, 0x00, 0xcf, 0xf0, 0xb1, 0x1e, 0x44, 0x96, 0x39, 0x88, 0x1a, 0x73, 0xc3, 0x6e, 0xcd, 0x0d,
0x6c, 0xf1, 0xaa, 0xbb, 0xcc, 0x2e, 0xb6, 0xb3, 0xbe, 0x62, 0xab, 0xe0, 0x02, 0x7c, 0x23, 0xc7, 0x7f, 0x06, 0xe3, 0xa6, 0xdf, 0x5d, 0xe3, 0xd3, 0x3f, 0x05, 0xa8, 0x1d, 0xee, 0xe4, 0xfa, 0x4a,
0x9a, 0xc5, 0x2c, 0x93, 0xc5, 0x1a, 0xa4, 0x63, 0xb7, 0x48, 0x27, 0x98, 0xc0, 0x61, 0x33, 0xef, 0x9b, 0x84, 0xce, 0x76, 0xb2, 0xfd, 0xa6, 0x85, 0x09, 0x47, 0x3b, 0x27, 0x76, 0xd5, 0xdd, 0xb6,
0x2e, 0xee, 0x0d, 0x4e, 0x01, 0xea, 0x84, 0x3b, 0xbd, 0xbe, 0xd0, 0x90, 0x30, 0xd9, 0x4e, 0xb7, 0xd1, 0xdd, 0xb5, 0x9b, 0x8e, 0xe9, 0xa6, 0xd1, 0x3d, 0xbd, 0xa9, 0x63, 0x74, 0x8f, 0x7f, 0x0b,
0x5f, 0x74, 0x30, 0x91, 0x68, 0x27, 0xdd, 0x57, 0xd4, 0x60, 0x1b, 0xd4, 0x50, 0xa7, 0xe9, 0x98, 0x4f, 0xd1, 0x18, 0xa9, 0xf0, 0x65, 0x94, 0x17, 0xcb, 0x9d, 0x1c, 0x1f, 0x8b, 0x24, 0x5c, 0x57,
0x69, 0x1a, 0x77, 0xab, 0x37, 0x76, 0x8c, 0xbb, 0x15, 0xdc, 0xc1, 0x33, 0x04, 0x23, 0x37, 0x7c, 0x13, 0xb4, 0x5e, 0x0f, 0x56, 0x7b, 0x3d, 0x74, 0xc7, 0xaf, 0x1e, 0xa6, 0x8e, 0x31, 0x4c, 0xfd,
0x15, 0xe7, 0xc5, 0x6c, 0x2b, 0xb9, 0xe7, 0x22, 0x8d, 0x16, 0x15, 0xfd, 0xd6, 0xb3, 0xc5, 0x6a, 0x57, 0xba, 0x40, 0x19, 0xdf, 0xa4, 0x59, 0x78, 0xf0, 0x4a, 0xda, 0x2f, 0x75, 0x01, 0x4f, 0xa4,
0xcf, 0x96, 0xee, 0xfa, 0xd5, 0x4c, 0xec, 0x18, 0x4c, 0x1c, 0xbc, 0xd6, 0x0d, 0xca, 0xf8, 0x72, 0x54, 0x9c, 0xc9, 0x0f, 0x88, 0xae, 0x44, 0xd8, 0xa6, 0x88, 0x9f, 0xe0, 0xc8, 0x34, 0x2c, 0x27,
0x9d, 0x45, 0x7b, 0xcf, 0xb3, 0xdd, 0x51, 0x2f, 0xe0, 0x58, 0x46, 0x45, 0x42, 0x7f, 0x24, 0x74, 0xdf, 0x89, 0xbd, 0x81, 0x9f, 0x6a, 0x42, 0x7c, 0xd2, 0xa8, 0x43, 0xc9, 0xc6, 0x34, 0x8f, 0xbf,
0x15, 0xc2, 0x36, 0x43, 0xfc, 0x00, 0x07, 0x26, 0xb0, 0x9c, 0x7c, 0x23, 0x86, 0x0e, 0x7e, 0x2a, 0x02, 0x72, 0xcf, 0x84, 0x9c, 0xcc, 0xdb, 0x42, 0x68, 0x43, 0x88, 0xc1, 0x5b, 0x4b, 0x7a, 0x0f,
0x86, 0xf8, 0xa8, 0xd1, 0x87, 0xd2, 0x8d, 0x69, 0x9f, 0x60, 0x0e, 0xe4, 0x01, 0x84, 0x9c, 0x4c, 0x13, 0x23, 0x2b, 0x17, 0xc9, 0xdb, 0xb4, 0xd3, 0x15, 0x02, 0x3d, 0x91, 0x4b, 0x35, 0x9c, 0xf0,
0xdb, 0x41, 0x68, 0x23, 0x88, 0xe1, 0x5b, 0x47, 0x7a, 0x0f, 0x23, 0xe3, 0x54, 0x2e, 0xd3, 0x77, 0xdb, 0x88, 0x9c, 0xb3, 0x3f, 0x72, 0x3d, 0xd3, 0xed, 0x73, 0xf0, 0x18, 0xdf, 0xc6, 0x4a, 0x19,
0xeb, 0xce, 0x54, 0x08, 0xf4, 0xc4, 0x59, 0x2a, 0x72, 0xc2, 0x6f, 0xa3, 0x72, 0xce, 0xee, 0xca, 0x39, 0x85, 0x9e, 0x10, 0xad, 0xc6, 0xc5, 0xb1, 0x36, 0x56, 0x5f, 0x10, 0x0c, 0xa9, 0xfe, 0xb7,
0xf5, 0xcc, 0xb4, 0xcf, 0xc1, 0x67, 0x7c, 0x93, 0xa8, 0xcd, 0xc8, 0x29, 0xf4, 0x44, 0x68, 0x45, 0x70, 0xdc, 0xb2, 0x10, 0x87, 0x92, 0x34, 0x4a, 0x7a, 0x3a, 0x62, 0x1a, 0xf4, 0x5f, 0xc0, 0xc4,
0x17, 0x47, 0x1a, 0xac, 0x7e, 0x7e, 0x30, 0xb4, 0x06, 0x5f, 0xc3, 0x51, 0x0b, 0x21, 0x92, 0x92, 0x50, 0x21, 0xaa, 0x8c, 0x3c, 0x03, 0x57, 0x50, 0x75, 0x50, 0xee, 0xeb, 0x91, 0x64, 0x7f, 0x09,
0x04, 0x25, 0x33, 0x1d, 0x32, 0x2d, 0x06, 0x2f, 0x61, 0x64, 0x6c, 0x21, 0xba, 0x8c, 0x3c, 0x07, 0xc4, 0x50, 0xb4, 0xdc, 0x31, 0x2c, 0xf3, 0x83, 0x9a, 0xc2, 0xff, 0xc7, 0x02, 0x62, 0xe8, 0x7f,
0x57, 0x58, 0x75, 0x51, 0x1e, 0xee, 0x23, 0xcd, 0xc1, 0x0c, 0x88, 0xb1, 0xd1, 0x6c, 0xcb, 0xb0, 0x48, 0x48, 0x57, 0xe1, 0x3d, 0xaf, 0x16, 0xa3, 0x1c, 0x75, 0xf7, 0xae, 0x08, 0xbd, 0x29, 0x1b,
0xcd, 0xf7, 0xba, 0x14, 0xc1, 0x3f, 0x16, 0x10, 0x63, 0xff, 0xc7, 0x82, 0x74, 0x35, 0xde, 0x8b, 0x4b, 0xbb, 0xd7, 0x5e, 0xda, 0xfb, 0x4f, 0x22, 0xe3, 0xd8, 0xe9, 0x3f, 0x70, 0xec, 0xe0, 0x82,
0x6a, 0xaa, 0x4a, 0xaa, 0x7b, 0xf0, 0x04, 0xd1, 0x63, 0xb6, 0x31, 0xf1, 0x7b, 0xed, 0x89, 0xbf, 0x2e, 0xca, 0x2c, 0xa1, 0x03, 0xb9, 0xf1, 0x24, 0xe4, 0xff, 0x6d, 0xc3, 0x11, 0xe3, 0x1b, 0x1e,
0xfb, 0x3d, 0x65, 0xbc, 0x94, 0xbc, 0x47, 0x5e, 0x4a, 0x38, 0xdd, 0x8b, 0x32, 0x4b, 0x69, 0x5f, 0x6d, 0x0b, 0x95, 0xcb, 0x43, 0x3d, 0xd4, 0xc5, 0xe4, 0x18, 0xc5, 0xb4, 0xb7, 0x68, 0x9a, 0x17,
0xce, 0x43, 0x29, 0x05, 0x7f, 0xdb, 0x70, 0xc0, 0xf8, 0x92, 0xc7, 0x9b, 0x42, 0x9d, 0xe5, 0xbe, 0x91, 0xdb, 0xbe, 0x88, 0x1a, 0x63, 0xa1, 0xbf, 0x67, 0x2c, 0xc8, 0x00, 0x0c, 0x5a, 0xa3, 0xb8,
0x19, 0xea, 0x66, 0x72, 0x8c, 0x66, 0xda, 0xd9, 0x34, 0xcd, 0xe7, 0x94, 0xdb, 0x7e, 0x4e, 0x35, 0x0e, 0xda, 0xb0, 0x1d, 0x34, 0x5a, 0x87, 0x67, 0x24, 0x6b, 0xcb, 0x3c, 0xfd, 0xaa, 0x1b, 0x08,
0x68, 0xc1, 0xdb, 0x41, 0x0b, 0xb2, 0x00, 0xfd, 0x16, 0x15, 0xd7, 0x45, 0x1b, 0xb4, 0x8b, 0x46, 0x3a, 0x6f, 0x20, 0xcf, 0x2c, 0x08, 0x1c, 0x41, 0x57, 0xf2, 0x4c, 0x65, 0xfc, 0xf6, 0xff, 0x2c,
0xeb, 0xf2, 0x0c, 0x65, 0x6f, 0x99, 0xef, 0xc6, 0xea, 0x01, 0x05, 0x9d, 0x0f, 0x28, 0xdf, 0x6c, 0x07, 0x72, 0x0c, 0xce, 0x5b, 0xae, 0xe7, 0xac, 0xf8, 0xf4, 0x7f, 0x84, 0xc9, 0x7a, 0xa9, 0x57,
0x08, 0xa4, 0xa0, 0x6b, 0xf9, 0xc6, 0x65, 0xfc, 0xee, 0xff, 0x0c, 0x07, 0x72, 0x04, 0xce, 0x3b, 0x85, 0x14, 0xdc, 0x95, 0x00, 0xf5, 0xd8, 0xae, 0x1f, 0xff, 0x20, 0x76, 0xc3, 0x25, 0x1e, 0x86,
0xae, 0x79, 0x56, 0x7c, 0x06, 0xdf, 0xc3, 0x68, 0x31, 0xd3, 0xa3, 0x42, 0x06, 0xee, 0x3a, 0x00, 0x87, 0x3d, 0xfc, 0x5e, 0x6c, 0x0b, 0x6c, 0x91, 0x83, 0xde, 0xbd, 0xe9, 0xe3, 0x5f, 0xc2, 0xf9,
0xb5, 0xd8, 0xae, 0x17, 0x7f, 0x27, 0x66, 0xc3, 0x15, 0xbe, 0x2a, 0xf7, 0x5b, 0xf8, 0xad, 0x98, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x22, 0xb5, 0x84, 0x10, 0x38, 0x0c, 0x00, 0x00,
0x16, 0x78, 0x45, 0xf6, 0x5a, 0xf7, 0xd6, 0xc3, 0x5f, 0x8c, 0xf3, 0x7f, 0x03, 0x00, 0x00, 0xff,
0xff, 0xb4, 0x58, 0xec, 0xbf, 0x75, 0x0c, 0x00, 0x00,
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment