ETH Price: $3,370.66 (-0.13%)

Token

shuffle.monster token V2 (SHUF)
 

Overview

Max Total Supply

992,089.759517068352451963 SHUF

Holders

2,243 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5.8743107205 SHUF

Value
$0.00
0x4d324289783aa109e5a39d98441117628460b600
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ShuffleToken

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-05
*/

/**
 *Submitted for verification at Etherscan.io on 2019-07-21
*/

// File: contracts/commons/Ownable.sol

pragma solidity ^0.5.10;


contract Ownable {
    address public owner;

    event TransferOwnership(address _from, address _to);

    constructor() public {
        owner = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    function setOwner(address _owner) external onlyOwner {
        emit TransferOwnership(owner, _owner);
        owner = _owner;
    }
}

// File: contracts/commons/AddressMinHeap.sol

pragma solidity ^0.5.10;

/*
    @author Agustin Aguilar <[email protected]>
*/


library AddressMinHeap {
    using AddressMinHeap for AddressMinHeap.Heap;

    struct Heap {
        uint256[] entries;
        mapping(address => uint256) index;
    }

    function initialize(Heap storage _heap) internal {
        require(_heap.entries.length == 0, "already initialized");
        _heap.entries.push(0);
    }

    function encode(address _addr, uint256 _value) internal pure returns (uint256 _entry) {
        /* solium-disable-next-line */
        assembly {
            _entry := not(or(and(0xffffffffffffffffffffffffffffffffffffffff, _addr), shl(160, _value)))
        }
    }

    function decode(uint256 _entry) internal pure returns (address _addr, uint256 _value) {
        /* solium-disable-next-line */
        assembly {
            let entry := not(_entry)
            _addr := and(entry, 0xffffffffffffffffffffffffffffffffffffffff)
            _value := shr(160, entry)
        }
    }

    function decodeAddress(uint256 _entry) internal pure returns (address _addr) {
        /* solium-disable-next-line */
        assembly {
            _addr := and(not(_entry), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }

    function top(Heap storage _heap) internal view returns(address, uint256) {
        if (_heap.entries.length < 2) {
            return (address(0), 0);
        }

        return decode(_heap.entries[1]);
    }

    function has(Heap storage _heap, address _addr) internal view returns (bool) {
        return _heap.index[_addr] != 0;
    }

    function size(Heap storage _heap) internal view returns (uint256) {
        return _heap.entries.length - 1;
    }

    function entry(Heap storage _heap, uint256 _i) internal view returns (address, uint256) {
        return decode(_heap.entries[_i + 1]);
    }

    // RemoveMax pops off the root element of the heap (the highest value here) and rebalances the heap
    function popTop(Heap storage _heap) internal returns(address _addr, uint256 _value) {
        // Ensure the heap exists
        uint256 heapLength = _heap.entries.length;
        require(heapLength > 1, "The heap does not exists");

        // take the root value of the heap
        (_addr, _value) = decode(_heap.entries[1]);
        _heap.index[_addr] = 0;

        if (heapLength == 2) {
            _heap.entries.length = 1;
        } else {
            // Takes the last element of the array and put it at the root
            uint256 val = _heap.entries[heapLength - 1];
            _heap.entries[1] = val;

            // Delete the last element from the array
            _heap.entries.length = heapLength - 1;

            // Start at the top
            uint256 ind = 1;

            // Bubble down
            ind = _heap.bubbleDown(ind, val);

            // Update index
            _heap.index[decodeAddress(val)] = ind;
        }
    }

    // Inserts adds in a value to our heap.
    function insert(Heap storage _heap, address _addr, uint256 _value) internal {
        require(_heap.index[_addr] == 0, "The entry already exists");

        // Add the value to the end of our array
        uint256 encoded = encode(_addr, _value);
        _heap.entries.push(encoded);

        // Start at the end of the array
        uint256 currentIndex = _heap.entries.length - 1;

        // Bubble Up
        currentIndex = _heap.bubbleUp(currentIndex, encoded);

        // Update index
        _heap.index[_addr] = currentIndex;
    }

    function update(Heap storage _heap, address _addr, uint256 _value) internal {
        uint256 ind = _heap.index[_addr];
        require(ind != 0, "The entry does not exists");

        uint256 can = encode(_addr, _value);
        uint256 val = _heap.entries[ind];
        uint256 newInd;

        if (can < val) {
            // Bubble down
            newInd = _heap.bubbleDown(ind, can);
        } else if (can > val) {
            // Bubble up
            newInd = _heap.bubbleUp(ind, can);
        } else {
            // no changes needed
            return;
        }

        // Update entry
        _heap.entries[newInd] = can;

        // Update index
        if (newInd != ind) {
            _heap.index[_addr] = newInd;
        }
    }

    function bubbleUp(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble up
        ind = _ind;
        if (ind != 1) {
            uint256 parent = _heap.entries[ind / 2];
            while (parent < _val) {
                // If the parent value is lower than our current value, we swap them
                (_heap.entries[ind / 2], _heap.entries[ind]) = (_val, parent);

                // Update moved Index
                _heap.index[decodeAddress(parent)] = ind;

                // change our current Index to go up to the parent
                ind = ind / 2;
                if (ind == 1) {
                    break;
                }

                // Update parent
                parent = _heap.entries[ind / 2];
            }
        }
    }

    function bubbleDown(Heap storage _heap, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        // Bubble down
        ind = _ind;

        uint256 lenght = _heap.entries.length;
        uint256 target = lenght - 1;

        while (ind * 2 < lenght) {
            // get the current index of the children
            uint256 j = ind * 2;

            // left child value
            uint256 leftChild = _heap.entries[j];

            // Store the value of the child
            uint256 childValue;

            if (target > j) {
                // The parent has two childs 👨‍👧‍👦

                // Load right child value
                uint256 rightChild = _heap.entries[j + 1];

                // Compare the left and right child.
                // if the rightChild is greater, then point j to it's index
                // and save the value
                if (leftChild < rightChild) {
                    childValue = rightChild;
                    j = j + 1;
                } else {
                    // The left child is greater
                    childValue = leftChild;
                }
            } else {
                // The parent has a single child 👨‍👦
                childValue = leftChild;
            }

            // Check if the child has a lower value
            if (_val > childValue) {
                break;
            }

            // else swap the value
            (_heap.entries[ind], _heap.entries[j]) = (childValue, _val);

            // Update moved Index
            _heap.index[decodeAddress(childValue)] = ind;

            // and let's keep going down the heap
            ind = j;
        }
    }
}

// File: contracts/commons/StorageUnit.sol

pragma solidity ^0.5.10;


contract StorageUnit {
    address private owner;
    mapping(bytes32 => bytes32) private store;

    constructor() public {
        owner = msg.sender;
    }

    function write(bytes32 _key, bytes32 _value) external {
        /* solium-disable-next-line */
        require(msg.sender == owner);
        store[_key] = _value;
    }

    function read(bytes32 _key) external view returns (bytes32) {
        return store[_key];
    }
}

// File: contracts/utils/IsContract.sol

pragma solidity ^0.5.10;


library IsContract {
    function isContract(address _addr) internal view returns (bool) {
        bytes32 codehash;
        /* solium-disable-next-line */
        assembly { codehash := extcodehash(_addr) }
        return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
    }
}

// File: contracts/utils/DistributedStorage.sol

pragma solidity ^0.5.10;




library DistributedStorage {
    function contractSlot(bytes32 _key) private view returns (address) {
        return address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        byte(0xff),
                        address(this),
                        _key,
                        keccak256(type(StorageUnit).creationCode)
                    )
                )
            )
        );
    }

    function deploy(bytes32 _key) private {
        bytes memory slotcode = type(StorageUnit).creationCode;
        /* solium-disable-next-line */
        assembly{ pop(create2(0, add(slotcode, 0x20), mload(slotcode), _key)) }
    }

    function write(
        bytes32 _struct,
        bytes32 _key,
        bytes32 _value
    ) internal {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            deploy(_struct);
        }

        /* solium-disable-next-line */
        (bool success, ) = address(store).call(
            abi.encodeWithSelector(
                store.write.selector,
                _key,
                _value
            )
        );

        require(success, "error writing storage");
    }

    function read(
        bytes32 _struct,
        bytes32 _key
    ) internal view returns (bytes32) {
        StorageUnit store = StorageUnit(contractSlot(_struct));
        if (!IsContract.isContract(address(store))) {
            return bytes32(0);
        }

        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(store).staticcall(
            abi.encodeWithSelector(
                store.read.selector,
                _key
            )
        );

        require(success, "error reading storage");
        return abi.decode(data, (bytes32));
    }
}

// File: contracts/utils/SafeMath.sol

pragma solidity ^0.5.10;


