ETH Price: $2,094.91 (-7.82%)

Contract

0x453939dDbb64A8cE1dA8b0648281CA281DFaA2eF
 

Overview

ETH Balance

0.03963826069919 ETH

Eth Value

$83.04 (@ $2,094.91/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Clear Bets94732282020-02-13 7:12:161846 days ago1581577936IN
0x453939dD...81DFaA2eF
0 ETH0.000783213.3
Roll Dice94732192020-02-13 7:10:121846 days ago1581577812IN
0x453939dD...81DFaA2eF
0.01 ETH0.00185765.5
Clear Bets80035212019-06-21 20:13:102082 days ago1561147990IN
0x453939dD...81DFaA2eF
0 ETH0.000226871.1
Roll Dice80035112019-06-21 20:11:042082 days ago1561147864IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80035062019-06-21 20:10:222082 days ago1561147822IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80035012019-06-21 20:08:482082 days ago1561147728IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034972019-06-21 20:08:122082 days ago1561147692IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034932019-06-21 20:07:382082 days ago1561147658IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034882019-06-21 20:06:552082 days ago1561147615IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034842019-06-21 20:06:252082 days ago1561147585IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034782019-06-21 20:04:502082 days ago1561147490IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034742019-06-21 20:03:502082 days ago1561147430IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360193
Roll Dice80034692019-06-21 20:02:482082 days ago1561147368IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034642019-06-21 20:01:332082 days ago1561147293IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034592019-06-21 20:00:362082 days ago1561147236IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034542019-06-21 19:59:542082 days ago1561147194IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034492019-06-21 19:58:072082 days ago1561147087IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034452019-06-21 19:57:112082 days ago1561147031IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360193
Roll Dice80034412019-06-21 19:55:552082 days ago1561146955IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034362019-06-21 19:54:422082 days ago1561146882IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034322019-06-21 19:53:432082 days ago1561146823IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360193
Roll Dice80034272019-06-21 19:52:102082 days ago1561146730IN
0x453939dD...81DFaA2eF
0.01 ETH0.001360383
Roll Dice80034222019-06-21 19:50:392082 days ago1561146639IN
0x453939dD...81DFaA2eF
0.01 ETH0.000848333
Clear Bets80034162019-06-21 19:48:372082 days ago1561146517IN
0x453939dD...81DFaA2eF
0 ETH0.000268181.21
Roll Dice79498042019-06-13 10:25:502091 days ago1560421550IN
0x453939dD...81DFaA2eF
0.012 ETH0.002410049
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
94732282020-02-13 7:12:161846 days ago1581577936
0x453939dD...81DFaA2eF
0.01086086 ETH
80035212019-06-21 20:13:102082 days ago1561147990
0x453939dD...81DFaA2eF
0.01123595 ETH
80035112019-06-21 20:11:042082 days ago1561147864
0x453939dD...81DFaA2eF
0.01123595 ETH
80035062019-06-21 20:10:222082 days ago1561147822
0x453939dD...81DFaA2eF
0.01123595 ETH
80035012019-06-21 20:08:482082 days ago1561147728
0x453939dD...81DFaA2eF
0.01149425 ETH
80034972019-06-21 20:08:122082 days ago1561147692
0x453939dD...81DFaA2eF
0.01190476 ETH
80034932019-06-21 20:07:382082 days ago1561147658
0x453939dD...81DFaA2eF
0.01234567 ETH
80034882019-06-21 20:06:552082 days ago1561147615
0x453939dD...81DFaA2eF
0.0125 ETH
80034842019-06-21 20:06:252082 days ago1561147585
0x453939dD...81DFaA2eF
0.01020408 ETH
80034782019-06-21 20:04:502082 days ago1561147490
0x453939dD...81DFaA2eF
0.01470588 ETH
80034742019-06-21 20:03:502082 days ago1561147430
0x453939dD...81DFaA2eF
0.01639344 ETH
80034692019-06-21 20:02:482082 days ago1561147368
0x453939dD...81DFaA2eF
0.01851851 ETH
80034642019-06-21 20:01:332082 days ago1561147293
0x453939dD...81DFaA2eF
0.02173913 ETH
80034592019-06-21 20:00:362082 days ago1561147236
0x453939dD...81DFaA2eF
0.02564102 ETH
80034542019-06-21 19:59:542082 days ago1561147194
0x453939dD...81DFaA2eF
0.03125 ETH
80034492019-06-21 19:58:072082 days ago1561147087
0x453939dD...81DFaA2eF
0.04 ETH
80034452019-06-21 19:57:112082 days ago1561147031
0x453939dD...81DFaA2eF
0.05 ETH
80034412019-06-21 19:55:552082 days ago1561146955
0x453939dD...81DFaA2eF
0.0625 ETH
80034362019-06-21 19:54:422082 days ago1561146882
0x453939dD...81DFaA2eF
0.07692307 ETH
80034322019-06-21 19:53:432082 days ago1561146823
0x453939dD...81DFaA2eF
0.09090909 ETH
80034272019-06-21 19:52:102082 days ago1561146730
0x453939dD...81DFaA2eF
0.09090909 ETH
80034162019-06-21 19:48:372082 days ago1561146517
0x453939dD...81DFaA2eF
0.012 ETH
79492702019-06-13 8:25:422091 days ago1560414342
0x453939dD...81DFaA2eF
0.019 ETH
79484352019-06-13 5:25:532091 days ago1560403553
0x453939dD...81DFaA2eF
0.022 ETH
79479042019-06-13 3:25:392091 days ago1560396339
0x453939dD...81DFaA2eF
1 wei
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpinWin

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 2019-05-07
*/

pragma solidity ^0.4.24;

/**
 * @title SpinWinInterface
 */
interface SpinWinInterface {
	function refundPendingBets() external returns (bool);
}


/**
 * @title AdvertisingInterface
 */
interface AdvertisingInterface {
	function incrementBetCounter() external returns (bool);
}


contract SpinWinLibraryInterface {
	function calculateWinningReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) external pure returns (uint256);
	function calculateTokenReward(address settingAddress, uint256 betValue, uint256 playerNumber, uint256 houseEdge) external constant returns (uint256);
	function generateRandomNumber(address settingAddress, uint256 betBlockNumber, uint256 extraData, uint256 divisor) external constant returns (uint256);
	function calculateClearBetBlocksReward(address settingAddress, address lotteryAddress) external constant returns (uint256);
	function calculateLotteryContribution(address settingAddress, address lotteryAddress, uint256 betValue) external constant returns (uint256);
	function calculateExchangeTokenValue(address settingAddress, uint256 tokenAmount) external constant returns (uint256, uint256, uint256, uint256);
}


/**
 * @title LotteryInterface
 */
interface LotteryInterface {
	function claimReward(address playerAddress, uint256 tokenAmount) external returns (bool);
	function calculateLotteryContributionPercentage() external constant returns (uint256);
	function getNumLottery() external constant returns (uint256);
	function isActive() external constant returns (bool);
	function getCurrentTicketMultiplierHonor() external constant returns (uint256);
	function getCurrentLotteryTargetBalance() external constant returns (uint256, uint256);
}


/**
 * @title SettingInterface
 */
interface SettingInterface {
	function uintSettings(bytes32 name) external constant returns (uint256);
	function boolSettings(bytes32 name) external constant returns (bool);
	function isActive() external constant returns (bool);
	function canBet(uint256 rewardValue, uint256 betValue, uint256 playerNumber, uint256 houseEdge) external constant returns (bool);
	function isExchangeAllowed(address playerAddress, uint256 tokenAmount) external constant returns (bool);

	/******************************************/
	/*          SPINWIN ONLY METHODS          */
	/******************************************/
	function spinwinSetUintSetting(bytes32 name, uint256 value) external;
	function spinwinIncrementUintSetting(bytes32 name) external;
	function spinwinSetBoolSetting(bytes32 name, bool value) external;
	function spinwinAddFunds(uint256 amount) external;
	function spinwinUpdateTokenToWeiExchangeRate() external;
	function spinwinRollDice(uint256 betValue) external;
	function spinwinUpdateWinMetric(uint256 playerProfit) external;
	function spinwinUpdateLoseMetric(uint256 betValue, uint256 tokenRewardValue) external;
	function spinwinUpdateLotteryContributionMetric(uint256 lotteryContribution) external;
	function spinwinUpdateExchangeMetric(uint256 exchangeAmount) external;

	/******************************************/
	/*      SPINLOTTERY ONLY METHODS          */
	/******************************************/
	function spinlotterySetUintSetting(bytes32 name, uint256 value) external;
	function spinlotteryIncrementUintSetting(bytes32 name) external;
	function spinlotterySetBoolSetting(bytes32 name, bool value) external;
	function spinlotteryUpdateTokenToWeiExchangeRate() external;
	function spinlotterySetMinBankroll(uint256 _minBankroll) external returns (bool);
}


/**
 * @title TokenInterface
 */
interface TokenInterface {
	function getTotalSupply() external constant returns (uint256);
	function getBalanceOf(address account) external constant returns (uint256);
	function transfer(address _to, uint256 _value) external returns (bool);
	function transferFrom(address _from, address _to, uint256 _value) external returns (bool);
	function approve(address _spender, uint256 _value) external returns (bool success);
	function approveAndCall(address _spender, uint256 _value, bytes _extraData) external returns (bool success);
	function burn(uint256 _value) external returns (bool success);
	function burnFrom(address _from, uint256 _value) external returns (bool success);
	function mintTransfer(address _to, uint _value) external returns (bool);
	function burnAt(address _at, uint _value) external returns (bool);
}




// https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		if (a == 0) {
			return 0;
		}
		uint256 c = a * b;
		assert(c / a == b);
		return c;
	}

	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;
	}

	function sub(uint256 a, uint256 b) internal pure returns (uint256) {
		assert(b <= a);
		return a - b;
	}

	function add(uint256 a, uint256 b) internal pure returns (uint256) {
		uint256 c = a + b;
		assert(c >= a);
		return c;
	}
}



interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; }

contract TokenERC20 {
	// Public variables of the token
	string public name;
	string public symbol;
	uint8 public decimals = 18;
	// 18 decimals is the strongly suggested default, avoid changing it
	uint256 public totalSupply;

	// This creates an array with all balances
	mapping (address => uint256) public balanceOf;
	mapping (address => mapping (address => uint256)) public allowance;

	// This generates a public event on the blockchain that will notify clients
	event Transfer(address indexed from, address indexed to, uint256 value);

	// This generates a public event on the blockchain that will notify clients
	event Approval(address indexed _owner, address indexed _spender, uint256 _value);

	// This notifies clients about the amount burnt
	event Burn(address indexed from, uint256 value);

	/**
	 * Constructor function
	 *
	 * Initializes contract with initial supply tokens to the creator of the contract
	 */
	constructor(
		uint256 initialSupply,
		string tokenName,
		string tokenSymbol
	) public {
		totalSupply = initialSupply * 10 ** uint256(decimals);  // Update total supply with the decimal amount
		balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens
		name = tokenName;                                   // Set the name for display purposes
		symbol = tokenSymbol;                               // Set the symbol for display purposes
	}

	/**
	 * Internal transfer, only can be called by this contract
	 */
	function _transfer(address _from, address _to, uint _value) internal {
		// Prevent transfer to 0x0 address. Use burn() instead
		require(_to != 0x0);
		// Check if the sender has enough
		require(balanceOf[_from] >= _value);
		// Check for overflows
		require(balanceOf[_to] + _value > balanceOf[_to]);
		// Save this for an assertion in the future
		uint previousBalances = balanceOf[_from] + balanceOf[_to];
		// Subtract from the sender
		balanceOf[_from] -= _value;
		// Add the same to the recipient
		balanceOf[_to] += _value;
		emit Transfer(_from, _to, _value);
		// Asserts are used to use static analysis to find bugs in your code. They should never fail
		assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
	}

	/**
	 * Transfer tokens
	 *
	 * Send `_value` tokens to `_to` from your account
	 *
	 * @param _to The address of the recipient
	 * @param _value the amount to send
	 */
	function transfer(address _to, uint256 _value) public returns (bool success) {
		_transfer(msg.sender, _to, _value);
		return true;
	}

	/**
	 * Transfer tokens from other address
	 *
	 * Send `_value` tokens to `_to` in behalf of `_from`
	 *
	 * @param _from The address of the sender
	 * @param _to The address of the recipient
	 * @param _value the amount to send
	 */
	function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
		require(_value <= allowance[_from][msg.sender]);     // Check allowance
		allowance[_from][msg.sender] -= _value;
		_transfer(_from, _to, _value);
		return true;
	}

	/**
	 * Set allowance for other address
	 *
	 * Allows `_spender` to spend no more than `_value` tokens in your behalf
	 *
	 * @param _spender The address authorized to spend
	 * @param _value the max amount they can spend
	 */
	function approve(address _spender, uint256 _value) public returns (bool success) {
		allowance[msg.sender][_spender] = _value;
		emit Approval(msg.sender, _spender, _value);
		return true;
	}

	/**
	 * Set allowance for other address and notify
	 *
	 * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it
	 *
	 * @param _spender The address authorized to spend
	 * @param _value the max amount they can spend
	 * @param _extraData some extra information to send to the approved contract
	 */
	function approveAndCall(address _spender, uint256 _value, bytes _extraData)
		public
		returns (bool success) {
		tokenRecipient spender = tokenRecipient(_spender);
		if (approve(_spender, _value)) {
			spender.receiveApproval(msg.sender, _value, this, _extraData);
			return true;
		}
	}

	/**
	 * Destroy tokens
	 *
	 * Remove `_value` tokens from the system irreversibly
	 *
	 * @param _value the amount of money to burn
	 */
	function burn(uint256 _value) public returns (bool success) {
		require(balanceOf[msg.sender] >= _value);   // Check if the sender has enough
		balanceOf[msg.sender] -= _value;            // Subtract from the sender
		totalSupply -= _value;                      // Updates totalSupply
		emit Burn(msg.sender, _value);
		return true;
	}

	/**
	 * Destroy tokens from other account
	 *
	 * Remove `_value` tokens from the system irreversibly on behalf of `_from`.
	 *
	 * @param _from the address of the sender
	 * @param _value the amount of money to burn
	 */
	function burnFrom(address _from, uint256 _value) public returns (bool success) {
		require(balanceOf[_from] >= _value);                // Check if the targeted balance is enough
		require(_value <= allowance[_from][msg.sender]);    // Check allowance
		balanceOf[_from] -= _value;                         // Subtract from the targeted balance
		allowance[_from][msg.sender] -= _value;             // Subtract from the sender's allowance
		totalSupply -= _value;                              // Update totalSupply
		emit Burn(_from, _value);
		return true;
	}
}

contract developed {
	address public developer;

	/**
	 * Constructor
	 */
	constructor() public {
		developer = msg.sender;
	}

	/**
	 * @dev Checks only developer address is calling
	 */
	modifier onlyDeveloper {
		require(msg.sender == developer);
		_;
	}

	/**
	 * @dev Allows developer to switch developer address
	 * @param _developer The new developer address to be set
	 */
	function changeDeveloper(address _developer) public onlyDeveloper {
		developer = _developer;
	}

	/**
	 * @dev Allows developer to withdraw ERC20 Token
	 */
	function withdrawToken(address tokenContractAddress) public onlyDeveloper {
		TokenERC20 _token = TokenERC20(tokenContractAddress);
		if (_token.balanceOf(this) > 0) {
			_token.transfer(developer, _token.balanceOf(this));
		}
	}
}








/**
 * @title SpinWin
 */
