ERC-20
Source Code
Overview
Max Total Supply
0 NT3D
Holders
0
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
NTech3DLong
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-08-08
*/
pragma solidity ^0.4.24;
/***********************************************************
* @title SafeMath v0.1.9
* @dev Math operations with safety checks that throw on error
* change notes: original SafeMath library from OpenZeppelin modified by Inventor
* - added sqrt
* - added sq
* - added pwr
* - changed asserts to requires with error log outputs
* - removed div, its useless
***********************************************************/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b)
internal
pure
returns (uint256 c)
{
if (a == 0) {
return 0;
}
c = a * b;
require(c / a == b, "SafeMath mul failed");
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b)
internal
pure
returns (uint256)
{
require(b <= a, "SafeMath sub failed");
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b)
internal
pure
returns (uint256 c)
{
c = a + b;
require(c >= a, "SafeMath add failed");
return c;
}
/**
* @dev gives square root of given x.
*/
function sqrt(uint256 x)
internal
pure
returns (uint256 y)
{
uint256 z = ((add(x,1)) / 2);
y = x;
while (z < y)
{
y = z;
z = ((add((x / z),z)) / 2);
}
}
/**
* @dev gives square. multiplies x by x
*/
function sq(uint256 x)
internal
pure
returns (uint256)
{
return (mul(x,x));
}
/**
* @dev x to the power of y
*/
function pwr(uint256 x, uint256 y)
internal
pure
returns (uint256)
{
if (x==0)
return (0);
else if (y==0)
return (1);
else
{
uint256 z = x;
for (uint256 i=1; i < y; i++)
z = mul(z,x);
return (z);
}
}
}
/***********************************************************
* NameFilter library
***********************************************************/
library NameFilter {
/**
* @dev filters name strings
* -converts uppercase to lower case.
* -makes sure it does not start/end with a space
* -makes sure it does not contain multiple spaces in a row
* -cannot be only numbers
* -cannot start with 0x
* -restricts characters to A-Z, a-z, 0-9, and space.
* @return reprocessed string in bytes32 format
*/
function nameFilter(string _input)
internal
pure
returns(bytes32)
{
bytes memory _temp = bytes(_input);
uint256 _length = _temp.length;
//sorry limited to 32 characters
require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
// make sure it doesnt start with or end with space
require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
// make sure first two characters are not 0x
if (_temp[0] == 0x30)
{
require(_temp[1] != 0x78, "string cannot start with 0x");
require(_temp[1] != 0x58, "string cannot start with 0X");
}
// create a bool to track if we have a non number character
bool _hasNonNumber;
// convert & check
for (uint256 i = 0; i < _length; i++)
{
// if its uppercase A-Z
if (_temp[i] > 0x40 && _temp[i] < 0x5b)
{
// convert to lower case a-z
_temp[i] = byte(uint(_temp[i]) + 32);
// we have a non number
if (_hasNonNumber == false)
_hasNonNumber = true;
} else {
require
(
// require character is a space
_temp[i] == 0x20 ||
// OR lowercase a-z
(_temp[i] > 0x60 && _temp[i] < 0x7b) ||
// or 0-9
(_temp[i] > 0x2f && _temp[i] < 0x3a),
"string contains invalid characters"
);
// make sure theres not 2x spaces in a row
if (_temp[i] == 0x20)
require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");
// see if we have a character other than a number
if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
_hasNonNumber = true;
}
}
require(_hasNonNumber == true, "string cannot be only numbers");
bytes32 _ret;
assembly {
_ret := mload(add(_temp, 32))
}
return (_ret);
}
}
/***********************************************************
* NTech3DDatasets library
***********************************************************/
library NTech3DDatasets {
struct EventReturns {
uint256 compressedData;
uint256 compressedIDs;
address winnerAddr; // winner address
bytes32 winnerName; // winner name
uint256 amountWon; // amount won
uint256 newPot; // amount in new pot
uint256 NTAmount; // amount distributed to nt
uint256 genAmount; // amount distributed to gen
uint256 potAmount; // amount added to pot
}
struct Player {
address addr; // player address
bytes32 name; // player name
uint256 win; // winnings vault
uint256 gen; // general vault
uint256 aff; // affiliate vault
uint256 lrnd; // last round played
uint256 laff; // last affiliate id used
}
struct PlayerRounds {
uint256 eth; // eth player has added to round (used for eth limiter)
uint256 keys; // keys
uint256 mask; // player mask
uint256 ico; // ICO phase investment
}
struct Round {
uint256 plyr; // pID of player in lead
uint256 team; // tID of team in lead
uint256 end; // time ends/ended
bool ended; // has round end function been ran
uint256 strt; // time round started
uint256 keys; // keys
uint256 eth; // total eth in
uint256 pot; // eth to pot (during round) / final amount paid to winner (after round ends)
uint256 mask; // global mask
uint256 ico; // total eth sent in during ICO phase
uint256 icoGen; // total eth for gen during ICO phase
uint256 icoAvg; // average key price for ICO phase
uint256 prevres; // 上一轮或者奖池互换流入本轮的奖金
}
struct TeamFee {
uint256 gen; // % of buy in thats paid to key holders of current round
uint256 nt; // % of buy in thats paid to nt holders
}
struct PotSplit {
uint256 gen; // % of pot thats paid to key holders of current round
uint256 nt; // % of pot thats paid to NT foundation
}
}
/***********************************************************
interface : OtherNTech3D
主要用作奖池互换
***********************************************************/
interface OtherNTech3D {
function potSwap() external payable;
}
/***********************************************************
* NTech3DKeysCalcLong library
***********************************************************/
library NTech3DKeysCalcLong {
using SafeMath for *;
/**
* @dev calculates number of keys received given X eth
* @param _curEth current amount of eth in contract
* @param _newEth eth being spent
* @return amount of ticket purchased
*/
function keysRec(uint256 _curEth, uint256 _newEth)
internal
pure
returns (uint256)
{
return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
}
/**
* @dev calculates amount of eth received if you sold X keys
* @param _curKeys current amount of keys that exist
* @param _sellKeys amount of keys you wish to sell
* @return amount of eth received
*/
function ethRec(uint256 _curKeys, uint256 _sellKeys)
internal
pure
returns (uint256)
{
return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
}
/**
* @dev calculates how many keys would exist with given an amount of eth
* @param _eth eth "in contract"
* @return number of keys that would exist
*/
function keys(uint256 _eth)
internal
pure
returns(uint256)
{
return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
}
/**
* @dev calculates how much eth would be in contract given a number of keys
* @param _keys number of keys "in contract"
* @return eth that would exists
*/
function eth(uint256 _keys)
internal
pure
returns(uint256)
{
return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
}
}
/***********************************************************
* ERC20 interface
* see https://github.com/ethereum/EIPs/issues/20
***********************************************************/
contract ERC20 {
function totalSupply() public view returns (uint supply);
function balanceOf( address who ) public view returns (uint value);
function allowance( address owner, address spender ) public view returns (uint _allowance);
function transfer( address to, uint value) public returns (bool ok);
function transferFrom( address from, address to, uint value) public returns (bool ok);
function approve( address spender, uint value ) public returns (bool ok);
event Transfer( address indexed from, address indexed to, uint value);
event Approval( address indexed owner, address indexed spender, uint value);
}
/***********************************************************
interface : PlayerBookInterface
***********************************************************/
interface PlayerBookInterface {
function getPlayerID(address _addr) external returns (uint256);
function getPlayerName(uint256 _pID) external view returns (bytes32);
function getPlayerLAff(uint256 _pID) external view returns (uint256);
function getPlayerAddr(uint256 _pID) external view returns (address);
function getNameFee() external view returns (uint256);
function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256);
function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256);
function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256);
}
/***********************************************************
* NTech3DLong contract
***********************************************************/
contract NTech3DLong {
/******************************************************************************************
导入的库
*/
using SafeMath for *;
using NameFilter for string;
using NTech3DKeysCalcLong for uint256;
/******************************************************************************************
事件
*/
// 当玩家注册名字时调用
event onNewName
(
uint256 indexed playerID,
address indexed playerAddress,
bytes32 indexed playerName,
bool isNewPlayer,
uint256 affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 amountPaid,
uint256 timeStamp
);
// 购买完成后或者再次载入时调用
event onEndTx
(
uint256 compressedData,
uint256 compressedIDs,
bytes32 playerName,
address playerAddress,
uint256 ethIn,
uint256 keysBought,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 NTAmount,
uint256 genAmount,
uint256 potAmount,
uint256 airDropPot
);
// 撤退时调用
event onWithdraw
(
uint256 indexed playerID,
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 timeStamp
);
// 当撤退并且分发时调用
event onWithdrawAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 NTAmount,
uint256 genAmount
);
// 当一轮时间过后,有玩家试图购买时调用
event onBuyAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethIn,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 NTAmount,
uint256 genAmount
);
//当一轮时间过后,有玩家重载时调用
event onReLoadAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 NTAmount,
uint256 genAmount
);
// 附属账号有支付时调用
event onAffiliatePayout
(
uint256 indexed affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 indexed roundID,
uint256 indexed buyerID,
uint256 amount,
uint256 timeStamp
);
// 收到奖池存款调用
event onPotSwapDeposit
(
uint256 roundID,
uint256 amountAddedToPot
);
/******************************************************************************************
合约权限管理
设计:会设计用户权限管理,
9 => 管理员角色
0 => 没有任何权限
*/
// 用户地址到角色的表
mapping(address => uint256) private users ;
// 初始化
function initUsers() private {
// 初始化下列地址帐户为管理员
users[0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2] = 9 ;
users[msg.sender] = 9 ;
}
// 是否是管理员
modifier isAdmin() {
uint256 role = users[msg.sender];
require((role==9), "Must be admin.");
_;
}
/******************************************************************************************
检查是帐户地址还是合约地址
*/
modifier isHuman {
address _addr = msg.sender;
uint256 _codeLength;
assembly {_codeLength := extcodesize(_addr)}
require(_codeLength == 0, "Humans only");
_;
}
/******************************************************************************************
关联合约定义
*/
// 玩家信息数据库合约
PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x410526CD583AF0bE0530166d53Efcd7da969F7B7);
/******************************************************************************************
社区地址
NT基金地址
代币空投的收款地址
*/
address public communityAddr_;
address public NTFoundationAddr_;
address private NTTokenSeller_ ;
/******************************************************************************************
设置代币地址
条件:
1. 地址不能为空
2. 管理员
*/
ERC20 private NTToken_ ;
function setNTToken(address addr) isAdmin() public {
require(address(addr) != address(0x0), "Empty address not allowed.");
NTToken_ = ERC20(addr);
}
/**
将游戏合约中的未用完的代币转走
条件:
1. 数值大于0
2. 管理员
*/
function transfer(address toAddr, uint256 amount) isAdmin() public returns (bool) {
require(amount > 0, "Must > 0 ");
NTToken_.transfer(toAddr, amount);
return true ;
}
/******************************************************************************************
启动
*/
bool public activated_ = false;
modifier isActivated() {
require(activated_ == true, "its not active yet.");
_;
}
/**
TODO
激活游戏
条件:
1、要是管理员
2、要设定代币地址
3、要设定用作奖池呼唤的游戏地址
4、只可以激活一次
*/
function activate() isAdmin() public {
// 必须设定代币地址
require(address(NTToken_) != address(0x0), "Must setup NTToken.");
// 必须设定社区基金地址
require(address(communityAddr_) != address(0x0), "Must setup CommunityAddr_.");
// 必须设定购买NT地址
require(address(NTTokenSeller_) != address(0x0), "Must setup NTTokenSeller.");
// 必须设定NT基金地址
require(address(NTFoundationAddr_) != address(0x0), "Must setup NTFoundationAddr.");
// 只能激活一次
require(activated_ == false, "Only once");
//
activated_ = true ;
// 初始化开始轮信息
rID_ = 1;
round_[1].strt = now ;
round_[1].end = now + rndMax_;
}
/******************************************************************************************
合约信息
*/
string constant public name = "NTech 3D Long Official"; // 合约名称
string constant public symbol = "NT3D"; // 合约符号
/**
*/
uint256 constant private rndInc_ = 1 minutes; // 每购买一个key延迟的时间
uint256 constant private rndMax_ = 6 hours; // 一轮的最长时间
uint256 private ntOf1Ether_ = 30000; // 一个以太兑换30000代币
/******************************************************************************************
奖池互换
*/
OtherNTech3D private otherNTech3D_ ; // 另外一个游戏接口,主要用作奖池呼唤
/**
设定奖池呼唤的另外一个游戏合约地址
条件
1. 管理员权限
2. 之前没有设定过
3. 设定的地址不能为空
*/
function setOtherNTech3D(address _otherNTech3D) isAdmin() public {
require(address(_otherNTech3D) != address(0x0), "Empty address not allowed.");
require(address(otherNTech3D_) == address(0x0), "OtherNTech3D has been set.");
otherNTech3D_ = OtherNTech3D(_otherNTech3D);
}
/******************************************************************************************
判断金额
*/
modifier isWithinLimits(uint256 _eth) {
require(_eth >= 1000000000, "Too little");
require(_eth <= 100000000000000000000000, "Too much");
_;
}
/******************************************************************************************
玩家信息
*/
// 玩家地址 => 玩家ID
mapping (address => uint256) public pIDxAddr_;
// 玩家名称 => 玩家ID
mapping (bytes32 => uint256) public pIDxName_;
// 玩家ID => 玩家信息
mapping (uint256 => NTech3DDatasets.Player) public plyr_;
// 玩家ID => 游戏轮编号 => 玩家游戏轮信息
mapping (uint256 => mapping (uint256 => NTech3DDatasets.PlayerRounds)) public plyrRnds_;
// 玩家ID => 玩家名称 =>
mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_;
/******************************************************************************************
游戏信息
*/
uint256 public rID_; // 当前游戏轮编号
uint256 public airDropPot_; // 空投小奖池
uint256 public airDropTracker_ = 0; // 空投小奖池计数
// 游戏每轮ID => 游戏轮
mapping (uint256 => NTech3DDatasets.Round) public round_;
// 游戏每轮ID -> 团队ID => ETH
mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_;
/******************************************************************************************
团队信息
0 : 水鲸队
1 : 懒熊队
2 : 玩蛇队
3 : 疯牛队
*/
// 团队ID => 分配规则
mapping (uint256 => NTech3DDatasets.TeamFee) public fees_;
// 团队ID => 分配规则
mapping (uint256 => NTech3DDatasets.PotSplit) public potSplit_;
/******************************************************************************************
构造函数
*/
constructor() public {
// 水鲸:本轮玩家 30% 空投 6%
fees_[0] = NTech3DDatasets.TeamFee(30,6);
// 懒熊:本轮玩家 43% 空投 0%
fees_[1] = NTech3DDatasets.TeamFee(43,0);
// 玩蛇:本轮玩家 56% 空投 10%
fees_[2] = NTech3DDatasets.TeamFee(56,10);
// 疯牛:本轮玩家 43% 空投 8%
fees_[3] = NTech3DDatasets.TeamFee(43,8);
// 此轮奖池分配:
// 水鲸:本轮玩家 25%
potSplit_[0] = NTech3DDatasets.PotSplit(15,10);
// 懒熊:本轮玩家 25%
potSplit_[1] = NTech3DDatasets.PotSplit(25,0);
// 玩蛇:本轮玩家 40%
potSplit_[2] = NTech3DDatasets.PotSplit(20,20);
// 疯牛:本轮玩家 40%
potSplit_[3] = NTech3DDatasets.PotSplit(30,10);
// 初始化用户管理
initUsers();
/**
*/
NTToken_ = ERC20(address(0x09341B5d43a9b2362141675b9276B777470222Be));
communityAddr_ = address(0x3C07f9f7164Bf72FDBefd9438658fAcD94Ed4439);
NTTokenSeller_ = address(0x531100a6b3686E6140f170B0920962A5D7A2DD25);
NTFoundationAddr_ = address(0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2);
}
/******************************************************************************************
购买
*/
function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable {
NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
uint256 _pID = pIDxAddr_[msg.sender];
if (_affCode == 0 || _affCode == _pID){
_affCode = plyr_[_pID].laff;
}else if (_affCode != plyr_[_pID].laff) {
plyr_[_pID].laff = _affCode;
}
_team = verifyTeam(_team);
buyCore(_pID, _affCode, _team, _eventData_);
}
function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable {
NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
uint256 _pID = pIDxAddr_[msg.sender];
uint256 _affID;
if (_affCode == address(0) || _affCode == msg.sender){
_affID = plyr_[_pID].laff;
}else{
_affID = pIDxAddr_[_affCode];
if (_affID != plyr_[_pID].laff){
plyr_[_pID].laff = _affID;
}
}
_team = verifyTeam(_team);
buyCore(_pID, _affID, _team, _eventData_);
}
function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable {
NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_);
uint256 _pID = pIDxAddr_[msg.sender];
uint256 _affID;
if (_affCode == '' || _affCode == plyr_[_pID].name){
_affID = plyr_[_pID].laff;
}else{
_affID = pIDxName_[_affCode];
if (_affID != plyr_[_pID].laff){
plyr_[_pID].laff = _affID;
}
}
_team = verifyTeam(_team);
buyCore(_pID, _affID, _team, _eventData_);
}
function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public {
NTech3DDatasets.EventReturns memory _eventData_;
uint256 _pID = pIDxAddr_[msg.sender];
if (_affCode == 0 || _affCode == _pID){
_affCode = plyr_[_pID].laff;
}else if (_affCode != plyr_[_pID].laff) {
plyr_[_pID].laff = _affCode;
}
_team = verifyTeam(_team);
reLoadCore(_pID, _affCode, _team, _eth, _eventData_);
}
function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public {
NTech3DDatasets.EventReturns memory _eventData_;
uint256 _pID = pIDxAddr_[msg.sender];
uint256 _affID;
if (_affCode == address(0) || _affCode == msg.sender){
_affID = plyr_[_pID].laff;
}else{
_affID = pIDxAddr_[_affCode];
if (_affID != plyr_[_pID].laff){
plyr_[_pID].laff = _affID;
}
}
_team = verifyTeam(_team);
reLoadCore(_pID, _affID, _team, _eth, _eventData_);
}
function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public {
NTech3DDatasets.EventReturns memory _eventData_;
uint256 _pID = pIDxAddr_[msg.sender];
uint256 _affID;
if (_affCode == '' || _affCode == plyr_[_pID].name){
_affID = plyr_[_pID].laff;
}else{
_affID = pIDxName_[_affCode];
if (_affID != plyr_[_pID].laff){
plyr_[_pID].laff = _affID;
}
}
_team = verifyTeam(_team);
reLoadCore(_pID, _affID, _team, _eth, _eventData_);
}
/**
撤退
*/
function withdraw() isActivated() isHuman() public {
uint256 _rID = rID_;
uint256 _now = now;
uint256 _pID = pIDxAddr_[msg.sender];
uint256 _eth;
if (_now > round_[_rID].end && (round_[_rID].ended == false) && round_[_rID].plyr != 0){
NTech3DDatasets.EventReturns memory _eventData_;
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
// get their earnings
_eth = withdrawEarnings(_pID);
if (_eth > 0)
plyr_[_pID].addr.transfer(_eth);
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
emit onWithdrawAndDistribute(
msg.sender,
plyr_[_pID].name,
_eth,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.NTAmount,
_eventData_.genAmount
);
}else{
_eth = withdrawEarnings(_pID);
if (_eth > 0)
plyr_[_pID].addr.transfer(_eth);
emit onWithdraw(
_pID,
msg.sender,
plyr_[_pID].name,
_eth,
_now
);
}
}
/******************************************************************************************
注册
*/
function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
emit onNewName(
_pID,
_addr,
_name,
_isNewPlayer,
_affID,
plyr_[_affID].addr,
plyr_[_affID].name,
_paid,
now
);
}
function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
emit onNewName(
_pID,
_addr,
_name,
_isNewPlayer,
_affID,
plyr_[_affID].addr,
plyr_[_affID].name,
_paid,
now
);
}
function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable{
bytes32 _name = _nameString.nameFilter();
address _addr = msg.sender;
uint256 _paid = msg.value;
(bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all);
uint256 _pID = pIDxAddr_[_addr];
emit onNewName(
_pID,
_addr,
_name,
_isNewPlayer,
_affID,
plyr_[_affID].addr,
plyr_[_affID].name,
_paid,
now
);
}
/******************************************************************************************
获取购买价格
*/
function getBuyPrice() public view returns(uint256) {
uint256 _rID = rID_;
uint256 _now = now;
//if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) );
else // rounds over. need price for new round
return ( 75000000000000 ); // init
}
/******************************************************************************************
得到剩余时间
*/
function getTimeLeft() public view returns(uint256) {
uint256 _rID = rID_;
uint256 _now = now;
if (_now < round_[_rID].end)
//if (_now > round_[_rID].strt + rndGap_)
if (_now > round_[_rID].strt)
return( (round_[_rID].end).sub(_now) );
else
//return( (round_[_rID].strt + rndGap_).sub(_now) );
return( (round_[_rID].end).sub(_now) );
else
return(0);
}
function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) {
uint256 _rID = rID_;
if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0){
// if player is winner
if (round_[_rID].plyr == _pID){
// Added by Huwei
uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);
return
(
// Fix by huwei
//(plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ),
(plyr_[_pID].win).add( ((_pot).mul(48)) / 100 ),
(plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ),
plyr_[_pID].aff
);
// if player is not the winner
} else {
return(
plyr_[_pID].win,
(plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ),
plyr_[_pID].aff
);
}
// if round is still going on, or round has ended and round end has been ran
} else {
return(
plyr_[_pID].win,
(plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
plyr_[_pID].aff
);
}
}
function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) {
// Fixed by Huwei
uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);
return( ((((round_[_rID].mask).add(((((_pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) );
//return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) );
}
/**
得到当前此轮信息
*/
function getCurrentRoundInfo() public view
returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) {
uint256 _rID = rID_;
return
(
round_[_rID].ico,
_rID,
round_[_rID].keys,
round_[_rID].end,
round_[_rID].strt,
round_[_rID].pot,
(round_[_rID].team + (round_[_rID].plyr * 10)),
plyr_[round_[_rID].plyr].addr,
plyr_[round_[_rID].plyr].name,
rndTmEth_[_rID][0],
rndTmEth_[_rID][1],
rndTmEth_[_rID][2],
rndTmEth_[_rID][3],
airDropTracker_ + (airDropPot_ * 1000)
);
}
function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256){
uint256 _rID = rID_;
if (_addr == address(0)) {
_addr == msg.sender;
}
uint256 _pID = pIDxAddr_[_addr];
return (
_pID,
plyr_[_pID].name,
plyrRnds_[_pID][_rID].keys,
plyr_[_pID].win,
(plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)),
plyr_[_pID].aff,
plyrRnds_[_pID][_rID].eth
);
}
function buyCore(uint256 _pID, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private {
uint256 _rID = rID_;
uint256 _now = now;
//if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) {
if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) {
core(_rID, _pID, msg.value, _affID, _team, _eventData_);
}else{
if (_now > round_[_rID].end && round_[_rID].ended == false) {
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
emit onBuyAndDistribute(
msg.sender,
plyr_[_pID].name,
msg.value,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.NTAmount,
_eventData_.genAmount
);
}
plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value);
}
}
function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, NTech3DDatasets.EventReturns memory _eventData_) private {
uint256 _rID = rID_;
uint256 _now = now;
//if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) {
if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) {
plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth);
core(_rID, _pID, _eth, _affID, _team, _eventData_);
}else if (_now > round_[_rID].end && round_[_rID].ended == false) {
round_[_rID].ended = true;
_eventData_ = endRound(_eventData_);
_eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID;
emit onReLoadAndDistribute(
msg.sender,
plyr_[_pID].name,
_eventData_.compressedData,
_eventData_.compressedIDs,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.NTAmount,
_eventData_.genAmount
);
}
}
function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private{
if (plyrRnds_[_pID][_rID].keys == 0)
_eventData_ = managePlayer(_pID, _eventData_);
// 每轮早期的限制 (5 ether 以下)
// 智能合约收到的总额达到100 ETH之前,每个以太坊地址最多只能购买总额10个ETH的Key。
if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 10000000000000000000){
uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID][_rID].eth);
uint256 _refund = _eth.sub(_availableLimit);
plyr_[_pID].gen = plyr_[_pID].gen.add(_refund);
_eth = _availableLimit;
}
if (_eth > 1000000000) {
uint256 _keys = (round_[_rID].eth).keysRec(_eth);
if (_keys >= 1000000000000000000){
updateTimer(_keys, _rID);
if (round_[_rID].plyr != _pID)
round_[_rID].plyr = _pID;
if (round_[_rID].team != _team)
round_[_rID].team = _team;
_eventData_.compressedData = _eventData_.compressedData + 100;
}
if (_eth >= 100000000000000000){
// > 0.1 ether, 才有空投
airDropTracker_++;
if (airdrop() == true){
uint256 _prize;
if (_eth >= 10000000000000000000){
// <= 10 ether
_prize = ((airDropPot_).mul(75)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
airDropPot_ = (airDropPot_).sub(_prize);
_eventData_.compressedData += 300000000000000000000000000000000;
}else if(_eth >= 1000000000000000000 && _eth < 10000000000000000000) {
// >= 1 ether and < 10 ether
_prize = ((airDropPot_).mul(50)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
airDropPot_ = (airDropPot_).sub(_prize);
_eventData_.compressedData += 200000000000000000000000000000000;
}else if(_eth >= 100000000000000000 && _eth < 1000000000000000000){
// >= 0.1 ether and < 1 ether
_prize = ((airDropPot_).mul(25)) / 100;
plyr_[_pID].win = (plyr_[_pID].win).add(_prize);
airDropPot_ = (airDropPot_).sub(_prize);
_eventData_.compressedData += 300000000000000000000000000000000;
}
_eventData_.compressedData += 10000000000000000000000000000000;
_eventData_.compressedData += _prize * 1000000000000000000000000000000000;
airDropTracker_ = 0;
}
}
_eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000);
plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys);
plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth);
round_[_rID].keys = _keys.add(round_[_rID].keys);
round_[_rID].eth = _eth.add(round_[_rID].eth);
rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]);
// distribute eth
_eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_);
_eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_);
endTx(_pID, _team, _eth, _keys, _eventData_);
}
}
function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) {
// round_[_rIDlast].mask * plyrRnds_[_pID][_rIDlast].keys / 1000000000000000000 - plyrRnds_[_pID][_rIDlast].mask
return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) );
}
function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256){
uint256 _now = now;
//if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].eth).keysRec(_eth) );
else // rounds over. need keys for new round
return ( (_eth).keys() );
}
function iWantXKeys(uint256 _keys) public view returns(uint256) {
uint256 _rID = rID_;
uint256 _now = now;
//if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0)))
return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) );
else // rounds over. need price for new round
return ( (_keys).eth() );
}
/**
interface : PlayerBookReceiverInterface
*/
function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external {
require (msg.sender == address(PlayerBook), "Called from PlayerBook only");
if (pIDxAddr_[_addr] != _pID)
pIDxAddr_[_addr] = _pID;
if (pIDxName_[_name] != _pID)
pIDxName_[_name] = _pID;
if (plyr_[_pID].addr != _addr)
plyr_[_pID].addr = _addr;
if (plyr_[_pID].name != _name)
plyr_[_pID].name = _name;
if (plyr_[_pID].laff != _laff)
plyr_[_pID].laff = _laff;
if (plyrNames_[_pID][_name] == false)
plyrNames_[_pID][_name] = true;
}
function receivePlayerNameList(uint256 _pID, bytes32 _name) external {
require (msg.sender == address(PlayerBook), "Called from PlayerBook only");
if(plyrNames_[_pID][_name] == false)
plyrNames_[_pID][_name] = true;
}
/**
识别玩家
*/
function determinePID(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) {
uint256 _pID = pIDxAddr_[msg.sender];
if (_pID == 0){
_pID = PlayerBook.getPlayerID(msg.sender);
bytes32 _name = PlayerBook.getPlayerName(_pID);
uint256 _laff = PlayerBook.getPlayerLAff(_pID);
pIDxAddr_[msg.sender] = _pID;
plyr_[_pID].addr = msg.sender;
if (_name != ""){
pIDxName_[_name] = _pID;
plyr_[_pID].name = _name;
plyrNames_[_pID][_name] = true;
}
if (_laff != 0 && _laff != _pID)
plyr_[_pID].laff = _laff;
// set the new player bool to true
_eventData_.compressedData = _eventData_.compressedData + 1;
}
return _eventData_ ;
}
/**
识别团队,默认是玩蛇队
*/
function verifyTeam(uint256 _team) private pure returns (uint256) {
if (_team < 0 || _team > 3)
return(2);
else
return(_team);
}
function managePlayer(uint256 _pID, NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) {
if (plyr_[_pID].lrnd != 0)
updateGenVault(_pID, plyr_[_pID].lrnd);
plyr_[_pID].lrnd = rID_;
_eventData_.compressedData = _eventData_.compressedData + 10;
return _eventData_ ;
}
/**
这轮游戏结束
*/
function endRound(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) {
uint256 _rID = rID_;
uint256 _winPID = round_[_rID].plyr;
uint256 _winTID = round_[_rID].team;
// grab our pot amount
// Fixed by Huwei
//uint256 _pot = round_[_rID].pot;
uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres);
// 赢家获取奖池的48%
uint256 _win = (_pot.mul(48)) / 100;
// 社区基金获取2%
uint256 _com = (_pot / 50);
// 这轮游戏玩家获取的奖金
uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100;
// NT基金获取的奖金
uint256 _nt = (_pot.mul(potSplit_[_winTID].nt)) / 100;
// 剩下的奖金
uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_nt);
// calculate ppt for round mask
uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000);
if (_dust > 0){
_gen = _gen.sub(_dust);
_res = _res.add(_dust);
}
plyr_[_winPID].win = _win.add(plyr_[_winPID].win);
if(address(communityAddr_)!=address(0x0)) {
// 将社区基金奖金发到社区奖金地址
communityAddr_.transfer(_com);
_com = 0 ;
}else{
// 如果没有设置社区地址,那么资金分给下一轮
_res = SafeMath.add(_res,_com);
_com = 0 ;
}
if(_nt > 0) {
if(address(NTFoundationAddr_) != address(0x0)) {
// 分配NT基金奖金
NTFoundationAddr_.transfer(_nt);
}else{
// 如果没有设定,那么资金计入下一轮
_res = SafeMath.add(_res,_nt);
_nt = 0 ;
}
}
round_[_rID].mask = _ppt.add(round_[_rID].mask);
_eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000);
_eventData_.winnerAddr = plyr_[_winPID].addr;
_eventData_.winnerName = plyr_[_winPID].name;
_eventData_.amountWon = _win;
_eventData_.genAmount = _gen;
_eventData_.NTAmount = 0;
_eventData_.newPot = _res;
// 下一轮
rID_++;
_rID++;
round_[_rID].strt = now;
round_[_rID].end = now.add(rndMax_);
//round_[_rID].end = now.add(rndInit_).add(rndGap_);
// Fixed by Huwei
//round_[_rID].pot = _res;
round_[_rID].prevres = _res;
return(_eventData_);
}
function updateGenVault(uint256 _pID, uint256 _rIDlast) private {
uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast);
if (_earnings > 0){
plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen);
plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask);
}
}
function updateTimer(uint256 _keys, uint256 _rID) private {
uint256 _now = now;
uint256 _newTime;
if (_now > round_[_rID].end && round_[_rID].plyr == 0)
_newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now);
else
_newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end);
if (_newTime < (rndMax_).add(_now))
round_[_rID].end = _newTime;
else
round_[_rID].end = rndMax_.add(_now);
}
/**
计算空投小奖池
*/
function airdrop() private view returns(bool) {
uint256 seed = uint256(keccak256(abi.encodePacked(
(block.timestamp).add
(block.difficulty).add
((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add
(block.gaslimit).add
((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add
(block.number)
)));
if((seed - ((seed / 1000) * 1000)) < airDropTracker_)
return(true);
else
return(false);
}
/**
社区基金
奖池互换
分享
空投
*/
function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_)
private returns(NTech3DDatasets.EventReturns){
// 社区基金2%, 如果没有设置社区基金,则这份空投到用户地址
uint256 _com = _eth / 50;
// 奖池互换,如果没有设置,进入到社区基金
uint256 _long = _eth / 100;
if(address(otherNTech3D_)!=address(0x0)){
otherNTech3D_.potSwap.value(_long)();
}else{
_com = _com.add(_long);
}
// 分享,如果没有分享,进入到社区基金
uint256 _aff = _eth / 10;
if (_affID != _pID && plyr_[_affID].name != '') {
plyr_[_affID].aff = _aff.add(plyr_[_affID].aff);
emit onAffiliatePayout(
_affID,
plyr_[_affID].addr,
plyr_[_affID].name,
_rID,
_pID,
_aff,
now
);
} else {
_com = _com.add(_aff);
}
// 空投(如果没有设置社区基金地址,那么放入空投)
uint256 _nt = (_eth.mul(fees_[_team].nt)).div(100);
if(_com>0){
if(address(communityAddr_)!=address(0x0)) {
communityAddr_.transfer(_com);
}else{
_nt = _nt.add(_com);
}
}
if(_nt > 0 ){
// amount = _nt * ntOf1Ether_ ;
uint256 amount = _nt.mul(ntOf1Ether_);
_eventData_.NTAmount = amount.add(_eventData_.NTAmount);
NTToken_.transfer(msg.sender,amount);
//
address(NTTokenSeller_).transfer(_nt);
}
return (_eventData_) ;
}
/**
奖池互换
*/
function potSwap() external payable {
// 奖池互换放入下一轮
uint256 _rID = rID_ + 1;
// Fixed by Huwei
//round_[_rID].pot = round_[_rID].pot.add(msg.value);
round_[_rID].prevres = round_[_rID].prevres.add(msg.value);
emit onPotSwapDeposit(
_rID,
msg.value
);
}
/**
持有者
空投小奖池
终极奖池
*/
function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_)
private returns(NTech3DDatasets.EventReturns) {
// 持有者的份额
uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100;
// 空投小奖池 1%
uint256 _air = (_eth / 100);
airDropPot_ = airDropPot_.add(_air);
// 14% = 2% 社区 + 10% 佣金 + 1% 奖池互换 + 1% 空投小奖池
_eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].nt)) / 100));
// 奖池
uint256 _pot = _eth.sub(_gen);
uint256 _dust = updateMasks(_rID, _pID, _gen, _keys);
if (_dust > 0)
_gen = _gen.sub(_dust);
round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot);
_eventData_.genAmount = _gen.add(_eventData_.genAmount);
_eventData_.potAmount = _pot;
return(_eventData_);
}
function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) {
uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys);
round_[_rID].mask = _ppt.add(round_[_rID].mask);
uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000);
plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask);
return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)));
}
/**
撤退时的收益
*/
function withdrawEarnings(uint256 _pID) private returns(uint256) {
updateGenVault(_pID, plyr_[_pID].lrnd);
uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff);
if (_earnings > 0){
plyr_[_pID].win = 0;
plyr_[_pID].gen = 0;
plyr_[_pID].aff = 0;
}
return(_earnings);
}
/**
完成交易
*/
function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_) private {
_eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000);
_eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000);
emit onEndTx(
_eventData_.compressedData,
_eventData_.compressedIDs,
plyr_[_pID].name,
msg.sender,
_eth,
_keys,
_eventData_.winnerAddr,
_eventData_.winnerName,
_eventData_.amountWon,
_eventData_.newPot,
_eventData_.NTAmount,
_eventData_.genAmount,
_eventData_.potAmount,
airDropPot_
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"getBuyPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXname","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropTracker_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_otherNTech3D","type":"address"}],"name":"setOtherNTech3D","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"round_","outputs":[{"name":"plyr","type":"uint256"},{"name":"team","type":"uint256"},{"name":"end","type":"uint256"},{"name":"ended","type":"bool"},{"name":"strt","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"eth","type":"uint256"},{"name":"pot","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"},{"name":"icoGen","type":"uint256"},{"name":"icoAvg","type":"uint256"},{"name":"prevres","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"fees_","outputs":[{"name":"gen","type":"uint256"},{"name":"nt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"communityAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_laff","type":"uint256"}],"name":"receivePlayerInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"rndTmEth_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerVaults","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NTFoundationAddr_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRoundInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"reLoadXaddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"uint256"},{"name":"_team","type":"uint256"}],"name":"buyXid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_pID","type":"uint256"},{"name":"_name","type":"bytes32"}],"name":"receivePlayerNameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"address"},{"name":"_team","type":"uint256"}],"name":"buyXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setNTToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrRnds_","outputs":[{"name":"eth","type":"uint256"},{"name":"keys","type":"uint256"},{"name":"mask","type":"uint256"},{"name":"ico","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_affCode","type":"bytes32"},{"name":"_team","type":"uint256"}],"name":"buyXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"toAddr","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"potSplit_","outputs":[{"name":"gen","type":"uint256"},{"name":"nt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimeLeft","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rID","type":"uint256"},{"name":"_eth","type":"uint256"}],"name":"calcKeysReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"uint256"}],"name":"iWantXKeys","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"activated_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"airDropPot_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"win","type":"uint256"},{"name":"gen","type":"uint256"},{"name":"aff","type":"uint256"},{"name":"lrnd","type":"uint256"},{"name":"laff","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"potSwap","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerInfoByAddress","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"keysBought","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"},{"indexed":false,"name":"potAmount","type":"uint256"},{"indexed":false,"name":"airDropPot","type":"uint256"}],"name":"onEndTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethOut","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onWithdrawAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"ethIn","type":"uint256"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onBuyAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"compressedData","type":"uint256"},{"indexed":false,"name":"compressedIDs","type":"uint256"},{"indexed":false,"name":"winnerAddr","type":"address"},{"indexed":false,"name":"winnerName","type":"bytes32"},{"indexed":false,"name":"amountWon","type":"uint256"},{"indexed":false,"name":"newPot","type":"uint256"},{"indexed":false,"name":"NTAmount","type":"uint256"},{"indexed":false,"name":"genAmount","type":"uint256"}],"name":"onReLoadAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":true,"name":"roundID","type":"uint256"},{"indexed":true,"name":"buyerID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onAffiliatePayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"roundID","type":"uint256"},{"indexed":false,"name":"amountAddedToPot","type":"uint256"}],"name":"onPotSwapDeposit","type":"event"}]Contract Creation Code
60806040526004805460a060020a60ff02191690556175306005556000600e553480156200002c57600080fd5b50604080518082018252601e808252600660208084019182526000808052601180835294517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b75591517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b85584518086018652602b808252818301848152600180865287855292517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55255517f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b553558651808801885260388152600a818501818152600280885289875292517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c62855517f08037d7b151cc412d25674a4e66b334d9ae9d2e5517a7feaae5cdb828bf1c629558851808a018a529283526008838601908152600380885298865292517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c87ff5591517f9bfbaa59f8e10e7868f8b402de9d605a390c45ddaebd8c9de3c6f31e733c88005587518089018952600f8152808501838152868052601280875291517f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b55517f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7c558851808a018a5260198152808601878152948752818652517f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35592517f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a455875180890189526014808252818601908152918652838552517f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b255517f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b3558651808801909752938652858201938452939091529190915290517f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976a55517f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976b556200034b640100000000620003d5810204565b60048054600160a060020a03199081167309341b5d43a9b2362141675b9276b777470222be17909155600180548216733c07f9f7164bf72fdbefd9438658facd94ed443917905560038054821673531100a6b3686e6140f170b0920962a5d7a2dd25179055600280549091167389b2e7ee504afd522e07f80ae7b9d4d228af3fe21790556200040d565b6000602081905260097ff25715a569b1a79ae52abfbdc79bc4bfb1801cbc0f53c65f2e725338f898a573819055338252604090912055565b615800806200041d6000396000f3006080604052600436106101f85763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e881146101fd57806306fdde0314610224578063079ce327146102ae5780630f15f4c0146102ce57806310f01eba146102e357806311a09ae7146103045780631bf678cf1461031957806324c33d331461033a5780632660316e146103b75780632ce21999146103e65780632e19ebdc14610417578063349cdcac1461042f5780633ccfd60b1461044d5780633ddd4698146104625780633f03aab4146104be57806349cc635d146104ef5780635893d48114610519578063624ae5c014610534578063630664341461054957806363c194f11461057f578063685ffd8314610594578063747dff42146105e757806382bfc739146106725780638f38f309146106995780638f7140ea146106a7578063921dec21146106c257806395d89b411461071557806398a0871d1461072a5780639ae5dc9114610741578063a2bccae914610762578063a65b37a1146107a3578063a9059cbb146107b1578063c519500e146107d5578063c7e284b8146107ed578063ce89c80c14610802578063cf8080001461081d578063d53b267914610835578063d87574e01461084a578063de7874f31461085f578063ed78cf4a146108b9578063ee0b5d8b146108c1575b600080fd5b34801561020957600080fd5b5061021261091a565b60408051918252519081900360200190f35b34801561023057600080fd5b506102396109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027357818101518382015260200161025b565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102cc600435602435604435610a12565b005b3480156102da57600080fd5b506102cc610c04565b3480156102ef57600080fd5b50610212600160a060020a0360043516610ec5565b34801561031057600080fd5b50610212610ed7565b34801561032557600080fd5b506102cc600160a060020a0360043516610edd565b34801561034657600080fd5b50610352600435611024565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b3480156103c357600080fd5b506103d260043560243561108f565b604080519115158252519081900360200190f35b3480156103f257600080fd5b506103fe6004356110af565b6040805192835260208301919091528051918290030190f35b34801561042357600080fd5b506102126004356110c8565b34801561043b57600080fd5b506102cc6004356024356044356110da565b34801561045957600080fd5b506102cc6112a6565b6040805160206004803580820135601f81018490048402850184019095528484526102cc94369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561161a565b3480156104ca57600080fd5b506104d36117d3565b60408051600160a060020a039092168252519081900360200190f35b3480156104fb57600080fd5b506102cc600435600160a060020a03602435166044356064356117e2565b34801561052557600080fd5b506102126004356024356119ad565b34801561054057600080fd5b506102126119ca565b34801561055557600080fd5b506105616004356119d0565b60408051938452602084019290925282820152519081900360600190f35b34801561058b57600080fd5b506104d3611b8f565b6040805160206004803580820135601f81018490048402850184019095528484526102cc943694929360249392840191908190840183828082843750949750508435955050505050602001351515611b9e565b3480156105f357600080fd5b506105fc611c7e565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561067e57600080fd5b506102cc600160a060020a0360043516602435604435611e7c565b6102cc60043560243561205e565b3480156106b357600080fd5b506102cc60043560243561222b565b6040805160206004803580820135601f81018490048402850184019095528484526102cc9436949293602493928401919081908401838280828437509497505084359550505050506020013515156122e2565b34801561072157600080fd5b506102396123c2565b6102cc600160a060020a03600435166024356123f9565b34801561074d57600080fd5b506102cc600160a060020a03600435166125f6565b34801561076e57600080fd5b5061077d6004356024356126dc565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102cc60043560243561270e565b3480156107bd57600080fd5b506103d2600160a060020a03600435166024356128f1565b3480156107e157600080fd5b506103fe600435612a4a565b3480156107f957600080fd5b50610212612a63565b34801561080e57600080fd5b50610212600435602435612aea565b34801561082957600080fd5b50610212600435612b85565b34801561084157600080fd5b506103d2612c33565b34801561085657600080fd5b50610212612c43565b34801561086b57600080fd5b50610877600435612c49565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6102cc612c90565b3480156108cd57600080fd5b506108e2600160a060020a0360043516612d0e565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b600c546000818152600f602052604081206004015490919042908111801561098457506000828152600f60205260409020600201548111158061098457506000828152600f60205260409020600201548111801561098457506000828152600f6020526040902054155b156109cc576000828152600f60205260409020600501546109c590670de0b6b3a7640000906109b9908263ffffffff612de316565b9063ffffffff612e4416565b92506109d6565b6544364c5bb00092505b505090565b60408051808201909152601681527f4e54656368203344204c6f6e67204f6666696369616c00000000000000000000602082015281565b610a1a6156db565b600454600090819060a060020a900460ff161515600114610a73576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015610aba576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015610b05576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115610b55576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450881580610b84575060008581526009602052604090206001015489145b15610ba2576000858152600960205260409020600601549350610be1565b6000898152600860209081526040808320548884526009909252909120600601549094508414610be15760008581526009602052604090206006018490555b610bea88612e71565b9750610bf985858a8a8a612e96565b505050505050505050565b3360009081526020819052604090205460098114610c5a576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600454600160a060020a03161515610cbc576040805160e560020a62461bcd02815260206004820152601360248201527f4d757374207365747570204e54546f6b656e2e00000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515610d1e576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600354600160a060020a03161515610d80576040805160e560020a62461bcd02815260206004820152601960248201527f4d757374207365747570204e54546f6b656e53656c6c65722e00000000000000604482015290519081900360640190fd5b600254600160a060020a03161515610de2576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207365747570204e54466f756e646174696f6e416464722e00000000604482015290519081900360640190fd5b60045460a060020a900460ff1615610e44576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600c819055600052600f602052427f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f893819055615460017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89155565b60076020526000908152604090205481565b600e5481565b3360009081526020819052604090205460098114610f33576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a0382161515610f93576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600654600160a060020a031615610ff4576040805160e560020a62461bcd02815260206004820152601a60248201527f4f746865724e54656368334420686173206265656e207365742e000000000000604482015290519081900360640190fd5b506006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600b60209081526000928352604080842090915290825290205460ff1681565b6011602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6110e26156db565b60045460009060a060020a900460ff161515600114611139576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611180576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b84633b9aca008110156111cb576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561121b576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061123957508388145b15611257576000848152600960205260409020600601549750611284565b60008481526009602052604090206006015488146112845760008481526009602052604090206006018890555b61128d87612e71565b965061129c8489898989612e96565b5050505050505050565b6000806000806112b46156db565b60045460a060020a900460ff161515600114611308576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b801561134f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b600c5433600090815260076020908152604080832054848452600f9092529091206002015491985042975095508611801561139c57506000878152600f602052604090206003015460ff16155b80156113b557506000878152600f602052604090205415155b1561155b576000878152600f60205260409020600301805460ff191660011790556113df836130ae565b92506113ea856134ff565b9350600084111561143b57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611439573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611611565b611564856134ff565b935060008411156115b557600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156115b3573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611668576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6116718b613592565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263aa4d490b928a926084808201939182900301818588803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050506040513d604081101561172d57600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b3373410526cd583af0be0530166d53efcd7da969f7b71461184d576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a038316600090815260076020526040902054841461188857600160a060020a03831660009081526007602052604090208490555b60008281526008602052604090205484146118af5760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611905576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b60008481526009602052604090206001015482146119325760008481526009602052604090206001018290555b600084815260096020526040902060060154811461195f5760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff1615156119a7576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b600c5481565b600c546000818152600f602052604081206002015490918291829190829042118015611a0e57506000828152600f602052604090206003015460ff16155b8015611a2757506000828152600f602052604090205415155b15611b5e576000828152600f6020526040902054861415611b22576000828152600f60205260409020600c810154600790910154611a6a9163ffffffff612de316565b9050611aab6064611a8283603063ffffffff613da516565b811515611a8b57fe5b60008981526009602052604090206002015491900463ffffffff612de316565b6000878152600a60209081526040808320868452909152902060020154611b0490611ae690611ada8a87613e1c565b9063ffffffff613f0b16565b6000898152600960205260409020600301549063ffffffff612de316565b60008881526009602052604090206004015491965094509250611b86565b6000868152600960209081526040808320600290810154600a8452828520878652909352922090910154611b0490611ae690611ada8a87613e1c565b60008681526009602052604090206002810154600590910154611b0490611ae6908990613f6b565b50509193909250565b600254600160a060020a031681565b6000808080808033803b8015611bec576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b611bf58b613592565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263745ea0c1928a926084808201939182900301818588803b15801561170257600080fd5b6000806000806000806000806000806000806000806000600c549050600f60008281526020019081526020016000206009015481600f600084815260200190815260200160002060050154600f600085815260200190815260200160002060020154600f600086815260200190815260200160002060040154600f600087815260200190815260200160002060070154600f600088815260200190815260200160002060000154600a02600f6000898152602001908152602001600020600101540160096000600f60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600f60008c815260200190815260200160002060000154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e815260200190815260200160002060006003815260200190815260200160002054600d546103e802600e54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b611e846156db565b600454600090819060a060020a900460ff161515600114611edd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611f24576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015611f6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611fbf576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a0389161580611fef5750600160a060020a03891633145b1561200d576000858152600960205260409020600601549350610be1565b600160a060020a0389166000908152600760209081526040808320548884526009909252909120600601549094508414610be1576000858152600960205260409020600601849055610bea88612e71565b6120666156db565b60045460009060a060020a900460ff1615156001146120bd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015612104576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca0081101561214f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561219f576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b6121a885613fc8565b3360009081526007602052604090205490955093508615806121c957508387145b156121e7576000848152600960205260409020600601549650612214565b60008481526009602052604090206006015487146122145760008481526009602052604090206006018790555b61221d86612e71565b95506116118488888861427c565b3373410526cd583af0be0530166d53efcd7da969f7b714612296576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600b6020908152604080832084845290915290205460ff1615156122de576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612330576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6123398b613592565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263c0942dfd928a926084808201939182900301818588803b15801561170257600080fd5b60408051808201909152600481527f4e54334400000000000000000000000000000000000000000000000000000000602082015281565b6124016156db565b600454600090819060a060020a900460ff16151560011461245a576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156124a1576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca008110156124ec576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561253c576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61254586613fc8565b336000908152600760205260409020549096509450600160a060020a03881615806125785750600160a060020a03881633145b156125965760008581526009602052604090206006015493506125df565b600160a060020a03881660009081526007602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490555b6125e887612e71565b965061129c8585898961427c565b336000908152602081905260409020546009811461264c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a03821615156126ac576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6127166156db565b600454600090819060a060020a900460ff16151560011461276f576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156127b6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca00811015612801576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612851576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61285a86613fc8565b33600090815260076020526040902054909650945087158061288c575060008581526009602052604090206001015488145b156128aa5760008581526009602052604090206006015493506125df565b60008881526008602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490556125e887612e71565b3360009081526020819052604081205460098114612947576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b6000831161299f576040805160e560020a62461bcd02815260206004820152600960248201527f4d757374203e2030200000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018790529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b505050506040513d6020811015612a3c57600080fd5b5060019250505b5092915050565b6012602052600090815260409020805460019091015482565b600c546000818152600f60205260408120600201549091904290811015612ae1576000828152600f6020526040902060040154811115612abf576000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b6000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b600092506109d6565b6000828152600f6020526040812060040154429081118015612b4e57506000848152600f602052604090206002015481111580612b4e57506000848152600f602052604090206002015481118015612b4e57506000848152600f6020526040902054155b15612b7c576000848152600f6020526040902060060154612b75908463ffffffff6144b216565b9150612a43565b612b75836144d3565b600c546000818152600f6020526040812060040154909190429081118015612bef57506000828152600f602052604090206002015481111580612bef57506000828152600f602052604090206002015481118015612bef57506000828152600f6020526040902054155b15612c23576000828152600f6020526040902060050154612c1c9085906109b9908263ffffffff612de316565b9250612c2c565b612c1c8461454b565b5050919050565b60045460a060020a900460ff1681565b600d5481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600c80546001016000818152600f6020526040902090910154612cb9903463ffffffff612de316565b6000828152600f6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600c54915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612da490612d86908690613f6b565b6000878152600960205260409020600301549063ffffffff612de316565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b81810182811015612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000612e6a612e61612e5c858563ffffffff613f0b16565b61454b565b611ada8561454b565b9392505050565b600080821080612e815750600382115b15612e8e57506002612e91565b50805b919050565b600c546000818152600f6020526040902060040154429081118015612efd57506000828152600f602052604090206002015481111580612efd57506000828152600f602052604090206002015481118015612efd57506000828152600f6020526040902054155b15612f3457612f0f84611ada896134ff565b600088815260096020526040902060030155612f2f8288868989886145b8565b611611565b6000828152600f602052604090206002015481118015612f6657506000828152600f602052604090206003015460ff16155b15611611576000828152600f60205260409020600301805460ff19166001179055612f90836130ae565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6130b66156db565b600c80546000818152600f6020526040812080546001820154948201546007909201549394909390929182918291829182918291829182916130fd9163ffffffff612de316565b9750606461311289603063ffffffff613da516565b81151561311b57fe5b04965060328860008b8152601260205260409020549190049650606490613149908a9063ffffffff613da516565b81151561315257fe5b60008b815260126020526040902060010154919004955060649061317d908a9063ffffffff613da516565b81151561318657fe5b0493506131a184611ada87818a818e8e63ffffffff613f0b16565b60008c8152600f60205260409020600501549093506131ce86670de0b6b3a764000063ffffffff613da516565b8115156131d757fe5b60008d8152600f6020526040902060050154919004925061322590670de0b6b3a76400009061320d90859063ffffffff613da516565b81151561321657fe5b8791900463ffffffff613f0b16565b9050600081111561325557613240858263ffffffff613f0b16565b9450613252838263ffffffff612de316565b92505b60008a81526009602052604090206002015461327890889063ffffffff612de316565b60008b815260096020526040902060020155600154600160a060020a0316156132df57600154604051600160a060020a039091169087156108fc029088906000818181858888f193505050501580156132d5573d6000803e3d6000fd5b50600095506132f0565b6132e98387612de3565b9250600095505b600084111561335b57600254600160a060020a03161561334a57600254604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613344573d6000803e3d6000fd5b5061335b565b6133548385612de3565b9250600093505b60008b8152600f602052604090206008015461337e90839063ffffffff612de316565b600f60008d815260200190815260200160002060080181905550600f60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600c600081548092919060010191905055508a806001019b505042600f60008d8152602001908152602001600020600401819055506134d061546042612de390919063ffffffff16565b60008c8152600f602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b600081815260096020526040812060050154819061351e908490614b09565b60008381526009602052604090206004810154600382015460029092015461355c92613550919063ffffffff612de316565b9063ffffffff612de316565b905060008111156135885760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906135ad5750600084115b1515613629576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561363857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561369f5750846001850381518110151561367757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561371b576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561372a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561386d5784600181518110151561376457fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a02141515156137e1576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b8460018151811015156137f057fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561386d576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613d3d5784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106138aa57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561391e575084517f5b00000000000000000000000000000000000000000000000000000000000000908690849081106138ff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1561398b57848281518110151561393157fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561396257fe5b906020010190600160f860020a031916908160001a90535082151561398657600192505b613d32565b848281518110151561399957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613a69575084517f6000000000000000000000000000000000000000000000000000000000000000908690849081106139f557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613a69575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613a4a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613b13575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613a9f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b13575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613af457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613b8f576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613b9d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613c7c578482600101815181101515613bd957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613c7c576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613d28575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613cb557fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613d28575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613d0957fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613d3257600192505b600190910190613872565b600183151514613d97576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515613db657506000612e3e565b50818102818382811515613dc657fe5b0414612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600f60205260408120600c8101546007909101548291613e47919063ffffffff612de316565b6000858152600a602090815260408083208784528252808320600190810154600f8452828520600581015492015485526012909352922054929350670de0b6b3a764000092613ef992613eed91613ec4908690606490613eae908a9063ffffffff613da516565b811515613eb757fe5b049063ffffffff613da516565b811515613ecd57fe5b6000898152600f602052604090206008015491900463ffffffff612de316565b9063ffffffff613da516565b811515613f0257fe5b04949350505050565b600082821115613f65576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600f90935290832060080154612e6a92670de0b6b3a764000091613fb291613da5565b811515613fbb57fe5b049063ffffffff613f0b16565b613fd06156db565b33600090815260076020526040812054908082151561427357604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173410526cd583af0be0530166d53efcd7da969f7b79163e56556a99160248083019260209291908290030181600087803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073410526cd583af0be0530166d53efcd7da969f7b7916382e37b2c916024808201926020929091908290030181600087803b1580156140f257600080fd5b505af1158015614106573d6000803e3d6000fd5b505050506040513d602081101561411c57600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073410526cd583af0be0530166d53efcd7da969f7b79163e3c08adf916024808201926020929091908290030181600087803b15801561418f57600080fd5b505af11580156141a3573d6000803e3d6000fd5b505050506040513d60208110156141b957600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115614242576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b80158015906142515750828114155b1561426b5760008381526009602052604090206006018190555b845160010185525b50929392505050565b600c546000818152600f60205260409020600401544290811180156142e357506000828152600f6020526040902060020154811115806142e357506000828152600f6020526040902060020154811180156142e357506000828152600f6020526040902054155b156142fb576142f68287348888886145b8565b6144aa565b6000828152600f60205260409020600201548111801561432d57506000828152600f602052604090206003015460ff16155b15614475576000828152600f60205260409020600301805460ff19166001179055614357836130ae565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154614497903463ffffffff612de316565b6000878152600960205260409020600301555b505050505050565b6000612e6a6144c0846144d3565b611ada6144d3868663ffffffff612de316565b60006309502f9061453b6d03b2a1d15167e7c5699bfde00000611ada6145367a0dac7055469777a6122ee4310dd6c14410500f29048400000000006135506b01027e72f1f1281308800000613eed8a670de0b6b3a764000063ffffffff613da516565b614ba0565b81151561454457fe5b0492915050565b600061455e670de0b6b3a7640000614bf3565b61453b600261459161457e86670de0b6b3a764000063ffffffff613da516565b65886c8f6730709063ffffffff613da516565b81151561459a57fe5b046135506145a786614bf3565b6304a817c89063ffffffff613da516565b6000858152600a6020908152604080832089845290915281206001015481908190819015156145ee576145eb8986614bff565b94505b60008a8152600f602052604090206006015468056bc75e2d6310000011801561464857506000898152600a602090815260408083208d8452909152902054678ac7230489e8000090614646908a63ffffffff612de316565b115b156146cf576000898152600a602090815260408083208d845290915290205461468090678ac7230489e800009063ffffffff613f0b16565b9350614692888563ffffffff613f0b16565b60008a8152600960205260409020600301549093506146b7908463ffffffff612de316565b60008a81526009602052604090206003015592965086925b633b9aca00881115614afd5760008a8152600f60205260409020600601546146fd908963ffffffff6144b216565b9150670de0b6b3a7640000821061477457614718828b614c5f565b60008a8152600f6020526040902054891461473f5760008a8152600f602052604090208990555b60008a8152600f6020526040902060010154861461476c5760008a8152600f602052604090206001018690555b845160640185525b67016345785d8a000088106149b457600e80546001019055614794614d3b565b1515600114156149b457678ac7230489e80000881061483557600d546064906147c490604b63ffffffff613da516565b8115156147cd57fe5b60008b81526009602052604090206002015491900491506147f4908263ffffffff612de316565b60008a815260096020526040902060020155600d54614819908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce8300000000018552614989565b670de0b6b3a764000088101580156148545750678ac7230489e8000088105b156148e157600d5460649061487090603263ffffffff613da516565b81151561487957fe5b60008b81526009602052604090206002015491900491506148a0908263ffffffff612de316565b60008a815260096020526040902060020155600d546148c5908263ffffffff613f0b16565b600d5584516d09dc5ada82b70b59df0200000000018552614989565b67016345785d8a000088101580156149005750670de0b6b3a764000088105b1561498957600d5460649061491c90601963ffffffff613da516565b81151561492557fe5b60008b815260096020526040902060020154919004915061494c908263ffffffff612de316565b60008a815260096020526040902060020155600d54614971908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600e555b600e5485516103e89091020185526000898152600a602090815260408083208d84529091529020600101546149f090839063ffffffff612de316565b60008a8152600a602090815260408083208e84529091529020600181019190915554614a1d908990612de3565b60008a8152600a602090815260408083208e8452825280832093909355600f90522060050154614a5490839063ffffffff612de316565b60008b8152600f60205260409020600581019190915560060154614a7f90899063ffffffff612de316565b60008b8152600f60209081526040808320600601939093556010815282822089835290522054614ab690899063ffffffff612de316565b60008b81526010602090815260408083208a8452909152902055614ade8a8a8a8a8a8a614f52565b9450614aee8a8a8a89868a6152b8565b9450614afd89878a8589615426565b50505050505050505050565b6000614b158383613f6b565b90506000811115614b9b57600083815260096020526040902060030154614b4390829063ffffffff612de316565b600084815260096020908152604080832060030193909355600a815282822085835290522060020154614b7d90829063ffffffff612de316565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002614bb0846001612de3565b811515614bb957fe5b0490508291505b8181101561358c578091506002614be28285811515614bdb57fe5b0483612de3565b811515614beb57fe5b049050614bc0565b6000612e3e8283613da5565b614c076156db565b60008381526009602052604090206005015415614c3b57600083815260096020526040902060050154614c3b908490614b09565b50600c546000838152600960205260409020600501558051600a0181528092915050565b6000818152600f602052604081206002015442919082118015614c8e57506000838152600f6020526040902054155b15614cb257614cab82613550603c670de0b6b3a764000088613eb7565b9050614cdf565b6000838152600f6020526040902060020154614cdc90613550603c670de0b6b3a764000088613eb7565b90505b614cf16154608363ffffffff612de316565b811015614d11576000838152600f602052604090206002018190556119a7565b614d236154608363ffffffff612de316565b6000848152600f602052604090206002015550505050565b600080614eac4361355042336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614db65780518252601f199092019160209182019101614d97565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614dec57fe5b046135504561355042416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614e655780518252601f199092019160209182019101614e46565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614e9b57fe5b04613550424463ffffffff612de316565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614efa5780518252601f199092019160209182019101614edb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600e5490945092506103e89150839050046103e80282031015614f495760019150614f4e565b600091505b5090565b614f5a6156db565b6006546032860490606487049060009081908190600160a060020a03161561500657600660009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe857600080fd5b505af1158015614ffc573d6000803e3d6000fd5b5050505050615019565b615016858563ffffffff612de316565b94505b600a8a0492508a891415801561503f575060008981526009602052604090206001015415155b156150df5760008981526009602052604090206004015461506790849063ffffffff612de316565b60008a815260096020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a46150f2565b6150ef858463ffffffff612de316565b94505b6000888152601160205260409020600101546151289060649061511c908d9063ffffffff613da516565b9063ffffffff61559416565b9150600085111561519757600154600160a060020a03161561518457600154604051600160a060020a039091169086156108fc029087906000818181858888f1935050505015801561517e573d6000803e3d6000fd5b50615197565b615194828663ffffffff612de316565b91505b60008211156152a8576005546151b490839063ffffffff613da516565b90506151cd8760c0015182612de390919063ffffffff16565b60c088015260048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b15801561524057600080fd5b505af1158015615254573d6000803e3d6000fd5b505050506040513d602081101561526a57600080fd5b5050600354604051600160a060020a039091169083156108fc029084906000818181858888f193505050501580156152a6573d6000803e3d6000fd5b505b50949a9950505050505050505050565b6152c06156db565b6000848152601160205260408120548190819081906064906152e9908b9063ffffffff613da516565b8115156152f257fe5b04935060648904925061531083600d54612de390919063ffffffff16565b600d556000888152601160205260409020600101546153819061537490606490615341908d9063ffffffff613da516565b81151561534a57fe5b04606461535e8d600e63ffffffff613da516565b81151561536757fe5b049063ffffffff612de316565b8a9063ffffffff613f0b16565b9850615393898563ffffffff613f0b16565b91506153a18b8b868a6155a2565b905060008111156153bf576153bc848263ffffffff613f0b16565b93505b60008b8152600f60205260409020600701546153e590613550848463ffffffff612de316565b60008c8152600f602052604090206007015560e086015161540d90859063ffffffff612de316565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600c54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600d54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000808284811515613f0257fe5b6000848152600f6020526040812060050154819081906155d086670de0b6b3a764000063ffffffff613da516565b8115156155d957fe5b6000898152600f6020526040902060080154919004925061560190839063ffffffff612de316565b6000888152600f6020526040902060080155670de0b6b3a764000061562c838663ffffffff613da516565b81151561563557fe5b6000888152600a602090815260408083208c8452825280832060020154600f9092529091206008015492909104925061568891613550908490670de0b6b3a764000090613fb2908a63ffffffff613da516565b6000878152600a602090815260408083208b8452825280832060020193909355600f905220600501546156d090670de0b6b3a76400009061320d90859063ffffffff613da516565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e000000000000000000000000004d7573742062652061646d696e2e000000000000000000000000000000000000546f6f206c6974746c6500000000000000000000000000000000000000000000546f6f206d756368000000000000000000000000000000000000000000000000a165627a7a7230582014785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce0029
Deployed Bytecode
0x6080604052600436106101f85763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663018a25e881146101fd57806306fdde0314610224578063079ce327146102ae5780630f15f4c0146102ce57806310f01eba146102e357806311a09ae7146103045780631bf678cf1461031957806324c33d331461033a5780632660316e146103b75780632ce21999146103e65780632e19ebdc14610417578063349cdcac1461042f5780633ccfd60b1461044d5780633ddd4698146104625780633f03aab4146104be57806349cc635d146104ef5780635893d48114610519578063624ae5c014610534578063630664341461054957806363c194f11461057f578063685ffd8314610594578063747dff42146105e757806382bfc739146106725780638f38f309146106995780638f7140ea146106a7578063921dec21146106c257806395d89b411461071557806398a0871d1461072a5780639ae5dc9114610741578063a2bccae914610762578063a65b37a1146107a3578063a9059cbb146107b1578063c519500e146107d5578063c7e284b8146107ed578063ce89c80c14610802578063cf8080001461081d578063d53b267914610835578063d87574e01461084a578063de7874f31461085f578063ed78cf4a146108b9578063ee0b5d8b146108c1575b600080fd5b34801561020957600080fd5b5061021261091a565b60408051918252519081900360200190f35b34801561023057600080fd5b506102396109db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027357818101518382015260200161025b565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102cc600435602435604435610a12565b005b3480156102da57600080fd5b506102cc610c04565b3480156102ef57600080fd5b50610212600160a060020a0360043516610ec5565b34801561031057600080fd5b50610212610ed7565b34801561032557600080fd5b506102cc600160a060020a0360043516610edd565b34801561034657600080fd5b50610352600435611024565b604080519d8e5260208e019c909c528c8c019a909a5297151560608c015260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015251908190036101a00190f35b3480156103c357600080fd5b506103d260043560243561108f565b604080519115158252519081900360200190f35b3480156103f257600080fd5b506103fe6004356110af565b6040805192835260208301919091528051918290030190f35b34801561042357600080fd5b506102126004356110c8565b34801561043b57600080fd5b506102cc6004356024356044356110da565b34801561045957600080fd5b506102cc6112a6565b6040805160206004803580820135601f81018490048402850184019095528484526102cc94369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561161a565b3480156104ca57600080fd5b506104d36117d3565b60408051600160a060020a039092168252519081900360200190f35b3480156104fb57600080fd5b506102cc600435600160a060020a03602435166044356064356117e2565b34801561052557600080fd5b506102126004356024356119ad565b34801561054057600080fd5b506102126119ca565b34801561055557600080fd5b506105616004356119d0565b60408051938452602084019290925282820152519081900360600190f35b34801561058b57600080fd5b506104d3611b8f565b6040805160206004803580820135601f81018490048402850184019095528484526102cc943694929360249392840191908190840183828082843750949750508435955050505050602001351515611b9e565b3480156105f357600080fd5b506105fc611c7e565b604080519e8f5260208f019d909d528d8d019b909b5260608d019990995260808c019790975260a08b019590955260c08a0193909352600160a060020a0390911660e08901526101008801526101208701526101408601526101608501526101808401526101a083015251908190036101c00190f35b34801561067e57600080fd5b506102cc600160a060020a0360043516602435604435611e7c565b6102cc60043560243561205e565b3480156106b357600080fd5b506102cc60043560243561222b565b6040805160206004803580820135601f81018490048402850184019095528484526102cc9436949293602493928401919081908401838280828437509497505084359550505050506020013515156122e2565b34801561072157600080fd5b506102396123c2565b6102cc600160a060020a03600435166024356123f9565b34801561074d57600080fd5b506102cc600160a060020a03600435166125f6565b34801561076e57600080fd5b5061077d6004356024356126dc565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102cc60043560243561270e565b3480156107bd57600080fd5b506103d2600160a060020a03600435166024356128f1565b3480156107e157600080fd5b506103fe600435612a4a565b3480156107f957600080fd5b50610212612a63565b34801561080e57600080fd5b50610212600435602435612aea565b34801561082957600080fd5b50610212600435612b85565b34801561084157600080fd5b506103d2612c33565b34801561085657600080fd5b50610212612c43565b34801561086b57600080fd5b50610877600435612c49565b60408051600160a060020a0390981688526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b6102cc612c90565b3480156108cd57600080fd5b506108e2600160a060020a0360043516612d0e565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b600c546000818152600f602052604081206004015490919042908111801561098457506000828152600f60205260409020600201548111158061098457506000828152600f60205260409020600201548111801561098457506000828152600f6020526040902054155b156109cc576000828152600f60205260409020600501546109c590670de0b6b3a7640000906109b9908263ffffffff612de316565b9063ffffffff612e4416565b92506109d6565b6544364c5bb00092505b505090565b60408051808201909152601681527f4e54656368203344204c6f6e67204f6666696369616c00000000000000000000602082015281565b610a1a6156db565b600454600090819060a060020a900460ff161515600114610a73576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015610aba576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015610b05576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115610b55576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450881580610b84575060008581526009602052604090206001015489145b15610ba2576000858152600960205260409020600601549350610be1565b6000898152600860209081526040808320548884526009909252909120600601549094508414610be15760008581526009602052604090206006018490555b610bea88612e71565b9750610bf985858a8a8a612e96565b505050505050505050565b3360009081526020819052604090205460098114610c5a576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600454600160a060020a03161515610cbc576040805160e560020a62461bcd02815260206004820152601360248201527f4d757374207365747570204e54546f6b656e2e00000000000000000000000000604482015290519081900360640190fd5b600154600160a060020a03161515610d1e576040805160e560020a62461bcd02815260206004820152601a60248201527f4d75737420736574757020436f6d6d756e697479416464725f2e000000000000604482015290519081900360640190fd5b600354600160a060020a03161515610d80576040805160e560020a62461bcd02815260206004820152601960248201527f4d757374207365747570204e54546f6b656e53656c6c65722e00000000000000604482015290519081900360640190fd5b600254600160a060020a03161515610de2576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207365747570204e54466f756e646174696f6e416464722e00000000604482015290519081900360640190fd5b60045460a060020a900460ff1615610e44576040805160e560020a62461bcd02815260206004820152600960248201527f4f6e6c79206f6e63650000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506004805474ff0000000000000000000000000000000000000000191660a060020a1790556001600c819055600052600f602052427f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f893819055615460017f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89155565b60076020526000908152604090205481565b600e5481565b3360009081526020819052604090205460098114610f33576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a0382161515610f93576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b600654600160a060020a031615610ff4576040805160e560020a62461bcd02815260206004820152601a60248201527f4f746865724e54656368334420686173206265656e207365742e000000000000604482015290519081900360640190fd5b506006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b999a989960ff909816989697959694959394929391929091908d565b600b60209081526000928352604080842090915290825290205460ff1681565b6011602052600090815260409020805460019091015482565b60086020526000908152604090205481565b6110e26156db565b60045460009060a060020a900460ff161515600114611139576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611180576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b84633b9aca008110156111cb576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561121b576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b33600090815260076020526040902054935087158061123957508388145b15611257576000848152600960205260409020600601549750611284565b60008481526009602052604090206006015488146112845760008481526009602052604090206006018890555b61128d87612e71565b965061129c8489898989612e96565b5050505050505050565b6000806000806112b46156db565b60045460a060020a900460ff161515600114611308576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b801561134f576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b600c5433600090815260076020908152604080832054848452600f9092529091206002015491985042975095508611801561139c57506000878152600f602052604090206003015460ff16155b80156113b557506000878152600f602052604090205415155b1561155b576000878152600f60205260409020600301805460ff191660011790556113df836130ae565b92506113ea856134ff565b9350600084111561143b57600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f19350505050158015611439573d6000803e3d6000fd5b505b85670de0b6b3a764000002836000015101836000018181525050848360200151018360200181815250507f0bd0dba8ab932212fa78150cdb7b0275da72e255875967b5cad11464cf71bedc3360096000888152602001908152602001600020600101548686600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a1611611565b611564856134ff565b935060008411156115b557600085815260096020526040808220549051600160a060020a039091169186156108fc02918791818181858888f193505050501580156115b3573d6000803e3d6000fd5b505b6000858152600960209081526040918290206001015482513381529182015280820186905260608101889052905186917f8f36579a548bc439baa172a6521207464154da77f411e2da3db2f53affe6cc3a919081900360800190a25b50505050505050565b6000808080808033803b8015611668576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6116718b613592565b604080517faa4d490b000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052600160a060020a038e1660448301528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263aa4d490b928a926084808201939182900301818588803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50505050506040513d604081101561172d57600080fd5b508051602091820151600160a060020a03808b1660008181526007865260408082205485835260098852918190208054600190910154825188151581529889018790529416878201526060870193909352608086018c90524260a0870152915193995091975095508a92909186917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e64442919081900360c00190a45050505050505050505050565b600154600160a060020a031681565b3373410526cd583af0be0530166d53efcd7da969f7b71461184d576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b600160a060020a038316600090815260076020526040902054841461188857600160a060020a03831660009081526007602052604090208490555b60008281526008602052604090205484146118af5760008281526008602052604090208490555b600084815260096020526040902054600160a060020a03848116911614611905576000848152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b60008481526009602052604090206001015482146119325760008481526009602052604090206001018290555b600084815260096020526040902060060154811461195f5760008481526009602052604090206006018190555b6000848152600b6020908152604080832085845290915290205460ff1615156119a7576000848152600b602090815260408083208584529091529020805460ff191660011790555b50505050565b601060209081526000928352604080842090915290825290205481565b600c5481565b600c546000818152600f602052604081206002015490918291829190829042118015611a0e57506000828152600f602052604090206003015460ff16155b8015611a2757506000828152600f602052604090205415155b15611b5e576000828152600f6020526040902054861415611b22576000828152600f60205260409020600c810154600790910154611a6a9163ffffffff612de316565b9050611aab6064611a8283603063ffffffff613da516565b811515611a8b57fe5b60008981526009602052604090206002015491900463ffffffff612de316565b6000878152600a60209081526040808320868452909152902060020154611b0490611ae690611ada8a87613e1c565b9063ffffffff613f0b16565b6000898152600960205260409020600301549063ffffffff612de316565b60008881526009602052604090206004015491965094509250611b86565b6000868152600960209081526040808320600290810154600a8452828520878652909352922090910154611b0490611ae690611ada8a87613e1c565b60008681526009602052604090206002810154600590910154611b0490611ae6908990613f6b565b50509193909250565b600254600160a060020a031681565b6000808080808033803b8015611bec576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b611bf58b613592565b604080517f745ea0c1000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263745ea0c1928a926084808201939182900301818588803b15801561170257600080fd5b6000806000806000806000806000806000806000806000600c549050600f60008281526020019081526020016000206009015481600f600084815260200190815260200160002060050154600f600085815260200190815260200160002060020154600f600086815260200190815260200160002060040154600f600087815260200190815260200160002060070154600f600088815260200190815260200160002060000154600a02600f6000898152602001908152602001600020600101540160096000600f60008b815260200190815260200160002060000154815260200190815260200160002060000160009054906101000a9004600160a060020a031660096000600f60008c815260200190815260200160002060000154815260200190815260200160002060010154601060008b8152602001908152602001600020600080815260200190815260200160002054601060008c815260200190815260200160002060006001815260200190815260200160002054601060008d815260200190815260200160002060006002815260200190815260200160002054601060008e815260200190815260200160002060006003815260200190815260200160002054600d546103e802600e54019e509e509e509e509e509e509e509e509e509e509e509e509e509e5050909192939495969798999a9b9c9d565b611e846156db565b600454600090819060a060020a900460ff161515600114611edd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015611f24576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b85633b9aca00811015611f6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115611fbf576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b336000908152600760205260409020549450600160a060020a0389161580611fef5750600160a060020a03891633145b1561200d576000858152600960205260409020600601549350610be1565b600160a060020a0389166000908152600760209081526040808320548884526009909252909120600601549094508414610be1576000858152600960205260409020600601849055610bea88612e71565b6120666156db565b60045460009060a060020a900460ff1615156001146120bd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b8015612104576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca0081101561214f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561219f576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b6121a885613fc8565b3360009081526007602052604090205490955093508615806121c957508387145b156121e7576000848152600960205260409020600601549650612214565b60008481526009602052604090206006015487146122145760008481526009602052604090206006018790555b61221d86612e71565b95506116118488888861427c565b3373410526cd583af0be0530166d53efcd7da969f7b714612296576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c65642066726f6d20506c61796572426f6f6b206f6e6c790000000000604482015290519081900360640190fd5b6000828152600b6020908152604080832084845290915290205460ff1615156122de576000828152600b602090815260408083208484529091529020805460ff191660011790555b5050565b6000808080808033803b8015612330576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b6123398b613592565b604080517fc0942dfd000000000000000000000000000000000000000000000000000000008152336004820181905260248201849052604482018e90528c151560648301528251939b50995034985073410526cd583af0be0530166d53efcd7da969f7b79263c0942dfd928a926084808201939182900301818588803b15801561170257600080fd5b60408051808201909152600481527f4e54334400000000000000000000000000000000000000000000000000000000602082015281565b6124016156db565b600454600090819060a060020a900460ff16151560011461245a576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156124a1576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca008110156124ec576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af680000081111561253c576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61254586613fc8565b336000908152600760205260409020549096509450600160a060020a03881615806125785750600160a060020a03881633145b156125965760008581526009602052604090206006015493506125df565b600160a060020a03881660009081526007602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490555b6125e887612e71565b965061129c8585898961427c565b336000908152602081905260409020546009811461264c576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b600160a060020a03821615156126ac576040805160e560020a62461bcd02815260206004820152601a60248201527f456d7074792061646472657373206e6f7420616c6c6f7765642e000000000000604482015290519081900360640190fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a60209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b6127166156db565b600454600090819060a060020a900460ff16151560011461276f576040805160e560020a62461bcd0281526020600482015260136024820152600080516020615755833981519152604482015290519081900360640190fd5b33803b80156127b6576040805160e560020a62461bcd02815260206004820152600b6024820152600080516020615735833981519152604482015290519081900360640190fd5b34633b9aca00811015612801576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020615795833981519152604482015290519081900360640190fd5b69152d02c7e14af6800000811115612851576040805160e560020a62461bcd02815260206004820152600860248201526000805160206157b5833981519152604482015290519081900360640190fd5b61285a86613fc8565b33600090815260076020526040902054909650945087158061288c575060008581526009602052604090206001015488145b156128aa5760008581526009602052604090206006015493506125df565b60008881526008602090815260408083205488845260099092529091206006015490945084146125df5760008581526009602052604090206006018490556125e887612e71565b3360009081526020819052604081205460098114612947576040805160e560020a62461bcd02815260206004820152600e6024820152600080516020615775833981519152604482015290519081900360640190fd5b6000831161299f576040805160e560020a62461bcd02815260206004820152600960248201527f4d757374203e2030200000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018790529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b505050506040513d6020811015612a3c57600080fd5b5060019250505b5092915050565b6012602052600090815260409020805460019091015482565b600c546000818152600f60205260408120600201549091904290811015612ae1576000828152600f6020526040902060040154811115612abf576000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b6000828152600f60205260409020600201546109c5908263ffffffff613f0b16565b600092506109d6565b6000828152600f6020526040812060040154429081118015612b4e57506000848152600f602052604090206002015481111580612b4e57506000848152600f602052604090206002015481118015612b4e57506000848152600f6020526040902054155b15612b7c576000848152600f6020526040902060060154612b75908463ffffffff6144b216565b9150612a43565b612b75836144d3565b600c546000818152600f6020526040812060040154909190429081118015612bef57506000828152600f602052604090206002015481111580612bef57506000828152600f602052604090206002015481118015612bef57506000828152600f6020526040902054155b15612c23576000828152600f6020526040902060050154612c1c9085906109b9908263ffffffff612de316565b9250612c2c565b612c1c8461454b565b5050919050565b60045460a060020a900460ff1681565b600d5481565b6009602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919087565b600c80546001016000818152600f6020526040902090910154612cb9903463ffffffff612de316565b6000828152600f6020908152604091829020600c01929092558051838152349281019290925280517f74b1d2f771e0eff1b2c36c38499febdbea80fe4013bdace4fc4b653322c2895c9281900390910190a150565b6000806000806000806000806000600c54915050600160a060020a0389166000908152600760209081526040808320548084526009808452828520600180820154600a8752858820898952875294872001549583905293526002830154600590930154909384939091612da490612d86908690613f6b565b6000878152600960205260409020600301549063ffffffff612de316565b600095865260096020908152604080882060040154600a83528189209989529890915290952054939e929d50909b509950919750919550909350915050565b81810182811015612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820616464206661696c656400000000000000000000000000604482015290519081900360640190fd5b92915050565b6000612e6a612e61612e5c858563ffffffff613f0b16565b61454b565b611ada8561454b565b9392505050565b600080821080612e815750600382115b15612e8e57506002612e91565b50805b919050565b600c546000818152600f6020526040902060040154429081118015612efd57506000828152600f602052604090206002015481111580612efd57506000828152600f602052604090206002015481118015612efd57506000828152600f6020526040902054155b15612f3457612f0f84611ada896134ff565b600088815260096020526040902060030155612f2f8288868989886145b8565b611611565b6000828152600f602052604090206002015481118015612f6657506000828152600f602052604090206003015460ff16155b15611611576000828152600f60205260409020600301805460ff19166001179055612f90836130ae565b925080670de0b6b3a764000002836000015101836000018181525050868360200151018360200181815250507f88261ac70d02d5ea73e54fa6da17043c974de1021109573ec1f6f57111c823dd33600960008a815260200190815260200160002060010154856000015186602001518760400151886060015189608001518a60a001518b60c001518c60e00151604051808b600160a060020a0316600160a060020a031681526020018a6000191660001916815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a150505050505050565b6130b66156db565b600c80546000818152600f6020526040812080546001820154948201546007909201549394909390929182918291829182918291829182916130fd9163ffffffff612de316565b9750606461311289603063ffffffff613da516565b81151561311b57fe5b04965060328860008b8152601260205260409020549190049650606490613149908a9063ffffffff613da516565b81151561315257fe5b60008b815260126020526040902060010154919004955060649061317d908a9063ffffffff613da516565b81151561318657fe5b0493506131a184611ada87818a818e8e63ffffffff613f0b16565b60008c8152600f60205260409020600501549093506131ce86670de0b6b3a764000063ffffffff613da516565b8115156131d757fe5b60008d8152600f6020526040902060050154919004925061322590670de0b6b3a76400009061320d90859063ffffffff613da516565b81151561321657fe5b8791900463ffffffff613f0b16565b9050600081111561325557613240858263ffffffff613f0b16565b9450613252838263ffffffff612de316565b92505b60008a81526009602052604090206002015461327890889063ffffffff612de316565b60008b815260096020526040902060020155600154600160a060020a0316156132df57600154604051600160a060020a039091169087156108fc029088906000818181858888f193505050501580156132d5573d6000803e3d6000fd5b50600095506132f0565b6132e98387612de3565b9250600095505b600084111561335b57600254600160a060020a03161561334a57600254604051600160a060020a039091169085156108fc029086906000818181858888f19350505050158015613344573d6000803e3d6000fd5b5061335b565b6133548385612de3565b9250600093505b60008b8152600f602052604090206008015461337e90839063ffffffff612de316565b600f60008d815260200190815260200160002060080181905550600f60008c815260200190815260200160002060020154620f4240028d60000151018d60000181815250508867016345785d8a0000028a6a52b7d2dcc80cd2e4000000028e6020015101018d6020018181525050600960008b815260200190815260200160002060000160009054906101000a9004600160a060020a03168d60400190600160a060020a03169081600160a060020a031681525050600960008b8152602001908152602001600020600101548d606001906000191690816000191681525050868d6080018181525050848d60e001818152505060008d60c0018181525050828d60a0018181525050600c600081548092919060010191905055508a806001019b505042600f60008d8152602001908152602001600020600401819055506134d061546042612de390919063ffffffff16565b60008c8152600f602052604090206002810191909155600c018390558c9b505050505050505050505050919050565b600081815260096020526040812060050154819061351e908490614b09565b60008381526009602052604090206004810154600382015460029092015461355c92613550919063ffffffff612de316565b9063ffffffff612de316565b905060008111156135885760008381526009602052604081206002810182905560038101829055600401555b8091505b50919050565b80516000908290828080602084118015906135ad5750600084115b1515613629576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561363857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415801561369f5750846001850381518110151561367757fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b151561371b576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84600081518110151561372a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a02141561386d5784600181518110151561376457fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a02141515156137e1576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b8460018151811015156137f057fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a021415151561386d576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b83821015613d3d5784517f4000000000000000000000000000000000000000000000000000000000000000908690849081106138aa57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611801561391e575084517f5b00000000000000000000000000000000000000000000000000000000000000908690849081106138ff57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1561398b57848281518110151561393157fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a02858381518110151561396257fe5b906020010190600160f860020a031916908160001a90535082151561398657600192505b613d32565b848281518110151561399957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480613a69575084517f6000000000000000000000000000000000000000000000000000000000000000908690849081106139f557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613a69575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110613a4a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80613b13575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110613a9f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015613b13575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110613af457fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b1515613b8f576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8482815181101515613b9d57fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021415613c7c578482600101815181101515613bd957fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515613c7c576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015613d28575084517f300000000000000000000000000000000000000000000000000000000000000090869084908110613cb557fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080613d28575084517f390000000000000000000000000000000000000000000000000000000000000090869084908110613d0957fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b15613d3257600192505b600190910190613872565b600183151514613d97576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b6000821515613db657506000612e3e565b50818102818382811515613dc657fe5b0414612e3e576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b6000818152600f60205260408120600c8101546007909101548291613e47919063ffffffff612de316565b6000858152600a602090815260408083208784528252808320600190810154600f8452828520600581015492015485526012909352922054929350670de0b6b3a764000092613ef992613eed91613ec4908690606490613eae908a9063ffffffff613da516565b811515613eb757fe5b049063ffffffff613da516565b811515613ecd57fe5b6000898152600f602052604090206008015491900463ffffffff612de316565b9063ffffffff613da516565b811515613f0257fe5b04949350505050565b600082821115613f65576040805160e560020a62461bcd02815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b6000828152600a6020908152604080832084845282528083206002810154600190910154600f90935290832060080154612e6a92670de0b6b3a764000091613fb291613da5565b811515613fbb57fe5b049063ffffffff613f0b16565b613fd06156db565b33600090815260076020526040812054908082151561427357604080517fe56556a9000000000000000000000000000000000000000000000000000000008152336004820152905173410526cd583af0be0530166d53efcd7da969f7b79163e56556a99160248083019260209291908290030181600087803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b505050506040513d602081101561407f57600080fd5b5051604080517f82e37b2c00000000000000000000000000000000000000000000000000000000815260048101839052905191945073410526cd583af0be0530166d53efcd7da969f7b7916382e37b2c916024808201926020929091908290030181600087803b1580156140f257600080fd5b505af1158015614106573d6000803e3d6000fd5b505050506040513d602081101561411c57600080fd5b5051604080517fe3c08adf00000000000000000000000000000000000000000000000000000000815260048101869052905191935073410526cd583af0be0530166d53efcd7da969f7b79163e3c08adf916024808201926020929091908290030181600087803b15801561418f57600080fd5b505af11580156141a3573d6000803e3d6000fd5b505050506040513d60208110156141b957600080fd5b505133600081815260076020908152604080832088905587835260099091529020805473ffffffffffffffffffffffffffffffffffffffff1916909117905590508115614242576000828152600860209081526040808320869055858352600982528083206001908101869055600b8352818420868552909252909120805460ff191690911790555b80158015906142515750828114155b1561426b5760008381526009602052604090206006018190555b845160010185525b50929392505050565b600c546000818152600f60205260409020600401544290811180156142e357506000828152600f6020526040902060020154811115806142e357506000828152600f6020526040902060020154811180156142e357506000828152600f6020526040902054155b156142fb576142f68287348888886145b8565b6144aa565b6000828152600f60205260409020600201548111801561432d57506000828152600f602052604090206003015460ff16155b15614475576000828152600f60205260409020600301805460ff19166001179055614357836130ae565b925080670de0b6b3a764000002836000015101836000018181525050858360200151018360200181815250507fa7801a70b37e729a11492aad44fd3dba89b4149f0609dc0f6837bf9e57e2671a3360096000898152602001908152602001600020600101543486600001518760200151886040015189606001518a608001518b60a001518c60c001518d60e00151604051808c600160a060020a0316600160a060020a031681526020018b600019166000191681526020018a815260200189815260200188815260200187600160a060020a0316600160a060020a0316815260200186600019166000191681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390a15b600086815260096020526040902060030154614497903463ffffffff612de316565b6000878152600960205260409020600301555b505050505050565b6000612e6a6144c0846144d3565b611ada6144d3868663ffffffff612de316565b60006309502f9061453b6d03b2a1d15167e7c5699bfde00000611ada6145367a0dac7055469777a6122ee4310dd6c14410500f29048400000000006135506b01027e72f1f1281308800000613eed8a670de0b6b3a764000063ffffffff613da516565b614ba0565b81151561454457fe5b0492915050565b600061455e670de0b6b3a7640000614bf3565b61453b600261459161457e86670de0b6b3a764000063ffffffff613da516565b65886c8f6730709063ffffffff613da516565b81151561459a57fe5b046135506145a786614bf3565b6304a817c89063ffffffff613da516565b6000858152600a6020908152604080832089845290915281206001015481908190819015156145ee576145eb8986614bff565b94505b60008a8152600f602052604090206006015468056bc75e2d6310000011801561464857506000898152600a602090815260408083208d8452909152902054678ac7230489e8000090614646908a63ffffffff612de316565b115b156146cf576000898152600a602090815260408083208d845290915290205461468090678ac7230489e800009063ffffffff613f0b16565b9350614692888563ffffffff613f0b16565b60008a8152600960205260409020600301549093506146b7908463ffffffff612de316565b60008a81526009602052604090206003015592965086925b633b9aca00881115614afd5760008a8152600f60205260409020600601546146fd908963ffffffff6144b216565b9150670de0b6b3a7640000821061477457614718828b614c5f565b60008a8152600f6020526040902054891461473f5760008a8152600f602052604090208990555b60008a8152600f6020526040902060010154861461476c5760008a8152600f602052604090206001018690555b845160640185525b67016345785d8a000088106149b457600e80546001019055614794614d3b565b1515600114156149b457678ac7230489e80000881061483557600d546064906147c490604b63ffffffff613da516565b8115156147cd57fe5b60008b81526009602052604090206002015491900491506147f4908263ffffffff612de316565b60008a815260096020526040902060020155600d54614819908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce8300000000018552614989565b670de0b6b3a764000088101580156148545750678ac7230489e8000088105b156148e157600d5460649061487090603263ffffffff613da516565b81151561487957fe5b60008b81526009602052604090206002015491900491506148a0908263ffffffff612de316565b60008a815260096020526040902060020155600d546148c5908263ffffffff613f0b16565b600d5584516d09dc5ada82b70b59df0200000000018552614989565b67016345785d8a000088101580156149005750670de0b6b3a764000088105b1561498957600d5460649061491c90601963ffffffff613da516565b81151561492557fe5b60008b815260096020526040902060020154919004915061494c908263ffffffff612de316565b60008a815260096020526040902060020155600d54614971908263ffffffff613f0b16565b600d5584516d0eca8847c4129106ce83000000000185525b84516d314dc6448d9338c15b0a000000008202016c7e37be2022c0914b26800000000185526000600e555b600e5485516103e89091020185526000898152600a602090815260408083208d84529091529020600101546149f090839063ffffffff612de316565b60008a8152600a602090815260408083208e84529091529020600181019190915554614a1d908990612de3565b60008a8152600a602090815260408083208e8452825280832093909355600f90522060050154614a5490839063ffffffff612de316565b60008b8152600f60205260409020600581019190915560060154614a7f90899063ffffffff612de316565b60008b8152600f60209081526040808320600601939093556010815282822089835290522054614ab690899063ffffffff612de316565b60008b81526010602090815260408083208a8452909152902055614ade8a8a8a8a8a8a614f52565b9450614aee8a8a8a89868a6152b8565b9450614afd89878a8589615426565b50505050505050505050565b6000614b158383613f6b565b90506000811115614b9b57600083815260096020526040902060030154614b4390829063ffffffff612de316565b600084815260096020908152604080832060030193909355600a815282822085835290522060020154614b7d90829063ffffffff612de316565b6000848152600a602090815260408083208684529091529020600201555b505050565b6000806002614bb0846001612de3565b811515614bb957fe5b0490508291505b8181101561358c578091506002614be28285811515614bdb57fe5b0483612de3565b811515614beb57fe5b049050614bc0565b6000612e3e8283613da5565b614c076156db565b60008381526009602052604090206005015415614c3b57600083815260096020526040902060050154614c3b908490614b09565b50600c546000838152600960205260409020600501558051600a0181528092915050565b6000818152600f602052604081206002015442919082118015614c8e57506000838152600f6020526040902054155b15614cb257614cab82613550603c670de0b6b3a764000088613eb7565b9050614cdf565b6000838152600f6020526040902060020154614cdc90613550603c670de0b6b3a764000088613eb7565b90505b614cf16154608363ffffffff612de316565b811015614d11576000838152600f602052604090206002018190556119a7565b614d236154608363ffffffff612de316565b6000848152600f602052604090206002015550505050565b600080614eac4361355042336040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614db65780518252601f199092019160209182019101614d97565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614dec57fe5b046135504561355042416040516020018082600160a060020a0316600160a060020a03166c010000000000000000000000000281526014019150506040516020818303038152906040526040518082805190602001908083835b60208310614e655780518252601f199092019160209182019101614e46565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912092505050811515614e9b57fe5b04613550424463ffffffff612de316565b604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b60208310614efa5780518252601f199092019160209182019101614edb565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120600e5490945092506103e89150839050046103e80282031015614f495760019150614f4e565b600091505b5090565b614f5a6156db565b6006546032860490606487049060009081908190600160a060020a03161561500657600660009054906101000a9004600160a060020a0316600160a060020a031663ed78cf4a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818588803b158015614fe857600080fd5b505af1158015614ffc573d6000803e3d6000fd5b5050505050615019565b615016858563ffffffff612de316565b94505b600a8a0492508a891415801561503f575060008981526009602052604090206001015415155b156150df5760008981526009602052604090206004015461506790849063ffffffff612de316565b60008a815260096020908152604091829020600481019390935582546001909301548251600160a060020a03909416845290830152818101859052426060830152518c918e918c917f590bbc0fc16915a85269a48f74783c39842b7ae9eceb7c295c95dbe8b3ec7331919081900360800190a46150f2565b6150ef858463ffffffff612de316565b94505b6000888152601160205260409020600101546151289060649061511c908d9063ffffffff613da516565b9063ffffffff61559416565b9150600085111561519757600154600160a060020a03161561518457600154604051600160a060020a039091169086156108fc029087906000818181858888f1935050505015801561517e573d6000803e3d6000fd5b50615197565b615194828663ffffffff612de316565b91505b60008211156152a8576005546151b490839063ffffffff613da516565b90506151cd8760c0015182612de390919063ffffffff16565b60c088015260048054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b15801561524057600080fd5b505af1158015615254573d6000803e3d6000fd5b505050506040513d602081101561526a57600080fd5b5050600354604051600160a060020a039091169083156108fc029084906000818181858888f193505050501580156152a6573d6000803e3d6000fd5b505b50949a9950505050505050505050565b6152c06156db565b6000848152601160205260408120548190819081906064906152e9908b9063ffffffff613da516565b8115156152f257fe5b04935060648904925061531083600d54612de390919063ffffffff16565b600d556000888152601160205260409020600101546153819061537490606490615341908d9063ffffffff613da516565b81151561534a57fe5b04606461535e8d600e63ffffffff613da516565b81151561536757fe5b049063ffffffff612de316565b8a9063ffffffff613f0b16565b9850615393898563ffffffff613f0b16565b91506153a18b8b868a6155a2565b905060008111156153bf576153bc848263ffffffff613f0b16565b93505b60008b8152600f60205260409020600701546153e590613550848463ffffffff612de316565b60008c8152600f602052604090206007015560e086015161540d90859063ffffffff612de316565b60e0870152506101008501525091979650505050505050565b836c01431e0fae6d7217caa00000000242670de0b6b3a76400000282600001510101816000018181525050600c54751aba4714957d300d0e549208b31adb100000000000000285826020015101018160200181815250507f500e72a0e114930aebdbcb371ccdbf43922c49f979794b5de4257ff7e310c7468160000151826020015160096000898152602001908152602001600020600101543387878760400151886060015189608001518a60a001518b60c001518c60e001518d6101000151600d54604051808f81526020018e81526020018d600019166000191681526020018c600160a060020a0316600160a060020a031681526020018b81526020018a815260200189600160a060020a0316600160a060020a0316815260200188600019166000191681526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390a15050505050565b6000808284811515613f0257fe5b6000848152600f6020526040812060050154819081906155d086670de0b6b3a764000063ffffffff613da516565b8115156155d957fe5b6000898152600f6020526040902060080154919004925061560190839063ffffffff612de316565b6000888152600f6020526040902060080155670de0b6b3a764000061562c838663ffffffff613da516565b81151561563557fe5b6000888152600a602090815260408083208c8452825280832060020154600f9092529091206008015492909104925061568891613550908490670de0b6b3a764000090613fb2908a63ffffffff613da516565b6000878152600a602090815260408083208b8452825280832060020193909355600f905220600501546156d090670de0b6b3a76400009061320d90859063ffffffff613da516565b979650505050505050565b6101206040519081016040528060008152602001600081526020016000600160a060020a031681526020016000801916815260200160008152602001600081526020016000815260200160008152602001600081525090560048756d616e73206f6e6c79000000000000000000000000000000000000000000697473206e6f7420616374697665207965742e000000000000000000000000004d7573742062652061646d696e2e000000000000000000000000000000000000546f6f206c6974746c6500000000000000000000000000000000000000000000546f6f206d756368000000000000000000000000000000000000000000000000a165627a7a7230582014785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce0029
Swarm Source
bzzr://14785a19f98eb6f4f9adfc80b78a9a7005075298cadf6f3146e6f2cbd1ee8fce
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)