library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256) {
        uint256 z = x + y;
        require(z >= x, "Add overflow");
        return z;
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256) {
        require(x >= y, "Sub underflow");
        return x - y;
    }

    function mult(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return 0;
        }

        uint256 z = x * y;
        require(z / x == y, "Mult overflow");
        return z;
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        return x / y;
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

// File: contracts/utils/Math.sol

pragma solidity ^0.5.10;


library Math {
    function orderOfMagnitude(uint256 input) internal pure returns (uint256){
        uint256 counter = uint(-1);
        uint256 temp = input;

        do {
            temp /= 10;
            counter++;
        } while (temp != 0);

        return counter;
    }

    function min(uint256 _a, uint256 _b) internal pure returns (uint256) {
        if (_a < _b) {
            return _a;
        } else {
            return _b;
        }
    }
}

// File: contracts/utils/GasPump.sol

pragma solidity ^0.5.10;


contract GasPump {
    bytes32 private stub;

    modifier requestGas(uint256 _factor) {
        if (tx.gasprice == 0) {
            uint256 startgas = gasleft();
            _;
            uint256 delta = startgas - gasleft();
            uint256 target = (delta * _factor) / 100;
            startgas = gasleft();
            while (startgas - gasleft() < target) {
                // Burn gas
                stub = keccak256(abi.encodePacked(stub));
            }
        } else {
            _;
        }
    }
}

// File: contracts/interfaces/IERC20.sol

pragma solidity ^0.5.10;


interface IERC20 {
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    function approve(address _spender, uint256 _value) external returns (bool success);
    function balanceOf(address _owner) external view returns (uint256 balance);
}

// File: contracts/ShuffleToken.sol

pragma solidity ^0.5.10;









contract ShuffleToken is Ownable, GasPump, IERC20 {
    using AddressMinHeap for AddressMinHeap.Heap;
    using DistributedStorage for bytes32;
    using SafeMath for uint256;

    // Shuffle events
    event Winner(address indexed _addr, uint256 _value);

    // Heap events
    event JoinHeap(address indexed _address, uint256 _balance, uint256 _prevSize);
    event LeaveHeap(address indexed _address, uint256 _balance, uint256 _prevSize);

    // Managment events
    event SetName(string _prev, string _new);
    event SetExtraGas(uint256 _prev, uint256 _new);
    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);

    uint256 public totalSupply;

    bytes32 private constant BALANCE_KEY = keccak256("balance");
    bytes32 private constant NONCE_KEY = keccak256("nonce");

    // game
    uint256 public constant FEE = 100;
    uint256 public constant TOP_SIZE = 512;

    // heap
    AddressMinHeap.Heap private heap;

    // metadata
    string public name = "shuffle.monster token V2";
    string public constant symbol = "SHUF";
    uint8 public constant decimals = 18;

    // fee whitelist
    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;

    // internal
    uint256 public extraGas;
    bool inited;

    function init(
        address _to,
        uint256 _amount
    ) external {
        require(!inited);
        inited = true;
        heap.initialize();
        extraGas = 15;
        emit SetExtraGas(0, extraGas);
        emit Transfer(address(0), _to, _amount);
        _setBalance(_to, _amount);
        totalSupply = _amount;
    }

    ///
    // Storage access functions
    ///

    function _toKey(address a) internal pure returns (bytes32) {
        return bytes32(uint256(a));
    }

    function _balanceOf(address _addr) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(BALANCE_KEY));
    }

    function _allowance(address _addr, address _spender) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("allowance", _spender))));
    }

    function _nonce(address _addr, uint256 _cat) internal view returns (uint256) {
        return uint256(_toKey(_addr).read(keccak256(abi.encodePacked("nonce", _cat))));
    }

    function _setAllowance(address _addr, address _spender, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("allowance", _spender)), bytes32(_value));
    }

    function _setNonce(address _addr, uint256 _cat, uint256 _value) internal {
        _toKey(_addr).write(keccak256(abi.encodePacked("nonce", _cat)), bytes32(_value));
    }

    function _setBalance(address _addr, uint256 _balance) internal {
        _toKey(_addr).write(BALANCE_KEY, bytes32(_balance));
        _computeHeap(_addr, _balance);
    }

    function getNonce(address _addr, uint256 _cat) external view returns (uint256) {
        return _nonce(_addr, _cat);
    }

    ///
    // Internal methods
    ///

    function _isWhitelisted(address _from, address _to) internal view returns (bool) {
        return whitelistFrom[_from]||whitelistTo[_to];
    }

    function _random(address _s1, uint256 _s2, uint256 _s3, uint256 _max) internal pure returns (uint256) {
        uint256 rand = uint256(keccak256(abi.encodePacked(_s1, _s2, _s3)));
        return rand % (_max + 1);
    }

    function _pickWinner(address _from, uint256 _value) internal returns (address winner) {
        // Get order of magnitude of the tx
        uint256 magnitude = Math.orderOfMagnitude(_value);
        // Pull nonce for a given order of magnitude
        uint256 nonce = _nonce(_from, magnitude);
        _setNonce(_from, magnitude, nonce + 1);
        // pick entry from heap
        (winner,) = heap.entry(_random(_from, nonce, magnitude, heap.size() - 1));
    }

    function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _skipWhitelist) internal {
        if (_value == 0) {
            emit Transfer(_from, _to, 0);
            return;
        }

        uint256 balanceFrom = _balanceOf(_from);
        require(balanceFrom >= _value, "balance not enough");

        if (_from != _operator) {
            uint256 allowanceFrom = _allowance(_from, _operator);
            if (allowanceFrom != uint(-1)) {
                require(allowanceFrom >= _value, "allowance not enough");
                _setAllowance(_from, _operator, allowanceFrom.sub(_value));
            }
        }

        uint256 receive = _value;
        _setBalance(_from, balanceFrom.sub(_value));

        if (_skipWhitelist || !_isWhitelisted(_from, _to)) {
            uint256 burn = _value.divRound(FEE);
            uint256 shuf = _value == 1 ? 0 : burn;
            receive = receive.sub(burn.add(shuf));

            // Burn tokens
            totalSupply = totalSupply.sub(burn);
            emit Transfer(_from, address(0), burn);

            // Shuffle tokens
            // Pick winner pseudo-randomly
            address winner = _pickWinner(_from, _value);
            // Transfer balance to winner
            _setBalance(winner, _balanceOf(winner).add(shuf));
            emit Winner(winner, shuf);
            emit Transfer(_from, winner, shuf);
        }

        // Transfer tokens
        _setBalance(_to, _balanceOf(_to).add(receive));
        emit Transfer(_from, _to, receive);
    }

    function _computeHeap(address _addr, uint256 _new) internal {
        uint256 size = heap.size();
        if (size == 0) {
            emit JoinHeap(_addr, _new, 0);
            heap.insert(_addr, _new);
            return;
        }

        (, uint256 lastBal) = heap.top();

        if (heap.has(_addr)) {
            heap.update(_addr, _new);
            if (_new == 0) {
                heap.popTop();
                emit LeaveHeap(_addr, 0, size);
            }
        } else {
            // IF heap is full or new bal is better than pop heap
            if (_new != 0 && (size < TOP_SIZE || lastBal < _new)) {
                // If heap is full pop heap
                if (size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = heap.popTop();
                    emit LeaveHeap(_poped, _balance, size);
                }

                // Insert new value
                heap.insert(_addr, _new);
                emit JoinHeap(_addr, _new, size);
            }
        }
    }

    ///
    // Managment
    ///

    function setWhitelistedTo(address _addr, bool _whitelisted) external onlyOwner {
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
    }

    function setWhitelistedFrom(address _addr, bool _whitelisted) external onlyOwner {
        emit WhitelistFrom(_addr, _whitelisted);
        whitelistFrom[_addr] = _whitelisted;
    }

    function setName(string calldata _name) external onlyOwner {
        emit SetName(name, _name);
        name = _name;
    }

    function setExtraGas(uint256 _gas) external onlyOwner {
        emit SetExtraGas(extraGas, _gas);
        extraGas = _gas;
    }

    /////
    // Heap methods
    /////

    function heapSize() external view returns (uint256) {
        return heap.size();
    }

    function heapEntry(uint256 _i) external view returns (address, uint256) {
        return heap.entry(_i);
    }

    function heapTop() external view returns (address, uint256) {
        return heap.top();
    }

    function heapIndex(address _addr) external view returns (uint256) {
        return heap.index[_addr];
    }

    /////
    // ERC20
    /////

    function balanceOf(address _addr) external view returns (uint256) {
        return _balanceOf(_addr);
    }

    function allowance(address _addr, address _spender) external view returns (uint256) {
        return _allowance(_addr, _spender);
    }

    function approve(address _spender, uint256 _value) external returns (bool) {
        emit Approval(msg.sender, _spender, _value);
        _setAllowance(msg.sender, _spender, _value);
        return true;
    }

    function transfer(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, false);
        return true;
    }

    function transferWithFee(address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, msg.sender, _to, _value, true);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) external requestGas(extraGas) returns (bool) {
        _transferFrom(msg.sender, _from, _to, _value, false);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_i","type":"uint256"}],"name":"heapEntry","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistTo","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOP_SIZE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapTop","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"heapIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"heapSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_addr","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"JoinHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"},{"indexed":false,"name":"_prevSize","type":"uint256"}],"name":"LeaveHeap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"string"},{"indexed":false,"name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_prev","type":"uint256"},{"indexed":false,"name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"}]