contract SpinWin is developed, SpinWinInterface {
	using SafeMath for uint256;

	address public tokenAddress;
	address public settingAddress;
	address public lotteryAddress;

	TokenInterface internal _spintoken;
	SettingInterface internal _setting;
	LotteryInterface internal _lottery;
	SpinWinLibraryInterface internal _lib;
	AdvertisingInterface internal _advertising;

	/**
	 * @dev Player variables
	 */
	struct Bet {
		address playerAddress;
		bytes32 betId;
		uint256 betValue;
		uint256 diceResult;
		uint256 playerNumber;
		uint256 houseEdge;
		uint256 rewardValue;
		uint256 tokenRewardValue;
		uint256 blockNumber;
		bool processed;
	}
	struct TokenExchange {
		address playerAddress;
		bytes32 exchangeId;
		bool processed;
	}

	mapping (uint256 => Bet) internal bets;
	mapping (bytes32 => uint256) internal betIdLookup;
	mapping (address => uint256) public playerPendingWithdrawals;
	mapping (address => uint256) public playerPendingTokenWithdrawals;
	mapping (address => address) public referees;
	mapping (bytes32 => TokenExchange) public tokenExchanges;
	mapping (address => uint256) public lotteryBlocksAmount;

	uint256 constant public TWO_DECIMALS = 100;
	uint256 constant public PERCENTAGE_DIVISOR = 10 ** 6;   // 1000000 = 100%
	uint256 constant public CURRENCY_DIVISOR = 10**18;

	uint256 public totalPendingBets;

	/**
	 * @dev Log when bet is placed
	 */
	event LogBet(bytes32 indexed betId, address indexed playerAddress, uint256 playerNumber, uint256 betValue, uint256 houseEdge, uint256 rewardValue, uint256 tokenRewardValue);

	/**
	 * @dev Log when bet is cleared
	 *
	 * Status:
	 * -2 = lose + failed mint and transfer
	 * -1 = lose + failed send
	 * 0 = lose
	 * 1 = win
	 * 2 = win + failed send
	 * 3 = refund
	 * 4 = refund + failed send
	 * 5 = owner cancel + refund
	 * 6 = owner cancel + refund + failed send
	 */
	event LogResult(bytes32 indexed betId, address indexed playerAddress, uint256 playerNumber, uint256 diceResult, uint256 betValue, uint256 houseEdge, uint256 rewardValue, uint256 tokenRewardValue, int256 status);

	/**
	 * @dev Log when spinwin contributes some ETH to the lottery contract address
	 */
	event LogLotteryContribution(bytes32 indexed betId, address indexed playerAddress, uint256 weiValue);

	/**
	 * @dev Log when spinwin rewards the referee of a bet or the person clears bet
	 * rewardType
	 * 1 = referral
	 * 2 = clearBet
	 */
	event LogRewardLotteryBlocks(address indexed receiver, bytes32 indexed betId, uint256 lottoBlocksAmount, uint256 rewardType, uint256 status);

	/**
	 * @dev Log when player clears bets
	 */
	event LogClearBets(address indexed playerAddress);

	/**
	 * @dev Log when player claims the lottery blocks reward
	 *
	 * Status:
	 * 0 = failed
	 * 1 = success
	 */
	event LogClaimLotteryBlocks(address indexed playerAddress, uint256 numLottery, uint256 claimAmount, uint256 claimStatus);

	/**
	 * @dev Log when player exchanges token to Wei
	 *
	 * Status:
	 * 0 = failed send
	 * 1 = success
	 * 2 = failed destroy token
	 */
	event LogTokenExchange(bytes32 indexed exchangeId, address indexed playerAddress, uint256 tokenValue, uint256 tokenToWeiExchangeRate, uint256 weiValue, uint256 receivedWeiValue, uint256 remainderTokenValue, uint256 status);

	/**
	 * @dev Log when player withdraws balance from failed transfer
	 *
	 * Status:
	 * 0 = failed
	 * 1 = success
	 */
	event LogPlayerWithdrawBalance(address indexed playerAddress, uint256 withdrawAmount, uint256 status);

	/**
	 * @dev Log when player withdraw token balance from failed token transfer
	 *
	 * Status:
	 * 0 = failed
	 * 1 = success
	 */
	event LogPlayerWithdrawTokenBalance(address indexed playerAddress, uint256 withdrawAmount, uint256 status);

	/**
	 * @dev Log when a bet ID is not found during clear bet
	 */
	event LogBetNotFound(bytes32 indexed betId);

	/**
	 * @dev Log when developer cancel existing active bet
	 */
	event LogDeveloperCancelBet(bytes32 indexed betId, address indexed playerAddress);

	/**
	 * Constructor
	 * @param _tokenAddress SpinToken contract address
	 * @param _settingAddress GameSetting contract address
	 * @param _libraryAddress SpinWinLibrary contract address
	 */
	constructor(address _tokenAddress, address _settingAddress, address _libraryAddress) public {
		tokenAddress = _tokenAddress;
		settingAddress = _settingAddress;
		_spintoken = TokenInterface(_tokenAddress);
		_setting = SettingInterface(_settingAddress);
		_lib = SpinWinLibraryInterface(_libraryAddress);
	}

	/**
	 * @dev Checks if contract is active
	 */
	modifier isActive {
		require(_setting.isActive() == true);
		_;
	}

	/**
	 * @dev Checks whether a bet is allowed, and player profit, bet value, house edge and player number are within range
	 */
	modifier canBet(uint256 _betValue, uint256 _playerNumber, uint256 _houseEdge) {
		require(_setting.canBet(_lib.calculateWinningReward(_betValue, _playerNumber, _houseEdge), _betValue, _playerNumber, _houseEdge) == true);
		_;
	}

	/**
	 * @dev Checks if bet exist
	 */
	modifier betExist(bytes32 betId, address playerAddress) {
		require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId && bets[betIdLookup[betId]].playerAddress == playerAddress);
		_;
	}

	/**
	 * @dev Checks if token exchange is allowed
	 */
	modifier isExchangeAllowed(address playerAddress, uint256 tokenAmount) {
		require(_setting.isExchangeAllowed(playerAddress, tokenAmount) == true);
		_;
	}

	/******************************************/
	/*       DEVELOPER ONLY METHODS           */
	/******************************************/
	/**
	 * @dev Allows developer to set lottery contract address
	 * @param _lotteryAddress The new lottery contract address to be set
	 */
	function devSetLotteryAddress(address _lotteryAddress) public onlyDeveloper {
		require (_lotteryAddress != address(0));
		lotteryAddress = _lotteryAddress;
		_lottery = LotteryInterface(_lotteryAddress);
	}

	/**
	 * @dev Allows developer to set advertising contract address
	 * @param _advertisingAddress The new advertising contract address to be set
	 */
	function devSetAdvertisingAddress(address _advertisingAddress) public onlyDeveloper {
		require (_advertisingAddress != address(0));
		_advertising = AdvertisingInterface(_advertisingAddress);
	}

	/**
	 * @dev Allows developer to get bet internal ID based on public betId
	 * @param betId The public betId
	 * @return The bet internal ID
	 */
	function devGetBetInternalId(bytes32 betId) public onlyDeveloper constant returns (uint256) {
		return (betIdLookup[betId]);
	}

	/**
	 * @dev Allows developer to get bet info based on `betInternalId`
	 * @param betInternalId The bet internal ID to be queried
	 * @return The bet information
	 */
	function devGetBet(uint256 betInternalId) public
		onlyDeveloper
		constant returns (address, uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool) {
		Bet memory _bet = bets[betInternalId];
		return (_bet.playerAddress, _bet.betValue, _bet.diceResult, _bet.playerNumber, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue, _bet.blockNumber, _bet.processed);
	}

	/**
	 * @dev Allows developer to manually refund existing active bet.
	 * @param betId The ID of the bet to be cancelled
	 * @return Return true if success
	 */
	function devRefundBet(bytes32 betId) public onlyDeveloper returns (bool) {
		require (betIdLookup[betId] > 0);

		Bet storage _bet = bets[betIdLookup[betId]];

		require(_bet.processed == false);

		_bet.processed = true;
		uint256 betValue = _bet.betValue;
		_bet.betValue = 0;
		_bet.rewardValue = 0;
		_bet.tokenRewardValue = 0;

		_refundPlayer(betIdLookup[betId], betValue);
		return true;
	}

	/**
	 * @dev Add funds to the contract
	 */
	function () public payable isActive {
		_setting.spinwinAddFunds(msg.value);
	}

	/******************************************/
	/*           SETTING METHODS              */
	/******************************************/
	/**
	 * @dev Triggered during escape hatch. Go through each pending bets
	 * and move the bet value to playerPendingWithdrawals so that player
	 * can withdraw later
	 */
	function refundPendingBets() public returns (bool) {
		require (msg.sender == settingAddress);
		uint256 totalBets = _setting.uintSettings('totalBets');
		if (totalBets > 0) {
			for (uint256 i = 1; i <= totalBets; i++) {
				Bet storage _bet = bets[i];
				if (_bet.processed == false) {
					uint256 _betValue = _bet.betValue;
					_bet.processed = true;
					_bet.betValue = 0;
					playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(_betValue);
					emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, 0, _betValue, _bet.houseEdge, 0, 0, 4);
				}
			}
		}
		return true;
	}

	/******************************************/
	/*            PUBLIC METHODS              */
	/******************************************/
	/**
	 * @dev Player places a bet. If it has a `referrerAddress`, we want to give reward to the referrer accordingly.
	 * @dev If there is a bet that needs to be cleared, we will do it here too.
	 * @param playerNumber The number that the player chose
	 * @param houseEdge The house edge percentage that the player chose
	 * @param clearBetId The bet ID to be cleared
	 * @param referreeAddress The referree address if exist
	 * @return Return true if success
	 */
	function rollDice(uint256 playerNumber, uint256 houseEdge, bytes32 clearBetId, address referreeAddress) public
		payable
		canBet(msg.value, playerNumber, houseEdge)
		returns (bool) {
		uint256 betInternalId = _storeBet(msg.value, msg.sender, playerNumber, houseEdge);

		// Check if we need to clear a pending bet
		if (clearBetId != '') {
			_clearSingleBet(msg.sender, clearBetId, _setting.uintSettings('blockSecurityCount'));
		}

		// Check if we need to reward the referree
		_rewardReferree(referreeAddress, betInternalId);

		_advertising.incrementBetCounter();

		return true;
	}

	/**
	 * @dev Player can clear multiple bets
	 * @param betIds The bet ids to be cleared
	 */
	function clearBets(bytes32[] betIds) public isActive {
		require (betIds.length > 0 && betIds.length <= _setting.uintSettings('maxNumClearBets'));
		bool canClear = false;
		uint256 blockSecurityCount = _setting.uintSettings('blockSecurityCount');
		for (uint256 i = 0; i < betIds.length; i++) {
			Bet memory _bet = bets[betIdLookup[betIds[i]]];
			if (_bet.processed == false && _setting.uintSettings('contractBalance') >= _bet.rewardValue && (block.number.sub(_bet.blockNumber)) >= blockSecurityCount) {
				canClear = true;
				break;
			}
		}
		require(canClear == true);

		// Loop through each bets and clear it if possible
		for (i = 0; i < betIds.length; i++) {
			_clearSingleBet(msg.sender, betIds[i], blockSecurityCount);
		}
		emit LogClearBets(msg.sender);
	}

	/**
	 * @dev Allow player to claim lottery blocks reward
	 * and spend it on lottery blocks
	 */
	function claimLotteryBlocks() public isActive {
		require (_lottery.isActive() == true);
		require (lotteryBlocksAmount[msg.sender] > 0);
		uint256 claimAmount = lotteryBlocksAmount[msg.sender];
		lotteryBlocksAmount[msg.sender] = 0;
		uint256 claimStatus = 1;
		if (!_lottery.claimReward(msg.sender, claimAmount)) {
			claimStatus = 0;
			lotteryBlocksAmount[msg.sender] = claimAmount;
		}
		emit LogClaimLotteryBlocks(msg.sender, _lottery.getNumLottery(), claimAmount, claimStatus);
	}

	/**
	 * @dev Player exchanges token for Wei
	 * @param tokenAmount The amount of token to be exchanged
	 * @return Return true if success
	 */
	function exchangeToken(uint256 tokenAmount) public
		isExchangeAllowed(msg.sender, tokenAmount) {
		(uint256 weiValue, uint256 sendWei, uint256 tokenRemainder, uint256 burnToken) = _lib.calculateExchangeTokenValue(settingAddress, tokenAmount);

		_setting.spinwinIncrementUintSetting('totalTokenExchanges');

		// Generate exchangeId
		bytes32 _exchangeId = keccak256(abi.encodePacked(this, msg.sender, _setting.uintSettings('totalTokenExchanges')));
		TokenExchange storage _tokenExchange = tokenExchanges[_exchangeId];

		// Make sure we don't process the exchange bet twice
		require (_tokenExchange.processed == false);

		// Update exchange metric
		_setting.spinwinUpdateExchangeMetric(sendWei);

		/*
		 * Store the info about this exchange
		 */
		_tokenExchange.playerAddress = msg.sender;
		_tokenExchange.exchangeId = _exchangeId;
		_tokenExchange.processed = true;

		/*
		 * Burn token at this address
		 */
		if (!_spintoken.burnAt(_tokenExchange.playerAddress, burnToken)) {
			uint256 exchangeStatus = 2; // status = failed destroy token

		} else {
			if (!_tokenExchange.playerAddress.send(sendWei)) {
				exchangeStatus = 0; // status = failed send

				// If send failed, let player withdraw via playerWithdrawPendingTransactions
				playerPendingWithdrawals[_tokenExchange.playerAddress] = playerPendingWithdrawals[_tokenExchange.playerAddress].add(sendWei);
			} else {
				exchangeStatus = 1; // status = success
			}
		}
		// Update the token to wei exchange rate
		_setting.spinwinUpdateTokenToWeiExchangeRate();

		emit LogTokenExchange(_tokenExchange.exchangeId, _tokenExchange.playerAddress, tokenAmount, _setting.uintSettings('tokenToWeiExchangeRateHonor'), weiValue, sendWei, tokenRemainder, exchangeStatus);
	}

	/**
	 * @dev Calculate winning ETH when player wins
	 * @param betValue The amount of ETH for this bet
	 * @param playerNumber The number that player chose
	 * @param houseEdge The house edge for this bet
	 * @return The amount of ETH to be sent to player if he/she wins
	 */
	function calculateWinningReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) public view returns (uint256) {
		return _lib.calculateWinningReward(betValue, playerNumber, houseEdge);
	}

	/**
	 * @dev Calculates token reward amount when player loses
	 * @param betValue The amount of ETH for this bet
	 * @param playerNumber The number that player chose
	 * @param houseEdge The house edge for this bet
	 * @return The amount of token to be sent to player if he/she loses
	 */
	function calculateTokenReward(uint256 betValue, uint256 playerNumber, uint256 houseEdge) public constant returns (uint256) {
		return _lib.calculateTokenReward(settingAddress, betValue, playerNumber, houseEdge);
	}

	/**
	 * @dev Player withdraws balance in case of a failed refund or failed win send
	 */
	function playerWithdrawPendingTransactions() public {
		require(playerPendingWithdrawals[msg.sender] > 0);
		uint256 withdrawAmount = playerPendingWithdrawals[msg.sender];
		playerPendingWithdrawals[msg.sender] = 0;

		// External call to untrusted contract
		uint256 status = 1; // status = success
		if (!msg.sender.send(withdrawAmount)) {
			status = 0; // status = failed

			/*
			 * If send failed, revert playerPendingWithdrawals[msg.sender] = 0
			 * so that player can try to withdraw again later
			 */
			playerPendingWithdrawals[msg.sender] = withdrawAmount;
		}
		emit LogPlayerWithdrawBalance(msg.sender, withdrawAmount, status);
	}

	/**
	 * @dev Players withdraws SPIN token balance in case of a failed token transfer
	 */
	function playerWithdrawPendingTokenTransactions() public {
		require(playerPendingTokenWithdrawals[msg.sender] > 0);
		uint256 withdrawAmount = playerPendingTokenWithdrawals[msg.sender];
		playerPendingTokenWithdrawals[msg.sender] = 0;

		// Mint and transfer token to msg.sender
		uint256 status = 1; // status = success
		if (!_spintoken.mintTransfer(msg.sender, withdrawAmount)) {
			status = 0; // status = failed
			/*
			 * If transfer failed, revert playerPendingTokenWithdrawals[msg.sender] = 0
			 * so that player can try to withdraw again later
			 */
			playerPendingTokenWithdrawals[msg.sender] = withdrawAmount;
		}
		emit LogPlayerWithdrawTokenBalance(msg.sender, withdrawAmount, status);
	}

	/**
	 * @dev Player gets bet information based on betId
	 * @return The bet information
	 */
	function playerGetBet(bytes32 betId) public
		constant returns (uint256, uint256, uint256, uint256, uint256, uint256, bool) {
		require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId);
		Bet memory _bet = bets[betIdLookup[betId]];
		return (_bet.betValue, _bet.diceResult, _bet.playerNumber, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue, _bet.processed);
	}

	/**
	 * @dev Player gets pending bet IDs
	 * @return The pending bet IDs
	 */
	function playerGetPendingBetIds() public constant returns (bytes32[]) {
		bytes32[] memory pendingBetIds = new bytes32[](totalPendingBets);
		if (totalPendingBets > 0) {
			uint256 counter = 0;
			for (uint256 i = 1; i <= _setting.uintSettings('totalBets'); i++) {
				Bet memory _bet = bets[i];
				if (_bet.processed == false) {
					pendingBetIds[counter] = _bet.betId;
					counter++;
				}
				if (counter == totalPendingBets) {
					break;
				}
			}
		}
		return pendingBetIds;
	}

	/**
	 * @dev Player gets pending bet information based on betId
	 * @return The bet information
	 */
	function playerGetPendingBet(bytes32 betId) public
		constant returns (address, uint256, uint256, uint256, uint256) {
		require(betIdLookup[betId] > 0 && bets[betIdLookup[betId]].betId == betId);
		Bet memory _bet = bets[betIdLookup[betId]];
		return (_bet.playerAddress, _bet.playerNumber, _bet.betValue, _bet.houseEdge, _bet.blockNumber);
	}

	/**
	 * @dev Calculates lottery block rewards when player clears a bet
	 * @return The amount of lottery blocks to be rewarded when player clears bet
	 */
	function calculateClearBetBlocksReward() public constant returns (uint256) {
		return _lib.calculateClearBetBlocksReward(settingAddress, lotteryAddress);
	}


	/******************************************/
	/*           INTERNAL METHODS             */
	/******************************************/

	/**
	 * @dev Stores bet information.
	 * @param betValue The value of the bet
	 * @param playerAddress The player address
	 * @param playerNumber The number that player chose
	 * @param houseEdge The house edge for this bet
	 * @return The internal  bet ID of this bet
	 */
	function _storeBet (uint256 betValue, address playerAddress, uint256 playerNumber, uint256 houseEdge) internal returns (uint256) {
		// Update the setting metric
		_setting.spinwinRollDice(betValue);

		uint256 betInternalId = _setting.uintSettings('totalBets');

		// Generate betId
		bytes32 betId = keccak256(abi.encodePacked(this, playerAddress, betInternalId));

		Bet storage _bet = bets[betInternalId];

		// Make sure we don't process the same bet twice
		require (_bet.processed == false);

		// Store the info about this bet
		betIdLookup[betId] = betInternalId;
		_bet.playerAddress = playerAddress;
		_bet.betId = betId;
		_bet.betValue = betValue;
		_bet.playerNumber = playerNumber;
		_bet.houseEdge = houseEdge;

		// Safely calculate winning reward
		_bet.rewardValue = calculateWinningReward(betValue, playerNumber, houseEdge);

		// Safely calculate token payout
		_bet.tokenRewardValue = calculateTokenReward(betValue, playerNumber, houseEdge);
		_bet.blockNumber = block.number;

		// Update the pendingBets counter
		totalPendingBets++;

		emit LogBet(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.betValue, _bet.houseEdge, _bet.rewardValue, _bet.tokenRewardValue);
		return betInternalId;
	}

	/**
	 * @dev Internal function to clear single bet
	 * @param playerAddress The player who clears this bet
	 * @param betId The bet ID to be cleared
	 * @param blockSecurityCount The block security count to be checked
	 * @return true if success, false otherwise
	 */
	function _clearSingleBet(address playerAddress, bytes32 betId, uint256 blockSecurityCount) internal returns (bool) {
		if (betIdLookup[betId] > 0) {
			Bet memory _bet = bets[betIdLookup[betId]];

			/* Check if we can clear this bet
			 * - Make sure we don't process the same bet twice
			 * - Check if contract can payout on win
			 * - block number difference >= blockSecurityCount
			 */
			if (_bet.processed == false && _setting.uintSettings('contractBalance') >= _bet.rewardValue && (block.number.sub(_bet.blockNumber)) >= blockSecurityCount) {
				_processBet(playerAddress, betIdLookup[betId], true);
			} else {
				emit LogRewardLotteryBlocks(playerAddress, _bet.betId, 0, 2, 0);
			}
			return true;
		} else {
			emit LogBetNotFound(betId);
			return false;
		}
	}

	/**
	 * @dev Internal function to process existing bet.
	 * If no dice result, then we initiate a refund.
	 * If player wins (dice result < player number), we send player winning ETH.
	 * If player loses (dice result >= player number), we send player some SPIN token.
	 * If player loses and bankroll goal is reached, spinwin will contribute some ETH to lottery contract address.
	 *
	 * @param triggerAddress The player who clears this bet
	 * @param betInternalId The bet internal ID to be processed
	 * @param isClearMultiple Whether or not this is part of clear multiple bets transaction
	 * @return Return true if success
	 */
	function _processBet(address triggerAddress, uint256 betInternalId, bool isClearMultiple) internal returns (bool) {
		Bet storage _bet =  bets[betInternalId];
		uint256 _betValue = _bet.betValue;
		uint256 _rewardValue = _bet.rewardValue;
		uint256 _tokenRewardValue = _bet.tokenRewardValue;

		// Prevent re-entrancy
		_bet.processed = true;
		_bet.betValue = 0;
		_bet.rewardValue = 0;
		_bet.tokenRewardValue = 0;

		// Generate the result
		_bet.diceResult = _lib.generateRandomNumber(settingAddress, _bet.blockNumber, _setting.uintSettings('totalBets').add(_setting.uintSettings('totalWeiWagered')), 100);

		if (_bet.diceResult == 0) {
			/*
			 * Invalid random number. Refund the player
			 */
			_refundPlayer(betInternalId, _betValue);
		} else if (_bet.diceResult < _bet.playerNumber) {
			/*
			 * Player wins. Send the player the winning eth amount
			 */
			_payWinner(betInternalId, _betValue, _rewardValue);
		} else {
			/*
			 * Player loses. Send the player 1 wei and the spintoken amount
			 */
			_payLoser(betInternalId, _betValue, _tokenRewardValue);
		}
		// Update the pendingBets counter
		totalPendingBets--;

		// Update the token to wei exchange rate
		_setting.spinwinUpdateTokenToWeiExchangeRate();

		// Calculate the lottery blocks reward for this transaction
		uint256 lotteryBlocksReward = calculateClearBetBlocksReward();

		// If this is a single clear (from placing bet), we want to multiply this with clearSingleBetMultiplier
		if (isClearMultiple == false) {
			uint256 multiplier = _setting.uintSettings('clearSingleBetMultiplier');
		} else {
			multiplier = _setting.uintSettings('clearMultipleBetsMultiplier');
		}
		lotteryBlocksReward = (lotteryBlocksReward.mul(multiplier)).div(TWO_DECIMALS);

		lotteryBlocksAmount[triggerAddress] = lotteryBlocksAmount[triggerAddress].add(lotteryBlocksReward);
		emit LogRewardLotteryBlocks(triggerAddress, _bet.betId, lotteryBlocksReward, 2, 1);
		return true;
	}

	/**
	 * @dev Refund the player when we are unable to determine the dice result
	 * @param betInternalId The bet internal ID
	 * @param refundAmount The amount to be refunded
	 */
	function _refundPlayer(uint256 betInternalId, uint256 refundAmount) internal {
		Bet memory _bet =  bets[betInternalId];
		/*
		 * Send refund - external call to an untrusted contract
		 * If send fails, map refund value to playerPendingWithdrawals[address]
		 * for withdrawal later via playerWithdrawPendingTransactions
		 */
		int256 betStatus = 3; // status = refund
		if (!_bet.playerAddress.send(refundAmount)) {
			betStatus = 4; // status = refund + failed send

			// If send failed, let player withdraw via playerWithdrawPendingTransactions
			playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(refundAmount);
		}
		emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, refundAmount, _bet.houseEdge, 0, 0, betStatus);
	}

	/**
	 * @dev Pays the player the winning eth amount
	 * @param betInternalId The bet internal ID
	 * @param betValue The original wager
	 * @param playerProfit The player profit
	 */
	function _payWinner(uint256 betInternalId, uint256 betValue, uint256 playerProfit) internal {
		Bet memory _bet =  bets[betInternalId];
		// Update setting's contract balance and total wei won
		_setting.spinwinUpdateWinMetric(playerProfit);

		// Safely calculate payout via profit plus original wager
		playerProfit = playerProfit.add(betValue);

		/*
		 * Send win - external call to an untrusted contract
		 * If send fails, map reward value to playerPendingWithdrawals[address]
		 * for withdrawal later via playerWithdrawPendingTransactions
		 */
		int256 betStatus = 1; // status = win
		if (!_bet.playerAddress.send(playerProfit)) {
			betStatus = 2; // status = win + failed send

			// If send failed, let player withdraw via playerWithdrawPendingTransactions
			playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(playerProfit);
		}
		emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, betValue, _bet.houseEdge, playerProfit, 0, betStatus);
	}

	/**
	 * @dev Pays the player 1 wei and the spintoken amount
	 * @param betInternalId The bet internal ID
	 * @param betValue The original wager
	 * @param tokenRewardValue The token reward for this bet
	 */
	function _payLoser(uint256 betInternalId, uint256 betValue, uint256 tokenRewardValue) internal {
		Bet memory _bet =  bets[betInternalId];
		/*
		 * Update the game setting metric when player loses
		 */
		_setting.spinwinUpdateLoseMetric(betValue, tokenRewardValue);

		int256 betStatus; // status = lose

		/*
		 * Send 1 Wei to losing bet - external call to an untrusted contract
		 */
		if (!_bet.playerAddress.send(1)) {
			betStatus = -1; // status = lose + failed send

			// If send failed, let player withdraw via playerWithdrawPendingTransactions
			playerPendingWithdrawals[_bet.playerAddress] = playerPendingWithdrawals[_bet.playerAddress].add(1);
		}

		/*
		 * Mint and transfer token reward to this player
		 */
		if (tokenRewardValue > 0) {
			if (!_spintoken.mintTransfer(_bet.playerAddress, tokenRewardValue)) {
				betStatus = -2; // status = lose + failed mint and transfer

				// If transfer token failed, let player withdraw via playerWithdrawPendingTokenTransactions
				playerPendingTokenWithdrawals[_bet.playerAddress] = playerPendingTokenWithdrawals[_bet.playerAddress].add(tokenRewardValue);
			}
		}
		emit LogResult(_bet.betId, _bet.playerAddress, _bet.playerNumber, _bet.diceResult, betValue, _bet.houseEdge, 1, tokenRewardValue, betStatus);
		_sendLotteryContribution(betInternalId, betValue);
	}

	/**
	 * @dev Contribute the house win to lottery address
	 * @param betInternalId The bet internal ID
	 * @param betValue The original wager
	 * @return Return true if success
	 */
	function _sendLotteryContribution(uint256 betInternalId, uint256 betValue) internal returns (bool) {
		/*
		 * If contractBalance >= minBankroll, contribute the a percentage of the winning to lottery
		 */
		uint256 contractBalance = _setting.uintSettings('contractBalance');
		if (contractBalance >= _setting.uintSettings('minBankroll')) {
			Bet memory _bet =  bets[betInternalId];
			uint256 lotteryContribution = _lib.calculateLotteryContribution(settingAddress, lotteryAddress, betValue);

			if (lotteryContribution > 0 && contractBalance >= lotteryContribution) {
				// Safely adjust contractBalance
				_setting.spinwinUpdateLotteryContributionMetric(lotteryContribution);

				emit LogLotteryContribution(_bet.betId, _bet.playerAddress, lotteryContribution);

				// Contribute to the lottery
				if (!lotteryAddress.call.gas(_setting.uintSettings('gasForLottery')).value(lotteryContribution)()) {
					return false;
				}
			}
		}
		return true;
	}

	/**
	 * @dev Reward the referree if necessary.
	 * @param referreeAddress The address of the referree
	 * @param betInternalId The internal bet ID
	 */
	function _rewardReferree(address referreeAddress, uint256 betInternalId) internal {
		Bet memory _bet = bets[betInternalId];

		// If the player already has a referee, use that address
		if (referees[_bet.playerAddress] != address(0)) {
			referreeAddress = referees[_bet.playerAddress];
		}
		if (referreeAddress != address(0) && referreeAddress != _bet.playerAddress) {
			referees[_bet.playerAddress] = referreeAddress;
			uint256 _tokenForLotto = _bet.tokenRewardValue.mul(_setting.uintSettings('referralPercent')).div(PERCENTAGE_DIVISOR);
			lotteryBlocksAmount[referreeAddress] = lotteryBlocksAmount[referreeAddress].add(_tokenForLotto);
			emit LogRewardLotteryBlocks(referreeAddress, _bet.betId, _tokenForLotto, 1, 1);
		}
	}
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[],"name":"playerWithdrawPendingTokenTransactions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betIds","type":"bytes32[]"}],"name":"clearBets","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"playerPendingWithdrawals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"playerGetBet","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundPendingBets","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"playerGetPendingBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betValue","type":"uint256"},{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"}],"name":"calculateTokenReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lotteryBlocksAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_developer","type":"address"}],"name":"changeDeveloper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betValue","type":"uint256"},{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"}],"name":"calculateWinningReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lotteryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_advertisingAddress","type":"address"}],"name":"devSetAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"betId","type":"bytes32"}],"name":"devGetBetInternalId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calculateClearBetBlocksReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"playerGetPendingBetIds","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referees","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"betInternalId","type":"uint256"}],"name":"devGetBet","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenContractAddress","type":"address"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAmount","type":"uint256"}],"name":"exchangeToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betId","type":"bytes32"}],"name":"devRefundBet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPendingBets","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"playerWithdrawPendingTransactions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimLotteryBlocks","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TWO_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"playerNumber","type":"uint256"},{"name":"houseEdge","type":"uint256"},{"name":"clearBetId","type":"bytes32"},{"name":"referreeAddress","type":"address"}],"name":"rollDice","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_lotteryAddress","type":"address"}],"name":"devSetLotteryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"tokenExchanges","outputs":[{"name":"playerAddress","type":"address"},{"name":"exchangeId","type":"bytes32"},{"name":"processed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERCENTAGE_DIVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CURRENCY_DIVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"playerPendingTokenWithdrawals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_settingAddress","type":"address"},{"name":"_libraryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerNumber","type":"uint256"},{"indexed":false,"name":"betValue","type":"uint256"},{"indexed":false,"name":"houseEdge","type":"uint256"},{"indexed":false,"name":"rewardValue","type":"uint256"},{"indexed":false,"name":"tokenRewardValue","type":"uint256"}],"name":"LogBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"playerNumber","type":"uint256"},{"indexed":false,"name":"diceResult","type":"uint256"},{"indexed":false,"name":"betValue","type":"uint256"},{"indexed":false,"name":"houseEdge","type":"uint256"},{"indexed":false,"name":"rewardValue","type":"uint256"},{"indexed":false,"name":"tokenRewardValue","type":"uint256"},{"indexed":false,"name":"status","type":"int256"}],"name":"LogResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"weiValue","type":"uint256"}],"name":"LogLotteryContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"receiver","type":"address"},{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":false,"name":"lottoBlocksAmount","type":"uint256"},{"indexed":false,"name":"rewardType","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogRewardLotteryBlocks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"}],"name":"LogClearBets","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"numLottery","type":"uint256"},{"indexed":false,"name":"claimAmount","type":"uint256"},{"indexed":false,"name":"claimStatus","type":"uint256"}],"name":"LogClaimLotteryBlocks","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"exchangeId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"tokenValue","type":"uint256"},{"indexed":false,"name":"tokenToWeiExchangeRate","type":"uint256"},{"indexed":false,"name":"weiValue","type":"uint256"},{"indexed":false,"name":"receivedWeiValue","type":"uint256"},{"indexed":false,"name":"remainderTokenValue","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogTokenExchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"withdrawAmount","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogPlayerWithdrawBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"withdrawAmount","type":"uint256"},{"indexed":false,"name":"status","type":"uint256"}],"name":"LogPlayerWithdrawTokenBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"}],"name":"LogBetNotFound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"betId","type":"bytes32"},{"indexed":true,"name":"playerAddress","type":"address"}],"name":"LogDeveloperCancelBet","type":"event"}]

