Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 750 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Reclaim Token | 19037284 | 766 days ago | IN | 0 ETH | 0.00148394 | ||||
| Get Prize | 9441578 | 2207 days ago | IN | 0 ETH | 0.00013471 | ||||
| Set Res | 9441577 | 2207 days ago | IN | 0 ETH | 0.00071187 | ||||
| Make Bet | 9441541 | 2207 days ago | IN | 0.01 ETH | 0.00051385 | ||||
| Get Prize | 8961835 | 2288 days ago | IN | 0 ETH | 0.00031431 | ||||
| Set Res | 8961832 | 2288 days ago | IN | 0 ETH | 0.0021534 | ||||
| Make Bet | 8961805 | 2288 days ago | IN | 0.01 ETH | 0.00208911 | ||||
| Make Bet | 8961805 | 2288 days ago | IN | 0.01 ETH | 0.00157576 | ||||
| Make Bet | 8961805 | 2288 days ago | IN | 0.01 ETH | 0.00152266 | ||||
| Make Bet | 8961800 | 2288 days ago | IN | 0.01 ETH | 0.00327473 | ||||
| Make Bet | 8961800 | 2288 days ago | IN | 0.01 ETH | 0.00223058 | ||||
| Get Prize | 8961800 | 2288 days ago | IN | 0 ETH | 0.00054583 | ||||
| Make Bet | 8961800 | 2288 days ago | IN | 0.01 ETH | 0.00222792 | ||||
| Set Res | 8961790 | 2288 days ago | IN | 0 ETH | 0.00378739 | ||||
| Make Bet | 8961784 | 2288 days ago | IN | 0.01 ETH | 0.00005019 | ||||
| Make Bet | 8961761 | 2288 days ago | IN | 0.01 ETH | 0.00122755 | ||||
| Make Bet | 8961759 | 2288 days ago | IN | 0.01 ETH | 0.00083509 | ||||
| Make Bet | 8961756 | 2288 days ago | IN | 0.01 ETH | 0.00080859 | ||||
| Make Bet | 8961756 | 2288 days ago | IN | 0.01 ETH | 0.00106918 | ||||
| Make Bet | 8961753 | 2288 days ago | IN | 0.01 ETH | 0.00134613 | ||||
| Make Bet | 8961753 | 2288 days ago | IN | 0.01 ETH | 0.00126586 | ||||
| Get My Prize | 8961751 | 2288 days ago | IN | 0 ETH | 0.00030702 | ||||
| Set Res | 8961747 | 2288 days ago | IN | 0 ETH | 0.00212702 | ||||
| Make Bet | 8961732 | 2288 days ago | IN | 0.01 ETH | 0.00208841 | ||||
| Make Bet | 8961725 | 2288 days ago | IN | 0.01 ETH | 0.00327348 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
|||
|---|---|---|---|---|---|---|---|
| Transfer | 19037284 | 766 days ago | 0.045 ETH | ||||
| - | 9441578 | 2207 days ago | 0.01 ETH | ||||
| - | 8961835 | 2288 days ago | 0.055 ETH | ||||
| - | 8961832 | 2288 days ago | 0.005 ETH | ||||
| - | 8961800 | 2288 days ago | 0.055 ETH | ||||
| - | 8961790 | 2288 days ago | 0.005 ETH | ||||
| - | 8961751 | 2288 days ago | 0.055 ETH | ||||
| - | 8961747 | 2288 days ago | 0.005 ETH | ||||
| - | 8940149 | 2291 days ago | 0.019 ETH | ||||
| - | 8940146 | 2291 days ago | 0.001 ETH | ||||
| - | 8928326 | 2293 days ago | 0.064 ETH | ||||
| - | 8928324 | 2293 days ago | 0.006 ETH | ||||
| - | 8928287 | 2293 days ago | 0.01 ETH | ||||
| - | 8928257 | 2293 days ago | 0.046 ETH | ||||
| - | 8928253 | 2293 days ago | 0.004 ETH | ||||
| - | 8928210 | 2293 days ago | 0.046 ETH | ||||
| - | 8928208 | 2293 days ago | 0.004 ETH | ||||
| - | 8928171 | 2293 days ago | 0.055 ETH | ||||
| - | 8928169 | 2293 days ago | 0.005 ETH | ||||
| - | 8922278 | 2294 days ago | 0.055 ETH | ||||
| - | 8922239 | 2294 days ago | 0.046 ETH | ||||
| - | 8922221 | 2294 days ago | 0.046 ETH | ||||
| - | 8922220 | 2294 days ago | 0.004 ETH | ||||
| - | 8922176 | 2294 days ago | 0.005 ETH | ||||
| - | 8922122 | 2294 days ago | 0.004 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SNKGame
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-10-24
*/
pragma solidity ^0.5.10;
/**
* @title SafeMath
* @dev Math operations with safety checks that revert on error
*/
library SafeMath {
int256 constant private INT256_MIN = -2**255;
/**
* @dev Multiplies two unsigned integers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Multiplies two signed integers, reverts on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below
int256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
require(b != 0); // Solidity only automatically asserts when dividing by 0
require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow
int256 c = a / b;
return c;
}
/**
* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Subtracts two signed integers, reverts on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two unsigned integers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Adds two signed integers, reverts on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an `Approval` event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be aplied to your functions to restrict their use to
* the owner.
*/
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* > Note: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @title Contracts that should be able to recover tokens
* @author SylTi
* @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
* This will prevent any accidental loss of tokens.
*/
contract CanReclaimToken is Ownable {
/**
* @dev Reclaim all ERC20 compatible tokens
* @param token ERC20 The address of the token contract
*/
function reclaimToken(IERC20 token) external onlyOwner {
address payable owner = address(uint160(owner()));
if (address(token) == address(0)) {
owner.transfer(address(this).balance);
return;
}
uint256 balance = token.balanceOf(address(this));
token.transfer(owner, balance);
}
}
/**
* @title Roles
* @dev Library for managing addresses assigned to a Role.
*/
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev give an account access to this role
*/
function add(Role storage role, address account) internal {
require(account != address(0));
require(!has(role, account));
role.bearer[account] = true;
}
/**
* @dev remove an account's access to this role
*/
function remove(Role storage role, address account) internal {
require(account != address(0));
require(has(role, account));
role.bearer[account] = false;
}
/**
* @dev check if an account has this role
* @return bool
*/
function has(Role storage role, address account) internal view returns (bool) {
require(account != address(0));
return role.bearer[account];
}
}
contract AdminRole is Ownable {
using Roles for Roles.Role;
event AdminAdded(address indexed account);
event AdminRemoved(address indexed account);
Roles.Role private _admins;
constructor () internal {
_addAdmin(msg.sender);
}
modifier onlyAdmin() {
require(isAdmin(msg.sender));
_;
}
function isAdmin(address account) public view returns (bool) {
return _admins.has(account);
}
function addAdmin(address account) public onlyOwner {
_addAdmin(account);
}
function renounceAdmin() public {
_removeAdmin(msg.sender);
}
function removeAdmin(address account) public onlyOwner {
_removeAdmin(account);
}
function _addAdmin(address account) internal {
_admins.add(account);
emit AdminAdded(account);
}
function _removeAdmin(address account) internal {
_admins.remove(account);
emit AdminRemoved(account);
}
}
//TODO referral
contract SNKGame is AdminRole, CanReclaimToken {
using SafeMath for uint;
address payable public dividendManagerAddress;
struct Node {
mapping (bool => uint) children;
uint parent;
bool side;
uint height;
uint count;
uint dupes;
}
struct Game {
mapping(uint => Node) bets;
uint res;
uint resPos;
uint amount;
mapping(uint => address[]) users; //betValue => users
mapping(uint => mapping(address => uint)) betUsers; // betValue => user => userBetAmount
mapping(address => uint[]) userBets; //user => userBetValue
mapping(address => bool) executed; //user => prizeExecuted
uint winnersAmount;
uint prizePool;
// uint winnersCount;
uint lastLeftPos;
uint lastRightPos;
uint lastLeftValue;
uint lastRightValue;
bool allDone;
}
mapping (uint => Game) public games;
uint public gameStep;
uint public closeBetsTime;
uint public gamesStart;
uint public betValue;
event NewBet(address indexed user, uint indexed game, uint bet, uint value);
event ResultSet(uint indexed game, uint res, uint lastLeftValue, uint lastRightValue, uint amount);
event PrizeTaken(address indexed user, uint game, uint amount);
constructor(address payable _dividendManagerAddress, uint _betValue) public {
require(_dividendManagerAddress != address(0));
dividendManagerAddress = _dividendManagerAddress;
gameStep = 10 minutes;
closeBetsTime = 3 minutes;
gamesStart = 1568332800; //Friday, 13 September 2019 г., 0:00:00
betValue = _betValue;
}
function() external payable {
revert();
}
function makeBet(uint _game, uint _bet) public payable {
require(_bet > 0);
require(betValue == 0 ? msg.value > 0 : msg.value == betValue);
if (_game == 0) {
_game = getCurrentGameId();
}
require(now < getGameTime(_game) - closeBetsTime);
_makeBet(games[_game], _bet);
emit NewBet(msg.sender, _game, _bet, msg.value);
}
function setRes(uint _game, uint _res) onlyAdmin public {
insertResult(_game, _res);
setLastLeftRight(_game);
shiftLeftRight(_game);
setWinnersAmount(_game, 0, 0);
}
function insertResult(uint _game, uint _res) onlyAdmin public {
//require(getGameTime(_game) < now);
_insertResult(games[_game], _res);
}
function setLastLeftRight(uint _game) onlyAdmin public {
_setLastLeftRight(games[_game]);
}
function shiftLeftRight(uint _game) onlyAdmin public {
_shiftLeftRight(games[_game]);
}
function setWinnersAmount(uint _game, uint _start, uint _stop) onlyAdmin public {
_setWinnersAmount(games[_game], _start, _stop);
if (games[_game].allDone) {
emit ResultSet(_game, games[_game].res, games[_game].lastLeftValue, games[_game].lastRightValue, games[_game].amount);
}
}
function isPrizeTaken(uint _game, address _user) public view returns (bool){
return games[_game].executed[_user];
}
function isMyPrizeTaken(uint _game) public view returns (bool){
return isPrizeTaken(_game, msg.sender);
}
function checkPrize(uint _game, address _user) public view returns (uint) {
if (games[_game].executed[_user]) {
return 0;
}
return _getPrizeAmount(games[_game], _user);
}
function checkMyPrize(uint _game) public view returns (uint) {
return checkPrize(_game, msg.sender);
}
function getPrize(uint _game, address payable _user) public {
uint amount = _getPrize(games[_game], _user);
emit PrizeTaken(_user, _game, amount);
}
function getMyPrize(uint _game) public {
getPrize(_game, msg.sender);
}
function getGameTime(uint _id) public view returns (uint) {
return gamesStart + (gameStep * _id);
}
function setDividendManager(address payable _dividendManagerAddress) onlyOwner external {
require(_dividendManagerAddress != address(0));
dividendManagerAddress = _dividendManagerAddress;
}
function setBetValue(uint _betValue) onlyOwner external {
betValue = _betValue;
}
function getCurrentGameId() public view returns (uint) {
return (now - gamesStart) / gameStep + 1;
}
function getNextGameId() external view returns (uint) {
return (now - gamesStart) / gameStep + 2;
}
function getUserBetValues(uint _game, address _user) public view returns (uint[] memory values) {
// values = new uint[](games[_game].userBets[msg.sender].length);
// for (uint i = 0; i < games[_game].userBets[msg.sender].length; i++) {
// values[i] = games[_game].userBets[msg.sender][i];
// }
return games[_game].userBets[_user];
}
function getUserBetValues(uint _game) external view returns (uint[] memory values) {
return getUserBetValues(_game, msg.sender);
}
function getUserBetAmounts(uint _game, address _user) public view returns (uint[] memory amounts) {
amounts = new uint[](games[_game].userBets[_user].length);
for (uint i = 0; i < games[_game].userBets[_user].length; i++) {
amounts[i] = games[_game].betUsers[ games[_game].userBets[_user][i] ][_user];
}
}
function getUserBetAmounts(uint _game) external view returns (uint[] memory values) {
return getUserBetAmounts(_game, msg.sender);
}
//INTERNAL FUNCTIONS
function _makeBet(Game storage game, uint _bet) internal {
if (game.betUsers[_bet][msg.sender] == 0) {
_insert(game, _bet);
game.users[_bet].push(msg.sender);
game.userBets[msg.sender].push(_bet);
}
game.amount = game.amount.add(msg.value);
game.betUsers[_bet][msg.sender] = game.betUsers[_bet][msg.sender].add(msg.value);
}
function _insertResult(Game storage game, uint _res) internal {
_insert(game, _res);
game.res = _res;
game.resPos = _getPos(game, _res);
}
function _setLastLeftRight(Game storage game) internal returns (bool) {
require(game.res > 0);
//JackPot
if (game.bets[game.res].dupes > 0) {
game.lastLeftPos = game.resPos;
game.lastRightPos = game.resPos;
game.lastLeftValue = game.res;
game.lastRightValue = game.res;
return true;
}
uint lastPos = _count(game) - 1;
if (lastPos < 19) { //1 winner
//если результат на первой или последней позиции то ставим победителя слева или справа
if (game.resPos == 0 || game.resPos == lastPos) {
game.lastLeftPos = game.resPos == 0 ? 1 : lastPos - 1;
game.lastRightPos = game.lastLeftPos;
} else {
uint leftBet = _select_at(game, game.resPos - 1);
uint rightBet = _select_at(game, game.resPos + 1);
uint leftBetDif = game.res - leftBet;
uint rightBetDif = rightBet - game.res;
if (leftBetDif == rightBetDif) {
game.lastLeftPos = game.resPos - 1;
game.lastRightPos = game.resPos + 1;
}
if (leftBetDif > rightBetDif) {
game.lastLeftPos = game.resPos + 1;
game.lastRightPos = game.resPos + 1;
}
if (leftBetDif < rightBetDif) {
//дубликатов в resPos нет, т.к. проверили выше в джекпоте
game.lastLeftPos = game.resPos - 1;
game.lastRightPos = game.resPos - 1;
}
}
} else {
uint winnersCount = lastPos.add(1).mul(10).div(100);
uint halfWinners = winnersCount.div(2);
if (game.resPos < halfWinners) {
game.lastLeftPos = 0;
game.lastRightPos = game.lastLeftPos + winnersCount;
} else {
if (game.resPos + halfWinners > lastPos) {
game.lastRightPos = lastPos;
game.lastLeftPos = lastPos - winnersCount;
} else {
game.lastLeftPos = game.resPos - halfWinners;
game.lastRightPos = game.lastLeftPos + winnersCount;
}
}
}
game.lastLeftValue = _select_at(game, game.lastLeftPos);
game.lastRightValue = _select_at(game, game.lastRightPos);
//не учитывает дубликаты для left - dupes для right + dupes, но они и не нужны нам
game.lastLeftPos = _getPos(game, game.lastLeftValue);
game.lastRightPos = _getPos(game, game.lastRightValue);// + games[_game].bets[games[_game].lastRightValue].dupes;
return true;
}
function _shiftRight(Game storage game, uint leftBetDif, uint rightBetDif, uint _val, uint lastPos) internal {
uint gleft = gasleft();
uint gasused = 0;
uint lastRightValue = game.lastRightValue;
uint lastRightPos = game.lastRightPos;
uint lastLeftValue = game.lastLeftValue;
uint lastLeftPos = game.lastLeftPos;
while (leftBetDif > rightBetDif) {
lastRightValue = _val;
lastRightPos = lastRightPos + 1 + game.bets[_val].dupes;
lastLeftValue = _select_at(game, lastLeftValue + 1);
lastLeftPos = _getPos(game, lastLeftValue);
if (lastRightPos == lastPos) break;
if (lastLeftPos >= game.resPos) break;
_val = _select_at(game, lastRightPos + 1);
leftBetDif = game.res - lastLeftValue;
rightBetDif = _val - game.res;
if (gasused == 0) {
gasused = gleft - gasleft() + 100000;
}
if (gasleft() < gasused) break;
}
game.lastRightValue = lastRightValue;
game.lastRightPos = lastRightPos;
game.lastLeftValue = lastLeftValue;
game.lastLeftPos = lastLeftPos;
}
function _shiftLeft(Game storage game, uint leftBetDif, uint rightBetDif, uint _val) internal {
uint gleft = gasleft();
uint gasused = 0;
uint lastRightValue = game.lastRightValue;
uint lastRightPos = game.lastRightPos;
uint lastLeftValue = game.lastLeftValue;
uint lastLeftPos = game.lastLeftPos;
while (rightBetDif > leftBetDif) {
lastLeftValue = _val;
lastLeftPos = lastLeftPos - game.bets[lastLeftValue].dupes - 1;
lastRightPos = lastRightPos - game.bets[lastRightValue].dupes - 1;
lastRightValue = _select_at(game, lastRightPos);
if (lastLeftPos - game.bets[lastLeftValue].dupes == 0) break;
if (lastRightPos <= game.resPos) break;
_val = _select_at(game, lastLeftPos - game.bets[lastLeftValue].dupes - 1);
leftBetDif = game.res - lastLeftValue;
rightBetDif = _val - game.res;
if (gasused == 0) {
gasused = gleft - gasleft() + 100000;
}
if (gasleft() < gasused) break;
}
game.lastRightValue = lastRightValue;
game.lastRightPos = lastRightPos;
game.lastLeftValue = lastLeftValue;
game.lastLeftPos = lastLeftPos;
}
function _shiftLeftRight(Game storage game) internal returns (bool) {
uint leftBetDif = game.res - game.lastLeftValue;
uint rightBetDif = game.lastRightValue - game.res;
if (rightBetDif == leftBetDif) return true;
uint _val;
if (leftBetDif > rightBetDif) {
uint lastPos = _count(game) - 1;
if (game.lastRightPos == lastPos) return true;
if (game.lastLeftPos >= game.resPos) return true;
// в lastRightPos последняя позиция дубля поэтому просто +1
_val = _select_at(game, game.lastRightPos + 1);
rightBetDif = _val - game.res;
_shiftRight(game, leftBetDif, rightBetDif, _val, lastPos);
} else {
if (game.lastLeftPos - game.bets[game.lastLeftValue].dupes == 0) return true;
if (game.lastRightPos <= game.resPos) return true;
//последняя позиция дубля поэтому минус дубликаты
_val = _select_at(game, game.lastLeftPos - game.bets[game.lastLeftValue].dupes - 1);
leftBetDif = game.res - _val;
_shiftLeft(game, leftBetDif, rightBetDif, _val);
}
return true;
}
//при передачи старт и стоп необходимо учитывать дубликаты (старт = последняя позиция дубликата)
function _setWinnersAmount(Game storage game, uint _start, uint _stop) internal {
uint _bet;
uint _betAmount;
if (game.lastLeftPos == game.lastRightPos) {
_bet = _select_at(game, game.lastLeftPos);
game.winnersAmount = _getBetAmount(game, _bet);
game.allDone = true;
} else {
_start = _start > 0 ? _start : game.lastLeftPos;
_stop = _stop > 0 ? _stop : game.lastRightPos;
uint i = _start;
uint winnersAmount;
while(i <= _stop) {
if (i == game.resPos) {
i++;
continue;
}
_bet = _select_at(game, i);
_betAmount = _getBetAmount(game, _bet);
winnersAmount = winnersAmount.add(_betAmount);
//верим что старт == последней позиции дубликата
if (i != _start && game.bets[_bet].dupes > 0) {
i += game.bets[_bet].dupes;
}
if (i >= game.lastRightPos) game.allDone = true;
i++;
}
// это сумма ставок победителей!
game.winnersAmount = winnersAmount;
}
if (game.allDone) {
uint profit = game.amount - game.winnersAmount;
if (profit > 0) {
uint ownerPercent = profit.div(10); //10% fee
game.prizePool = profit.sub(ownerPercent);
dividendManagerAddress.transfer(ownerPercent);
}
}
}
function _getBetAmount(Game storage game, uint _bet) internal view returns (uint amount) {
for (uint i = 0; i < game.users[_bet].length; i++) {
amount = amount.add(game.betUsers[_bet][game.users[_bet][i]]);
}
}
function _getPrize(Game storage game, address payable user) internal returns (uint amount) {
require(game.allDone);
require(!game.executed[user]);
game.executed[user] = true;
amount = _getPrizeAmount(game, user);
require(amount > 0);
user.transfer(amount);
}
function _getPrizeAmount(Game storage game, address user) internal view returns (uint amount){
amount = _getUserAmount(game, user);
if (amount > 0 && game.prizePool > 0) {
// доля суммы ставок игрока, которые вошли в число победивших от общей суммы ставок победителей
amount = amount.add(game.prizePool.mul(amount).div(game.winnersAmount));
}
}
function _getUserAmount(Game storage game, address user) internal view returns (uint amount){
amount = 0;
for (uint i = 0; i < game.userBets[user].length; i++) {
if (game.userBets[user][i] >= game.lastLeftValue &&
game.userBets[user][i] <= game.lastRightValue)
{
amount += game.betUsers[game.userBets[user][i]][user];
}
}
}
//AVL FUNCTIONS
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getPos(uint _game, uint _value) public view returns (uint) {
return _getPos(games[_game], _value);
}
function select_at(uint _game, uint pos) public view returns (uint) {
return _select_at(games[_game], pos);
}
function count(uint _game) public view returns (uint) {
return _count(games[_game]);
}
//internal
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function _insert(Game storage game, uint _value) internal {
if (_value==0)
game.bets[_value].dupes++;
else{
insert_helper(game, 0, true, _value);
}
}
//если есть дупбликаты, то возвращает позицию послденего элемента
function _getPos(Game storage game, uint _value) internal view returns (uint) {
uint c = _count(game);
if (c == 0) return 0; //err
if (game.bets[_value].count == 0) return 0; //err
uint _first = _select_at(game, 0);
uint _last = _select_at(game, c-1);
// Shortcut for the actual value
if (_value > _last || _value < _first) return 0; //err
if (_value == _first) return 0;
if (_value == _last) return c - 1;
// Binary search of the value in the array
uint min = 0;
uint max = c-1;
while (max > min) {
uint mid = (max + min + 1)/ 2;
uint _val = _select_at(game, mid);
if (_val <= _value) {
min = mid;
} else {
max = mid-1;
}
}
return min;
}
function _select_at(Game storage game, uint pos) internal view returns (uint value){
uint zeroes=game.bets[0].dupes;
// Node memory left_node;
uint left_count;
if (pos<zeroes) {
return 0;
}
uint pos_new=pos-zeroes;
uint cur=game.bets[0].children[true];
Node storage cur_node=game.bets[cur];
while(true){
uint left=cur_node.children[false];
uint cur_num=cur_node.dupes+1;
if (left!=0) {
left_count=game.bets[left].count;
}
else {
left_count=0;
}
if (pos_new<left_count) {
cur=left;
cur_node=game.bets[left];
}
else if (pos_new<left_count+cur_num){
return cur;
}
else {
cur=cur_node.children[true];
cur_node=game.bets[cur];
pos_new-=left_count+cur_num;
}
}
}
function _count(Game storage game) internal view returns (uint){
Node storage root=game.bets[0];
Node storage child=game.bets[root.children[true]];
return root.dupes+child.count;
}
function insert_helper(Game storage game, uint p_value, bool side, uint value) private {
Node storage root=game.bets[p_value];
uint c_value=root.children[side];
if (c_value==0){
root.children[side]=value;
Node storage child=game.bets[value];
child.parent=p_value;
child.side=side;
child.height=1;
child.count=1;
update_counts(game, value);
rebalance_insert(game, value);
}
else if (c_value==value){
game.bets[c_value].dupes++;
update_count(game, value);
update_counts(game, value);
}
else{
bool side_new=(value >= c_value);
insert_helper(game, c_value,side_new,value);
}
}
function update_count(Game storage game, uint value) private {
Node storage n=game.bets[value];
n.count=1+game.bets[n.children[false]].count+game.bets[n.children[true]].count+n.dupes;
}
function update_counts(Game storage game, uint value) private {
uint parent=game.bets[value].parent;
while (parent!=0) {
update_count(game, parent);
parent=game.bets[parent].parent;
}
}
function rebalance_insert(Game storage game, uint n_value) private {
update_height(game, n_value);
Node storage n=game.bets[n_value];
uint p_value=n.parent;
if (p_value!=0) {
int p_bf=balance_factor(game, p_value);
bool side=n.side;
int sign;
if (side)
sign=-1;
else
sign=1;
if (p_bf == sign*2) {
if (balance_factor(game, n_value) == (-1 * sign))
rotate(game, n_value,side);
rotate(game, p_value,!side);
}
else if (p_bf != 0)
rebalance_insert(game, p_value);
}
}
function update_height(Game storage game, uint value) private {
Node storage n=game.bets[value];
uint height_left=game.bets[n.children[false]].height;
uint height_right=game.bets[n.children[true]].height;
if (height_left>height_right)
n.height=height_left+1;
else
n.height=height_right+1;
}
function balance_factor(Game storage game, uint value) private view returns (int bf) {
Node storage n=game.bets[value];
return int(game.bets[n.children[false]].height)-int(game.bets[n.children[true]].height);
}
function rotate(Game storage game, uint value,bool dir) private {
bool other_dir=!dir;
Node storage n=game.bets[value];
bool side=n.side;
uint parent=n.parent;
uint value_new=n.children[other_dir];
Node storage n_new=game.bets[value_new];
uint orphan=n_new.children[dir];
Node storage p=game.bets[parent];
Node storage o=game.bets[orphan];
p.children[side]=value_new;
n_new.side=side;
n_new.parent=parent;
n_new.children[dir]=value;
n.parent=value_new;
n.side=dir;
n.children[other_dir]=orphan;
o.parent=value;
o.side=other_dir;
update_height(game, value);
update_height(game, value_new);
update_count(game, value);
update_count(game, value_new);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"_dividendManagerAddress","type":"address"},{"internalType":"uint256","name":"_betValue","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NewBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PrizeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"game","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"res","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastLeftValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRightValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ResultSet","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"betValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"checkMyPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"checkPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"closeBetsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendManagerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"res","type":"uint256"},{"internalType":"uint256","name":"resPos","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"winnersAmount","type":"uint256"},{"internalType":"uint256","name":"prizePool","type":"uint256"},{"internalType":"uint256","name":"lastLeftPos","type":"uint256"},{"internalType":"uint256","name":"lastRightPos","type":"uint256"},{"internalType":"uint256","name":"lastLeftValue","type":"uint256"},{"internalType":"uint256","name":"lastRightValue","type":"uint256"},{"internalType":"bool","name":"allDone","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gamesStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getGameTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getMyPrize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNextGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"getPos","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address payable","name":"_user","type":"address"}],"name":"getPrize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserBetAmounts","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getUserBetAmounts","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"getUserBetValues","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getUserBetValues","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_res","type":"uint256"}],"name":"insertResult","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"isMyPrizeTaken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"isPrizeTaken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_bet","type":"uint256"}],"name":"makeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"select_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_betValue","type":"uint256"}],"name":"setBetValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_dividendManagerAddress","type":"address"}],"name":"setDividendManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"setLastLeftRight","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_res","type":"uint256"}],"name":"setRes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_stop","type":"uint256"}],"name":"setWinnersAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_game","type":"uint256"}],"name":"shiftLeftRight","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200299738038062002997833981810160405260408110156200003757600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200009d336001600160e01b03620000ee16565b6001600160a01b038216620000b157600080fd5b600280546001600160a01b0319166001600160a01b03939093169290921790915561025860045560b4600555635d7adc00600655600755620001cf565b620001098160016200014060201b620021191790919060201c565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6001600160a01b0381166200015457600080fd5b6200016982826001600160e01b036200019916565b156200017457600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001af57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6127b880620001df6000396000f3fe6080604052600436106102305760003560e01c8063828b1e7c1161012e578063b77dad88116100ab578063df898e321161006f578063df898e3214610873578063ede8af0114610896578063f0a81c22146108ab578063f2fde38b146108db578063fcce15f41461090e57610230565b8063b77dad88146107a7578063bc6848b7146107d1578063bfbbdd78146107fb578063ca3b52fc14610825578063cce660971461083a57610230565b8063949eebe6116100f2578063949eebe6146106e15780639706964d1461070b578063a263540114610744578063acdbe45314610759578063af3fac401461079257610230565b8063828b1e7c146106455780638bad0c0a1461066f5780638bf60537146106845780638da5cb5b146106b75780638f32d59b146106cc57610230565b8063426f4d67116101bc57806357b3ae7a1161018057806357b3ae7a1461051a5780636a90d65d146105445780637048027514610574578063715018a6146105a75780637903c08f146105bc57610230565b8063426f4d6714610450578063472dee501461047a57806349b7a9c2146104aa5780634a70282b146104db5780634ee71ef01461050557610230565b80632161f896116102035780632161f8961461034f57806324d7806c146103915780632c8705f0146103d8578063307e74f5146104115780633b3546c81461042657610230565b8063117a5b90146102355780631785f53c146102b157806317ffc320146102e65780631cf959be14610319575b600080fd5b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b5035610938565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610991565b005b3480156102f257600080fd5b506102e46004803603602081101561030957600080fd5b50356001600160a01b03166109e4565b34801561032557600080fd5b506102e46004803603606081101561033c57600080fd5b5080359060208101359060400135610b7f565b34801561035b57600080fd5b5061037f6004803603604081101561037257600080fd5b5080359060200135610c34565b60408051918252519081900360200190f35b34801561039d57600080fd5b506103c4600480360360208110156103b457600080fd5b50356001600160a01b0316610c55565b604080519115158252519081900360200190f35b3480156103e457600080fd5b506102e4600480360360408110156103fb57600080fd5b50803590602001356001600160a01b0316610c70565b34801561041d57600080fd5b5061037f610cd8565b34801561043257600080fd5b5061037f6004803603602081101561044957600080fd5b5035610cde565b34801561045c57600080fd5b506102e46004803603602081101561047357600080fd5b5035610cf5565b34801561048657600080fd5b506102e46004803603604081101561049d57600080fd5b5080359060200135610d41565b3480156104b657600080fd5b506104bf610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156104e757600080fd5b506102e4600480360360208110156104fe57600080fd5b5035610d8e565b34801561051157600080fd5b5061037f610d98565b34801561052657600080fd5b506102e46004803603602081101561053d57600080fd5b5035610d9e565b34801561055057600080fd5b5061037f6004803603604081101561056757600080fd5b5080359060200135610dc7565b34801561058057600080fd5b506102e46004803603602081101561059757600080fd5b50356001600160a01b0316610ddf565b3480156105b357600080fd5b506102e4610e2f565b3480156105c857600080fd5b506105f5600480360360408110156105df57600080fd5b50803590602001356001600160a01b0316610ec0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610631578181015183820152602001610619565b505050509050019250505060405180910390f35b34801561065157600080fd5b506102e46004803603602081101561066857600080fd5b5035610fdf565b34801561067b57600080fd5b506102e4611008565b34801561069057600080fd5b506102e4600480360360208110156106a757600080fd5b50356001600160a01b0316611013565b3480156106c357600080fd5b506104bf61108f565b3480156106d857600080fd5b506103c461109e565b3480156106ed57600080fd5b506105f56004803603602081101561070457600080fd5b50356110af565b34801561071757600080fd5b5061037f6004803603604081101561072e57600080fd5b50803590602001356001600160a01b03166110bb565b34801561075057600080fd5b5061037f611109565b34801561076557600080fd5b506103c46004803603604081101561077c57600080fd5b50803590602001356001600160a01b0316611123565b34801561079e57600080fd5b5061037f611152565b3480156107b357600080fd5b5061037f600480360360208110156107ca57600080fd5b5035611158565b3480156107dd57600080fd5b506105f5600480360360208110156107f457600080fd5b5035611164565b34801561080757600080fd5b5061037f6004803603602081101561081e57600080fd5b5035611170565b34801561083157600080fd5b5061037f61117c565b34801561084657600080fd5b506105f56004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316611182565b6102e46004803603604081101561088957600080fd5b50803590602001356111f9565b3480156108a257600080fd5b5061037f6112a8565b3480156108b757600080fd5b506102e4600480360360408110156108ce57600080fd5b50803590602001356112c2565b3480156108e757600080fd5b506102e4600480360360208110156108fe57600080fd5b50356001600160a01b03166112ec565b34801561091a57600080fd5b506103c46004803603602081101561093157600080fd5b503561133c565b6003602081905260009182526040909120600181015460028201549282015460088301546009840154600a850154600b860154600c870154600d880154600e909801549698979596949593949293919290919060ff168a565b61099961109e565b6109d8576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611348565b50565b6109ec61109e565b610a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6000610a3561108f565b90506001600160a01b038216610a82576040516001600160a01b03821690303180156108fc02916000818181858888f19350505050158015610a7b573d6000803e3d6000fd5b50506109e1565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d6020811015610b7857600080fd5b5050505050565b610b8833610c55565b610b9157600080fd5b6000838152600360205260409020610baa908383611390565b6000838152600360205260409020600e015460ff1615610c2f576000838152600360208181526040928390206001810154600c820154600d8301549290940154855191825292810193909352828401526060820152905184917f9fab441e2fe549beba1061ad214523689184176a9b8390ebc7ab9a49de6d4637919081900360800190a25b505050565b6000828152600360205260408120610c4c9083611545565b90505b92915050565b6000610c6860018363ffffffff61163816565b90505b919050565b6000828152600360205260408120610c88908361166d565b9050816001600160a01b03167ff812b9a4af7b9ed219f98e508a9594f49595389ddb44a428bedf34299277d3a28483604051808381526020018281526020019250505060405180910390a2505050565b60045481565b6000818152600360205260408120610c689061171d565b610cfd61109e565b610d3c576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600755565b610d4a33610c55565b610d5357600080fd5b610d5d82826112c2565b610d6682610fdf565b610d6f82610d9e565b610d7b82600080610b7f565b5050565b6002546001600160a01b031681565b6109e18133610c70565b60055481565b610da733610c55565b610db057600080fd5b6000818152600360205260409020610d7b9061174d565b6000828152600360205260408120610c4c908361188e565b610de761109e565b610e26576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611981565b610e3761109e565b610e76576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008281526003602090815260408083206001600160a01b038516845260060182529182902054825181815281830281019092019092526060918015610f10578160200160208202803883390190505b50905060005b60008481526003602090815260408083206001600160a01b0387168452600601909152902054811015610fd85760008481526003602090815260408083206001600160a01b038716845260068101909252822080546005909201929184908110610f7c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610fc557fe5b6020908102919091010152600101610f16565b5092915050565b610fe833610c55565b610ff157600080fd5b6000818152600360205260409020610d7b906119c9565b61101133611348565b565b61101b61109e565b61105a576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060610c688233611182565b60008281526003602090815260408083206001600160a01b038516845260070190915281205460ff16156110f157506000610c4f565b6000838152600360205260409020610c4c9083611c17565b600060045460065442038161111a57fe5b04600101905090565b60008281526003602090815260408083206001600160a01b038516845260070190915290205460ff1692915050565b60075481565b6000610c6882336110bb565b6060610c688233610ec0565b60045460065491020190565b60065481565b60008281526003602090815260408083206001600160a01b03851684526006018252918290208054835181840281018401909452808452606093928301828280156111ec57602002820191906000526020600020905b8154815260200190600101908083116111d8575b5050505050905092915050565b6000811161120657600080fd5b6007541561121857600754341461121d565b600034115b61122657600080fd5b8161123657611233611109565b91505b60055461124283611170565b03421061124e57600080fd5b60008281526003602052604090206112669082611c6d565b604080518281523460208201528151849233927f8d466116dd3f7b5e3a703c5bd5104cdde755801bee5a4e7d640edef8f7e6cf84929081900390910190a35050565b60006004546006544203816112b957fe5b04600201905090565b6112cb33610c55565b6112d457600080fd5b6000828152600360205260409020610d7b9082611d4d565b6112f461109e565b611333576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611d74565b6000610c688233611123565b61135960018263ffffffff611e1416565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90600090a250565b60008084600b015485600a015414156113d6576113b18586600a0154611545565b91506113bd8583611e5c565b6008860155600e8501805460ff191660011790556114b8565b600084116113e85784600a01546113ea565b835b9350600083116113fe5784600b0154611400565b825b92508360005b8482116114b157866002015482141561142457600190910190611406565b61142e8783611545565b935061143a8785611e5c565b925061144c818463ffffffff611ee216565b905085821415801561146e575060008481526020889052604090206005015415155b1561148b5760008481526020889052604090206005015491909101905b86600b015482106114a657600e8701805460ff191660011790555b600190910190611406565b6008870155505b600e85015460ff1615610b78576008850154600386015403801561153d5760006114e982600a63ffffffff611ef416565b90506114fb828263ffffffff611f1616565b60098801556002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561153a573d6000803e3d6000fd5b50505b505050505050565b600080805260208390526040812060050154818184101561156b57600092505050610c4f565b600080805260208681526040808320600184528252808320548084529188905290912083860391905b600080805260208290526040902054600582015460010181156115ca57600082815260208b9052604090206004015495506115cf565b600095505b858510156115f257600082815260208b9052604090209193509091508290611631565b80860185101561160b5783975050505050505050610c4f565b600160009081526020938452604080822054808352948c90529020868201909503949293505b5050611594565b60006001600160a01b03821661164d57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b600e82015460009060ff1661168157600080fd5b6001600160a01b038216600090815260078401602052604090205460ff16156116a957600080fd5b6001600160a01b03821660009081526007840160205260409020805460ff191660011790556116d88383611c17565b9050600081116116e757600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b60008080526020828152604080832060018452808352818420548452939091529020600401546005909101540190565b600c8101546001820154600d83015460009282039190038082141561177757600192505050610c6b565b6000818311156117f5576000600161178e8761171d565b0390508086600b015414156117aa576001945050505050610c6b565b856002015486600a0154106117c6576001945050505050610c6b565b6117d78687600b0154600101611545565b91508560010154820392506117ef8685858585611f2b565b50611883565b600c850154600090815260208690526040902060050154600a860154036118225760019350505050610c6b565b846002015485600b01541161183d5760019350505050610c6b565b61186c85600187600001600089600c015481526020019081526020016000206005015488600a01540303611545565b905080856001015403925061188385848484612011565b506001949350505050565b60008061189a8461171d565b9050806118ab576000915050610c4f565b6000838152602085905260409020600401546118cb576000915050610c4f565b60006118d8856000611545565b905060006118e98660018503611545565b9050808511806118f857508185105b156119095760009350505050610c4f565b8185141561191d5760009350505050610c4f565b80851415611932575050600019019050610c4f565b600060001984015b818111156119765760028282016001010460006119578a83611545565b90508881116119685781935061196f565b6001820392505b505061193a565b509695505050505050565b61199260018263ffffffff61211916565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6000808260010154116119db57600080fd5b600182015460009081526020839052604090206005015415611a2057506002810154600a8201819055600b820155600180820154600c8301819055600d830155610c6b565b60006001611a2d8461171d565b0390506013811015611b145760028301541580611a4d5750808360020154145b15611a7957600283015415611a655760018103611a68565b60015b600a8401819055600b840155611b0f565b6000611a8c846001866002015403611545565b90506000611aa1858660020154600101611545565b600186015490915082810390820380821415611acf5760028701546000198101600a890155600101600b8801555b80821115611aec576002870154600101600a8801819055600b8801555b80821015611b0a57600287015460001901600a8801819055600b8801555b505050505b611bbb565b6000611b496064611b3d600a611b3186600163ffffffff611ee216565b9063ffffffff61216516565b9063ffffffff611ef416565b90506000611b5e82600263ffffffff611ef416565b90508085600201541015611b7f576000600a860155600b8501829055611bb8565b82818660020154011115611ba157600b8501839055818303600a860155611bb8565b6002850154819003600a86018190558201600b8601555b50505b611bc98384600a0154611545565b600c840155600b830154611bde908490611545565b600d840155600c830154611bf390849061188e565b600a840155600d830154611c0890849061188e565b600b8401555060019050919050565b6000611c23838361218c565b9050600081118015611c39575060008360090154115b15610c4f57610c4c611c608460080154611b3d84876009015461216590919063ffffffff16565b829063ffffffff611ee216565b60008181526005830160209081526040808320338452909152902054611ce857611c9782826122a6565b600081815260048301602090815260408083208054600181810183559185528385200180546001600160a01b0319163390811790915584526006860183529083208054918201815583529120018190555b6003820154611cfd903463ffffffff611ee216565b600383015560008181526005830160209081526040808320338452909152902054611d2e903463ffffffff611ee216565b6000918252600590920160209081526040808320338452909152902055565b611d5782826122a6565b60018201819055611d68828261188e565b82600201819055505050565b6001600160a01b038116611db95760405162461bcd60e51b815260040180806020018281038252602681526020018061273e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116611e2757600080fd5b611e318282611638565b611e3a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000805b6000838152600485016020526040902054811015610fd857600083815260058501602090815260408083206004880190925282208054611ed893919085908110611ea657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611ee216565b9150600101611e60565b600082820183811015610c4c57600080fd5b6000808211611f0257600080fd5b6000828481611f0d57fe5b04949350505050565b600082821115611f2557600080fd5b50900390565b60005a600d870154600b880154600c890154600a8a01549394506000935b888a1115611feb578793508a60000160008981526020019081526020016000206005015483600101019250611f818b83600101611545565b9150611f8d8b8361188e565b905086831415611f9c57611feb565b8a600201548110611fac57611feb565b611fb98b84600101611545565b60018c01548381039b5081039950975084611fd9575a8603620186a00194505b845a1015611fe657611feb565b611f49565b600d8b0193909355600b8a0191909155600c890155600a90970196909655505050505050565b60005a600d860154600b870154600c880154600a8901549394506000935b888811156120f457600087815260208b905260408082206005908101548784529190922090910154600019940384019388935091030161206f8a84611545565b600083815260208c90526040902060050154909450810361208f576120f4565b8960020154831161209f576120f4565b600082815260208b905260409020600501546120c2908b90830360001901611545565b60018b01548381039a50810398509650846120e2575a8603620186a00194505b845a10156120ef576120f4565b61202f565b600d8a0193909355600b890191909155600c880155600a909601959095555050505050565b6001600160a01b03811661212c57600080fd5b6121368282611638565b1561214057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60008261217457506000610c4f565b8282028284828161218157fe5b0414610c4c57600080fd5b6000805b6001600160a01b0383166000908152600685016020526040902054811015610fd857600c8401546001600160a01b038416600090815260068601602052604090208054839081106121dd57fe5b90600052602060002001541015801561222a5750600d8401546001600160a01b0384166000908152600686016020526040902080548390811061221c57fe5b906000526020600020015411155b1561229e576001600160a01b038316600090815260068501602052604081208054600587019291908490811061225c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054820191505b600101612190565b806122c857600081815260208390526040902060050180546001019055610d7b565b610d7b8260006001845b600083815260208581526040808320851515845291829052909120548061235257831515600081815260208481526040808320879055868352908990529020600180820188905560028201805460ff191690931790925560038101829055600481019190915561234287856123a4565b61234c87856123de565b5061153d565b8281141561238b5760008181526020879052604090206005018054600101905561237c868461247f565b61238686846123a4565b61153d565b8083101561239b878383876122d2565b50505050505050565b6000818152602083905260409020600101545b8015610c2f576123c7838261247f565b6000908152602083905260409020600101546123b7565b6123e882826124d2565b60008181526020839052604090206001810154801561247957600061240d8583612536565b600284015490915060ff1660008115612429575060001961242d565b5060015b806002028314156124695780600019026124478888612536565b141561245857612458878784612579565b61246487858415612579565b61239b565b821561239b5761239b87856123de565b50505050565b600090815260208281526040808320600581015460018086528285528386205486528685528386206004908101548780528487528588205488529790955292909420830154909401909201909101910155565b60008181526020838152604080832083805280835281842054845285835281842060039081015460018652828552838620548652938790529190932001548082111561252657600182016003840155610b78565b6001810160038401555050505050565b6000818152602083815260408083206001845280835281842054845285835281842060039081015485805291845282852054855292869052922001540392915050565b6000811590506000846000016000858152602001908152602001600020905060008160020160009054906101000a900460ff1690506000826001015490506000836000016000861515151581526020019081526020016000205490506000886000016000838152602001908152602001600020905060008160000160008915151515815260200190815260200160002054905060008a6000016000868152602001908152602001600020905060008b60000160008481526020019081526020016000209050848260000160008915151515815260200190815260200160002081905550868460020160006101000a81548160ff0219169083151502179055508584600101819055508a8460000160008c15151515815260200190815260200160002081905550848860010181905550898860020160006101000a81548160ff021916908315150217905550828860000160008b151515158152602001908152602001600020819055508a8160010181905550888160020160006101000a81548160ff0219169083151502179055506127118c8c6124d2565b61271b8c866124d2565b6127258c8c61247f565b61272f8c8661247f565b50505050505050505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582061ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc3164736f6c634300050c0032000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff000000000000000000000000000000000000000000000000002386f26fc10000
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063828b1e7c1161012e578063b77dad88116100ab578063df898e321161006f578063df898e3214610873578063ede8af0114610896578063f0a81c22146108ab578063f2fde38b146108db578063fcce15f41461090e57610230565b8063b77dad88146107a7578063bc6848b7146107d1578063bfbbdd78146107fb578063ca3b52fc14610825578063cce660971461083a57610230565b8063949eebe6116100f2578063949eebe6146106e15780639706964d1461070b578063a263540114610744578063acdbe45314610759578063af3fac401461079257610230565b8063828b1e7c146106455780638bad0c0a1461066f5780638bf60537146106845780638da5cb5b146106b75780638f32d59b146106cc57610230565b8063426f4d67116101bc57806357b3ae7a1161018057806357b3ae7a1461051a5780636a90d65d146105445780637048027514610574578063715018a6146105a75780637903c08f146105bc57610230565b8063426f4d6714610450578063472dee501461047a57806349b7a9c2146104aa5780634a70282b146104db5780634ee71ef01461050557610230565b80632161f896116102035780632161f8961461034f57806324d7806c146103915780632c8705f0146103d8578063307e74f5146104115780633b3546c81461042657610230565b8063117a5b90146102355780631785f53c146102b157806317ffc320146102e65780631cf959be14610319575b600080fd5b34801561024157600080fd5b5061025f6004803603602081101561025857600080fd5b5035610938565b604080519a8b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156102bd57600080fd5b506102e4600480360360208110156102d457600080fd5b50356001600160a01b0316610991565b005b3480156102f257600080fd5b506102e46004803603602081101561030957600080fd5b50356001600160a01b03166109e4565b34801561032557600080fd5b506102e46004803603606081101561033c57600080fd5b5080359060208101359060400135610b7f565b34801561035b57600080fd5b5061037f6004803603604081101561037257600080fd5b5080359060200135610c34565b60408051918252519081900360200190f35b34801561039d57600080fd5b506103c4600480360360208110156103b457600080fd5b50356001600160a01b0316610c55565b604080519115158252519081900360200190f35b3480156103e457600080fd5b506102e4600480360360408110156103fb57600080fd5b50803590602001356001600160a01b0316610c70565b34801561041d57600080fd5b5061037f610cd8565b34801561043257600080fd5b5061037f6004803603602081101561044957600080fd5b5035610cde565b34801561045c57600080fd5b506102e46004803603602081101561047357600080fd5b5035610cf5565b34801561048657600080fd5b506102e46004803603604081101561049d57600080fd5b5080359060200135610d41565b3480156104b657600080fd5b506104bf610d7f565b604080516001600160a01b039092168252519081900360200190f35b3480156104e757600080fd5b506102e4600480360360208110156104fe57600080fd5b5035610d8e565b34801561051157600080fd5b5061037f610d98565b34801561052657600080fd5b506102e46004803603602081101561053d57600080fd5b5035610d9e565b34801561055057600080fd5b5061037f6004803603604081101561056757600080fd5b5080359060200135610dc7565b34801561058057600080fd5b506102e46004803603602081101561059757600080fd5b50356001600160a01b0316610ddf565b3480156105b357600080fd5b506102e4610e2f565b3480156105c857600080fd5b506105f5600480360360408110156105df57600080fd5b50803590602001356001600160a01b0316610ec0565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610631578181015183820152602001610619565b505050509050019250505060405180910390f35b34801561065157600080fd5b506102e46004803603602081101561066857600080fd5b5035610fdf565b34801561067b57600080fd5b506102e4611008565b34801561069057600080fd5b506102e4600480360360208110156106a757600080fd5b50356001600160a01b0316611013565b3480156106c357600080fd5b506104bf61108f565b3480156106d857600080fd5b506103c461109e565b3480156106ed57600080fd5b506105f56004803603602081101561070457600080fd5b50356110af565b34801561071757600080fd5b5061037f6004803603604081101561072e57600080fd5b50803590602001356001600160a01b03166110bb565b34801561075057600080fd5b5061037f611109565b34801561076557600080fd5b506103c46004803603604081101561077c57600080fd5b50803590602001356001600160a01b0316611123565b34801561079e57600080fd5b5061037f611152565b3480156107b357600080fd5b5061037f600480360360208110156107ca57600080fd5b5035611158565b3480156107dd57600080fd5b506105f5600480360360208110156107f457600080fd5b5035611164565b34801561080757600080fd5b5061037f6004803603602081101561081e57600080fd5b5035611170565b34801561083157600080fd5b5061037f61117c565b34801561084657600080fd5b506105f56004803603604081101561085d57600080fd5b50803590602001356001600160a01b0316611182565b6102e46004803603604081101561088957600080fd5b50803590602001356111f9565b3480156108a257600080fd5b5061037f6112a8565b3480156108b757600080fd5b506102e4600480360360408110156108ce57600080fd5b50803590602001356112c2565b3480156108e757600080fd5b506102e4600480360360208110156108fe57600080fd5b50356001600160a01b03166112ec565b34801561091a57600080fd5b506103c46004803603602081101561093157600080fd5b503561133c565b6003602081905260009182526040909120600181015460028201549282015460088301546009840154600a850154600b860154600c870154600d880154600e909801549698979596949593949293919290919060ff168a565b61099961109e565b6109d8576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611348565b50565b6109ec61109e565b610a2b576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6000610a3561108f565b90506001600160a01b038216610a82576040516001600160a01b03821690303180156108fc02916000818181858888f19350505050158015610a7b573d6000803e3d6000fd5b50506109e1565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506040513d6020811015610b7857600080fd5b5050505050565b610b8833610c55565b610b9157600080fd5b6000838152600360205260409020610baa908383611390565b6000838152600360205260409020600e015460ff1615610c2f576000838152600360208181526040928390206001810154600c820154600d8301549290940154855191825292810193909352828401526060820152905184917f9fab441e2fe549beba1061ad214523689184176a9b8390ebc7ab9a49de6d4637919081900360800190a25b505050565b6000828152600360205260408120610c4c9083611545565b90505b92915050565b6000610c6860018363ffffffff61163816565b90505b919050565b6000828152600360205260408120610c88908361166d565b9050816001600160a01b03167ff812b9a4af7b9ed219f98e508a9594f49595389ddb44a428bedf34299277d3a28483604051808381526020018281526020019250505060405180910390a2505050565b60045481565b6000818152600360205260408120610c689061171d565b610cfd61109e565b610d3c576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600755565b610d4a33610c55565b610d5357600080fd5b610d5d82826112c2565b610d6682610fdf565b610d6f82610d9e565b610d7b82600080610b7f565b5050565b6002546001600160a01b031681565b6109e18133610c70565b60055481565b610da733610c55565b610db057600080fd5b6000818152600360205260409020610d7b9061174d565b6000828152600360205260408120610c4c908361188e565b610de761109e565b610e26576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611981565b610e3761109e565b610e76576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008281526003602090815260408083206001600160a01b038516845260060182529182902054825181815281830281019092019092526060918015610f10578160200160208202803883390190505b50905060005b60008481526003602090815260408083206001600160a01b0387168452600601909152902054811015610fd85760008481526003602090815260408083206001600160a01b038716845260068101909252822080546005909201929184908110610f7c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610fc557fe5b6020908102919091010152600101610f16565b5092915050565b610fe833610c55565b610ff157600080fd5b6000818152600360205260409020610d7b906119c9565b61101133611348565b565b61101b61109e565b61105a576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060610c688233611182565b60008281526003602090815260408083206001600160a01b038516845260070190915281205460ff16156110f157506000610c4f565b6000838152600360205260409020610c4c9083611c17565b600060045460065442038161111a57fe5b04600101905090565b60008281526003602090815260408083206001600160a01b038516845260070190915290205460ff1692915050565b60075481565b6000610c6882336110bb565b6060610c688233610ec0565b60045460065491020190565b60065481565b60008281526003602090815260408083206001600160a01b03851684526006018252918290208054835181840281018401909452808452606093928301828280156111ec57602002820191906000526020600020905b8154815260200190600101908083116111d8575b5050505050905092915050565b6000811161120657600080fd5b6007541561121857600754341461121d565b600034115b61122657600080fd5b8161123657611233611109565b91505b60055461124283611170565b03421061124e57600080fd5b60008281526003602052604090206112669082611c6d565b604080518281523460208201528151849233927f8d466116dd3f7b5e3a703c5bd5104cdde755801bee5a4e7d640edef8f7e6cf84929081900390910190a35050565b60006004546006544203816112b957fe5b04600201905090565b6112cb33610c55565b6112d457600080fd5b6000828152600360205260409020610d7b9082611d4d565b6112f461109e565b611333576040805162461bcd60e51b81526020600482018190526024820152600080516020612764833981519152604482015290519081900360640190fd5b6109e181611d74565b6000610c688233611123565b61135960018263ffffffff611e1416565b6040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90600090a250565b60008084600b015485600a015414156113d6576113b18586600a0154611545565b91506113bd8583611e5c565b6008860155600e8501805460ff191660011790556114b8565b600084116113e85784600a01546113ea565b835b9350600083116113fe5784600b0154611400565b825b92508360005b8482116114b157866002015482141561142457600190910190611406565b61142e8783611545565b935061143a8785611e5c565b925061144c818463ffffffff611ee216565b905085821415801561146e575060008481526020889052604090206005015415155b1561148b5760008481526020889052604090206005015491909101905b86600b015482106114a657600e8701805460ff191660011790555b600190910190611406565b6008870155505b600e85015460ff1615610b78576008850154600386015403801561153d5760006114e982600a63ffffffff611ef416565b90506114fb828263ffffffff611f1616565b60098801556002546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561153a573d6000803e3d6000fd5b50505b505050505050565b600080805260208390526040812060050154818184101561156b57600092505050610c4f565b600080805260208681526040808320600184528252808320548084529188905290912083860391905b600080805260208290526040902054600582015460010181156115ca57600082815260208b9052604090206004015495506115cf565b600095505b858510156115f257600082815260208b9052604090209193509091508290611631565b80860185101561160b5783975050505050505050610c4f565b600160009081526020938452604080822054808352948c90529020868201909503949293505b5050611594565b60006001600160a01b03821661164d57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b600e82015460009060ff1661168157600080fd5b6001600160a01b038216600090815260078401602052604090205460ff16156116a957600080fd5b6001600160a01b03821660009081526007840160205260409020805460ff191660011790556116d88383611c17565b9050600081116116e757600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610fd8573d6000803e3d6000fd5b60008080526020828152604080832060018452808352818420548452939091529020600401546005909101540190565b600c8101546001820154600d83015460009282039190038082141561177757600192505050610c6b565b6000818311156117f5576000600161178e8761171d565b0390508086600b015414156117aa576001945050505050610c6b565b856002015486600a0154106117c6576001945050505050610c6b565b6117d78687600b0154600101611545565b91508560010154820392506117ef8685858585611f2b565b50611883565b600c850154600090815260208690526040902060050154600a860154036118225760019350505050610c6b565b846002015485600b01541161183d5760019350505050610c6b565b61186c85600187600001600089600c015481526020019081526020016000206005015488600a01540303611545565b905080856001015403925061188385848484612011565b506001949350505050565b60008061189a8461171d565b9050806118ab576000915050610c4f565b6000838152602085905260409020600401546118cb576000915050610c4f565b60006118d8856000611545565b905060006118e98660018503611545565b9050808511806118f857508185105b156119095760009350505050610c4f565b8185141561191d5760009350505050610c4f565b80851415611932575050600019019050610c4f565b600060001984015b818111156119765760028282016001010460006119578a83611545565b90508881116119685781935061196f565b6001820392505b505061193a565b509695505050505050565b61199260018263ffffffff61211916565b6040516001600160a01b038216907f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33990600090a250565b6000808260010154116119db57600080fd5b600182015460009081526020839052604090206005015415611a2057506002810154600a8201819055600b820155600180820154600c8301819055600d830155610c6b565b60006001611a2d8461171d565b0390506013811015611b145760028301541580611a4d5750808360020154145b15611a7957600283015415611a655760018103611a68565b60015b600a8401819055600b840155611b0f565b6000611a8c846001866002015403611545565b90506000611aa1858660020154600101611545565b600186015490915082810390820380821415611acf5760028701546000198101600a890155600101600b8801555b80821115611aec576002870154600101600a8801819055600b8801555b80821015611b0a57600287015460001901600a8801819055600b8801555b505050505b611bbb565b6000611b496064611b3d600a611b3186600163ffffffff611ee216565b9063ffffffff61216516565b9063ffffffff611ef416565b90506000611b5e82600263ffffffff611ef416565b90508085600201541015611b7f576000600a860155600b8501829055611bb8565b82818660020154011115611ba157600b8501839055818303600a860155611bb8565b6002850154819003600a86018190558201600b8601555b50505b611bc98384600a0154611545565b600c840155600b830154611bde908490611545565b600d840155600c830154611bf390849061188e565b600a840155600d830154611c0890849061188e565b600b8401555060019050919050565b6000611c23838361218c565b9050600081118015611c39575060008360090154115b15610c4f57610c4c611c608460080154611b3d84876009015461216590919063ffffffff16565b829063ffffffff611ee216565b60008181526005830160209081526040808320338452909152902054611ce857611c9782826122a6565b600081815260048301602090815260408083208054600181810183559185528385200180546001600160a01b0319163390811790915584526006860183529083208054918201815583529120018190555b6003820154611cfd903463ffffffff611ee216565b600383015560008181526005830160209081526040808320338452909152902054611d2e903463ffffffff611ee216565b6000918252600590920160209081526040808320338452909152902055565b611d5782826122a6565b60018201819055611d68828261188e565b82600201819055505050565b6001600160a01b038116611db95760405162461bcd60e51b815260040180806020018281038252602681526020018061273e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116611e2757600080fd5b611e318282611638565b611e3a57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6000805b6000838152600485016020526040902054811015610fd857600083815260058501602090815260408083206004880190925282208054611ed893919085908110611ea657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611ee216565b9150600101611e60565b600082820183811015610c4c57600080fd5b6000808211611f0257600080fd5b6000828481611f0d57fe5b04949350505050565b600082821115611f2557600080fd5b50900390565b60005a600d870154600b880154600c890154600a8a01549394506000935b888a1115611feb578793508a60000160008981526020019081526020016000206005015483600101019250611f818b83600101611545565b9150611f8d8b8361188e565b905086831415611f9c57611feb565b8a600201548110611fac57611feb565b611fb98b84600101611545565b60018c01548381039b5081039950975084611fd9575a8603620186a00194505b845a1015611fe657611feb565b611f49565b600d8b0193909355600b8a0191909155600c890155600a90970196909655505050505050565b60005a600d860154600b870154600c880154600a8901549394506000935b888811156120f457600087815260208b905260408082206005908101548784529190922090910154600019940384019388935091030161206f8a84611545565b600083815260208c90526040902060050154909450810361208f576120f4565b8960020154831161209f576120f4565b600082815260208b905260409020600501546120c2908b90830360001901611545565b60018b01548381039a50810398509650846120e2575a8603620186a00194505b845a10156120ef576120f4565b61202f565b600d8a0193909355600b890191909155600c880155600a909601959095555050505050565b6001600160a01b03811661212c57600080fd5b6121368282611638565b1561214057600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60008261217457506000610c4f565b8282028284828161218157fe5b0414610c4c57600080fd5b6000805b6001600160a01b0383166000908152600685016020526040902054811015610fd857600c8401546001600160a01b038416600090815260068601602052604090208054839081106121dd57fe5b90600052602060002001541015801561222a5750600d8401546001600160a01b0384166000908152600686016020526040902080548390811061221c57fe5b906000526020600020015411155b1561229e576001600160a01b038316600090815260068501602052604081208054600587019291908490811061225c57fe5b906000526020600020015481526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054820191505b600101612190565b806122c857600081815260208390526040902060050180546001019055610d7b565b610d7b8260006001845b600083815260208581526040808320851515845291829052909120548061235257831515600081815260208481526040808320879055868352908990529020600180820188905560028201805460ff191690931790925560038101829055600481019190915561234287856123a4565b61234c87856123de565b5061153d565b8281141561238b5760008181526020879052604090206005018054600101905561237c868461247f565b61238686846123a4565b61153d565b8083101561239b878383876122d2565b50505050505050565b6000818152602083905260409020600101545b8015610c2f576123c7838261247f565b6000908152602083905260409020600101546123b7565b6123e882826124d2565b60008181526020839052604090206001810154801561247957600061240d8583612536565b600284015490915060ff1660008115612429575060001961242d565b5060015b806002028314156124695780600019026124478888612536565b141561245857612458878784612579565b61246487858415612579565b61239b565b821561239b5761239b87856123de565b50505050565b600090815260208281526040808320600581015460018086528285528386205486528685528386206004908101548780528487528588205488529790955292909420830154909401909201909101910155565b60008181526020838152604080832083805280835281842054845285835281842060039081015460018652828552838620548652938790529190932001548082111561252657600182016003840155610b78565b6001810160038401555050505050565b6000818152602083815260408083206001845280835281842054845285835281842060039081015485805291845282852054855292869052922001540392915050565b6000811590506000846000016000858152602001908152602001600020905060008160020160009054906101000a900460ff1690506000826001015490506000836000016000861515151581526020019081526020016000205490506000886000016000838152602001908152602001600020905060008160000160008915151515815260200190815260200160002054905060008a6000016000868152602001908152602001600020905060008b60000160008481526020019081526020016000209050848260000160008915151515815260200190815260200160002081905550868460020160006101000a81548160ff0219169083151502179055508584600101819055508a8460000160008c15151515815260200190815260200160002081905550848860010181905550898860020160006101000a81548160ff021916908315150217905550828860000160008b151515158152602001908152602001600020819055508a8160010181905550888160020160006101000a81548160ff0219169083151502179055506127118c8c6124d2565b61271b8c866124d2565b6127258c8c61247f565b61272f8c8661247f565b50505050505050505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a7231582061ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc3164736f6c634300050c0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff000000000000000000000000000000000000000000000000002386f26fc10000
-----Decoded View---------------
Arg [0] : _dividendManagerAddress (address): 0x351C25F77444890aA546281D4b9077D0099aE0Ff
Arg [1] : _betValue (uint256): 10000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000351c25f77444890aa546281d4b9077d0099ae0ff
Arg [1] : 000000000000000000000000000000000000000000000000002386f26fc10000
Deployed Bytecode Sourcemap
11534:23380:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13357:8;;;12509:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12509:35:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12509:35:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11151:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11151:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11151:95:0;-1:-1:-1;;;;;11151:95:0;;:::i;:::-;;9158:354;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9158:354:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9158:354:0;-1:-1:-1;;;;;9158:354:0;;:::i;14401:325::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14401:325:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14401:325:0;;;;;;;;;;;;:::i;28503:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28503:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28503:123:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10856:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10856:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10856:107:0;-1:-1:-1;;;;;10856:107:0;;:::i;:::-;;;;;;;;;;;;;;;;;;15345:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15345:171:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15345:171:0;;;;;;-1:-1:-1;;;;;15345:171:0;;:::i;12553:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12553:20:0;;;:::i;28634:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28634:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28634:100:0;;:::i;15963:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15963:96:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15963:96:0;;:::i;13795:206::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13795:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13795:206:0;;;;;;;:::i;11620:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11620:45:0;;;:::i;:::-;;;;-1:-1:-1;;;;;11620:45:0;;;;;;;;;;;;;;15524:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15524:85:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15524:85:0;;:::i;12580:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12580:25:0;;;:::i;14290:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14290:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14290:101:0;;:::i;28372:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28372:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28372:123:0;;;;;;;:::i;10971:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10971:89:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10971:89:0;-1:-1:-1;;;;;10971:89:0;;:::i;7967:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7967:140:0;;;:::i;16855:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16855:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16855:350:0;;;;;;-1:-1:-1;;;;;16855:350:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;16855:350:0;;;;;;;;;;;;;;;;;14177:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14177:105:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14177:105:0;;:::i;11068:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11068:75:0;;;:::i;15738:213::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15738:213:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15738:213:0;-1:-1:-1;;;;;15738:213:0;;:::i;7156:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7156:79:0;;;:::i;7522:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7522:92:0;;;:::i;16703:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16703:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16703:144:0;;:::i;14998:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14998:215:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14998:215:0;;;;;;-1:-1:-1;;;;;14998:215:0;;:::i;16067:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16067:114:0;;;:::i;14734:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14734:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14734:129:0;;;;;;-1:-1:-1;;;;;14734:129:0;;:::i;12641:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12641:20:0;;;:::i;15221:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15221:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15221:116:0;;:::i;17211:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17211:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17211:146:0;;:::i;15617:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15617:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15617:113:0;;:::i;12612:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12612:22:0;;;:::i;16310:387::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16310:387:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16310:387:0;;;;;;-1:-1:-1;;;;;16310:387:0;;:::i;13383:404::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13383:404:0;;;;;;;:::i;16189:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16189:113:0;;;:::i;14009:160::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14009:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14009:160:0;;;;;;;:::i;8262:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8262:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8262:109:0;-1:-1:-1;;;;;8262:109:0;;:::i;14869:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14869:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14869:119:0;;:::i;12509:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11151:95::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;11217:21;11230:7;11217:12;:21::i;:::-;11151:95;:::o;9158:354::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;9224:21;9264:7;:5;:7::i;:::-;9224:49;-1:-1:-1;;;;;;9290:28:0;;9286:119;;9335:37;;-1:-1:-1;;;;;9335:14:0;;;9358:4;9350:21;9335:37;;;;;;;;;9350:21;9335:14;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9335:37:0;9387:7;;;9286:119;9433:30;;;-1:-1:-1;;;9433:30:0;;9457:4;9433:30;;;;;;9415:15;;-1:-1:-1;;;;;9433:15:0;;;;;:30;;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;9433:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9433:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9433:30:0;9474;;;-1:-1:-1;;;9474:30:0;;-1:-1:-1;;;;;9474:30:0;;;;;;;;;;;;;;;9433;;-1:-1:-1;9474:14:0;;;;;;:30;;;;;9433;;9474;;;;;;;;-1:-1:-1;9474:14:0;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;9474:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9474:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;9158:354:0;:::o;14401:325::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14510:12;;;;:5;:12;;;;;14492:46;;14524:6;14532:5;14492:17;:46::i;:::-;14553:12;;;;:5;:12;;;;;:20;;;;;14549:170;;;14612:12;;;;:5;:12;;;;;;;;;:16;;;;14630:26;;;;14658:27;;;;14687:19;;;;;14595:112;;;;;;;;;;;;;;;;;;;;;;14605:5;;14595:112;;;;;;;;;;14549:170;14401:325;;;:::o;28503:123::-;28565:4;28600:12;;;:5;:12;;;;;28589:29;;28614:3;28589:10;:29::i;:::-;28582:36;;28503:123;;;;;:::o;10856:107::-;10911:4;10935:20;:7;10947;10935:20;:11;:20;:::i;:::-;10928:27;;10856:107;;;;:::o;15345:171::-;15416:11;15440:12;;;:5;:12;;;;;15430:30;;15454:5;15430:9;:30::i;:::-;15416:44;;15487:5;-1:-1:-1;;;;;15476:32:0;;15494:5;15501:6;15476:32;;;;;;;;;;;;;;;;;;;;;;;;15345:171;;;:::o;12553:20::-;;;;:::o;28634:100::-;28682:4;28713:12;;;:5;:12;;;;;28706:20;;:6;:20::i;15963:96::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;16031:8;:20;15963:96::o;13795:206::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;13862:25;13875:5;13882:4;13862:12;:25::i;:::-;13898:23;13915:5;13898:16;:23::i;:::-;13932:21;13947:5;13932:14;:21::i;:::-;13964:29;13981:5;13988:1;13991;13964:16;:29::i;:::-;13795:206;;:::o;11620:45::-;;;-1:-1:-1;;;;;11620:45:0;;:::o;15524:85::-;15574:27;15583:5;15590:10;15574:8;:27::i;12580:25::-;;;;:::o;14290:101::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14370:12;;;;:5;:12;;;;;14354:29;;:15;:29::i;28372:123::-;28434:4;28466:12;;;:5;:12;;;;;28458:29;;28480:6;28458:7;:29::i;10971:89::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;11034:18;11044:7;11034:9;:18::i;7967:140::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;8066:1;8050:6;;8029:40;;-1:-1:-1;;;;;8050:6:0;;;;8029:40;;8066:1;;8029:40;8097:1;8080:19;;-1:-1:-1;;;;;;8080:19:0;;;7967:140::o;16855:350::-;16985:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;16985:28:0;;;;:21;;:28;;;;;;:35;16974:47;;;;;;;;;;;;;;;;16930:21;;16974:47;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;16974:47:0;-1:-1:-1;16964:57:0;-1:-1:-1;17037:6:0;17032:166;17053:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;17053:28:0;;;;:21;;:28;;;;;:35;17049:39;;17032:166;;;17123:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;17146:28:0;;;;:21;;;:28;;;;;:31;;17123:21;;;;;:12;17175:1;;17146:31;;;;;;;;;;;;;;17123:56;;;;;;;;;;;:63;17180:5;-1:-1:-1;;;;;17123:63:0;-1:-1:-1;;;;;17123:63:0;;;;;;;;;;;;;17110:7;17118:1;17110:10;;;;;;;;;;;;;;;;;:76;17090:3;;17032:166;;;;16855:350;;;;:::o;14177:105::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14261:12;;;;:5;:12;;;;;14243:31;;:17;:31::i;11068:75::-;11111:24;11124:10;11111:12;:24::i;:::-;11068:75::o;15738:213::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15846:37:0;;15838:46;;;;;;15895:22;:48;;-1:-1:-1;;;;;;15895:48:0;-1:-1:-1;;;;;15895:48:0;;;;;;;;;;15738:213::o;7156:79::-;7194:7;7221:6;-1:-1:-1;;;;;7221:6:0;7156:79;:::o;7522:92::-;7562:4;7600:6;-1:-1:-1;;;;;7600:6:0;7586:10;:20;;7522:92::o;16703:144::-;16764:20;16804:35;16821:5;16828:10;16804:16;:35::i;14998:215::-;15066:4;15087:12;;;:5;:12;;;;;;;;-1:-1:-1;;;;;15087:28:0;;;;:21;;:28;;;;;;;;15083:69;;;-1:-1:-1;15139:1:0;15132:8;;15083:69;15185:12;;;;:5;:12;;;;;15169:36;;15199:5;15169:15;:36::i;16067:114::-;16116:4;16161:8;;16147:10;;16141:3;:16;16140:29;;;;;;16172:1;16140:33;16133:40;;16067:114;:::o;14734:129::-;14804:4;14827:12;;;:5;:12;;;;;;;;-1:-1:-1;;;;;14827:28:0;;;;:21;;:28;;;;;;;;14734:129;;;;:::o;12641:20::-;;;;:::o;15221:116::-;15276:4;15300:29;15311:5;15318:10;15300;:29::i;17211:146::-;17273:20;17313:36;17331:5;17338:10;17313:17;:36::i;15617:113::-;15707:8;;15693:10;;15707:14;;15693:29;;15617:113::o;12612:22::-;;;;:::o;16310:387::-;16661:12;;;;:5;:12;;;;;;;;-1:-1:-1;;;;;16661:28:0;;;;:21;;:28;;;;;;16654:35;;;;;;;;;;;;;;;;;16384:20;;16654:35;;;16661:28;16654:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16310:387;;;;:::o;13383:404::-;13464:1;13457:4;:8;13449:17;;;;;;13485:8;;:13;:53;;13530:8;;13517:9;:21;13485:53;;;13513:1;13501:9;:13;13485:53;13477:62;;;;;;13554:10;13550:69;;13589:18;:16;:18::i;:::-;13581:26;;13550:69;13664:13;;13643:18;13655:5;13643:11;:18::i;:::-;:34;13637:3;:40;13629:49;;;;;;13700:12;;;;:5;:12;;;;;13691:28;;13714:4;13691:8;:28::i;:::-;13737:42;;;;;;13769:9;13737:42;;;;;;13756:5;;13744:10;;13737:42;;;;;;;;;;;13383:404;;:::o;16189:113::-;16237:4;16282:8;;16268:10;;16262:3;:16;16261:29;;;;;;16293:1;16261:33;16254:40;;16189:113;:::o;14009:160::-;10808:19;10816:10;10808:7;:19::i;:::-;10800:28;;;;;;14142:12;;;;:5;:12;;;;;14128:33;;14156:4;14128:13;:33::i;8262:109::-;7368:9;:7;:9::i;:::-;7360:54;;;;;-1:-1:-1;;;7360:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7360:54:0;;;;;;;;;;;;;;;8335:28;8354:8;8335:18;:28::i;14869:119::-;14926:4;14949:31;14962:5;14969:10;14949:12;:31::i;11381:127::-;11440:23;:7;11455;11440:23;:14;:23;:::i;:::-;11479:21;;-1:-1:-1;;;;;11479:21:0;;;;;;;;11381:127;:::o;25045:1669::-;25136:9;25156:15;25206:4;:17;;;25186:4;:16;;;:37;25182:1187;;;25247:34;25258:4;25264;:16;;;25247:10;:34::i;:::-;25240:41;;25317:25;25331:4;25337;25317:13;:25::i;:::-;25296:18;;;:46;25357:12;;;:19;;-1:-1:-1;;25357:19:0;25372:4;25357:19;;;25182:1187;;;25427:1;25418:6;:10;:38;;25440:4;:16;;;25418:38;;;25431:6;25418:38;25409:47;;25487:1;25479:5;:9;:37;;25499:4;:17;;;25479:37;;;25491:5;25479:37;25471:45;-1:-1:-1;25540:6:0;25531;25594:644;25605:5;25600:1;:10;25594:644;;25640:4;:11;;;25635:1;:16;25631:99;;;25676:3;;;;;25702:8;;25631:99;25755:19;25766:4;25772:1;25755:10;:19::i;:::-;25748:26;;25806:25;25820:4;25826;25806:13;:25::i;:::-;25793:38;-1:-1:-1;25866:29:0;:13;25793:38;25866:29;:17;:29;:::i;:::-;25850:45;;26027:6;26022:1;:11;;:40;;;;-1:-1:-1;26061:1:0;26037:15;;;;;;;;;;:21;;;:25;;26022:40;26018:115;;;26092:9;:15;;;;;;;;;;:21;;;26087:26;;;;;26018:115;26162:4;:17;;;26157:1;:22;26153:47;;26181:12;;;:19;;-1:-1:-1;;26181:19:0;26196:4;26181:19;;;26153:47;26219:3;;;;;25594:644;;;26323:18;;;:34;-1:-1:-1;25182:1187:0;26385:12;;;;;;26381:324;;;26442:18;;;;26428:11;;;;:32;26479:10;;26475:219;;26510:17;26530:14;:6;26541:2;26530:14;:10;:14;:::i;:::-;26510:34;-1:-1:-1;26590:24:0;:6;26510:34;26590:24;:10;:24;:::i;:::-;26573:14;;;:41;26633:22;;:45;;-1:-1:-1;;;;;26633:22:0;;;;:45;;;;;26665:12;;26633:22;:45;:22;:45;26665:12;26633:22;:45;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26633:45:0;26475:219;;26381:324;25045:1669;;;;;:::o;30116:1060::-;30188:10;30222:12;;;;;;;;;;:18;;;30188:10;30316;;;30312:51;;;30350:1;30343:8;;;;;;30312:51;30373:12;30416;;;;;;;;;;;30438:4;30416:27;;;;;;;;30476:14;;;;;;;;;;30386:10;;;;30416:27;30501:666;30527:9;30537:24;;;;;;;;;;;30589:14;;;;30537:24;30589:16;30624:7;;30620:148;;30665:9;:15;;;;;;;;;;:21;;;;-1:-1:-1;30620:148:0;;;30751:1;30740:12;;30620:148;30794:10;30786:7;:18;30782:374;;;30861:9;:15;;;;;;;;;;30829:4;;-1:-1:-1;30861:15:0;;-1:-1:-1;30829:4:0;;30782:374;;;30934:7;30923:10;:18;30915:7;:26;30911:245;;;30968:3;30961:10;;;;;;;;;;;30911:245;31047:4;31029:17;:23;;;;;;;;;;;;31080:14;;;;;;;;;31122:18;;;31113:27;;;;31029:23;;-1:-1:-1;30911:245:0;30501:666;;;;10315:165;10387:4;-1:-1:-1;;;;;10412:21:0;;10404:30;;;;;;-1:-1:-1;;;;;;10452:20:0;:11;:20;;;;;;;;;;;;;;;10315:165::o;26976:321::-;27086:12;;;;27054:11;;27086:12;;27078:21;;;;;;-1:-1:-1;;;;;27119:19:0;;;;;;:13;;;:19;;;;;;;;27118:20;27110:29;;;;;;-1:-1:-1;;;;;27150:19:0;;;;;;:13;;;:19;;;;;:26;;-1:-1:-1;;27150:26:0;27172:4;27150:26;;;27196:27;27150:4;27164;27196:15;:27::i;:::-;27187:36;;27253:1;27244:6;:10;27236:19;;;;;;27266:21;;-1:-1:-1;;;;;27266:13:0;;;:21;;;;;27280:6;;27266:21;;;;27280:6;27266:13;:21;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;31186:212:0;31244:4;31278:12;;;;;;;;;;;31344:4;31330:19;;;;;;;;;31320:30;;;;;;;;31379:11;;;31368:10;;;;;:22;;31186:212::o;23564:1290::-;23672:18;;;;23661:8;;;;23720:19;;;;23626:4;;23661:29;;;23720:30;;23765:25;;;23761:42;;;23799:4;23792:11;;;;;;23761:42;23816:9;23857:11;23844:10;:24;23840:983;;;23885:12;23915:1;23900:12;23907:4;23900:6;:12::i;:::-;:16;23885:31;;23956:7;23935:4;:17;;;:28;23931:45;;;23972:4;23965:11;;;;;;;;23931:45;24015:4;:11;;;23995:4;:16;;;:31;23991:48;;24035:4;24028:11;;;;;;;;23991:48;24169:39;24180:4;24186;:17;;;24206:1;24186:21;24169:10;:39::i;:::-;24162:46;;24244:4;:8;;;24237:4;:15;24223:29;;24269:57;24281:4;24287:10;24299:11;24312:4;24318:7;24269:11;:57::i;:::-;23840:983;;;;24394:18;;;;24384:9;:29;;;;;;;;;;:35;;;24365:16;;;;:54;24361:76;;24433:4;24426:11;;;;;;;24361:76;24477:4;:11;;;24456:4;:17;;;:32;24452:49;;24497:4;24490:11;;;;;;;24452:49;24628:76;24639:4;24702:1;24664:4;:9;;:29;24674:4;:18;;;24664:29;;;;;;;;;;;:35;;;24645:4;:16;;;:54;:58;24628:10;:76::i;:::-;24621:83;;24743:4;24732;:8;;;:15;24719:28;;24764:47;24775:4;24781:10;24793:11;24806:4;24764:10;:47::i;:::-;-1:-1:-1;24842:4:0;;23564:1290;-1:-1:-1;;;;23564:1290:0:o;29223:883::-;29295:4;29312:6;29321:12;29328:4;29321:6;:12::i;:::-;29312:21;-1:-1:-1;29348:6:0;29344:20;;29363:1;29356:8;;;;;29344:20;29385:9;:17;;;;;;;;;;:23;;;29381:42;;29422:1;29415:8;;;;;29381:42;29442:11;29456:19;29467:4;29473:1;29456:10;:19::i;:::-;29442:33;;29486:10;29499:21;29510:4;29518:1;29516;:3;29499:10;:21::i;:::-;29486:34;;29588:5;29579:6;:14;:33;;;;29606:6;29597;:15;29579:33;29575:47;;;29621:1;29614:8;;;;;;;29575:47;29653:6;29643;:16;29639:30;;;29668:1;29661:8;;;;;;;29639:30;29694:5;29684:6;:15;29680:33;;;-1:-1:-1;;;;29708:5:0;;-1:-1:-1;29701:12:0;;29680:33;29778:8;-1:-1:-1;;29812:3:0;;29826:252;29839:3;29833;:9;29826:252;;;29887:1;29871:9;;;29883:1;29871:13;29870:18;29859:8;29915:21;29926:4;29870:18;29915:10;:21::i;:::-;29903:33;;29963:6;29955:4;:14;29951:116;;29996:3;29990:9;;29951:116;;;30050:1;30046:3;:5;30040:11;;29951:116;29826:252;;;;;-1:-1:-1;30095:3:0;29223:883;-1:-1:-1;;;;;;29223:883:0:o;11254:119::-;11310:20;:7;11322;11310:20;:11;:20;:::i;:::-;11346:19;;-1:-1:-1;;;;;11346:19:0;;;;;;;;11254:119;:::o;17991:2986::-;18055:4;18091:1;18080:4;:8;;;:12;18072:21;;;;;;18139:8;;;;18157:1;18129:19;;;;;;;;;;:25;;;:29;18125:253;;-1:-1:-1;18194:11:0;;;;18175:16;;;:30;;;18220:17;;;:31;18287:8;;;;;18266:18;;;:29;;;18310:19;;;:30;18355:11;;18125:253;18390:12;18420:1;18405:12;18412:4;18405:6;:12::i;:::-;:16;18390:31;;18448:2;18438:7;:12;18434:2052;;;18654:11;;;;:16;;:42;;;18689:7;18674:4;:11;;;:22;18654:42;18650:1134;;;18736:11;;;;:16;:34;;18769:1;18759:7;:11;18736:34;;;18755:1;18736:34;18717:16;;;:53;;;18789:17;;;:36;18650:1134;;;18866:12;18882:33;18893:4;18913:1;18899:4;:11;;;:15;18882:10;:33::i;:::-;18866:49;;18934:13;18950:33;18961:4;18967;:11;;;18981:1;18967:15;18950:10;:33::i;:::-;19020:8;;;;18934:49;;-1:-1:-1;19020:18:0;;;;19076:19;;19120:25;;;19116:166;;;19189:11;;;;-1:-1:-1;;19189:15:0;;19170:16;;;:34;19203:1;19247:15;19227:17;;;:35;19116:166;19319:11;19306:10;:24;19302:165;;;19374:11;;;;19388:1;19374:15;19355:16;;;:34;;;19412:17;;;:35;19302:165;19504:11;19491:10;:24;19487:282;;;19676:11;;;;-1:-1:-1;;19676:15:0;19657:16;;;:34;;;19714:17;;;:35;19487:282;18650:1134;;;;;18434:2052;;;19816:17;19836:31;19863:3;19836:22;19855:2;19836:14;:7;19848:1;19836:14;:11;:14;:::i;:::-;:18;:22;:18;:22;:::i;:::-;:26;:31;:26;:31;:::i;:::-;19816:51;-1:-1:-1;19882:16:0;19901:19;19816:51;19918:1;19901:19;:16;:19;:::i;:::-;19882:38;;19955:11;19941:4;:11;;;:25;19937:538;;;20006:1;19987:16;;;:20;20026:17;;;:51;;;19937:538;;;20150:7;20136:11;20122:4;:11;;;:25;:35;20118:342;;;20182:17;;;:27;;;20251:22;;;20232:16;;;:41;20118:342;;;20341:11;;;;:25;;;20322:16;;;:44;;;20409:31;;20389:17;;;:51;20118:342;18434:2052;;;20519:34;20530:4;20536;:16;;;20519:10;:34::i;:::-;20498:18;;;:55;20603:17;;;;20586:35;;20498:4;;20586:10;:35::i;:::-;20564:19;;;:57;20803:18;;;;20789:33;;20564:4;;20789:7;:33::i;:::-;20770:16;;;:52;20867:19;;;;20853:34;;20770:4;;20853:7;:34::i;:::-;20833:17;;;:54;-1:-1:-1;20965:4:0;;-1:-1:-1;17991:2986:0;;;:::o;27305:480::-;27386:11;27418:26;27433:4;27439;27418:14;:26::i;:::-;27409:35;;27468:1;27459:6;:10;:32;;;;;27490:1;27473:4;:14;;;:18;27459:32;27455:323;;;27704:62;27715:50;27746:4;:18;;;27715:26;27734:6;27715:4;:14;;;:18;;:26;;;;:::i;:50::-;27704:6;;:62;:10;:62;:::i;17395:406::-;17467:19;;;;:13;;;:19;;;;;;;;17487:10;17467:31;;;;;;;;17463:187;;17520:19;17528:4;17534;17520:7;:19::i;:::-;17554:16;;;;:10;;;:16;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;17554:33:0;;;;;;;;;-1:-1:-1;;;;;;17554:33:0;17576:10;17554:33;;;;;;17602:25;;:13;;;:25;;;;;27:10:-1;;23:18;;;45:23;;17602:36:0;;;;;;;;17463:187;17676:11;;;;:26;;17692:9;17676:26;:15;:26;:::i;:::-;17662:11;;;:40;17747:19;;;;:13;;;:19;;;;;;;;17767:10;17747:31;;;;;;;;:46;;17783:9;17747:46;:35;:46;:::i;:::-;17713:19;;;;:13;;;;:19;;;;;;;;17733:10;17713:31;;;;;;;:80;17395:406::o;17811:170::-;17884:19;17892:4;17898;17884:7;:19::i;:::-;17914:8;;;:15;;;17954:19;17914:4;17925;17954:7;:19::i;:::-;17940:4;:11;;:33;;;;17811:170;;:::o;8477:229::-;-1:-1:-1;;;;;8551:22:0;;8543:73;;;;-1:-1:-1;;;8543:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8653:6;;;8632:38;;-1:-1:-1;;;;;8632:38:0;;;;8653:6;;;8632:38;;;8681:6;:17;;-1:-1:-1;;;;;;8681:17:0;-1:-1:-1;;;;;8681:17:0;;;;;;;;;;8477:229::o;10032:189::-;-1:-1:-1;;;;;10112:21:0;;10104:30;;;;;;10153:18;10157:4;10163:7;10153:3;:18::i;:::-;10145:27;;;;;;-1:-1:-1;;;;;10185:20:0;10208:5;10185:20;;;;;;;;;;;:28;;-1:-1:-1;;10185:28:0;;;10032:189::o;26722:246::-;26798:11;;26822:139;26843:16;;;;:10;;;:16;;;;;:23;26839:27;;26822:139;;;26908:19;;;;:13;;;:19;;;;;;;;26928:10;;;:16;;;;;:19;;26897:52;;26908:19;26928:16;26945:1;;26928:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26928:19:0;26908:40;;;;;;;;;;;;;26897:6;;:52;:10;:52;:::i;:::-;26888:61;-1:-1:-1;26868:3:0;;26822:139;;2854:150;2912:7;2944:5;;;2968:6;;;;2960:15;;;;;1489:303;1547:7;1646:1;1642;:5;1634:14;;;;;;1659:9;1675:1;1671;:5;;;;;;;1489:303;-1:-1:-1;;;;1489:303:0:o;2351:150::-;2409:7;2442:1;2437;:6;;2429:15;;;;;;-1:-1:-1;2467:5:0;;;2351:150::o;20987:1246::-;21107:10;21120:9;21189:19;;;;21239:17;;;;21288:18;;;;21336:16;;;;21107:22;;-1:-1:-1;21140:12:0;;21363:685;21383:11;21370:10;:24;21363:685;;;21430:4;21413:21;;21483:4;:9;;:15;21493:4;21483:15;;;;;;;;;;;:21;;;21464:12;21479:1;21464:16;:40;21449:55;;21537:35;21548:4;21554:13;21570:1;21554:17;21537:10;:35::i;:::-;21521:51;;21601:28;21609:4;21615:13;21601:7;:28::i;:::-;21587:42;;21666:7;21650:12;:23;21646:34;;;21675:5;;21646:34;21714:4;:11;;;21699;:26;21695:37;;21727:5;;21695:37;21756:34;21767:4;21773:12;21788:1;21773:16;21756:10;:34::i;:::-;21818:8;;;;:24;;;;-1:-1:-1;21871:15:0;;;-1:-1:-1;21749:41:0;-1:-1:-1;21907:12:0;21903:89;;21958:9;21950:5;:17;21970:6;21950:26;21940:36;;21903:89;22022:7;22010:9;:19;22006:30;;;22031:5;;22006:30;21363:685;;;22060:19;;;:36;;;;22107:17;;;:32;;;;22150:18;;;:34;22195:16;;;;:30;;;;-1:-1:-1;;;;;;20987:1246:0:o;22243:1313::-;22348:10;22361:9;22430:19;;;;22480:17;;;;22529:18;;;;22577:16;;;;22348:22;;-1:-1:-1;22381:12:0;;22604:767;22625:10;22611:11;:24;22604:767;;;22715:9;:24;;;;;;;;;;;:30;;;;;22796:25;;;;;;;:31;;;;-1:-1:-1;;22781:46:0;;:50;;;22715:24;;-1:-1:-1;22701:44:0;;:48;22863:30;22715:24;22781:50;22863:10;:30::i;:::-;22928:9;:24;;;;;;;;;;:30;;;22846:47;;-1:-1:-1;22914:44:0;;22910:60;;22965:5;;22910:60;23005:4;:11;;;22989:12;:27;22985:38;;23018:5;;22985:38;23078:9;:24;;;;;;;;;;:30;;;23047:66;;23078:24;;23064:44;;-1:-1:-1;;23064:48:0;23047:10;:66::i;:::-;23141:8;;;;:24;;;;-1:-1:-1;23194:15:0;;;-1:-1:-1;23040:73:0;-1:-1:-1;23230:12:0;23226:89;;23281:9;23273:5;:17;23293:6;23273:26;23263:36;;23226:89;23345:7;23333:9;:19;23329:30;;;23354:5;;23329:30;22604:767;;;23383:19;;;:36;;;;23430:17;;;:32;;;;23473:18;;;:34;23518:16;;;;:30;;;;-1:-1:-1;;;;;22243:1313:0:o;9767:186::-;-1:-1:-1;;;;;9844:21:0;;9836:30;;;;;;9886:18;9890:4;9896:7;9886:3;:18::i;:::-;9885:19;9877:28;;;;;;-1:-1:-1;;;;;9918:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;9918:27:0;9941:4;9918:27;;;9767:186::o;284:433::-;342:7;586:6;582:47;;-1:-1:-1;616:1:0;609:8;;582:47;653:5;;;657:1;653;:5;:1;677:5;;;;;:10;669:19;;;;;27793:428;27873:11;;27917:297;-1:-1:-1;;;;;27938:19:0;;;;;;:13;;;:19;;;;;:26;27934:30;;27917:297;;;28016:18;;;;-1:-1:-1;;;;;27990:19:0;;;;;;:13;;;:19;;;;;:22;;28010:1;;27990:22;;;;;;;;;;;;;;:44;;:110;;;;-1:-1:-1;28081:19:0;;;;-1:-1:-1;;;;;28055:19:0;;;;;;:13;;;:19;;;;;:22;;28075:1;;28055:22;;;;;;;;;;;;;;:45;;27990:110;27986:217;;;-1:-1:-1;;;;;28158:19:0;;28144:37;28158:19;;;:13;;;:19;;;;;:22;;28144:13;;;;:37;28158:19;28178:1;;28158:22;;;;;;;;;;;;;;28144:37;;;;;;;;;;;:43;28182:4;-1:-1:-1;;;;;28144:43:0;-1:-1:-1;;;;;28144:43:0;;;;;;;;;;;;;28134:53;;;;27986:217;27966:3;;27917:297;;28882:207;28955:9;28951:131;;28979:9;:17;;;;;;;;;;:23;;:25;;;;;;28951:131;;;29034:36;29048:4;29054:1;29057:4;29063:6;31408:818;31506:17;31524:18;;;;;;;;;;;31566:19;;;;;;;;;;;;;31600:10;31596:623;;31626:19;;;:13;:19;;;;;;;;;;;:25;;;31685:16;;;;;;;;;31716:12;;;;:20;;;31751:10;;;:15;;-1:-1:-1;;31751:15:0;;;;;;;31781:12;;;:14;;;31810:11;;;:13;;;;31838:26;31685:4;31646:5;31838:13;:26::i;:::-;31879:29;31896:4;31902:5;31879:16;:29::i;:::-;31596:623;;;;31948:5;31939:7;:14;31935:284;;;31969:9;:18;;;;;;;;;;:24;;:26;;;;;;32010:25;31969:4;32029:5;32010:12;:25::i;:::-;32050:26;32064:4;32070:5;32050:13;:26::i;:::-;31935:284;;;32132:16;;;;32164:43;32178:4;32141:7;32132:16;:5;32164:13;:43::i;:::-;31935:284;31408:818;;;;;;:::o;32454:243::-;32527:11;32539:16;;;;;;;;;;:23;;;32573:117;32580:9;;32573:117;;32606:26;32619:4;32625:6;32606:12;:26::i;:::-;32654:9;:17;;;;;;;;;;:24;;;32573:117;;32707:722;32785:28;32799:4;32805:7;32785:13;:28::i;:::-;32824:14;32839:18;;;;;;;;;;32881:8;;;;32904:10;;32900:522;;32931:8;32940:29;32955:4;32961:7;32940:14;:29::i;:::-;32994:6;;;;32931:38;;-1:-1:-1;32994:6:0;;32984:9;33038:77;;;;-1:-1:-1;;;33038:77:0;;;-1:-1:-1;33114:1:0;33038:77;33142:4;33147:1;33142:6;33134:4;:14;33130:280;;;33212:4;-1:-1:-1;;33207:9:0;33173:29;33188:4;33194:7;33173:14;:29::i;:::-;:44;33169:97;;;33240:26;33247:4;33253:7;33261:4;33240:6;:26::i;:::-;33285:27;33292:4;33298:7;33307:4;33306:5;33285:6;:27::i;:::-;33130:280;;;33351:9;;33347:63;;33379:31;33396:4;33402:7;33379:16;:31::i;32900:522::-;32707:722;;;;:::o;32236:208::-;32308:14;32323:16;;;;;;;;;;;32429:7;;;;32416:4;32405:16;;;;;;;;;;32395:27;;;;;;;;:33;;;;;32370:17;;;;;;;;;;32360:28;;;;;;;;;;:34;;;32358:70;;;:78;;;;;;32350:7;;:86;32236:208::o;33439:366::-;33512:14;33527:16;;;;;;;;;;;33581:17;;;;;;;;;;33571:28;;;;;;;;:35;;;;;33581:17;33645:16;;;;;;;;;33635:27;;;;;;;;;;:34;;33684:24;;;33680:117;;;33744:1;33732:13;;33723:8;;;:22;33680:117;;;33796:1;33783:14;;33774:8;;;:23;33439:366;;;;;:::o;33815:233::-;33892:6;33926:16;;;;;;;;;;;34026:4;34015:16;;;;;;;;;34005:27;;;;;;;;:34;;;;;33974:17;;;;;;;;;;33964:28;;;;;;;;:35;;33960:80;33815:233;;;;:::o;34058:851::-;34133:14;34149:3;34148:4;34133:19;;34163:14;34178:4;:9;;:16;34188:5;34178:16;;;;;;;;;;;34163:31;;34205:9;34215:1;:6;;;;;;;;;;;;34205:16;;34232:11;34244:1;:8;;;34232:20;;34263:14;34278:1;:10;;:21;34289:9;34278:21;;;;;;;;;;;;;;;;34263:36;;34310:18;34329:4;:9;;:20;34339:9;34329:20;;;;;;;;;;;34310:39;;34360:11;34372:5;:14;;:19;34387:3;34372:19;;;;;;;;;;;;;;;;34360:31;;34402:14;34417:4;:9;;:17;34427:6;34417:17;;;;;;;;;;;34402:32;;34445:14;34460:4;:9;;:17;34470:6;34460:17;;;;;;;;;;;34445:32;;34505:9;34488:1;:10;;:16;34499:4;34488:16;;;;;;;;;;;;;;;:26;;;;34536:4;34525:5;:10;;;:15;;;;;;;;;;;;;;;;;;34564:6;34551:5;:12;;:19;;;;34601:5;34581;:14;;:19;34596:3;34581:19;;;;;;;;;;;;;;;:25;;;;34626:9;34617:1;:8;;:18;;;;34653:3;34646:1;:6;;;:10;;;;;;;;;;;;;;;;;;34689:6;34667:1;:10;;:21;34678:9;34667:21;;;;;;;;;;;;;;;:28;;;;34715:5;34706:1;:8;;:14;;;;34738:9;34731:1;:6;;;:16;;;;;;;;;;;;;;;;;;34758:26;34772:4;34778:5;34758:13;:26::i;:::-;34795:30;34809:4;34815:9;34795:13;:30::i;:::-;34836:25;34849:4;34855:5;34836:12;:25::i;:::-;34872:29;34885:4;34891:9;34872:12;:29::i;:::-;34058:851;;;;;;;;;;;;:::o
Swarm Source
bzzr://61ed0d9d01233320fabbd0efe0cf8009bfab38d485d6148f33c25a12271ffc31
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.