60c0604052601860808190527f73687566666c652e6d6f6e7374657220746f6b656e205632000000000000000060a090815262000040916005919062000096565b50600080546001600160a01b03191633908117825560408051928352602083019190915280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a16200013b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000d957805160ff191683800117855562000109565b8280016001018555821562000109579182015b8281111562000109578251825591602001919060010190620000ec565b50620001179291506200011b565b5090565b6200013891905b8082111562000117576000815560010162000122565b90565b6122a0806200014b6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80634849f5c8116100f9578063a9059cbb11610097578063c57981b511610071578063c57981b514610588578063dd62ed3e14610590578063fa7e8dc7146105be578063ff12bbf4146105c6576101a9565b8063a9059cbb146104c6578063b00cf049146104f2578063c47f002714610518576101a9565b80638cec9993116100d35780638cec99931461044f5780638da5cb5b1461046c57806395d89b4114610490578063a486309d14610498576101a9565b80634849f5c8146103f557806370a08231146103fd5780638953580314610423576101a9565b806318160ddd1161016657806331fb71271161014057806331fb7127146103935780633767e3391461039b578063399ae724146103a357806343684b21146103cf576101a9565b806318160ddd1461032557806323b872dd1461033f578063313ce56714610375576101a9565b806306fdde03146101ae57806308acece21461022b57806308eaae4d1461026b578063095ea7b3146102ab57806313af4035146102d757806316b627d1146102ff575b600080fd5b6101b66105f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b038135169060200135610682565b604080519115158252519081900360200190f35b6102886004803603602081101561028157600080fd5b5035610710565b604080516001600160a01b03909316835260208301919091528051918290030190f35b610257600480360360408110156102c157600080fd5b506001600160a01b03813516906020013561072e565b6102fd600480360360208110156102ed57600080fd5b50356001600160a01b0316610787565b005b6102576004803603602081101561031557600080fd5b50356001600160a01b031661083d565b61032d610852565b60408051918252519081900360200190f35b6102576004803603606081101561035557600080fd5b506001600160a01b03813581169160208101359091169060400135610858565b61037d6108e7565b6040805160ff9092168252519081900360200190f35b61032d6108ec565b61032d6108f2565b6102fd600480360360408110156103b957600080fd5b506001600160a01b0381351690602001356108f8565b610257600480360360208110156103e557600080fd5b50356001600160a01b03166109a1565b6102886109b6565b61032d6004803603602081101561041357600080fd5b50356001600160a01b03166109cb565b61032d6004803603604081101561043957600080fd5b506001600160a01b0381351690602001356109d6565b6102fd6004803603602081101561046557600080fd5b50356109e9565b610474610a77565b604080516001600160a01b039092168252519081900360200190f35b6101b6610a86565b6102fd600480360360408110156104ae57600080fd5b506001600160a01b0381351690602001351515610aa6565b610257600480360360408110156104dc57600080fd5b506001600160a01b038135169060200135610b62565b61032d6004803603602081101561050857600080fd5b50356001600160a01b0316610b91565b6102fd6004803603602081101561052e57600080fd5b81019060208101813564010000000081111561054957600080fd5b82018360208201111561055b57600080fd5b8035906020019184600183028401116401000000008311171561057d57600080fd5b509092509050610bac565b61032d610ce7565b61032d600480360360408110156105a657600080fd5b506001600160a01b0381358116916020013516610cec565b61032d610cf8565b6102fd600480360360408110156105dc57600080fd5b506001600160a01b0381351690602001351515610d0a565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505081565b60006008543a600014156106f65760005a90506106a3333387876001610dc6565b6001925060005a820390506064838202045a92505b805a840310156106ee576001805460408051602080820193909352815180820384018152908201909152805191012090556106b8565b505050610709565b610704333386866001610dc6565b600191505b5092915050565b60008061072460038463ffffffff6110b816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a361077d3384846110eb565b5060015b92915050565b6000546001600160a01b031633146107d3576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156108cc5760005a9050610879338787876000610dc6565b6001925060005a820390506064838202045a92505b805a840310156108c45760018054604080516020808201939093528151808203840181529082019091528051910120905561088e565b5050506108df565b6108da338686866000610dc6565b600191505b509392505050565b601281565b61020081565b60085481565b60095460ff161561090857600080fd5b6009805460ff1916600117905561091f600361114b565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602061224c8339815191529181900360200190a361099b82826111aa565b60025550565b60066020526000908152604090205460ff1681565b6000806109c360036111e2565b915091509091565b60006107818261120f565b60006109e28383611247565b9392505050565b6000546001600160a01b03163314610a35576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329a42aa360e11b81525081565b6000546001600160a01b03163314610af2576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610b835760005a90506106a3333387876000610dc6565b610704333386866000610dc6565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610ca05780601f10610c7557610100808354040283529160200191610ca0565b820191906000526020600020905b815481529060010190602001808311610c8357829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610ce260058383612061565b505050565b606481565b60006109e2838361128c565b6000610d0460036112ea565b90505b90565b6000546001600160a01b03163314610d56576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b81610e0a57826001600160a01b0316846001600160a01b031660008051602061224c83398151915260006040518082815260200191505060405180910390a36110b1565b6000610e158561120f565b905082811015610e61576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b031614610ef9576000610e86868861128c565b90506000198114610ef75783811015610edd576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610ef78688610ef2848863ffffffff6112f216565b6110eb565b505b82610f1386610f0e848463ffffffff6112f216565b6111aa565b8280610f265750610f24868661133f565b155b15611064576000610f3e85606463ffffffff61138216565b9050600085600114610f505781610f53565b60005b9050610f75610f68838363ffffffff6113eb16565b849063ffffffff6112f216565b600254909350610f8b908363ffffffff6112f216565b6002556040805183815290516000916001600160a01b038b169160008051602061224c8339815191529181900360200190a36000610fc98988611434565b9050610fe881610f0e84610fdc8561120f565b9063ffffffff6113eb16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602061224c833981519152846040518082815260200191505060405180910390a35050505b61107585610f0e83610fdc8961120f565b846001600160a01b0316866001600160a01b031660008051602061224c833981519152836040518082815260200191505060405180910390a350505b5050505050565b6000806110e08460000184600101815481106110d057fe5b9060005260206000200154611491565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610ce2908261113e866114a6565b919063ffffffff6114b216565b805415611195576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080516662616c616e636560c81b815290519081900360070190206111d4908261113e856114a6565b6111de8282611602565b5050565b80546000908190600211156111fc57506000905080610729565b610724836000016001815481106110d057fe5b604080516662616c616e636560c81b815290519081900360070190206000906107819061123b846114a6565b9063ffffffff6117e316565b60006109e2826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061123b856114a6565b60006109e282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061123b856114a6565b546000190190565b600081831015611339576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806109e25750506001600160a01b031660009081526007602052604090205460ff16919050565b6000816113c4576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b60008284816113cf57fe5b0490508284816113db57fe5b06156109e2576001019392505050565b6000828201838110156109e2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b60008061144083611952565b9050600061144e8583611247565b905061145e858383600101611970565b611487611479868385600161147360036112ea565b036119b7565b60039063ffffffff6110b816565b5095945050505050565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b60006114bd84611a13565b90506114c881611a9e565b6114d5576114d584611ad5565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061154d5780518252601f19909201916020918201910161152e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146115af576040519150601f19603f3d011682016040523d82523d6000602084013e6115b4565b606091505b50509050806110b1576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b600061160e60036112ea565b90508061167057604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a261166a6003848463ffffffff611b0c16565b506111de565b600061167c60036111e2565b9150611691905060038563ffffffff611bd716565b15611703576116a86003858563ffffffff611bf816565b826116fe576116b76003611d1f565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6117dd565b821580159061171c575061020082108061171c57508281105b156117dd576102008210611787576000806117376003611d1f565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6117996003858563ffffffff611b0c16565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505050565b6000806117ef84611a13565b90506117fa81611a9e565b611808575060009050610781565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061187d5780518252601f19909201916020918201910161185e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146118dd576040519150601f19603f3d011682016040523d82523d6000602084013e6118e2565b606091505b509150915081611931576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561194657600080fd5b50519695505050505050565b6000600019825b60019190910190600a900480611959575092915050565b610ce2826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b61113e866114a6565b604080516001600160601b0319606087901b166020808301919091526034820186905260548083018690528351808403909101815260749092019092528051910120600090600183018181611a0857fe5b069695505050505050565b600060ff60f81b308360405180602001611a2c906120df565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906109e257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b606060405180602001611ae7906120df565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6001600160a01b038216600090815260018401602052604090205415611b79576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b6000611b858383611e5f565b845460018101865560008681526020902001819055845490915060001901611bb485828463ffffffff611e7316565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611c65576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611c718484611e5f565b90506000856000018381548110611c8457fe5b90600052602060002001549050600081831015611cb357611cac87858563ffffffff611f4116565b9050611cd5565b81831115611ccc57611cac87858563ffffffff611e7316565b50505050610ce2565b82876000018281548110611ce557fe5b600091825260209091200155808414611d16576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611d7b576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611d8e846000016001815481106110d057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611dc9576001611dc385826120ec565b50611e59565b6000846000016001830381548110611ddd57fe5b906000526020600020015490508085600001600181548110611dfb57fe5b6000918252602090912001556000198201611e1686826120ec565b506001611e2a86828463ffffffff611f4116565b905080866001016000611e3c85612054565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146109e2576000846002830481548110611e8d57fe5b906000526020600020015490505b828110156108df578281866002850481548110611eb457fe5b906000526020600020016000886000018681548110611ecf57fe5b6000918252602082200193909355509190915582906001870190611ef284612054565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611f20576108df565b846002830481548110611f2f57fe5b90600052602060002001549050611e9b565b8254829060001981015b8183600202101561204b5785546002840290600090889083908110611f6c57fe5b90600052602060002001549050600082841115611fc4576000896000018460010181548110611f9757fe5b9060005260206000200154905080831015611fba57809150836001019350611fbe565b8291505b50611fc7565b50805b80871115611fd75750505061204b565b80878a6000018881548110611fe857fe5b9060005260206000200160008c600001878154811061200357fe5b60009182526020822001939093555091909155869060018b019061202684612054565b6001600160a01b0316815260208101919091526040016000205550909350611f4b9050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120a25782800160ff198235161785556120cf565b828001600101855582156120cf579182015b828111156120cf5782358255916020019190600101906120b4565b506120db92915061210c565b5090565b6101258061212783390190565b815481835581811115610ce257600083815260209020610ce29181019083015b610d0791905b808211156120db576000815560010161211256fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7230582009d959deda1aaab903b1297659fa113ea55adcb7881dbcd3a51f90eafaa4b1fa64736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef602964736f6c634300050a0032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80634849f5c8116100f9578063a9059cbb11610097578063c57981b511610071578063c57981b514610588578063dd62ed3e14610590578063fa7e8dc7146105be578063ff12bbf4146105c6576101a9565b8063a9059cbb146104c6578063b00cf049146104f2578063c47f002714610518576101a9565b80638cec9993116100d35780638cec99931461044f5780638da5cb5b1461046c57806395d89b4114610490578063a486309d14610498576101a9565b80634849f5c8146103f557806370a08231146103fd5780638953580314610423576101a9565b806318160ddd1161016657806331fb71271161014057806331fb7127146103935780633767e3391461039b578063399ae724146103a357806343684b21146103cf576101a9565b806318160ddd1461032557806323b872dd1461033f578063313ce56714610375576101a9565b806306fdde03146101ae57806308acece21461022b57806308eaae4d1461026b578063095ea7b3146102ab57806313af4035146102d757806316b627d1146102ff575b600080fd5b6101b66105f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b038135169060200135610682565b604080519115158252519081900360200190f35b6102886004803603602081101561028157600080fd5b5035610710565b604080516001600160a01b03909316835260208301919091528051918290030190f35b610257600480360360408110156102c157600080fd5b506001600160a01b03813516906020013561072e565b6102fd600480360360208110156102ed57600080fd5b50356001600160a01b0316610787565b005b6102576004803603602081101561031557600080fd5b50356001600160a01b031661083d565b61032d610852565b60408051918252519081900360200190f35b6102576004803603606081101561035557600080fd5b506001600160a01b03813581169160208101359091169060400135610858565b61037d6108e7565b6040805160ff9092168252519081900360200190f35b61032d6108ec565b61032d6108f2565b6102fd600480360360408110156103b957600080fd5b506001600160a01b0381351690602001356108f8565b610257600480360360208110156103e557600080fd5b50356001600160a01b03166109a1565b6102886109b6565b61032d6004803603602081101561041357600080fd5b50356001600160a01b03166109cb565b61032d6004803603604081101561043957600080fd5b506001600160a01b0381351690602001356109d6565b6102fd6004803603602081101561046557600080fd5b50356109e9565b610474610a77565b604080516001600160a01b039092168252519081900360200190f35b6101b6610a86565b6102fd600480360360408110156104ae57600080fd5b506001600160a01b0381351690602001351515610aa6565b610257600480360360408110156104dc57600080fd5b506001600160a01b038135169060200135610b62565b61032d6004803603602081101561050857600080fd5b50356001600160a01b0316610b91565b6102fd6004803603602081101561052e57600080fd5b81019060208101813564010000000081111561054957600080fd5b82018360208201111561055b57600080fd5b8035906020019184600183028401116401000000008311171561057d57600080fd5b509092509050610bac565b61032d610ce7565b61032d600480360360408110156105a657600080fd5b506001600160a01b0381358116916020013516610cec565b61032d610cf8565b6102fd600480360360408110156105dc57600080fd5b506001600160a01b0381351690602001351515610d0a565b6005805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561067a5780601f1061064f5761010080835404028352916020019161067a565b820191906000526020600020905b81548152906001019060200180831161065d57829003601f168201915b505050505081565b60006008543a600014156106f65760005a90506106a3333387876001610dc6565b6001925060005a820390506064838202045a92505b805a840310156106ee576001805460408051602080820193909352815180820384018152908201909152805191012090556106b8565b505050610709565b610704333386866001610dc6565b600191505b5092915050565b60008061072460038463ffffffff6110b816565b915091505b915091565b6040805182815290516000916001600160a01b0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925919081900360200190a361077d3384846110eb565b5060015b92915050565b6000546001600160a01b031633146107d3576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c9281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205460ff1681565b60025481565b60006008543a600014156108cc5760005a9050610879338787876000610dc6565b6001925060005a820390506064838202045a92505b805a840310156108c45760018054604080516020808201939093528151808203840181529082019091528051910120905561088e565b5050506108df565b6108da338686866000610dc6565b600191505b509392505050565b601281565b61020081565b60085481565b60095460ff161561090857600080fd5b6009805460ff1916600117905561091f600361114b565b600f60088190556040805160008152602081019290925280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a16040805182815290516001600160a01b0384169160009160008051602061224c8339815191529181900360200190a361099b82826111aa565b60025550565b60066020526000908152604090205460ff1681565b6000806109c360036111e2565b915091509091565b60006107818261120f565b60006109e28383611247565b9392505050565b6000546001600160a01b03163314610a35576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600854604080519182526020820183905280517fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c99281900390910190a1600855565b6000546001600160a01b031681565b6040518060400160405280600481526020016329a42aa360e11b81525081565b6000546001600160a01b03163314610af2576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006008543a60001415610b835760005a90506106a3333387876000610dc6565b610704333386866000610dc6565b6001600160a01b031660009081526004602052604090205490565b6000546001600160a01b03163314610bf8576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6040805181815260058054600260001961010060018416150201909116049282018390527fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb1929091859185919081906020820190606083019087908015610ca05780601f10610c7557610100808354040283529160200191610ca0565b820191906000526020600020905b815481529060010190602001808311610c8357829003601f168201915b50508381038252848152602001858580828437600083820152604051601f909101601f191690920182900397509095505050505050a1610ce260058383612061565b505050565b606481565b60006109e2838361128c565b6000610d0460036112ea565b90505b90565b6000546001600160a01b03163314610d56576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b81610e0a57826001600160a01b0316846001600160a01b031660008051602061224c83398151915260006040518082815260200191505060405180910390a36110b1565b6000610e158561120f565b905082811015610e61576040805162461bcd60e51b81526020600482015260126024820152710c4c2d8c2dcc6ca40dcdee840cadcdeeaced60731b604482015290519081900360640190fd5b856001600160a01b0316856001600160a01b031614610ef9576000610e86868861128c565b90506000198114610ef75783811015610edd576040805162461bcd60e51b81526020600482015260146024820152730c2d8d8deeec2dcc6ca40dcdee840cadcdeeaced60631b604482015290519081900360640190fd5b610ef78688610ef2848863ffffffff6112f216565b6110eb565b505b82610f1386610f0e848463ffffffff6112f216565b6111aa565b8280610f265750610f24868661133f565b155b15611064576000610f3e85606463ffffffff61138216565b9050600085600114610f505781610f53565b60005b9050610f75610f68838363ffffffff6113eb16565b849063ffffffff6112f216565b600254909350610f8b908363ffffffff6112f216565b6002556040805183815290516000916001600160a01b038b169160008051602061224c8339815191529181900360200190a36000610fc98988611434565b9050610fe881610f0e84610fdc8561120f565b9063ffffffff6113eb16565b6040805183815290516001600160a01b038316917f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e20919081900360200190a2806001600160a01b0316896001600160a01b031660008051602061224c833981519152846040518082815260200191505060405180910390a35050505b61107585610f0e83610fdc8961120f565b846001600160a01b0316866001600160a01b031660008051602061224c833981519152836040518082815260200191505060405180910390a350505b5050505050565b6000806110e08460000184600101815481106110d057fe5b9060005260206000200154611491565b915091509250929050565b6040805168616c6c6f77616e636560b81b6020808301919091526001600160601b0319606086901b1660298301528251601d818403018152603d9092019092528051910120610ce2908261113e866114a6565b919063ffffffff6114b216565b805415611195576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b80546001810182556000918252602082200155565b604080516662616c616e636560c81b815290519081900360070190206111d4908261113e856114a6565b6111de8282611602565b5050565b80546000908190600211156111fc57506000905080610729565b610724836000016001815481106110d057fe5b604080516662616c616e636560c81b815290519081900360070190206000906107819061123b846114a6565b9063ffffffff6117e316565b60006109e2826040516020018080646e6f6e636560d81b8152506005018281526020019150506040516020818303038152906040528051906020012061123b856114a6565b60006109e282604051602001808068616c6c6f77616e636560b81b815250600901826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528051906020012061123b856114a6565b546000190190565b600081831015611339576040805162461bcd60e51b815260206004820152600d60248201526c53756220756e646572666c6f7760981b604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526006602052604081205460ff16806109e25750506001600160a01b031660009081526007602052604090205460ff16919050565b6000816113c4576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b60008284816113cf57fe5b0490508284816113db57fe5b06156109e2576001019392505050565b6000828201838110156109e2576040805162461bcd60e51b815260206004820152600c60248201526b416464206f766572666c6f7760a01b604482015290519081900360640190fd5b60008061144083611952565b9050600061144e8583611247565b905061145e858383600101611970565b611487611479868385600161147360036112ea565b036119b7565b60039063ffffffff6110b816565b5095945050505050565b196001600160a01b0381169160a09190911c90565b6001600160a01b031690565b60006114bd84611a13565b90506114c881611a9e565b6114d5576114d584611ad5565b6040805160248101859052604480820185905282518083039091018152606490910182526020810180516001600160e01b031663e2e52ec160e01b178152915181516000936001600160a01b0386169392918291908083835b6020831061154d5780518252601f19909201916020918201910161152e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146115af576040519150601f19603f3d011682016040523d82523d6000602084013e6115b4565b606091505b50509050806110b1576040805162461bcd60e51b81526020600482015260156024820152746572726f722077726974696e672073746f7261676560581b604482015290519081900360640190fd5b600061160e60036112ea565b90508061167057604080518381526000602082015281516001600160a01b038616927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a261166a6003848463ffffffff611b0c16565b506111de565b600061167c60036111e2565b9150611691905060038563ffffffff611bd716565b15611703576116a86003858563ffffffff611bf816565b826116fe576116b76003611d1f565b505060408051600081526020810184905281516001600160a01b038716927f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e7928290030190a25b6117dd565b821580159061171c575061020082108061171c57508281105b156117dd576102008210611787576000806117376003611d1f565b91509150816001600160a01b03167f61072af1539e7159a567565ab0a7863c5ad61aa8daa91cf3843c3bb8bccb00e78286604051808381526020018281526020019250505060405180910390a250505b6117996003858563ffffffff611b0c16565b604080518481526020810184905281516001600160a01b038716927fb7c8eb45e695579273671351c1ee88509af6ec27e061176b10f5f9fb145eff93928290030190a25b50505050565b6000806117ef84611a13565b90506117fa81611a9e565b611808575060009050610781565b60408051602480820186905282518083039091018152604490910182526020810180516001600160e01b03166361da143960e01b178152915181516000936060936001600160a01b038716939092909182918083835b6020831061187d5780518252601f19909201916020918201910161185e565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146118dd576040519150601f19603f3d011682016040523d82523d6000602084013e6118e2565b606091505b509150915081611931576040805162461bcd60e51b81526020600482015260156024820152746572726f722072656164696e672073746f7261676560581b604482015290519081900360640190fd5b80806020019051602081101561194657600080fd5b50519695505050505050565b6000600019825b60019190910190600a900480611959575092915050565b610ce2826040516020018080646e6f6e636560d81b815250600501828152602001915050604051602081830303815290604052805190602001208260001b61113e866114a6565b604080516001600160601b0319606087901b166020808301919091526034820186905260548083018690528351808403909101815260749092019092528051910120600090600183018181611a0857fe5b069695505050505050565b600060ff60f81b308360405180602001611a2c906120df565b818103601f199081018352601f90910116604081815282516020938401206001600160f81b0319969096168383015260609490941b6001600160601b03191660218201526035810192909252605580830194909452825180830390940184526075909101909152815191012092915050565b6000813f80158015906109e257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141592915050565b606060405180602001611ae7906120df565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6001600160a01b038216600090815260018401602052604090205415611b79576040805162461bcd60e51b815260206004820152601860248201527f54686520656e74727920616c7265616479206578697374730000000000000000604482015290519081900360640190fd5b6000611b858383611e5f565b845460018101865560008681526020902001819055845490915060001901611bb485828463ffffffff611e7316565b6001600160a01b0390941660009081526001909501602052505060409092205550565b6001600160a01b031660009081526001919091016020526040902054151590565b6001600160a01b038216600090815260018401602052604090205480611c65576040805162461bcd60e51b815260206004820152601960248201527f54686520656e74727920646f6573206e6f742065786973747300000000000000604482015290519081900360640190fd5b6000611c718484611e5f565b90506000856000018381548110611c8457fe5b90600052602060002001549050600081831015611cb357611cac87858563ffffffff611f4116565b9050611cd5565b81831115611ccc57611cac87858563ffffffff611e7316565b50505050610ce2565b82876000018281548110611ce557fe5b600091825260209091200155808414611d16576001600160a01b038616600090815260018801602052604090208190555b50505050505050565b8054600090819060018111611d7b576040805162461bcd60e51b815260206004820152601860248201527f546865206865617020646f6573206e6f74206578697374730000000000000000604482015290519081900360640190fd5b611d8e846000016001815481106110d057fe5b6001600160a01b038216600090815260018701602052604081205590935091506002811415611dc9576001611dc385826120ec565b50611e59565b6000846000016001830381548110611ddd57fe5b906000526020600020015490508085600001600181548110611dfb57fe5b6000918252602090912001556000198201611e1686826120ec565b506001611e2a86828463ffffffff611f4116565b905080866001016000611e3c85612054565b6001600160a01b0316815260208101919091526040016000205550505b50915091565b60a01b6001600160a01b0391909116171990565b81600181146109e2576000846002830481548110611e8d57fe5b906000526020600020015490505b828110156108df578281866002850481548110611eb457fe5b906000526020600020016000886000018681548110611ecf57fe5b6000918252602082200193909355509190915582906001870190611ef284612054565b6001600160a01b031681526020810191909152604001600020556002820491508160011415611f20576108df565b846002830481548110611f2f57fe5b90600052602060002001549050611e9b565b8254829060001981015b8183600202101561204b5785546002840290600090889083908110611f6c57fe5b90600052602060002001549050600082841115611fc4576000896000018460010181548110611f9757fe5b9060005260206000200154905080831015611fba57809150836001019350611fbe565b8291505b50611fc7565b50805b80871115611fd75750505061204b565b80878a6000018881548110611fe857fe5b9060005260206000200160008c600001878154811061200357fe5b60009182526020822001939093555091909155869060018b019061202684612054565b6001600160a01b0316815260208101919091526040016000205550909350611f4b9050565b50509392505050565b196001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120a25782800160ff198235161785556120cf565b828001600101855582156120cf579182015b828111156120cf5782358255916020019190600101906120b4565b506120db92915061210c565b5090565b6101258061212783390190565b815481835581811115610ce257600083815260209020610ce29181019083015b610d0791905b808211156120db576000815560010161211256fe608060405234801561001057600080fd5b50600080546001600160a01b0319163317905560f4806100316000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806361da1439146037578063e2e52ec1146063575b600080fd5b605160048036036020811015604b57600080fd5b50356085565b60408051918252519081900360200190f35b608360048036036040811015607757600080fd5b50803590602001356097565b005b60009081526001602052604090205490565b6000546001600160a01b0316331460ad57600080fd5b6000918252600160205260409091205556fea265627a7a7230582009d959deda1aaab903b1297659fa113ea55adcb7881dbcd3a51f90eafaa4b1fa64736f6c634300050a0032ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa265627a7a72305820f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef602964736f6c634300050a0032