608060405234801561001057600080fd5b5060405160608061400083398101604090815281516020830151919092015160008054600160a060020a0319908116331790915560018054600160a060020a03958616908316811790915560028054948616948316851790556004805483169091179055600580548216909317909255600780549390911692909116919091179055613f5f806100a16000396000f3006080604052600436106101875763ffffffff60e060020a6000350416630480135f8114610293578063085d6d95146102aa5780631e4c189c146102db5780631f90d1851461033057806320235de21461036357806321061bbd146103b557806321abc498146103de578063253925511461042b578063256aefda1461044957806331119b4d1461046a578063378f44781461048b5780633beedf6d146104a9578063409de563146104be5780635359840d146104df5780635e4a8e23146104f7578063605e20581461050c57806364a60b471461057157806370159a0e1461059257806389476069146105fd5780638f78c3111461061e57806394b44f771461063657806394e5bb691461064e5780639d76ea5814610663578063a5f4af3314610678578063b065b6f41461068d578063b14ad5b8146106a2578063b2e777aa146106b7578063b6763f19146106d4578063c97a2896146106f5578063ca4b208b14610737578063caf297651461074c578063dbf93f9814610761578063e8a7efc414610776575b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b505050506040513d602081101561020457600080fd5b5051151560011461021457600080fd5b600554604080517f2560e8fb0000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691632560e8fb9160248082019260009290919082900301818387803b15801561027957600080fd5b505af115801561028d573d6000803e3d6000fd5b50505050005b34801561029f57600080fd5b506102a8610797565b005b3480156102b657600080fd5b506102bf6108c1565b60408051600160a060020a039092168252519081900360200190f35b3480156102e757600080fd5b50604080516020600480358082013583810280860185019096528085526102a8953695939460249493850192918291850190849080828437509497506108d09650505050505050565b34801561033c57600080fd5b50610351600160a060020a0360043516610cf7565b60408051918252519081900360200190f35b34801561036f57600080fd5b5061037b600435610d09565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b3480156103c157600080fd5b506103ca610e1a565b604080519115158252519081900360200190f35b3480156103ea57600080fd5b506103f6600435610fdf565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561043757600080fd5b506103516004356024356044356110e5565b34801561045557600080fd5b50610351600160a060020a036004351661119c565b34801561047657600080fd5b506102a8600160a060020a03600435166111ae565b34801561049757600080fd5b506103516004356024356044356111f4565b3480156104b557600080fd5b506102bf611268565b3480156104ca57600080fd5b506102a8600160a060020a0360043516611277565b3480156104eb57600080fd5b506103516004356112d2565b34801561050357600080fd5b506103516112fd565b34801561051857600080fd5b506105216113a6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055d578181015183820152602001610545565b505050509050019250505060405180910390f35b34801561057d57600080fd5b506102bf600160a060020a0360043516611560565b34801561059e57600080fd5b506105aa60043561157b565b60408051600160a060020a03909a168a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561060957600080fd5b506102a8600160a060020a036004351661165d565b34801561062a57600080fd5b506102a860043561182b565b34801561064257600080fd5b506103ca600435611f24565b34801561065a57600080fd5b50610351611fd6565b34801561066f57600080fd5b506102bf611fdc565b34801561068457600080fd5b506102a8611feb565b34801561069957600080fd5b506102a8612097565b3480156106ae57600080fd5b50610351612368565b6103ca600435602435604435600160a060020a036064351661236d565b3480156106e057600080fd5b506102a8600160a060020a0360043516612604565b34801561070157600080fd5b5061070d600435612669565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b34801561074357600080fd5b506102bf612697565b34801561075857600080fd5b506103516126a6565b34801561076d57600080fd5b506103516126ad565b34801561078257600080fd5b50610351600160a060020a03600435166126b9565b336000908152600c6020526040812054819081106107b457600080fd5b5050336000818152600c602090815260408083208054908490556004805483517fc349c93e000000000000000000000000000000000000000000000000000000008152918201969096526024810182905291519094600194600160a060020a039091169363c349c93e936044808201949293918390030190829087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d602081101561086757600080fd5b505115156108835750336000908152600c602052604081208290555b6040805183815260208101839052815133927f0552532b8d5628d8c51edf8c1d6d10c72617f800a2e0c805e0b609f1dcc84b4b928290030190a25050565b600254600160a060020a031681565b60008060006108dd613e91565b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050506040513d602081101561095a57600080fd5b5051151560011461096a57600080fd5b60008551118015610a1757506005546040805160e060020a6382d9bfd90281527f6d61784e756d436c65617242657473000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050506040513d6020811015610a1057600080fd5b5051855111155b1515610a2257600080fd5b6005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905160009650600160a060020a03909216916382d9bfd99160248082019260209290919082900301818a87803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b505050506040513d6020811015610abf57600080fd5b50519250600091505b8451821015610c7b5760096000600a60008886815181101515610ae757fe5b602090810290910181015182528181019290925260409081016000908120548452838301949094529182019092208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff16158015610120830181905291925090610c3f575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050506040513d6020811015610c3a57600080fd5b505110155b8015610c62575082610c5f826101000151436126cb90919063ffffffff16565b10155b15610c705760019350610c7b565b600190910190610ac8565b600184151514610c8a57600080fd5b600091505b8451821015610cc657610cba338684815181101515610caa57fe5b90602001906020020151856126dd565b50600190910190610c8f565b60405133907eee1bfaa583a6b50363166e24a466ec786118fa3535f3ae3d5bb03b05c289df90600090a25050505050565b600b6020526000908152604090205481565b6000806000806000806000610d1c613e91565b6000898152600a6020526040812054118015610d5557506000898152600a60209081526040808320548352600990915290206001015489145b1515610d6057600080fd5b50505060009586525050600a602090815260408086205486526009808352958190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301829052600381015460608401819052600482015460808501819052600583015460a08601819052600684015460c08701819052600785015460e08801819052600886015461010089015294909a015460ff161515610120909601869052939991989097509295509193509190565b6002546000908190819081908190600160a060020a03163314610e3c57600080fd5b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d6020811015610ec457600080fd5b505193506000841115610fd457600192505b838311610fd45760008381526009602081905260409091209081015490925060ff161515610fc9575060028101805460098301805460ff191660011790556000918290558254600160a060020a03168252600b602052604090912054610f42908263ffffffff61292316565b8254600160a060020a039081166000908152600b60209081526040808320949094558554600187015460048089015460058a0154885191825294810186905280880189905260608101949094526080840185905260a084019490945260c0830193909352935193909216929091600080516020613ef4833981519152919081900360e00190a35b600190920191610ed6565b600194505050505090565b6000806000806000610fef613e91565b6000878152600a602052604081205411801561102857506000878152600a60209081526040808320548352600990915290206001015487145b151561103357600080fd5b50505060009384525050600a602090815260408084205484526009808352938190208151610140810183528154600160a060020a0316808252600183015494820194909452600282015492810183905260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401819052939097015460ff16151561012090920191909152929592949193509091565b600754600254604080517f23a565c5000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018790526044810186905260648101859052905160009392909216916323a565c59160848082019260209290919082900301818787803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b5051949350505050565b600f6020526000908152604090205481565b600054600160a060020a031633146111c557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754604080517f378f44780000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490529051600092600160a060020a03169163378f447891606480830192602092919082900301818787803b15801561116857600080fd5b600354600160a060020a031681565b600054600160a060020a0316331461128e57600080fd5b600160a060020a03811615156112a357600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a031633146112ea57600080fd5b506000908152600a602052604090205490565b600754600254600354604080517fde7864bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015251600093929092169163de7864bb9160448082019260209290919082900301818787803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b505050506040513d602081101561139f57600080fd5b5051905090565b6060806000806113b4613e91565b6010546040519080825280602002602001820160405280156113e0578160200160208202803883390190505b509350600060105411156115575760009250600191505b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561145557600080fd5b505af1158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b5051821161155757506000818152600960208181526040928390208351610140810185528154600160a060020a031681526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015461010082015291015460ff161515610120820181905261153d578060200151848481518110151561152c57fe5b602090810290910101526001909201915b60105483141561154c57611557565b6001909101906113f7565b50919392505050565b600d60205260009081526040902054600160a060020a031681565b6000806000806000806000806000611591613e91565b600054600160a060020a031633146115a857600080fd5b5050506000978852505060096020818152604097889020885161014081018a528154600160a060020a031680825260018301549382019390935260028201549981018a9052600382015460608201819052600483015460808301819052600584015460a08401819052600685015460c08501819052600786015460e0860181905260088701546101008701819052969098015460ff161515610120909501859052959d929b5090995097509295509293509190565b60008054600160a060020a0316331461167557600080fd5b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518291600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b505111156118275760008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038086169463a9059cbb949091169285926370a0823192602480840193602093929083900390910190829087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d60208110156117ab57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156117fa57600080fd5b505af115801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50505b5050565b600554604080517fe1042804000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052915160009384938493849384938493849390928b92600160a060020a03169163e104280491604480830192602092919082900301818987803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505050506040513d60208110156118d357600080fd5b505115156001146118e357600080fd5b600754600254604080517f45a3b9c1000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018e9052905191909216916345a3b9c19160448083019260809291908290030181600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d608081101561197f57600080fd5b508051602082015160408084015160609094015160055482517f943426470000000000000000000000000000000000000000000000000000000081527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529251949e50929c50939a50929850600160a060020a031691639434264791602480830192600092919082900301818387803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd90281527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529051309450339350600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080516c01000000000000000000000000600160a060020a0395861681026020838101919091529490951690940260348501526048808501929092528051808503909201825260689093019283905280519092918291908401908083835b60208310611b555780518252601f199092019160209182019101611b36565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600e909252929020600281015492995097505060ff16159150611ba6905057600080fd5b600554604080517f8d8a1f1e000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a0390921691638d8a1f1e9160248082019260009290919082900301818387803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b5050855473ffffffffffffffffffffffffffffffffffffffff19163317808755600180880189905560028801805460ff1916909117905560048054604080517f9803f216000000000000000000000000000000000000000000000000000000008152600160a060020a0394851693810193909352602483018c90525192169350639803f21692506044808201926020929091908290030181600087803b158015611cc957600080fd5b505af1158015611cdd573d6000803e3d6000fd5b505050506040513d6020811015611cf357600080fd5b50511515611d045760029250611d83565b8354604051600160a060020a039091169089156108fc02908a906000818181858888f193505050501515611d7e578354600160a060020a03166000908152600b6020526040812054909350611d5f908963ffffffff61292316565b8454600160a060020a03166000908152600b6020526040902055611d83565b600192505b600560009054906101000a9004600160a060020a0316600160a060020a031663327fdeb86040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015611dd657600080fd5b505af1158015611dea573d6000803e3d6000fd5b505050508360000160009054906101000a9004600160a060020a0316600160a060020a03168460010154600019167f7a85f5414930606b334089b5715d0849610160cebfbcae7152c1e359cb287e238c600560009054906101000a9004600160a060020a0316600160a060020a03166382d9bfd96040518163ffffffff1660e060020a02815260040180807f746f6b656e546f57656945786368616e676552617465486f6e6f7200000000008152506020019050602060405180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50516040805192835260208301919091528181018e9052606082018d9052608082018c905260a08201889052519081900360c00190a350505050505050505050565b6000805481908190600160a060020a03163314611f4057600080fd5b6000848152600a602052604081205411611f5957600080fd5b6000848152600a602090815260408083205483526009918290529091209081015490925060ff1615611f8a57600080fd5b5060098101805460ff191660011790556002810180546000918290556006830182905560078301829055848252600a602052604090912054611fcc908261293d565b5060019392505050565b60105481565b600154600160a060020a031681565b336000908152600b60205260408120548190811061200857600080fd5b5050336000818152600b602052604080822080549083905590519092600192909184156108fc0291859190818181858888f1935050505015156120595750336000908152600b602052604081208290555b6040805183815260208101839052815133927fd4689e0f08c0a262a44fa32f4f6ddf1ed43cfe1e14fdebb1539ec6f3a831bb9c928290030190a25050565b600080600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050506040513d602081101561211757600080fd5b5051151560011461212757600080fd5b600660009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217a57600080fd5b505af115801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505115156001146121b457600080fd5b336000908152600f6020526040812054116121ce57600080fd5b5050336000818152600f6020908152604080832080549084905560065482517f174e31c400000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519094600194600160a060020a039093169363174e31c49360448084019492938390030190829087803b15801561225657600080fd5b505af115801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b5051151561229c5750336000908152600f602052604081208290555b33600160a060020a03167fb040751adc2b4663a203ce7f91ba3aacbbe4fa3dcacfcf73afba78bf322b48d2600660009054906101000a9004600160a060020a0316600160a060020a0316634699560c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b50516040805191825260208201869052818101859052519081900360600190a25050565b606481565b600554600754604080517f378f447800000000000000000000000000000000000000000000000000000000815234600482018190526024820189905260448201889052915160009485948a938a93600160a060020a0393841693634b60fc2a93169163378f447891606480830192602092919082900301818c87803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b50516040805160e060020a63ffffffff851602815260048101929092526024820187905260448201869052606482018590525160848083019260209291908290030181600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d602081101561249d57600080fd5b505115156001146124ad57600080fd5b6124b934338b8b612ab2565b9350861561256c576005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905161256a9233928b92600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b50516126dd565b505b6125768685612d9a565b600860009054906101000a9004600160a060020a0316600160a060020a0316639df613ea6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b5060019a9950505050505050505050565b600054600160a060020a0316331461261b57600080fd5b600160a060020a038116151561263057600080fd5b60038054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19928316811790915560068054909216179055565b600e60205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b600054600160a060020a031681565b620f424081565b670de0b6b3a764000081565b600c6020526000908152604090205481565b6000828211156126d757fe5b50900390565b60006126e7613e91565b6000848152600a602052604081205411156128eb57506000838152600a602090815260408083205483526009808352928190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301529091015460ff161580156101208301819052612840575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b505050506040513d602081101561283b57600080fd5b505110155b8015612863575082612860826101000151436126cb90919063ffffffff16565b10155b1561288a576000848152600a6020526040902054612884908690600161301b565b506128e2565b60208082015160408051600080825260029482019490945280820193909352519091600160a060020a038816917fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d99181900360600190a35b6001915061291b565b60405184907fe0a05d247c244a5ec656afb31d240208d32df06332108e132529fd9c537323a190600090a2600091505b509392505050565b60008282018381101561293257fe5b8091505b5092915050565b612945613e91565b5060008281526009602081815260408084208151610140810183528154600160a060020a0316808252600183015494820194909452600282015481840152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301526008830154610100830152919094015460ff16151561012085015290519293909285156108fc0291869190818181858888f193505050501515612a3c57508051600160a060020a03166000908152600b6020526040902054600490612a21908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b815160208084015160808086015160608088015160a0808a015160408051958652978501929092528387018b905291830152600092820183905281019190915260c081018590529151600160a060020a03909316929091600080516020613ef4833981519152919081900360e00190a350505050565b600554604080517f66ce9c72000000000000000000000000000000000000000000000000000000008152600481018790529051600092839283928392600160a060020a0316916366ce9c72916024808301928692919082900301818387803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a0390921693506382d9bfd992506024808201926020929091908290030181600087803b158015612b9357600080fd5b505af1158015612ba7573d6000803e3d6000fd5b505050506040513d6020811015612bbd57600080fd5b5051604080516c01000000000000000000000000308102602083810191909152600160a060020a038c1690910260348301526048808301859052835180840390910181526068909201928390528151939650909282918401908083835b60208310612c395780518252601f199092019160209182019101612c1a565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000898152600992839052939093209081015492965094505060ff16159150612c8b905057600080fd5b6000828152600a60205260409020839055805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881617815560018101829055600281018890556004810186905560058101859055612ce98887876111f4565b6006820155612cf98887876110e5565b600782019081554360088301556010805460019081019091558254908301546004840154600285015460058601546006870154955460408051948552602085019390935283830191909152606083019590955260808201949094529251600160a060020a039092169290917f56b3f1a6cd856076d6f8adbf8170c43a0b0f532fc5696a2699a0e0cabc7041639181900360a00190a350909695505050505050565b612da2613e91565b5060008181526009602081815260408084208151610140810183528154600160a060020a039081168083526001840154838701526002840154838601526003840154606084015260048401546080840152600584015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152908552600d9092528320549092911615612e60578151600160a060020a039081166000908152600d60205260409020541693505b600160a060020a03841615801590612e8557508151600160a060020a03858116911614155b15611824578151600160a060020a039081166000908152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916898616179055600554815160e060020a6382d9bfd90281527f726566657272616c50657263656e74000000000000000000000000000000000060048201529151612f8295620f424095612f769593909116936382d9bfd993602480830194919391928390030190829087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d6020811015612f6357600080fd5b505160e08601519063ffffffff61350016565b9063ffffffff61352b16565b600160a060020a0385166000908152600f6020526040902054909150612fae908263ffffffff61292316565b600160a060020a0385166000818152600f602090815260409182902093909355848301518151858152600194810185905280830194909452905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a350505050565b600082815260096020818152604080842060028082018054600684018054600780870180549a8801805460ff19166001179055948b9055918a9055928990555492546008850154600554875160e060020a6382d9bfd90281527f746f74616c5765695761676572656400000000000000000000000000000000006004820152975196999398949793968b968796600160a060020a0391821696631c1faa9b96831695946131ab949316926382d9bfd99260248084019391929182900301818c87803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050506040513d602081101561311357600080fd5b50516005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b50519063ffffffff61292316565b6040805160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064828101525160848083019260209291908290030181600087803b15801561320357600080fd5b505af1158015613217573d6000803e3d6000fd5b505050506040513d602081101561322d57600080fd5b505160038701819055151561324b57613246898661293d565b613271565b85600401548660030154101561326657613246898686613542565b61327189868561375c565b60108054600019019055600554604080517f327fdeb80000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163327fdeb89160048082019260009290919082900301818387803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050506132fa6112fd565b91508715156133a6576005546040805160e060020a6382d9bfd90281527f636c65617253696e676c654265744d756c7469706c696572000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050506040513d602081101561339d57600080fd5b50519050613445565b6005546040805160e060020a6382d9bfd90281527f636c6561724d756c7469706c65426574734d756c7469706c696572000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561341657600080fd5b505af115801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b505190505b61345a6064612f76848463ffffffff61350016565b600160a060020a038b166000908152600f6020526040902054909250613486908363ffffffff61292316565b600160a060020a038b166000818152600f6020908152604091829020939093556001808a0154825187815260029581019590955284830191909152905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a35060019998505050505050505050565b6000808315156135135760009150612936565b5082820282848281151561352357fe5b041461293257fe5b600080828481151561353957fe5b04949350505050565b61354a613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f2ef5c02e00000000000000000000000000000000000000000000000000000000815294850187905291519094939190921691632ef5c02e91602480820192869290919082900301818387803b15801561363557600080fd5b505af1158015613649573d6000803e3d6000fd5b50505050613660848461292390919063ffffffff16565b825160405191945060019250600160a060020a03169084156108fc029085906000818181858888f1935050505015156136dc57508051600160a060020a03166000908152600b60205260409020546002906136c1908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a00151896000896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a35050505050565b613764613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f47fb0b1800000000000000000000000000000000000000000000000000000000815294850188905260248501879052915190949391909216916347fb0b1891604480820192869290919082900301818387803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50508351604051600160a060020a0390911692506000915060019082818181858883f1935050505015156138e357508051600160a060020a03166000908152600b6020526040902054600019906138c890600163ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b60008311156139d957600480548351604080517fc349c93e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018790525191169163c349c93e9160448083019260209291908290030181600087803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b505050506040513d602081101561398757600080fd5b505115156139d957508051600160a060020a03166000908152600c6020526040902054600119906139be908463ffffffff61292316565b8251600160a060020a03166000908152600c60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a0015160018a896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a3613a5c8585613a64565b505050505050565b600080613a6f613e91565b6005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600092600160a060020a0316916382d9bfd991602480830192602092919082900301818787803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d6020811015613b0857600080fd5b50516005546040805160e060020a6382d9bfd90281527f6d696e42616e6b726f6c6c00000000000000000000000000000000000000000060048201529051929550600160a060020a03909116916382d9bfd9916024808201926020929091908290030181600087803b158015613b7d57600080fd5b505af1158015613b91573d6000803e3d6000fd5b505050506040513d6020811015613ba757600080fd5b50518310613e835760008681526009602081815260408084208151610140810183528154600160a060020a0390811682526001830154828601526002808401548386015260038085015460608501526004808601546080860152600586015460a0860152600686015460c086015260078087015460e08701526008870154610100870152959098015460ff16151561012085015293549054935485517ff1129768000000000000000000000000000000000000000000000000000000008152948316978501979097529581166024840152604483018c90529251909750939091169363f112976893606480840194939192918390030190829087803b158015613caf57600080fd5b505af1158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b50519050600081118015613ced5750808310155b15613e8357600554604080517fe20be9fd000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e20be9fd9160248082019260009290919082900301818387803b158015613d5857600080fd5b505af1158015613d6c573d6000803e3d6000fd5b505050508160000151600160a060020a03168260200151600019167f7d87edb5f1d55fdeb650288045e17cd2957473ed0eab57f68bb5f752694af381836040518082815260200191505060405180910390a36003546005546040805160e060020a6382d9bfd90281527f676173466f724c6f74746572790000000000000000000000000000000000000060048201529051600160a060020a0393841693909216916382d9bfd9916024808201926020929091908290030181600087803b158015613e3557600080fd5b505af1158015613e49573d6000803e3d6000fd5b505050506040513d6020811015613e5f57600080fd5b505160405183906000818181858888f193505050501515613e835760009350613e88565b600193505b50505092915050565b610140604051908101604052806000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600d9227e659bdf4c2e74777ad3feac5d6a564cbd9272a0b8a11263e1e7c17c9388746f74616c426574730000000000000000000000000000000000000000000000a165627a7a72305820860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a0029000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d