Deployed Bytecode Sourcemap

13609:8961:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13609:8961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14650:47;;;:::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;14650:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22159:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22159:196:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21099:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21099:112:0;;:::i;:::-;;;;-1:-1:-1;;;;;21099:112:0;;;;;;;;;;;;;;;;;;;;;21740:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21740:213:0;;;;;;;;:::i;481:134::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;481:134:0;-1:-1:-1;;;;;481:134:0;;:::i;:::-;;14867:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14867:43:0;-1:-1:-1;;;;;14867:43:0;;:::i;14314:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;22363:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22363:204:0;;;;;;;;;;;;;;;;;:::i;14749:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14532:38;;;:::i;14936:23::-;;;:::i;14986:347::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14986:347:0;;;;;;;;:::i;14815:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14815:45:0;-1:-1:-1;;;;;14815:45:0;;:::i;21219:96::-;;;:::i;21478:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21478:109:0;-1:-1:-1;;;;;21478:109:0;;:::i;16584:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16584:124:0;;;;;;;;:::i;20818:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20818:131:0;;:::i;167:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;167:20:0;;;;;;;;;;;;;;14704:38;;;:::i;20304:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20304:179:0;;;;;;;;;;:::i;21961:190::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21961:190:0;;;;;;;;:::i;21323:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21323:109:0;-1:-1:-1;;;;;21323:109:0;;:::i;20684:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20684:126:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;20684:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;20684:126:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;20684:126:0;;-1:-1:-1;20684:126:0;-1:-1:-1;20684:126:0;:::i;14492:33::-;;;:::i;21595:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21595:137:0;;;;;;;;;;:::i;21002:89::-;;;:::i;20491:185::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20491:185:0;;;;;;;;;;:::i;14650:47::-;;;;;;;;;;;;;;;-1:-1:-1;;14650:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22159:196::-;22252:4;22233:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22269:56;22283:10;22295;22307:3;22312:6;22320:4;22269:13;:56::i;:::-;22343:4;22336:11;;12460:13;12487:9;12476:20;;;-1:-1:-1;12548:3:0;12529:15;;;12528:23;12577:9;12566:20;;12601:142;12631:6;12619:9;12608:8;:20;:29;12601:142;;;12721:4;;;12704:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12704:22:0;;;;;;12694:33;;;;;12687:40;;12601:142;;;12364:424;;;;;;22269:56;22283:10;22295;22307:3;22312:6;22320:4;22269:13;:56::i;:::-;22343:4;22336:11;;12775:1;22159:196;;;;;:::o;21099:112::-;21153:7;;21189:14;:4;21200:2;21189:14;:10;:14;:::i;:::-;21182:21;;;;21099:112;;;;:::o;21740:213::-;21831:38;;;;;;;;21809:4;;-1:-1:-1;;;;;21831:38:0;;;21840:10;;21831:38;;;;;;;;;;21880:43;21894:10;21906:8;21916:6;21880:13;:43::i;:::-;-1:-1:-1;21941:4:0;21740:213;;;;;:::o;481:134::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;568:5;;550:32;;;-1:-1:-1;;;;;568:5:0;;;550:32;;;;;;;;;;;;;;;;;;;;;593:5;:14;;-1:-1:-1;;;;;;593:14:0;-1:-1:-1;;;;;593:14:0;;;;;;;;;;481:134::o;14867:43::-;;;;;;;;;;;;;;;:::o;14314:26::-;;;;:::o;22363:204::-;22468:4;22449:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22485:52;22499:10;22511:5;22518:3;22523:6;22531:5;22485:13;:52::i;:::-;22555:4;22548:11;;12460:13;12487:9;12476:20;;;-1:-1:-1;12548:3:0;12529:15;;;12528:23;12577:9;12566:20;;12601:142;12631:6;12619:9;12608:8;:20;:29;12601:142;;;12721:4;;;12704:22;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;12704:22:0;;;;;;12694:33;;;;;12687:40;;12601:142;;;12364:424;;;;;;22485:52;22499:10;22511:5;22518:3;22523:6;22531:5;22485:13;:52::i;:::-;22555:4;22548:11;;12775:1;22363:204;;;;;;:::o;14749:35::-;14782:2;14749:35;:::o;14532:38::-;14567:3;14532:38;:::o;14936:23::-;;;;:::o;14986:347::-;15084:6;;;;15083:7;15075:16;;;;;;15102:6;:13;;-1:-1:-1;;15102:13:0;15111:4;15102:13;;;15126:17;:4;:15;:17::i;:::-;15165:2;15154:8;:13;;;15183:24;;;15195:1;15183:24;;;;;;;;;;;;;;;;;;;;;15223:34;;;;;;;;-1:-1:-1;;;;;15223:34:0;;;15240:1;;-1:-1:-1;;;;;;;;;;;15223:34:0;;;;;;;;15268:25;15280:3;15285:7;15268:11;:25::i;:::-;15304:11;:21;-1:-1:-1;14986:347:0:o;14815:45::-;;;;;;;;;;;;;;;:::o;21219:96::-;21261:7;21270;21297:10;:4;:8;:10::i;:::-;21290:17;;;;21219:96;;:::o;21478:109::-;21535:7;21562:17;21573:5;21562:10;:17::i;16584:124::-;16654:7;16681:19;16688:5;16695:4;16681:6;:19::i;:::-;16674:26;16584:124;-1:-1:-1;;;16584:124:0:o;20818:131::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20900:8;;20888:27;;;;;;;;;;;;;;;;;;;;;;;;20926:8;:15;20818:131::o;167:20::-;;;-1:-1:-1;;;;;167:20:0;;:::o;14704:38::-;;;;;;;;;;;;;;-1:-1:-1;;;14704:38:0;;;;:::o;20304:179::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20399:32;;;-1:-1:-1;;;;;20399:32:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20442:18:0;;;;;;;;:11;:18;;;;;:33;;-1:-1:-1;;20442:33:0;;;;;;;;;;20304:179::o;21961:190::-;22047:4;22028:8;;12368:11;12383:1;12368:16;12364:424;;;12401:16;12420:9;12401:28;;22064:57;22078:10;22090;22102:3;22107:6;22115:5;22064:13;:57::i;12364:424::-;22064:57;22078:10;22090;22102:3;22107:6;22115:5;22064:13;:57::i;21323:109::-;-1:-1:-1;;;;;21407:17:0;21380:7;21407:17;;;:10;:17;;;;;;;21323:109::o;20684:126::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20759:20;;;;;;20767:4;20759:20;;;-1:-1:-1;;20759:20:0;;;;;;;;;;;;;;;;;;;20767:4;;20773:5;;;;20759:20;;;;;;;;;;;20767:4;;20759:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20759:20:0;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;;74:27;20759:20:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;20759:20:0;;;;-1:-1:-1;20759:20:0;;-1:-1:-1;;;;;;20759:20:0;20790:12;:4;20797:5;;20790:12;:::i;:::-;;20684:126;;:::o;14492:33::-;14522:3;14492:33;:::o;21595:137::-;21670:7;21697:27;21708:5;21715:8;21697:10;:27::i;21002:89::-;21045:7;21072:11;:4;:9;:11::i;:::-;21065:18;;21002:89;;:::o;20491:185::-;433:5;;-1:-1:-1;;;;;433:5:0;419:10;:19;411:42;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;-1:-1:-1;;;411:42:0;;;;;;;;;;;;;;;20588:34;;;-1:-1:-1;;;;;20588:34:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20633:20:0;;;;;;;;:13;:20;;;;;:35;;-1:-1:-1;;20633:35:0;;;;;;;;;;20491:185::o;17622:1586::-;17753:11;17749:93;;17802:3;-1:-1:-1;;;;;17786:23:0;17795:5;-1:-1:-1;;;;;17786:23:0;-1:-1:-1;;;;;;;;;;;17807:1:0;17786:23;;;;;;;;;;;;;;;;;;17824:7;;17749:93;17854:19;17876:17;17887:5;17876:10;:17::i;:::-;17854:39;;17927:6;17912:11;:21;;17904:52;;;;;-1:-1:-1;;;17904:52:0;;;;;;;;;;;;-1:-1:-1;;;17904:52:0;;;;;;;;;;;;;;;17982:9;-1:-1:-1;;;;;17973:18:0;:5;-1:-1:-1;;;;;17973:18:0;;17969:316;;18008:21;18032:28;18043:5;18050:9;18032:10;:28::i;:::-;18008:52;;-1:-1:-1;;18079:13:0;:25;18075:199;;18150:6;18133:13;:23;;18125:56;;;;;-1:-1:-1;;;18125:56:0;;;;;;;;;;;;-1:-1:-1;;;18125:56:0;;;;;;;;;;;;;;;18200:58;18214:5;18221:9;18232:25;:13;18250:6;18232:25;:17;:25;:::i;:::-;18200:13;:58::i;:::-;17969:316;;18315:6;18332:43;18344:5;18351:23;:11;18315:6;18351:23;:15;:23;:::i;:::-;18332:11;:43::i;:::-;18392:14;:45;;;;18411:26;18426:5;18433:3;18411:14;:26::i;:::-;18410:27;18392:45;18388:681;;;18454:12;18469:20;:6;14522:3;18469:20;:15;:20;:::i;:::-;18454:35;;18504:12;18519:6;18529:1;18519:11;:22;;18537:4;18519:22;;;18533:1;18519:22;18504:37;-1:-1:-1;18566:27:0;18578:14;:4;18504:37;18578:14;:8;:14;:::i;:::-;18566:7;;:27;:11;:27;:::i;:::-;18652:11;;18556:37;;-1:-1:-1;18652:21:0;;18668:4;18652:21;:15;:21;:::i;:::-;18638:11;:35;18693:33;;;;;;;;18717:1;;-1:-1:-1;;;;;18693:33:0;;;-1:-1:-1;;;;;;;;;;;18693:33:0;;;;;;;;18818:14;18835:26;18847:5;18854:6;18835:11;:26::i;:::-;18818:43;;18919:49;18931:6;18939:28;18962:4;18939:18;18950:6;18939:10;:18::i;:::-;:22;:28;:22;:28;:::i;18919:49::-;18988:20;;;;;;;;-1:-1:-1;;;;;18988:20:0;;;;;;;;;;;;;19044:6;-1:-1:-1;;;;;19028:29:0;19037:5;-1:-1:-1;;;;;19028:29:0;-1:-1:-1;;;;;;;;;;;19052:4:0;19028:29;;;;;;;;;;;;;;;;;;18388:681;;;;19109:46;19121:3;19126:28;19146:7;19126:15;19137:3;19126:10;:15::i;19109:46::-;19187:3;-1:-1:-1;;;;;19171:29:0;19180:5;-1:-1:-1;;;;;19171:29:0;-1:-1:-1;;;;;;;;;;;19192:7:0;19171:29;;;;;;;;;;;;;;;;;;17622:1586;;;;;;;;:::o;2441:143::-;2511:7;2520;2547:29;2554:5;:13;;2568:2;2573:1;2568:6;2554:21;;;;;;;;;;;;;;;;2547:6;:29::i;:::-;2540:36;;;;2441:143;;;;;:::o;16027:188::-;16149:39;;;-1:-1:-1;;;16149:39:0;;;;;;;;-1:-1:-1;;;;;;16149:39:0;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;16149:39:0;;;;;;;16139:50;;;;;16119:88;;16199:6;16119:13;16126:5;16119:6;:13::i;:::-;:19;:88;;:19;:88;:::i;944:157::-;1012:20;;:25;1004:57;;;;;-1:-1:-1;;;1004:57:0;;;;;;;;;;;;-1:-1:-1;;;1004:57:0;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;45:23;;1072:13:0;:21;;;;;;;;944:157::o;16403:173::-;14388:20;;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;;16477:51;;16518:8;16477:13;16484:5;16477:6;:13::i;:51::-;16539:29;16552:5;16559:8;16539:12;:29::i;:::-;16403:173;;:::o;1961:214::-;2049:20;;2016:7;;;;2072:1;-1:-1:-1;2045:79:0;;;-1:-1:-1;2106:1:0;;-1:-1:-1;2106:1:0;2090:22;;2045:79;2143:24;2150:5;:13;;2164:1;2150:16;;;;;;;15506:133;14388:20;;;-1:-1:-1;;;14388:20:0;;;;;;;;;;;;15564:7;;15599:31;;:13;15606:5;15599:6;:13::i;:::-;:18;:31;:18;:31;:::i;15845:174::-;15913:7;15948:62;16003:4;15977:31;;;;;;-1:-1:-1;;;15977:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15977:31:0;;;15967:42;;;;;;15948:13;15955:5;15948:6;:13::i;15647:190::-;15723:7;15758:70;15817:8;15787:39;;;;;;-1:-1:-1;;;15787:39:0;;;;;;-1:-1:-1;;;;;15787:39:0;-1:-1:-1;;;;;15787:39:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15787:39:0;;;15777:50;;;;;;15758:13;15765:5;15758:6;:13::i;2317:116::-;2401:20;-1:-1:-1;;2401:24:0;;2317:116::o;10871:141::-;10929:7;10962:1;10957;:6;;10949:32;;;;;-1:-1:-1;;;10949:32:0;;;;;;;;;;;;-1:-1:-1;;;10949:32:0;;;;;;;;;;;;;;;-1:-1:-1;10999:5:0;;;10871:141::o;16761:145::-;-1:-1:-1;;;;;16860:20:0;;16836:4;16860:20;;;:13;:20;;;;;;;;;:38;;-1:-1:-1;;;;;;;16882:16:0;;;;;:11;:16;;;;;;;;;16761:145;-1:-1:-1;16761:145:0:o;11404:232::-;11467:7;11495:6;11487:30;;;;;-1:-1:-1;;;11487:30:0;;;;;;;;;;;;-1:-1:-1;;;11487:30:0;;;;;;;;;;;;;;;11528:9;11544:1;11540;:5;;;;;;11528:17;;11564:1;11560;:5;;;;;;:10;11556:52;;11595:1;11591:5;11627:1;11404:232;-1:-1:-1;;;11404:232:0:o;10699:164::-;10757:7;10789:5;;;10813:6;;;;10805:31;;;;;-1:-1:-1;;;10805:31:0;;;;;;;;;;;;-1:-1:-1;;;10805:31:0;;;;;;;;;;;;;;17144:470;17214:14;17286:17;17306:29;17328:6;17306:21;:29::i;:::-;17286:49;;17400:13;17416:24;17423:5;17430:9;17416:6;:24::i;:::-;17400:40;;17451:38;17461:5;17468:9;17479:5;17487:1;17479:9;17451;:38::i;:::-;17545:61;17556:49;17564:5;17571;17578:9;17603:1;17589:11;:4;:9;:11::i;:::-;:15;17556:7;:49::i;:::-;17545:4;;:61;:10;:61;:::i;:::-;-1:-1:-1;17533:73:0;17144:470;-1:-1:-1;;;;;17144:470:0:o;1387:319::-;1561:11;-1:-1:-1;;;;;1595:54:0;;;1677:3;1673:15;;;;;1533:166::o;15394:104::-;-1:-1:-1;;;;;15479:10:0;;15394:104::o;9410:569::-;9526:17;9558:21;9571:7;9558:12;:21::i;:::-;9526:54;;9596:37;9626:5;9596:21;:37::i;:::-;9591:86;;9650:15;9657:7;9650:6;:15::i;:::-;9782:124;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9782:124:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;9748:169:0;;;;9730:12;;-1:-1:-1;;;;;9748:19:0;;;9782:124;9748:169;;;25:18:-1;9748:169:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;9748:169:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;9729:188:0;;;9938:7;9930:41;;;;;-1:-1:-1;;;9930:41:0;;;;;;;;;;;;-1:-1:-1;;;9930:41:0;;;;;;;;;;;;;;19216:1042;19287:12;19302:11;:4;:9;:11::i;:::-;19287:26;-1:-1:-1;19328:9:0;19324:131;;19359:24;;;;;;19381:1;19359:24;;;;;;-1:-1:-1;;;;;19359:24:0;;;;;;;;;;;19398;:4;19410:5;19417:4;19398:24;:11;:24;:::i;:::-;19437:7;;;19324:131;19470:15;19489:10;:4;:8;:10::i;:::-;19467:32;-1:-1:-1;19516:15:0;;-1:-1:-1;19516:4:0;19525:5;19516:15;:8;:15;:::i;:::-;19512:739;;;19548:24;:4;19560:5;19567:4;19548:24;:11;:24;:::i;:::-;19591:9;19587:112;;19621:13;:4;:11;:13::i;:::-;-1:-1:-1;;19658:25:0;;;19675:1;19658:25;;;;;;;;;;-1:-1:-1;;;;;19658:25:0;;;;;;;;;;;19587:112;19512:739;;;19802:9;;;;;:48;;;14567:3;19816:4;:15;:33;;;;19845:4;19835:7;:14;19816:33;19798:442;;;14567:3;19920:4;:16;19916:176;;19962:14;19978:16;19998:13;:4;:11;:13::i;:::-;19961:50;;;;20049:6;-1:-1:-1;;;;;20039:33:0;;20057:8;20067:4;20039:33;;;;;;;;;;;;;;;;;;;;;;;;19916:176;;;20149:24;:4;20161:5;20168:4;20149:24;:11;:24;:::i;:::-;20197:27;;;;;;;;;;;;;;-1:-1:-1;;;;;20197:27:0;;;;;;;;;;;19798:442;19216:1042;;;;:::o;9987:610::-;10080:7;10100:17;10132:21;10145:7;10132:12;:21::i;:::-;10100:54;;10170:37;10200:5;10170:21;:37::i;:::-;10165:88;;-1:-1:-1;10239:1:0;;-1:-1:-1;10224:17:0;;10165:88;10381:98;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10381:98:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10341:149:0;;;;10306:12;;10320:17;;-1:-1:-1;;;;;10341:25:0;;;10381:98;;10341:149;;;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;10341:149:0;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10305:185:0;;;;10511:7;10503:41;;;;;-1:-1:-1;;;10503:41:0;;;;;;;;;;;;-1:-1:-1;;;10503:41:0;;;;;;;;;;;;;;;10573:4;10562:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10562:27:0;;9987:610;-1:-1:-1;;;;;;9987:610:0:o;11730:270::-;11794:7;-1:-1:-1;;11865:5:0;11883:83;11926:9;;;;;;11909:2;11901:10;;;11883:83;;-1:-1:-1;11985:7:0;11730:270;-1:-1:-1;;11730:270:0:o;16223:172::-;16307:80;16363:4;16337:31;;;;;;-1:-1:-1;;;16337:31:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16337:31:0;;;16327:42;;;;;;16379:6;16371:15;;16307:13;16314:5;16307:6;:13::i;16914:222::-;17060:31;;;-1:-1:-1;;;;;;17060:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;17060:31:0;;;;;;;17050:42;;;;;17007:7;;17126:1;17119:8;;17050:42;17119:8;17111:17;;;;;;16914:222;-1:-1:-1;;;;;;16914:222:0:o;8729:433::-;8787:7;8942:4;8937:10;;8982:4;9014;9055:30;;;;;;;;:::i;:::-;21:26:-1;;;-1:-1;;21:26;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;9045:41:0;;41:4:-1;30:16;;;9045:41:0;-1:-1:-1;;;;;;8894:215:0;;;;;;;;;;;;;-1:-1:-1;;;;;;8894:215:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8894:215:0;;;;;;;8862:266;;;;;;8729:433;-1:-1:-1;;8729:433:0:o;8280:323::-;8338:4;8445:18;;8482:22;;;;;:113;;-1:-1:-1;8528:66:0;8508:87;;;8475:120;-1:-1:-1;;8280:323:0:o;9170:232::-;9219:21;9243:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;9243:30:0;9219:54;;9387:4;9376:8;9370:15;9363:4;9353:8;9349:19;9346:1;9338:54;9334:59;9332:63;;:::o;3729:555::-;-1:-1:-1;;;;;3824:18:0;;;;;;:11;;;:18;;;;;;:23;3816:60;;;;;-1:-1:-1;;;3816:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3939:15;3957:21;3964:5;3971:6;3957;:21::i;:::-;27:10:-1;;39:1;23:18;;45:23;;3989:13:0;:27;;;;;;;;;;4094:20;;3939:39;;-1:-1:-1;;;4094:24:0;4168:37;3989:5;4094:24;3939:39;4168:37;:14;:37;:::i;:::-;-1:-1:-1;;;;;4243:18:0;;;;;;;:11;;;;:18;;-1:-1:-1;;4243:18:0;;;;:33;-1:-1:-1;3729:555:0:o;2183:126::-;-1:-1:-1;;;;;2278:18:0;2254:4;2278:18;;;:11;;;;;:18;;;;;;:23;;;2183:126::o;4292:772::-;-1:-1:-1;;;;;4393:18:0;;4379:11;4393:18;;;:11;;;:18;;;;;;4430:8;4422:46;;;;;-1:-1:-1;;;4422:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4481:11;4495:21;4502:5;4509:6;4495;:21::i;:::-;4481:35;;4527:11;4541:5;:13;;4555:3;4541:18;;;;;;;;;;;;;;;;4527:32;;4570:14;4607:3;4601;:9;4597:285;;;4664:26;:5;4681:3;4686;4664:26;:16;:26;:::i;:::-;4655:35;;4597:285;;;4718:3;4712;:9;4708:174;;;4773:24;:5;4788:3;4793;4773:24;:14;:24;:::i;4708:174::-;4864:7;;;;;;4708:174;4943:3;4919:5;:13;;4933:6;4919:21;;;;;;;;;;;;;;;;;:27;4988:13;;;4984:73;;-1:-1:-1;;;;;5018:18:0;;;;;;:11;;;:18;;;;;:27;;;4984:73;4292:772;;;;;;;:::o;2697:979::-;2848:20;;2750:13;;;;2900:1;2887:14;;2879:51;;;;;-1:-1:-1;;;2879:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3005:24;3012:5;:13;;3026:1;3012:16;;;;;;;3005:24;-1:-1:-1;;;;;3040:18:0;;3061:1;3040:18;;;:11;;;:18;;;;;:22;2987:42;;-1:-1:-1;2987:42:0;-1:-1:-1;3093:1:0;3079:15;;3075:594;;;3134:1;3111:24;:5;3134:1;3111:24;:::i;:::-;;3075:594;;;3243:11;3257:5;:13;;3284:1;3271:10;:14;3257:29;;;;;;;;;;;;;;;;3243:43;;3320:3;3301:5;:13;;3315:1;3301:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;3418:14:0;;3395:37;:5;3418:14;3395:37;:::i;:::-;-1:-1:-1;3496:1:0;3548:26;:5;3496:1;3570:3;3548:26;:16;:26;:::i;:::-;3542:32;;3654:3;3620:5;:11;;:31;3632:18;3646:3;3632:13;:18::i;:::-;-1:-1:-1;;;;;3620:31:0;;;;;;;;;;;;-1:-1:-1;3620:31:0;:37;-1:-1:-1;;3075:594:0;2697:979;;;;:::o;1109:270::-;1347:3;1343:16;-1:-1:-1;;;;;1287:54:0;;;;1284:76;1280:81;;1255:117::o;5072:824::-;5208:4;5234:1;5227:8;;5223:666;;5252:14;5269:5;5289:1;5283:3;:7;5269:22;;;;;;;;;;;;;;;;5252:39;;5306:572;5322:4;5313:6;:13;5306:572;;;5481:4;5487:6;5434:5;5454:1;5448:3;:7;5434:22;;;;;;;;;;;;;;;;5458:5;:13;;5472:3;5458:18;;;;;;;;;;;;;;;;5433:61;;;;-1:-1:-1;5433:61:0;;;;5591:3;;5554:11;;;;5566:21;5580:6;5566:13;:21::i;:::-;-1:-1:-1;;;;;5554:34:0;;;;;;;;;;;;-1:-1:-1;5554:34:0;:40;5695:1;5689:3;:7;5683:13;;5719:3;5726:1;5719:8;5715:62;;;5752:5;;5715:62;5840:5;5860:1;5854:3;:7;5840:22;;;;;;;;;;;;;;;;5831:31;;5306:572;;5904:1738;6078:20;;6044:4;;-1:-1:-1;;6126:10:0;;6149:1486;6166:6;6156:3;6162:1;6156:7;:16;6149:1486;;;6332:16;;6261:1;6255:7;;;6243:9;;6332:5;;6255:7;;6332:16;;;;;;;;;;;;;;6312:36;;6410:18;6458:1;6449:6;:10;6445:764;;;6590:18;6611:5;:13;;6625:1;6629;6625:5;6611:20;;;;;;;;;;;;;;;;6590:41;;6838:10;6826:9;:22;6822:247;;;6886:10;6873:23;;6923:1;6927;6923:5;6919:9;;6822:247;;;7040:9;7027:22;;6822:247;6445:764;;;;-1:-1:-1;7184:9:0;6445:764;7289:10;7282:4;:17;7278:63;;;7320:5;;;;;7278:63;7435:10;7447:4;7394:5;:13;;7408:3;7394:18;;;;;;;;;;;;;;;;7414:5;:13;;7428:1;7414:16;;;;;;;;;;;;;;;;7393:59;;;;-1:-1:-1;7393:59:0;;;;7545:3;;7504:11;;;;7516:25;7530:10;7516:13;:25::i;:::-;-1:-1:-1;;;;;7504:38:0;;;;;;;;;;;;-1:-1:-1;7504:38:0;:44;-1:-1:-1;7622:1:0;;-1:-1:-1;6149:1486:0;;-1:-1:-1;6149:1486:0;;5904:1738;;;;;;;:::o;1714:239::-;1879:11;-1:-1:-1;;;;;1875:60:0;;1851:95::o;13609:8961::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13609:8961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13609:8961:0;;;-1:-1:-1;13609:8961:0;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://f5391b2662880673d8b16fcf23151f1bbef5a452aa07809cbbab89c268ef6029
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.