Deployed Bytecode

0x6080604052600436106101875763ffffffff60e060020a6000350416630480135f8114610293578063085d6d95146102aa5780631e4c189c146102db5780631f90d1851461033057806320235de21461036357806321061bbd146103b557806321abc498146103de578063253925511461042b578063256aefda1461044957806331119b4d1461046a578063378f44781461048b5780633beedf6d146104a9578063409de563146104be5780635359840d146104df5780635e4a8e23146104f7578063605e20581461050c57806364a60b471461057157806370159a0e1461059257806389476069146105fd5780638f78c3111461061e57806394b44f771461063657806394e5bb691461064e5780639d76ea5814610663578063a5f4af3314610678578063b065b6f41461068d578063b14ad5b8146106a2578063b2e777aa146106b7578063b6763f19146106d4578063c97a2896146106f5578063ca4b208b14610737578063caf297651461074c578063dbf93f9814610761578063e8a7efc414610776575b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b505050506040513d602081101561020457600080fd5b5051151560011461021457600080fd5b600554604080517f2560e8fb0000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691632560e8fb9160248082019260009290919082900301818387803b15801561027957600080fd5b505af115801561028d573d6000803e3d6000fd5b50505050005b34801561029f57600080fd5b506102a8610797565b005b3480156102b657600080fd5b506102bf6108c1565b60408051600160a060020a039092168252519081900360200190f35b3480156102e757600080fd5b50604080516020600480358082013583810280860185019096528085526102a8953695939460249493850192918291850190849080828437509497506108d09650505050505050565b34801561033c57600080fd5b50610351600160a060020a0360043516610cf7565b60408051918252519081900360200190f35b34801561036f57600080fd5b5061037b600435610d09565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b3480156103c157600080fd5b506103ca610e1a565b604080519115158252519081900360200190f35b3480156103ea57600080fd5b506103f6600435610fdf565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561043757600080fd5b506103516004356024356044356110e5565b34801561045557600080fd5b50610351600160a060020a036004351661119c565b34801561047657600080fd5b506102a8600160a060020a03600435166111ae565b34801561049757600080fd5b506103516004356024356044356111f4565b3480156104b557600080fd5b506102bf611268565b3480156104ca57600080fd5b506102a8600160a060020a0360043516611277565b3480156104eb57600080fd5b506103516004356112d2565b34801561050357600080fd5b506103516112fd565b34801561051857600080fd5b506105216113a6565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055d578181015183820152602001610545565b505050509050019250505060405180910390f35b34801561057d57600080fd5b506102bf600160a060020a0360043516611560565b34801561059e57600080fd5b506105aa60043561157b565b60408051600160a060020a03909a168a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561060957600080fd5b506102a8600160a060020a036004351661165d565b34801561062a57600080fd5b506102a860043561182b565b34801561064257600080fd5b506103ca600435611f24565b34801561065a57600080fd5b50610351611fd6565b34801561066f57600080fd5b506102bf611fdc565b34801561068457600080fd5b506102a8611feb565b34801561069957600080fd5b506102a8612097565b3480156106ae57600080fd5b50610351612368565b6103ca600435602435604435600160a060020a036064351661236d565b3480156106e057600080fd5b506102a8600160a060020a0360043516612604565b34801561070157600080fd5b5061070d600435612669565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b34801561074357600080fd5b506102bf612697565b34801561075857600080fd5b506103516126a6565b34801561076d57600080fd5b506103516126ad565b34801561078257600080fd5b50610351600160a060020a03600435166126b9565b336000908152600c6020526040812054819081106107b457600080fd5b5050336000818152600c602090815260408083208054908490556004805483517fc349c93e000000000000000000000000000000000000000000000000000000008152918201969096526024810182905291519094600194600160a060020a039091169363c349c93e936044808201949293918390030190829087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d602081101561086757600080fd5b505115156108835750336000908152600c602052604081208290555b6040805183815260208101839052815133927f0552532b8d5628d8c51edf8c1d6d10c72617f800a2e0c805e0b609f1dcc84b4b928290030190a25050565b600254600160a060020a031681565b60008060006108dd613e91565b600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b505050506040513d602081101561095a57600080fd5b5051151560011461096a57600080fd5b60008551118015610a1757506005546040805160e060020a6382d9bfd90281527f6d61784e756d436c65617242657473000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050506040513d6020811015610a1057600080fd5b5051855111155b1515610a2257600080fd5b6005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905160009650600160a060020a03909216916382d9bfd99160248082019260209290919082900301818a87803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b505050506040513d6020811015610abf57600080fd5b50519250600091505b8451821015610c7b5760096000600a60008886815181101515610ae757fe5b602090810290910181015182528181019290925260409081016000908120548452838301949094529182019092208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301526009015460ff16158015610120830181905291925090610c3f575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610c1057600080fd5b505af1158015610c24573d6000803e3d6000fd5b505050506040513d6020811015610c3a57600080fd5b505110155b8015610c62575082610c5f826101000151436126cb90919063ffffffff16565b10155b15610c705760019350610c7b565b600190910190610ac8565b600184151514610c8a57600080fd5b600091505b8451821015610cc657610cba338684815181101515610caa57fe5b90602001906020020151856126dd565b50600190910190610c8f565b60405133907eee1bfaa583a6b50363166e24a466ec786118fa3535f3ae3d5bb03b05c289df90600090a25050505050565b600b6020526000908152604090205481565b6000806000806000806000610d1c613e91565b6000898152600a6020526040812054118015610d5557506000898152600a60209081526040808320548352600990915290206001015489145b1515610d6057600080fd5b50505060009586525050600a602090815260408086205486526009808352958190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301829052600381015460608401819052600482015460808501819052600583015460a08601819052600684015460c08701819052600785015460e08801819052600886015461010089015294909a015460ff161515610120909601869052939991989097509295509193509190565b6002546000908190819081908190600160a060020a03163314610e3c57600080fd5b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d6020811015610ec457600080fd5b505193506000841115610fd457600192505b838311610fd45760008381526009602081905260409091209081015490925060ff161515610fc9575060028101805460098301805460ff191660011790556000918290558254600160a060020a03168252600b602052604090912054610f42908263ffffffff61292316565b8254600160a060020a039081166000908152600b60209081526040808320949094558554600187015460048089015460058a0154885191825294810186905280880189905260608101949094526080840185905260a084019490945260c0830193909352935193909216929091600080516020613ef4833981519152919081900360e00190a35b600190920191610ed6565b600194505050505090565b6000806000806000610fef613e91565b6000878152600a602052604081205411801561102857506000878152600a60209081526040808320548352600990915290206001015487145b151561103357600080fd5b50505060009384525050600a602090815260408084205484526009808352938190208151610140810183528154600160a060020a0316808252600183015494820194909452600282015492810183905260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401819052939097015460ff16151561012090920191909152929592949193509091565b600754600254604080517f23a565c5000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018790526044810186905260648101859052905160009392909216916323a565c59160848082019260209290919082900301818787803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b505050506040513d602081101561119257600080fd5b5051949350505050565b600f6020526000908152604090205481565b600054600160a060020a031633146111c557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754604080517f378f44780000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490529051600092600160a060020a03169163378f447891606480830192602092919082900301818787803b15801561116857600080fd5b600354600160a060020a031681565b600054600160a060020a0316331461128e57600080fd5b600160a060020a03811615156112a357600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054600160a060020a031633146112ea57600080fd5b506000908152600a602052604090205490565b600754600254600354604080517fde7864bb000000000000000000000000000000000000000000000000000000008152600160a060020a039384166004820152918316602483015251600093929092169163de7864bb9160448082019260209290919082900301818787803b15801561137557600080fd5b505af1158015611389573d6000803e3d6000fd5b505050506040513d602081101561139f57600080fd5b5051905090565b6060806000806113b4613e91565b6010546040519080825280602002602001820160405280156113e0578160200160208202803883390190505b509350600060105411156115575760009250600191505b6005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561145557600080fd5b505af1158015611469573d6000803e3d6000fd5b505050506040513d602081101561147f57600080fd5b5051821161155757506000818152600960208181526040928390208351610140810185528154600160a060020a031681526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e0820152600883015461010082015291015460ff161515610120820181905261153d578060200151848481518110151561152c57fe5b602090810290910101526001909201915b60105483141561154c57611557565b6001909101906113f7565b50919392505050565b600d60205260009081526040902054600160a060020a031681565b6000806000806000806000806000611591613e91565b600054600160a060020a031633146115a857600080fd5b5050506000978852505060096020818152604097889020885161014081018a528154600160a060020a031680825260018301549382019390935260028201549981018a9052600382015460608201819052600483015460808301819052600584015460a08401819052600685015460c08501819052600786015460e0860181905260088701546101008701819052969098015460ff161515610120909501859052959d929b5090995097509295509293509190565b60008054600160a060020a0316331461167557600080fd5b50604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290518291600091600160a060020a038416916370a0823191602480830192602092919082900301818787803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b505111156118275760008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038086169463a9059cbb949091169285926370a0823192602480840193602093929083900390910190829087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d60208110156117ab57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156117fa57600080fd5b505af115801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50505b5050565b600554604080517fe1042804000000000000000000000000000000000000000000000000000000008152336004820181905260248201859052915160009384938493849384938493849390928b92600160a060020a03169163e104280491604480830192602092919082900301818987803b1580156118a957600080fd5b505af11580156118bd573d6000803e3d6000fd5b505050506040513d60208110156118d357600080fd5b505115156001146118e357600080fd5b600754600254604080517f45a3b9c1000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018e9052905191909216916345a3b9c19160448083019260809291908290030181600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d608081101561197f57600080fd5b508051602082015160408084015160609094015160055482517f943426470000000000000000000000000000000000000000000000000000000081527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529251949e50929c50939a50929850600160a060020a031691639434264791602480830192600092919082900301818387803b158015611a1f57600080fd5b505af1158015611a33573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd90281527f746f74616c546f6b656e45786368616e6765730000000000000000000000000060048201529051309450339350600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080516c01000000000000000000000000600160a060020a0395861681026020838101919091529490951690940260348501526048808501929092528051808503909201825260689093019283905280519092918291908401908083835b60208310611b555780518252601f199092019160209182019101611b36565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000818152600e909252929020600281015492995097505060ff16159150611ba6905057600080fd5b600554604080517f8d8a1f1e000000000000000000000000000000000000000000000000000000008152600481018b90529051600160a060020a0390921691638d8a1f1e9160248082019260009290919082900301818387803b158015611c0c57600080fd5b505af1158015611c20573d6000803e3d6000fd5b5050855473ffffffffffffffffffffffffffffffffffffffff19163317808755600180880189905560028801805460ff1916909117905560048054604080517f9803f216000000000000000000000000000000000000000000000000000000008152600160a060020a0394851693810193909352602483018c90525192169350639803f21692506044808201926020929091908290030181600087803b158015611cc957600080fd5b505af1158015611cdd573d6000803e3d6000fd5b505050506040513d6020811015611cf357600080fd5b50511515611d045760029250611d83565b8354604051600160a060020a039091169089156108fc02908a906000818181858888f193505050501515611d7e578354600160a060020a03166000908152600b6020526040812054909350611d5f908963ffffffff61292316565b8454600160a060020a03166000908152600b6020526040902055611d83565b600192505b600560009054906101000a9004600160a060020a0316600160a060020a031663327fdeb86040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015611dd657600080fd5b505af1158015611dea573d6000803e3d6000fd5b505050508360000160009054906101000a9004600160a060020a0316600160a060020a03168460010154600019167f7a85f5414930606b334089b5715d0849610160cebfbcae7152c1e359cb287e238c600560009054906101000a9004600160a060020a0316600160a060020a03166382d9bfd96040518163ffffffff1660e060020a02815260040180807f746f6b656e546f57656945786368616e676552617465486f6e6f7200000000008152506020019050602060405180830381600087803b158015611eb857600080fd5b505af1158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50516040805192835260208301919091528181018e9052606082018d9052608082018c905260a08201889052519081900360c00190a350505050505050505050565b6000805481908190600160a060020a03163314611f4057600080fd5b6000848152600a602052604081205411611f5957600080fd5b6000848152600a602090815260408083205483526009918290529091209081015490925060ff1615611f8a57600080fd5b5060098101805460ff191660011790556002810180546000918290556006830182905560078301829055848252600a602052604090912054611fcc908261293d565b5060019392505050565b60105481565b600154600160a060020a031681565b336000908152600b60205260408120548190811061200857600080fd5b5050336000818152600b602052604080822080549083905590519092600192909184156108fc0291859190818181858888f1935050505015156120595750336000908152600b602052604081208290555b6040805183815260208101839052815133927fd4689e0f08c0a262a44fa32f4f6ddf1ed43cfe1e14fdebb1539ec6f3a831bb9c928290030190a25050565b600080600560009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050506040513d602081101561211757600080fd5b5051151560011461212757600080fd5b600660009054906101000a9004600160a060020a0316600160a060020a03166322f3e2d46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561217a57600080fd5b505af115801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505115156001146121b457600080fd5b336000908152600f6020526040812054116121ce57600080fd5b5050336000818152600f6020908152604080832080549084905560065482517f174e31c400000000000000000000000000000000000000000000000000000000815260048101969096526024860182905291519094600194600160a060020a039093169363174e31c49360448084019492938390030190829087803b15801561225657600080fd5b505af115801561226a573d6000803e3d6000fd5b505050506040513d602081101561228057600080fd5b5051151561229c5750336000908152600f602052604081208290555b33600160a060020a03167fb040751adc2b4663a203ce7f91ba3aacbbe4fa3dcacfcf73afba78bf322b48d2600660009054906101000a9004600160a060020a0316600160a060020a0316634699560c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561231a57600080fd5b505af115801561232e573d6000803e3d6000fd5b505050506040513d602081101561234457600080fd5b50516040805191825260208201869052818101859052519081900360600190a25050565b606481565b600554600754604080517f378f447800000000000000000000000000000000000000000000000000000000815234600482018190526024820189905260448201889052915160009485948a938a93600160a060020a0393841693634b60fc2a93169163378f447891606480830192602092919082900301818c87803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b505050506040513d602081101561241f57600080fd5b50516040805160e060020a63ffffffff851602815260048101929092526024820187905260448201869052606482018590525160848083019260209291908290030181600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d602081101561249d57600080fd5b505115156001146124ad57600080fd5b6124b934338b8b612ab2565b9350861561256c576005546040805160e060020a6382d9bfd90281527f626c6f636b5365637572697479436f756e7400000000000000000000000000006004820152905161256a9233928b92600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561253957600080fd5b505af115801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b50516126dd565b505b6125768685612d9a565b600860009054906101000a9004600160a060020a0316600160a060020a0316639df613ea6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b505050506040513d60208110156125f357600080fd5b5060019a9950505050505050505050565b600054600160a060020a0316331461261b57600080fd5b600160a060020a038116151561263057600080fd5b60038054600160a060020a0390921673ffffffffffffffffffffffffffffffffffffffff19928316811790915560068054909216179055565b600e60205260009081526040902080546001820154600290920154600160a060020a03909116919060ff1683565b600054600160a060020a031681565b620f424081565b670de0b6b3a764000081565b600c6020526000908152604090205481565b6000828211156126d757fe5b50900390565b60006126e7613e91565b6000848152600a602052604081205411156128eb57506000838152600a602090815260408083205483526009808352928190208151610140810183528154600160a060020a031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101546101008301529091015460ff161580156101208301819052612840575060c08101516005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b505050506040513d602081101561283b57600080fd5b505110155b8015612863575082612860826101000151436126cb90919063ffffffff16565b10155b1561288a576000848152600a6020526040902054612884908690600161301b565b506128e2565b60208082015160408051600080825260029482019490945280820193909352519091600160a060020a038816917fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d99181900360600190a35b6001915061291b565b60405184907fe0a05d247c244a5ec656afb31d240208d32df06332108e132529fd9c537323a190600090a2600091505b509392505050565b60008282018381101561293257fe5b8091505b5092915050565b612945613e91565b5060008281526009602081815260408084208151610140810183528154600160a060020a0316808252600183015494820194909452600282015481840152600380830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301526008830154610100830152919094015460ff16151561012085015290519293909285156108fc0291869190818181858888f193505050501515612a3c57508051600160a060020a03166000908152600b6020526040902054600490612a21908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b815160208084015160808086015160608088015160a0808a015160408051958652978501929092528387018b905291830152600092820183905281019190915260c081018590529151600160a060020a03909316929091600080516020613ef4833981519152919081900360e00190a350505050565b600554604080517f66ce9c72000000000000000000000000000000000000000000000000000000008152600481018790529051600092839283928392600160a060020a0316916366ce9c72916024808301928692919082900301818387803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b50506005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a0390921693506382d9bfd992506024808201926020929091908290030181600087803b158015612b9357600080fd5b505af1158015612ba7573d6000803e3d6000fd5b505050506040513d6020811015612bbd57600080fd5b5051604080516c01000000000000000000000000308102602083810191909152600160a060020a038c1690910260348301526048808301859052835180840390910181526068909201928390528151939650909282918401908083835b60208310612c395780518252601f199092019160209182019101612c1a565b51815160209384036101000a600019018019909216911617905260408051929094018290039091206000898152600992839052939093209081015492965094505060ff16159150612c8b905057600080fd5b6000828152600a60205260409020839055805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03881617815560018101829055600281018890556004810186905560058101859055612ce98887876111f4565b6006820155612cf98887876110e5565b600782019081554360088301556010805460019081019091558254908301546004840154600285015460058601546006870154955460408051948552602085019390935283830191909152606083019590955260808201949094529251600160a060020a039092169290917f56b3f1a6cd856076d6f8adbf8170c43a0b0f532fc5696a2699a0e0cabc7041639181900360a00190a350909695505050505050565b612da2613e91565b5060008181526009602081815260408084208151610140810183528154600160a060020a039081168083526001840154838701526002840154838601526003840154606084015260048401546080840152600584015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152908552600d9092528320549092911615612e60578151600160a060020a039081166000908152600d60205260409020541693505b600160a060020a03841615801590612e8557508151600160a060020a03858116911614155b15611824578151600160a060020a039081166000908152600d60209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916898616179055600554815160e060020a6382d9bfd90281527f726566657272616c50657263656e74000000000000000000000000000000000060048201529151612f8295620f424095612f769593909116936382d9bfd993602480830194919391928390030190829087803b158015612f3957600080fd5b505af1158015612f4d573d6000803e3d6000fd5b505050506040513d6020811015612f6357600080fd5b505160e08601519063ffffffff61350016565b9063ffffffff61352b16565b600160a060020a0385166000908152600f6020526040902054909150612fae908263ffffffff61292316565b600160a060020a0385166000818152600f602090815260409182902093909355848301518151858152600194810185905280830194909452905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a350505050565b600082815260096020818152604080842060028082018054600684018054600780870180549a8801805460ff19166001179055948b9055918a9055928990555492546008850154600554875160e060020a6382d9bfd90281527f746f74616c5765695761676572656400000000000000000000000000000000006004820152975196999398949793968b968796600160a060020a0391821696631c1faa9b96831695946131ab949316926382d9bfd99260248084019391929182900301818c87803b1580156130e957600080fd5b505af11580156130fd573d6000803e3d6000fd5b505050506040513d602081101561311357600080fd5b50516005546040805160e060020a6382d9bfd9028152600080516020613f1483398151915260048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561317357600080fd5b505af1158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b50519063ffffffff61292316565b6040805160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064828101525160848083019260209291908290030181600087803b15801561320357600080fd5b505af1158015613217573d6000803e3d6000fd5b505050506040513d602081101561322d57600080fd5b505160038701819055151561324b57613246898661293d565b613271565b85600401548660030154101561326657613246898686613542565b61327189868561375c565b60108054600019019055600554604080517f327fdeb80000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163327fdeb89160048082019260009290919082900301818387803b1580156132da57600080fd5b505af11580156132ee573d6000803e3d6000fd5b505050506132fa6112fd565b91508715156133a6576005546040805160e060020a6382d9bfd90281527f636c65617253696e676c654265744d756c7469706c696572000000000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561337357600080fd5b505af1158015613387573d6000803e3d6000fd5b505050506040513d602081101561339d57600080fd5b50519050613445565b6005546040805160e060020a6382d9bfd90281527f636c6561724d756c7469706c65426574734d756c7469706c696572000000000060048201529051600160a060020a03909216916382d9bfd9916024808201926020929091908290030181600087803b15801561341657600080fd5b505af115801561342a573d6000803e3d6000fd5b505050506040513d602081101561344057600080fd5b505190505b61345a6064612f76848463ffffffff61350016565b600160a060020a038b166000908152600f6020526040902054909250613486908363ffffffff61292316565b600160a060020a038b166000818152600f6020908152604091829020939093556001808a0154825187815260029581019590955284830191909152905190927fb836a3e1fd6693dfed063b0f3bb0c7ae1071decb0412e72d70480bb2b2ec49d9919081900360600190a35060019998505050505050505050565b6000808315156135135760009150612936565b5082820282848281151561352357fe5b041461293257fe5b600080828481151561353957fe5b04949350505050565b61354a613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f2ef5c02e00000000000000000000000000000000000000000000000000000000815294850187905291519094939190921691632ef5c02e91602480820192869290919082900301818387803b15801561363557600080fd5b505af1158015613649573d6000803e3d6000fd5b50505050613660848461292390919063ffffffff16565b825160405191945060019250600160a060020a03169084156108fc029085906000818181858888f1935050505015156136dc57508051600160a060020a03166000908152600b60205260409020546002906136c1908463ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a00151896000896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a35050505050565b613764613e91565b5060008381526009602081815260408084208151610140810183528154600160a060020a03908116825260018301549482019490945260028201548184015260038201546060820152600480830154608083015260058084015460a0840152600684015460c0840152600784015460e08401526008840154610100840152929095015460ff161515610120820152905482517f47fb0b1800000000000000000000000000000000000000000000000000000000815294850188905260248501879052915190949391909216916347fb0b1891604480820192869290919082900301818387803b15801561385657600080fd5b505af115801561386a573d6000803e3d6000fd5b50508351604051600160a060020a0390911692506000915060019082818181858883f1935050505015156138e357508051600160a060020a03166000908152600b6020526040902054600019906138c890600163ffffffff61292316565b8251600160a060020a03166000908152600b60205260409020555b60008311156139d957600480548351604080517fc349c93e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018790525191169163c349c93e9160448083019260209291908290030181600087803b15801561395d57600080fd5b505af1158015613971573d6000803e3d6000fd5b505050506040513d602081101561398757600080fd5b505115156139d957508051600160a060020a03166000908152600c6020526040902054600119906139be908463ffffffff61292316565b8251600160a060020a03166000908152600c60205260409020555b8160000151600160a060020a0316826020015160001916600080516020613ef483398151915284608001518560600151888760a0015160018a896040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390a3613a5c8585613a64565b505050505050565b600080613a6f613e91565b6005546040805160e060020a6382d9bfd90281527f636f6e747261637442616c616e6365000000000000000000000000000000000060048201529051600092600160a060020a0316916382d9bfd991602480830192602092919082900301818787803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d6020811015613b0857600080fd5b50516005546040805160e060020a6382d9bfd90281527f6d696e42616e6b726f6c6c00000000000000000000000000000000000000000060048201529051929550600160a060020a03909116916382d9bfd9916024808201926020929091908290030181600087803b158015613b7d57600080fd5b505af1158015613b91573d6000803e3d6000fd5b505050506040513d6020811015613ba757600080fd5b50518310613e835760008681526009602081815260408084208151610140810183528154600160a060020a0390811682526001830154828601526002808401548386015260038085015460608501526004808601546080860152600586015460a0860152600686015460c086015260078087015460e08701526008870154610100870152959098015460ff16151561012085015293549054935485517ff1129768000000000000000000000000000000000000000000000000000000008152948316978501979097529581166024840152604483018c90529251909750939091169363f112976893606480840194939192918390030190829087803b158015613caf57600080fd5b505af1158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b50519050600081118015613ced5750808310155b15613e8357600554604080517fe20be9fd000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163e20be9fd9160248082019260009290919082900301818387803b158015613d5857600080fd5b505af1158015613d6c573d6000803e3d6000fd5b505050508160000151600160a060020a03168260200151600019167f7d87edb5f1d55fdeb650288045e17cd2957473ed0eab57f68bb5f752694af381836040518082815260200191505060405180910390a36003546005546040805160e060020a6382d9bfd90281527f676173466f724c6f74746572790000000000000000000000000000000000000060048201529051600160a060020a0393841693909216916382d9bfd9916024808201926020929091908290030181600087803b158015613e3557600080fd5b505af1158015613e49573d6000803e3d6000fd5b505050506040513d6020811015613e5f57600080fd5b505160405183906000818181858888f193505050501515613e835760009350613e88565b600193505b50505092915050565b610140604051908101604052806000600160a060020a03168152602001600080191681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600d9227e659bdf4c2e74777ad3feac5d6a564cbd9272a0b8a11263e1e7c17c9388746f74616c426574730000000000000000000000000000000000000000000000a165627a7a72305820860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0xb42f5366792ed7c08995451C1A93780B7554762B
Arg [1] : _settingAddress (address): 0xb654457bAB03011531eF939Cb31f76Eb36e2ddf3
Arg [2] : _libraryAddress (address): 0xeA1853f9162Ba2B6594fc18d60C66BF4b6211E0d

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b42f5366792ed7c08995451c1a93780b7554762b
Arg [1] : 000000000000000000000000b654457bab03011531ef939cb31f76eb36e2ddf3
Arg [2] : 000000000000000000000000ea1853f9162ba2b6594fc18d60c66bf4b6211e0d


Deployed Bytecode Sourcemap

11858:29447:0:-;;;;;;;;;-1:-1:-1;;;11858:29447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;19834:8;;:35;;;;;;19859:9;19834:35;;;;;;-1:-1:-1;;;;;19834:8:0;;;;:24;;:35;;;;;:8;;:35;;;;;;;;:8;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;19834:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19834:35:0;;;;11858:29447;27380:722;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27380:722:0;;;;;;11973:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11973:29:0;;;;;;;;-1:-1:-1;;;;;11973:29:0;;;;;;;;;;;;;;22179:791;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22179:791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22179:791:0;;-1:-1:-1;22179:791:0;;-1:-1:-1;;;;;;;22179:791:0;12727:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12727:60:0;-1:-1:-1;;;;;12727:60:0;;;;;;;;;;;;;;;;;;;;;28205:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28205:392:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20197:653;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20197:653:0;;;;;;;;;;;;;;;;;;;;;;29299:348;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29299:348:0;;;;;;;;;-1:-1:-1;;;;;29299:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26304:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26304:216:0;;;;;;;;;12968:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12968:55:0;-1:-1:-1;;;;;12968:55:0;;;;;11408:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11408:98:0;-1:-1:-1;;;;;11408:98:0;;;;;25802:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25802:200:0;;;;;;;;;12006:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12006:29:0;;;;18108:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18108:198:0;-1:-1:-1;;;;;18108:198:0;;;;;18463:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18463:129:0;;;;;29812:158;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29812:158:0;;;;28685:503;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28685:503:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28685:503:0;;;;;;;;;;;;;;;;;12860:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12860:44:0;-1:-1:-1;;;;;12860:44:0;;;;;18770:386;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18770:386:0;;;;;;;;;-1:-1:-1;;;;;18770:386:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11574:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11574:234:0;-1:-1:-1;;;;;11574:234:0;;;;;23729:1784;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23729:1784:0;;;;;19328:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19328:412:0;;;;;13206:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13206:31:0;;;;11942:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11942:27:0;;;;26618:663;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26618:663:0;;;;23077:498;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23077:498:0;;;;13029:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13029:42:0;;;;21470:606;;;;;;;;-1:-1:-1;;;;;21470:606:0;;;;;17738:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17738:211:0;-1:-1:-1;;;;;17738:211:0;;;;;12908:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12908:56:0;;;;;;;;;-1:-1:-1;;;;;12908:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11026:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11026:24:0;;;;13075:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13075:52:0;;;;13151:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13151:49:0;;;;12791:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12791:65:0;-1:-1:-1;;;;;12791:65:0;;;;;27380:722;27480:10;27501:22;27450:41;;;:29;:41;;;;;;27501:22;;27450:45;-1:-1:-1;27442:54:0;;;;;;-1:-1:-1;;27556:10:0;27526:41;;;;:29;:41;;;;;;;;;;27572:45;;;;27716:10;;;:51;;;;;;;;;;;;;;;;;;;;27526:41;;-1:-1:-1;;;;;;;27716:10:0;;;;:23;;:51;;;;;27526:41;;27716:51;;;;;;;;:10;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;27716:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27716:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27716:51:0;27715:52;27711:312;;;-1:-1:-1;27989:10:0;27784:1;27959:41;;;:29;:41;;;;;:58;;;27711:312;28032:65;;;;;;;;;;;;;;28062:10;;28032:65;;;;;;;;27380:722;;:::o;11973:29::-;;;-1:-1:-1;;;;;11973:29:0;;:::o;22179:791::-;22330:13;22356:26;22438:9;22483:15;;:::i;:::-;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;22262:1;22246:6;:13;:17;:78;;;;-1:-1:-1;22284:8:0;;:40;;;-1:-1:-1;;;;;22284:40:0;;;;;;;;;-1:-1:-1;;;;;22284:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22284:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22284:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22284:40:0;22267:13;;:57;;22246:78;22237:88;;;;;;;;22385:8;;:43;;;-1:-1:-1;;;;;22385:43:0;;;;;;;;;22346:5;;-1:-1:-1;;;;;;22385:8:0;;;;:21;;:43;;;;;;;;;;;;;;;22346:5;22385:8;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;22385:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22385:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22385:43:0;;-1:-1:-1;22450:1:0;;-1:-1:-1;22433:303:0;22457:6;:13;22453:1;:17;22433:303;;;22501:4;:28;22506:11;:22;22518:6;22525:1;22518:9;;;;;;;;;;;;;;;;;;;;22506:22;;;;;;;;;;;;;;;;;;22501:28;;;;;;;;;;;;;;;22483:46;;;;;;;;;-1:-1:-1;;;;;22483:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22483:46:0;22539:87;;-1:-1:-1;22610:16:0;;;;22566:8;;:40;;;-1:-1:-1;;;;;22566:40:0;;;;;;;;;-1:-1:-1;;;;;22566:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22566:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22566:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22566:40:0;:60;;22539:87;:149;;;;;22670:18;22631:34;22648:4;:16;;;22631:12;:16;;:34;;;;:::i;:::-;22630:58;;22539:149;22535:196;;;22708:4;22697:15;;22719:5;;22535:196;22472:3;;;;;22433:303;;;22760:4;22748:16;;;;22740:25;;;;;;22835:1;22831:5;;22826:106;22842:6;:13;22838:1;:17;22826:106;;;22868:58;22884:10;22896:6;22903:1;22896:9;;;;;;;;;;;;;;;;;;22907:18;22868:15;:58::i;:::-;-1:-1:-1;22857:3:0;;;;;22826:106;;;22941:24;;22954:10;;22941:24;;;;;22179:791;;;;;:::o;12727:60::-;;;;;;;;;;;;;:::o;28205:392::-;28270:7;28279;28288;28297;28306;28315;28324:4;28414:15;;:::i;:::-;28364:1;28343:18;;;:11;:18;;;;;;:22;:65;;;;-1:-1:-1;28369:39:0;28374:18;;;:11;:18;;;;;;;;;28369:24;;:4;:24;;;;;:30;;;:39;;28343:65;28335:74;;;;;;;;-1:-1:-1;;;28432:24:0;28437:18;;;-1:-1:-1;;28437:11:0;:18;;;;;;;;;28432:24;;:4;:24;;;;;;;28414:42;;;;;;;;;-1:-1:-1;;;;;28414:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28414:42:0;;-1:-1:-1;28414:42:0;;-1:-1:-1;28414:42:0;;28205:392::o;20197:653::-;20276:14;;20242:4;;;;;;;;;;-1:-1:-1;;;;;20276:14:0;20262:10;:28;20253:38;;;;;;20316:8;;:34;;;-1:-1:-1;;;;;20316:34:0;;-1:-1:-1;;;;;;;;;;;20316:34:0;;;;;;-1:-1:-1;;;;;20316:8:0;;;;:21;;:34;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;20316:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20316:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20316:34:0;;-1:-1:-1;20371:1:0;20359:13;;20355:475;;;20397:1;20385:13;;20380:445;20400:14;;;20380:445;;20447:7;;;;:4;:7;;;;;;;;20465:14;;;;20447:7;;-1:-1:-1;20465:14:0;;:23;;20461:358;;-1:-1:-1;20518:13:0;;;;;20539:14;;;:21;;-1:-1:-1;;20539:21:0;20556:4;20539:21;;;:14;20568:17;;;;20665:18;;-1:-1:-1;;;;;20665:18:0;20640:44;;:24;:44;;;;;;;:59;;20518:13;20640:59;:48;:59;:::i;:::-;20618:18;;-1:-1:-1;;;;;20618:18:0;;;20593:44;;;;:24;:44;;;;;;;;:106;;;;20734:18;;20618;20722:10;;;20754:17;;;;;20787:14;;;;20712:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20734:18;;;;;20722:10;;-1:-1:-1;;;;;;;;;;;20712:99:0;;;;;;;;;20461:358;20416:3;;;;;20380:445;;;20841:4;20834:11;;20197:653;;;;;:::o;29299:348::-;29371:7;29380;29389;29398;29407;29500:15;;:::i;:::-;29450:1;29429:18;;;:11;:18;;;;;;:22;:65;;;;-1:-1:-1;29455:39:0;29460:18;;;:11;:18;;;;;;;;;29455:24;;:4;:24;;;;;:30;;;:39;;29429:65;29421:74;;;;;;;;-1:-1:-1;;;29518:24:0;29523:18;;;-1:-1:-1;;29523:11:0;:18;;;;;;;;;29518:24;;:4;:24;;;;;;;29500:42;;;;;;;;;-1:-1:-1;;;;;29500:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29500:42:0;;29299:348::o;26304:216::-;26439:4;;26465:14;;26439:76;;;;;;-1:-1:-1;;;;;26465:14:0;;;26439:76;;;;;;;;;;;;;;;;;;;;;;;;26418:7;;26439:4;;;;;:25;;:76;;;;;;;;;;;;;;;26418:7;26439:4;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;26439:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26439:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26439:76:0;;26304:216;-1:-1:-1;;;;26304:216:0:o;12968:55::-;;;;;;;;;;;;;:::o;11408:98::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;11479:9;:22;;-1:-1:-1;;11479:22:0;-1:-1:-1;;;;;11479:22:0;;;;;;;;;;11408:98::o;25802:200::-;25935:4;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;25914:7;;-1:-1:-1;;;;;25935:4:0;;:27;;:62;;;;;;;;;;;;;;25914:7;25935:4;:62;;;5:2:-1;;;;30:1;27;20:12;12006:29:0;;;-1:-1:-1;;;;;12006:29:0;;:::o;18108:198::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;;;18206:33:0;;;;18197:43;;;;;;18245:12;:56;;-1:-1:-1;;18245:56:0;-1:-1:-1;;;;;18245:56:0;;;;;;;;;;18108:198::o;18463:129::-;18546:7;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;18568:18:0;;;;:11;:18;;;;;;;18463:129::o;29812:158::-;29899:4;;29934:14;;29950;;29899:66;;;;;;-1:-1:-1;;;;;29934:14:0;;;29899:66;;;;29950:14;;;29899:66;;;;;29878:7;;29899:4;;;;;:34;;:66;;;;;;;;;;;;;;;29878:7;29899:4;:66;;;5:2:-1;;;;30:1;27;20:12;5:2;29899:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29899:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29899:66:0;;-1:-1:-1;29812:158:0;:::o;28685:503::-;28744:9;28760:30;28861:15;28891:9;28959:15;;:::i;:::-;28807:16;;28793:31;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;28793:31:0;;28760:64;;28852:1;28833:16;;:20;28829:330;;;28879:1;28861:19;;28903:1;28891:13;;28886:268;28911:8;;:34;;;-1:-1:-1;;;;;28911:34:0;;-1:-1:-1;;;;;;;;;;;28911:34:0;;;;;;-1:-1:-1;;;;;28911:8:0;;;;:21;;:34;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;28911:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28911:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28911:34:0;28906:39;;28886:268;;-1:-1:-1;28977:7:0;;;;:4;:7;;;;;;;;;28959:25;;;;;;;;;-1:-1:-1;;;;;28959:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28991:97;;29053:4;:10;;;29028:13;29042:7;29028:22;;;;;;;;;;;;;;;;;;:35;29071:9;;;;;28991:97;29109:16;;29098:7;:27;29094:54;;;29135:5;;29094:54;28947:3;;;;;28886:268;;;-1:-1:-1;29170:13:0;;28685:503;-1:-1:-1;;;28685:503:0:o;12860:44::-;;;;;;;;;;;;-1:-1:-1;;;;;12860:44:0;;:::o;18770:386::-;18857:7;18866;18875;18884;18893;18902;18911;18920;18929:4;18940:15;;:::i;:::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;18958:19:0;;;;-1:-1:-1;;18958:4:0;:19;;;;;;;;;18940:37;;;;;;;;;-1:-1:-1;;;;;18940:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;;-1:-1:-1;18940:37:0;;18770:386::o;11574:234::-;11653:17;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;11714:22:0;;;;;;11731:4;11714:22;;;;;;11684:20;;11739:1;;-1:-1:-1;;;;;11714:16:0;;;;;:22;;;;;;;;;;;;;;11739:1;11714:16;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;11714:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11714:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11714:22:0;:26;11710:94;;;11764:9;;;11775:22;;;;;;11792:4;11775:22;;;;;;-1:-1:-1;;;;;11748:15:0;;;;;;11764:9;;;;11748:15;;11775:16;;:22;;;;;;;;;;;;;;;;;;11748:15;11775:22;;;5:2:-1;;;;30:1;27;20:12;5:2;11775:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11775:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11775:22:0;11748:50;;;-1:-1:-1;;;11748:50:0;;;;;;-1:-1:-1;;;;;11748:50:0;;;;;;;;;;;;;;;;;;;;11775:22;;11748:50;;;;;;;-1:-1:-1;11748:50:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;11748:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11748:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;11710:94:0;11574:234;;:::o;23729:1784::-;17376:8;;:54;;;;;;23801:10;17376:54;;;;;;;;;;;;;;23832:16;;;;;;;;;;;;;;23801:10;;23813:11;;-1:-1:-1;;;;;17376:8:0;;:26;;:54;;;;;;;;;;;;;;23832:16;17376:8;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;17376:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17376:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17376:54:0;:62;;17434:4;17376:62;17368:71;;;;;;23912:4;;23945:14;;23912:61;;;;;;-1:-1:-1;;;;;23945:14:0;;;23912:61;;;;;;;;;;;;:4;;;;;:32;;:61;;;;;;;;;;;;;;:4;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;23912:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23912:61:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;23912:61:0;;;;;;;;;;;;;;;;23980:8;;:59;;;;;;;;;;;;23912:61;;-1:-1:-1;23912:61:0;;-1:-1:-1;23912:61:0;;-1:-1:-1;23912:61:0;;-1:-1:-1;;;;;;23980:8:0;;:36;;:59;;;;;:8;;:59;;;;;;;:8;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;23980:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24139:8:0;;:44;;;-1:-1:-1;;;;;24139:44:0;;;;;;;;;24121:4;;-1:-1:-1;24127:10:0;;-1:-1:-1;;;;;;24139:8:0;;;;:21;;:44;;;;;;;;;;;;;;;:8;;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;24139:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24139:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24139:44:0;24104:80;;;;-1:-1:-1;;;;;24104:80:0;;;;;24139:44;24104:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24104:80:0;;;;;;;;24094:91;;24104:80;;;;;24094:91;;;;;24104:80;24094:91;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;24094:91:0;;;;;;;;;;;;;-1:-1:-1;24229:27:0;;;:14;:27;;;;;;24328:24;;;;24094:91;;-1:-1:-1;24229:27:0;-1:-1:-1;;24328:24:0;;:33;;-1:-1:-1;24319:43:0;;-1:-1:-1;24319:43:0;;;;;24398:8;;:45;;;;;;;;;;;;;;-1:-1:-1;;;;;24398:8:0;;;;:36;;:45;;;;;:8;;:45;;;;;;;;:8;;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;24398:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24504:41:0;;-1:-1:-1;;24504:41:0;24535:10;24504:41;;;;;24550:25;;;:39;;;24594:24;;;:31;;-1:-1:-1;;24594:31:0;;;;;;24683:10;;;:58;;;;;;-1:-1:-1;;;;;24701:28:0;;;24683:58;;;;;;;;;;;;;;:10;;;-1:-1:-1;24683:17:0;;-1:-1:-1;24683:58:0;;;;;;;;;;;;;;;24504:28;24683:10;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;24683:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24683:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24683:58:0;24682:59;24678:533;;;24774:1;24749:26;;24678:533;;;24833:28;;:42;;-1:-1:-1;;;;;24833:28:0;;;;:42;;;;;24867:7;;24833:28;:42;:28;:42;24867:7;24833:28;:42;;;;;;;24832:43;24828:378;;;25099:28;;-1:-1:-1;;;;;25099:28:0;24901:1;25074:54;;;:24;:54;;;;;;24901:1;;-1:-1:-1;25074:67:0;;25133:7;25074:67;:58;:67;:::i;:::-;25042:28;;-1:-1:-1;;;;;25042:28:0;25017:54;;;;:24;:54;;;;;:124;24828:378;;;25178:1;25161:18;;24828:378;25259:8;;;;;;;;;-1:-1:-1;;;;;25259:8:0;-1:-1:-1;;;;;25259:44:0;;:46;;;;;-1:-1:-1;;;25259:46:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25259:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25259:46:0;;;;25361:14;:28;;;;;;;;;;-1:-1:-1;;;;;25361:28:0;-1:-1:-1;;;;;25317:191:0;25334:14;:25;;;25317:191;;;;25391:11;25404:8;;;;;;;;;-1:-1:-1;;;;;25404:8:0;-1:-1:-1;;;;;25404:21:0;;:52;;;;;-1:-1:-1;;;25404:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25404:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25404:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25404:52:0;25317:191;;;;;;25404:52;25317:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23729:1784;;;;;;;;;;:::o;19328:412::-;19395:4;11256:9;;19395:4;;;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;19436:1;19415:18;;;:11;:18;;;;;;:22;19406:32;;;;;;19464:24;19469:18;;;:11;:18;;;;;;;;;19464:24;;:4;:24;;;;;;;19503:14;;;;19464:24;;-1:-1:-1;19503:14:0;;:23;19495:32;;;;;;-1:-1:-1;19534:14:0;;;:21;;-1:-1:-1;;19534:21:0;19551:4;19534:21;;;19579:13;;;;;19534:14;19597:17;;;;19619:16;;;:20;;;-1:-1:-1;19644:21:0;;:25;;;19690:18;;;:11;:18;;;;;;;19676:43;;19579:13;19676;:43::i;:::-;-1:-1:-1;19731:4:0;;19328:412;-1:-1:-1;;;19328:412:0:o;13206:31::-;;;;:::o;11942:27::-;;;-1:-1:-1;;;;;11942:27:0;;:::o;26618:663::-;26708:10;26729:22;26683:36;;;:24;:36;;;;;;26729:22;;26683:40;-1:-1:-1;26675:49:0;;;;;;-1:-1:-1;;26779:10:0;26754:36;;;;:24;:36;;;;;;;;26795:40;;;;26932:31;;26754:36;;-1:-1:-1;;26779:10:0;;26932:31;;;;;26754:36;;26932:31;;26754:36;26932:31;26754:36;26779:10;26932:31;;;;;;;26931:32;26927:280;;;-1:-1:-1;27173:10:0;26980:1;27148:36;;;:24;:36;;;;;:53;;;26927:280;27216:60;;;;;;;;;;;;;;27241:10;;27216:60;;;;;;;;26618:663;;:::o;23077:498::-;23220:19;23318;16571:8;;;;;;;;;-1:-1:-1;;;;;16571:8:0;-1:-1:-1;;;;;16571:17:0;;:19;;;;;-1:-1:-1;;;16571:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16571:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16571:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16571:19:0;:27;;16594:4;16571:27;16563:36;;;;;;23137:8;;;;;;;;;-1:-1:-1;;;;;23137:8:0;-1:-1:-1;;;;;23137:17:0;;:19;;;;;-1:-1:-1;;;23137:19:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23137:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23137:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23137:19:0;:27;;23160:4;23137:27;23128:37;;;;;;23199:10;23213:1;23179:31;;;:19;:31;;;;;;:35;23170:45;;;;;;-1:-1:-1;;23262:10:0;23242:31;;;;:19;:31;;;;;;;;;;23278:35;;;;23351:8;;:45;;;;;;;;;;;;;;;;;;;;23242:31;;-1:-1:-1;;;;;;;23351:8:0;;;;:20;;:45;;;;;23242:31;;23351:45;;;;;;;:8;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;23351:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23351:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23351:45:0;23350:46;23346:130;;;-1:-1:-1;23445:10:0;23418:1;23425:31;;;:19;:31;;;;;:45;;;23346:130;23507:10;-1:-1:-1;;;;;23485:85:0;;23519:8;;;;;;;;;-1:-1:-1;;;;;23519:8:0;-1:-1:-1;;;;;23519:22:0;;:24;;;;;-1:-1:-1;;;23519:24:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23519:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23519:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23519:24:0;23485:85;;;;;;23519:24;23485:85;;;;;;;;;;;;;;;;;;;;23077:498;;:::o;13029:42::-;13068:3;13029:42;:::o;21470:606::-;16837:8;;16853:4;;:65;;;;;;21602:9;16853:65;;;;;;;;;;;;;;;;;;;;21650:4;;;;21613:12;;21627:9;;-1:-1:-1;;;;;16837:8:0;;;;:15;;16853:4;;:27;;:65;;;;;;;;;;;;;;21650:4;16853;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;16853:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16853:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16853:65:0;16837:120;;;-1:-1:-1;;;16837:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16853:65;;16837:120;;;;;;;-1:-1:-1;16837:120:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;16837:120:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16837:120:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16837:120:0;:128;;16961:4;16837:128;16829:137;;;;;;21685:57;21695:9;21706:10;21718:12;21732:9;21685;:57::i;:::-;21661:81;-1:-1:-1;21799:16:0;;21795:118;;21863:8;;:43;;;-1:-1:-1;;;;;21863:43:0;;;;;;;;;21823:84;;21839:10;;21851;;-1:-1:-1;;;;;21863:8:0;;;;:21;;:43;;;;;;;;;;;;;;;:8;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;21863:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21863:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21863:43:0;21823:15;:84::i;:::-;;21795:118;21965:47;21981:15;21998:13;21965:15;:47::i;:::-;22019:12;;;;;;;;;-1:-1:-1;;;;;22019:12:0;-1:-1:-1;;;;;22019:32:0;;:34;;;;;-1:-1:-1;;;22019:34:0;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22019:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22019:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22067:4:0;;21470:606;-1:-1:-1;;;;;;;;;;21470:606:0:o;17738:211::-;11256:9;;-1:-1:-1;;;;;11256:9:0;11242:10;:23;11234:32;;;;;;-1:-1:-1;;;;;17828:29:0;;;;17819:39;;;;;;17863:14;:32;;-1:-1:-1;;;;;17863:32:0;;;-1:-1:-1;;17863:32:0;;;;;;;;17900:8;:44;;;;;;;;17738:211::o;12908:56::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12908:56:0;;;;;;;;:::o;11026:24::-;;;-1:-1:-1;;;;;11026:24:0;;:::o;13075:52::-;13120:7;13075:52;:::o;13151:49::-;13194:6;13151:49;:::o;12791:65::-;;;;;;;;;;;;;:::o;5116:108::-;5174:7;5195:6;;;;5188:14;;;;-1:-1:-1;5214:5:0;;;5116:108::o;31941:797::-;32050:4;32095:15;;:::i;:::-;32086:1;32065:18;;;:11;:18;;;;;;:22;32061:673;;;-1:-1:-1;32113:24:0;32118:18;;;:11;:18;;;;;;;;;32113:24;;:4;:24;;;;;;;32095:42;;;;;;;;;-1:-1:-1;;;;;32095:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32350:87;;-1:-1:-1;32421:16:0;;;;32377:8;;:40;;;-1:-1:-1;;;;;32377:40:0;;;;;;;;;-1:-1:-1;;;;;32377:8:0;;;;:21;;:40;;;;;;;;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;32377:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32377:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32377:40:0;:60;;32350:87;:149;;;;;32481:18;32442:34;32459:4;:16;;;32442:12;:16;;:34;;;;:::i;:::-;32441:58;;32350:149;32346:304;;;32535:18;;;;:11;:18;;;;;;32508:52;;32520:13;;32555:4;32508:11;:52::i;:::-;;32346:304;;;32623:10;;;;;32585:58;;;;;;;32638:1;32585:58;;;;;;;;;;;;;;;32623:10;;-1:-1:-1;;;;;32585:58:0;;;;;;;;;;;;32346:304;32662:4;32655:11;;;;32061:673;32689:21;;32704:5;;32689:21;;;;;32723:5;32716:12;;32061:673;31941:797;;;;;;:::o;5229:126::-;5287:7;5313:5;;;5330:6;;;;5323:14;;;;5349:1;5342:8;;5229:126;;;;;;:::o;35575:819::-;35657:15;;:::i;:::-;-1:-1:-1;35912:16:0;35676:19;;;:4;:19;;;;;;;;35657:38;;;;;;;;;-1:-1:-1;;;;;35657:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35961:37;;35657:38;;;;35961:37;;;;;35985:12;;35961:37;;35912:16;35961:37;35985:12;35657:38;35961:37;;;;;;;35960:38;35956:300;;;-1:-1:-1;36213:18:0;;-1:-1:-1;;;;;36188:44:0;;;;;:24;:44;;;;;;36018:1;;36188:62;;36237:12;36188:62;:48;:62;:::i;:::-;36166:18;;-1:-1:-1;;;;;36141:44:0;;;;;:24;:44;;;;;:109;35956:300;36287:18;;36275:10;;;;;36307:17;;;;;36326:15;;;;;36357:14;;;;;36265:124;;;;;;;;;;;;;;;;;;;;;;;36287:18;36265:124;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36265:124:0;;;;36275:10;;-1:-1:-1;;;;;;;;;;;36265:124:0;;;;;;;;;35575:819;;;;:::o;30403:1257::-;30569:8;;:34;;;;;;;;;;;;;;30523:7;;;;;;;;-1:-1:-1;;;;;30569:8:0;;:24;;:34;;;;;30523:7;;30569:34;;;;;;;30523:7;30569:8;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;30569:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30634:8:0;;:34;;;-1:-1:-1;;;;;30634:34:0;;-1:-1:-1;;;;;;;;;;;30634:34:0;;;;;;-1:-1:-1;;;;;30634:8:0;;;;-1:-1:-1;30634:21:0;;-1:-1:-1;30634:34:0;;;;;;;;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;30634:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30634:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30634:34:0;30722:52;;;;30739:4;30722:52;;30634:34;30722:52;;;;;;;-1:-1:-1;;;;;30722:52:0;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30722:52:0;;;;;;;;30712:63;;30634:34;;-1:-1:-1;30722:52:0;;;;30712:63;;;;30722:52;30712:63;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;30712:63:0;;;;;;;;;;;;;-1:-1:-1;30801:19:0;;;:4;:19;;;;;;;;30888:14;;;;30712:63;;-1:-1:-1;30801:19:0;-1:-1:-1;;30888:14:0;;:23;;-1:-1:-1;30879:33:0;;-1:-1:-1;30879:33:0;;;;;30955:18;;;;:11;:18;;;;;:34;;;30994;;-1:-1:-1;;30994:34:0;-1:-1:-1;;;;;30994:34:0;;;;;-1:-1:-1;31033:10:0;;:18;;;31056:13;;;:24;;;31085:17;;;:32;;;31122:14;;;:26;;;31212:57;31056:24;31085:32;31122:26;31212:22;:57::i;:::-;31193:16;;;:76;31336:55;31357:8;31367:12;31381:9;31336:20;:55::i;:::-;31312:21;;;:79;;;31415:12;31396:16;;;:31;31471:16;:18;;;;;;;;;31520;;31508:10;;;;31540:17;;;;31559:13;;;;31574:14;;;;31590:16;;;;31608:21;;31501:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31520:18:0;;;;31508:10;;31501:129;;;;;;;;;-1:-1:-1;31642:13:0;;30403:1257;-1:-1:-1;;;;;;30403:1257:0:o;40556:746::-;40643:15;;:::i;:::-;-1:-1:-1;40991:22:0;40661:19;;;:4;:19;;;;;;;;40643:37;;;;;;;;;-1:-1:-1;;;;;40643:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40751:28;;;:8;:28;;;;;;40643:37;;40991:22;40751:28;:42;40747:106;;40828:18;;-1:-1:-1;;;;;40819:28:0;;;;;;;:8;:28;;;;;;;;-1:-1:-1;40747:106:0;-1:-1:-1;;;;;40861:29:0;;;;;;:70;;-1:-1:-1;40913:18:0;;-1:-1:-1;;;;;40894:37:0;;;;;;;40861:70;40857:441;;;40948:18;;-1:-1:-1;;;;;40939:28:0;;;;;;;:8;:28;;;;;;;;:46;;-1:-1:-1;;40939:46:0;;;;;;;41042:8;;:40;;-1:-1:-1;;;;;41042:40:0;;;;;;;;;41016:91;;13120:7;;41016:67;;41042:8;;;;;:21;;:40;;;;;40939:28;;41042:40;;;;;;;;;:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;41042:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41042:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41042:40:0;41016:21;;;;;:67;:25;:67;:::i;:::-;:71;:91;:71;:91;:::i;:::-;-1:-1:-1;;;;;41152:36:0;;;;;;:19;:36;;;;;;40991:116;;-1:-1:-1;41152:56:0;;40991:116;41152:56;:40;:56;:::i;:::-;-1:-1:-1;;;;;41113:36:0;;;;;;:19;:36;;;;;;;;;:95;;;;41259:10;;;;41219:73;;;;;41287:1;41219:73;;;;;;;;;;;;;;;41259:10;;41219:73;;;;;;;;;;40556:746;;;;:::o;33388:1997::-;33496:4;33527:19;;;:4;:19;;;;;;;;33571:13;;;;;;33612:16;;;;;33661:21;;;;;;33715:14;;;:21;;-1:-1:-1;;33715:21:0;33732:4;33715:21;;;33741:17;;;;33763:20;;;;33788:25;;;;33864:4;33890:14;;33906:16;;;;-1:-1:-1;33963:8:0;:40;;-1:-1:-1;;;;;33963:40:0;;;-1:-1:-1;33963:40:0;;;;;33527:19;;33571:13;;33612:16;;33661:21;;33496:4;;;;-1:-1:-1;;;;;33864:4:0;;;;:25;;33890:14;;;33906:16;33924:80;;33963:8;;;:21;;:40;;;;;33527:19;;33963:40;;;;;;33496:4;33963:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;33963:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33963:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33963:40:0;33924:8;;:34;;;-1:-1:-1;;;;;33924:34:0;;-1:-1:-1;;;;;;;;;;;33924:34:0;;;;;;-1:-1:-1;;;;;33924:8:0;;;;:21;;:34;;;;;33963:40;;33924:34;;;;;;;;:8;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;33924:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33924:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33924:34:0;;:80;:38;:80;:::i;:::-;33864:146;;;-1:-1:-1;;;33864:146:0;;;;;;-1:-1:-1;;;;;33864:146:0;;;;;;;;;;;;;;;;;;34006:3;33864:146;;;;;;;;;;;;;;;;;;;-1:-1:-1;33864:146:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;33864:146:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33864:146:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33864:146:0;33846:15;;;:164;;;34021:20;34017:478;;;34112:39;34126:13;34141:9;34112:13;:39::i;:::-;34017:478;;;34185:4;:17;;;34167:4;:15;;;:35;34163:332;;;34284:50;34295:13;34310:9;34321:12;34284:10;:50::i;34163:332::-;34435:54;34445:13;34460:9;34471:17;34435:9;:54::i;:::-;34536:16;:18;;-1:-1:-1;;34536:18:0;;;34605:8;;:46;;;;;;;;-1:-1:-1;;;;;34605:8:0;;;;:44;;:46;;;;;34536:16;;34605:46;;;;;;;;34536:16;34605:8;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;34605:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34605:46:0;;;;34751:31;:29;:31::i;:::-;34721:61;-1:-1:-1;34900:24:0;;;34896:195;;34953:8;;:49;;;-1:-1:-1;;;;;34953:49:0;;;;;;;;;-1:-1:-1;;;;;34953:8:0;;;;:21;;:49;;;;;;;;;;;;;;;:8;;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;34953:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34953:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34953:49:0;;-1:-1:-1;34896:195:0;;;35033:8;;:52;;;-1:-1:-1;;;;;35033:52:0;;;;;;;;;-1:-1:-1;;;;;35033:8:0;;;;:21;;:52;;;;;;;;;;;;;;;:8;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;35033:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35033:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35033:52:0;;-1:-1:-1;34896:195:0;35117:55;13068:3;35118:35;:19;35142:10;35118:35;:23;:35;:::i;35117:55::-;-1:-1:-1;;;;;35217:35:0;;;;;;:19;:35;;;;;;35095:77;;-1:-1:-1;35217:60:0;;35095:77;35217:60;:39;:60;:::i;:::-;-1:-1:-1;;;;;35179:35:0;;;;;;:19;:35;;;;;;;;;:98;;;;35326:10;;;;;35287:77;;;;;35359:1;35287:77;;;;;;;;;;;;;;;;35326:10;;35287:77;;;;;;;;;;-1:-1:-1;35376:4:0;;33388:1997;-1:-1:-1;;;;;;;;;33388:1997:0:o;4679:166::-;4737:7;;4755:6;;4751:32;;;4776:1;4769:8;;;;4751:32;-1:-1:-1;4799:5:0;;;4803:1;4799;:5;4816;;;;;;;;:10;4809:18;;;4850:261;4908:7;4995:9;5011:1;5007;:5;;;;;;;;;4850:261;-1:-1:-1;;;;4850:261:0:o;36589:1051::-;36686:15;;:::i;:::-;-1:-1:-1;37157:16:0;36705:19;;;:4;:19;;;;;;;;36686:38;;;;;;;;;-1:-1:-1;;;;;36686:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36787:8;;:45;;;;;;;;;;;;;36686:38;;37157:16;36787:8;;;;;:31;;:45;;;;;37157:16;;36787:45;;;;;;;;37157:16;36787:8;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;36787:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36787:45:0;;;;36915:26;36932:8;36915:12;:16;;:26;;;;:::i;:::-;37203:18;;:37;;36900:41;;-1:-1:-1;37176:1:0;;-1:-1:-1;;;;;;37203:23:0;;:37;;;;;36900:41;;37203:18;:37;:18;:37;36900:41;37203:23;:37;;;;;;;37202:38;37198:297;;;-1:-1:-1;37452:18:0;;-1:-1:-1;;;;;37427:44:0;;;;;:24;:44;;;;;;37260:1;;37427:62;;37476:12;37427:62;:48;:62;:::i;:::-;37405:18;;-1:-1:-1;;;;;37380:44:0;;;;;:24;:44;;;;;:109;37198:297;37526:4;:18;;;-1:-1:-1;;;;;37504:131:0;37514:4;:10;;;37504:131;;;-1:-1:-1;;;;;;;;;;;37546:4:0;:17;;;37565:4;:15;;;37582:8;37592:4;:14;;;37608:12;37622:1;37625:9;37504:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36589:1051;;;;;:::o;37859:1360::-;37959:15;;:::i;:::-;-1:-1:-1;38137:16:0;37978:19;;;:4;:19;;;;;;;;37959:38;;;;;;;;;-1:-1:-1;;;;;37959:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38070:8;;:60;;;;;;;;;;;;;;;;;;;37959:38;;38137:16;38070:8;;;;;:32;;:60;;;;;38137:16;;38070:60;;;;;;;;38137:16;38070:8;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;38070:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;38267:18:0;;:26;;-1:-1:-1;;;;;38267:23:0;;;;-1:-1:-1;38267:18:0;;-1:-1:-1;38291:1:0;;38267:18;:26;:18;:26;38291:1;38267:23;:18;:26;;;;;;38266:27;38262:277;;;-1:-1:-1;38507:18:0;;-1:-1:-1;;;;;38482:44:0;;;;;:24;:44;;;;;;-1:-1:-1;;38313:2:0;38482:51;;38531:1;38482:51;:48;:51;:::i;:::-;38460:18;;-1:-1:-1;;;;;38435:44:0;;;;;:24;:44;;;;;:98;38262:277;38633:1;38614:16;:20;38610:406;;;38647:10;;;38671:18;;38647:61;;;;;;-1:-1:-1;;;;;38647:61:0;;;;;;;;;;;;;;;;;:10;;;:23;;:61;;;;;;;;;;;;;;:10;;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;38647:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38647:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38647:61:0;38646:62;38642:369;;;-1:-1:-1;38963:18:0;;-1:-1:-1;;;;;38933:49:0;;;;;:29;:49;;;;;;-1:-1:-1;;38729:2:0;38933:71;;38987:16;38933:71;:53;:71;:::i;:::-;38911:18;;-1:-1:-1;;;;;38881:49:0;;;;;:29;:49;;;;;:123;38642:369;39047:4;:18;;;-1:-1:-1;;;;;39025:135:0;39035:4;:10;;;39025:135;;;-1:-1:-1;;;;;;;;;;;39067:4:0;:17;;;39086:4;:15;;;39103:8;39113:4;:14;;;39129:1;39132:16;39150:9;39025:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39165:49;39190:13;39205:8;39165:24;:49::i;:::-;;37859:1360;;;;;:::o;39412:981::-;39505:4;39624:23;39762:15;;:::i;:::-;39650:8;;:40;;;-1:-1:-1;;;;;39650:40:0;;;;;;;;;39806:27;;-1:-1:-1;;;;;39650:8:0;;:21;;:40;;;;;;;;;;;;;;39806:27;39650:8;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;39650:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39650:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39650:40:0;39718:8;;:36;;;-1:-1:-1;;;;;39718:36:0;;;;;;;;;39650:40;;-1:-1:-1;;;;;;39718:8:0;;;;:21;;:36;;;;;39650:40;;39718:36;;;;;;;;:8;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;39718:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39718:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39718:36:0;39699:55;;39695:678;;39781:19;;;;:4;:19;;;;;;;;39762:38;;;;;;;;;-1:-1:-1;;;;;39762:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39836:4;;39870:14;;39886;;39836:75;;;;;39870:14;;;39836:75;;;;;;;39886:14;;;39836:75;;;;;;;;;;;;39762:38;;-1:-1:-1;39836:4:0;;;;;:33;;:75;;;;;39781:19;39836:75;;;;;;;;;;:4;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;39836:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39836:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39836:75:0;;-1:-1:-1;39945:1:0;39923:23;;:65;;;;;39969:19;39950:15;:38;;39923:65;39919:449;;;40035:8;;:68;;;;;;;;;;;;;;-1:-1:-1;;;;;40035:8:0;;;;:47;;:68;;;;;:8;;:68;;;;;;;;:8;;:68;;;5:2:-1;;;;30:1;27;20:12;5:2;40035:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40035:68:0;;;;40152:4;:18;;;-1:-1:-1;;;;;40117:75:0;40140:4;:10;;;40117:75;;;;40172:19;40117:75;;;;;;;;;;;;;;;;;;40240:14;;40264:8;;:38;;;-1:-1:-1;;;;;40264:38:0;;;;;;;;;-1:-1:-1;;;;;40240:14:0;;;;40264:8;;;;:21;;:38;;;;;;;;;;;;;;;-1:-1:-1;40264:8:0;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;40264:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40264:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40264:38:0;40240:92;;40310:19;;40240:92;;;;40310:19;40240:92;40264:38;40240:92;;;;;;40239:93;40235:127;;;40349:5;40342:12;;;;40235:127;40384:4;40377:11;;39412:981;;;;;;;;:::o;11858:29447::-;;;;;;;;;;;-1:-1:-1;;;;;11858:29447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://860620f36b26c0e5c6e555a5ea5f9d72b7387e05827e56bedcb52866d15baa2a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.