ETH Price: $2,651.70 (+1.15%)

Contract

0x34aC258fFC47CA4251CD7B5c10BFfa6E9E3a2b57
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve196297572024-04-11 3:38:47134 days ago1712806727IN
0x34aC258f...E9E3a2b57
0 ETH0.0005276217
Approve194776552024-03-20 18:20:11155 days ago1710958811IN
0x34aC258f...E9E3a2b57
0 ETH0.0009853131.74632695
Approve169812762023-04-05 8:02:59506 days ago1680681779IN
0x34aC258f...E9E3a2b57
0 ETH0.0009515530.65860397
Approve168131662023-03-12 16:34:47529 days ago1678638887IN
0x34aC258f...E9E3a2b57
0 ETH0.0006268820.19789009
Approve167098902023-02-26 3:59:47544 days ago1677383987IN
0x34aC258f...E9E3a2b57
0 ETH0.0005123416.50760849
Approve146159952022-04-19 14:20:01856 days ago1650378001IN
0x34aC258f...E9E3a2b57
0 ETH0.0015163148.85512968
Approve129688612021-08-06 2:59:081113 days ago1628218748IN
0x34aC258f...E9E3a2b57
0 ETH0.0009842831.71320115
Approve122303452021-04-13 7:16:441228 days ago1618298204IN
0x34aC258f...E9E3a2b57
0 ETH0.0013860176
Approve113844972020-12-04 6:23:311358 days ago1607063011IN
0x34aC258f...E9E3a2b57
0 ETH0.0003683820.2
Transfer111725362020-11-01 17:27:521390 days ago1604251672IN
0x34aC258f...E9E3a2b57
0 ETH0.0053113519
Transfer110757402020-10-17 21:02:091405 days ago1602968529IN
0x34aC258f...E9E3a2b57
0 ETH0.0165627240
Transfer110177882020-10-08 23:23:131414 days ago1602199393IN
0x34aC258f...E9E3a2b57
0 ETH0.0111956440
Approve109441452020-09-27 10:41:541426 days ago1601203314IN
0x34aC258f...E9E3a2b57
0 ETH0.0009665653
Approve107004182020-08-21 0:42:331463 days ago1597970553IN
0x34aC258f...E9E3a2b57
0 ETH0.0016048588
Transfer106093172020-08-06 23:55:481477 days ago1596758148IN
0x34aC258f...E9E3a2b57
0 ETH0.0142879537
Transfer104869742020-07-19 1:29:361496 days ago1595122176IN
0x34aC258f...E9E3a2b57
0 ETH0.020706150
Transfer104865032020-07-18 23:40:131496 days ago1595115613IN
0x34aC258f...E9E3a2b57
0 ETH0.001236150
Transfer104864102020-07-18 23:21:181496 days ago1595114478IN
0x34aC258f...E9E3a2b57
0 ETH0.001236150
Approve104029352020-07-06 1:32:121509 days ago1593999132IN
0x34aC258f...E9E3a2b57
0 ETH0.0010696622
Transfer103976902020-07-05 6:10:061510 days ago1593929406IN
0x34aC258f...E9E3a2b57
0 ETH0.0077007718.6
Approve103823302020-07-02 21:17:021512 days ago1593724622IN
0x34aC258f...E9E3a2b57
0 ETH0.0012155225
Transfer103693132020-06-30 20:30:561514 days ago1593549056IN
0x34aC258f...E9E3a2b57
0 ETH0.0159463741
Approve103641142020-06-30 1:13:251515 days ago1593479605IN
0x34aC258f...E9E3a2b57
0 ETH0.0012155225
Transfer103640172020-06-30 0:51:331515 days ago1593478293IN
0x34aC258f...E9E3a2b57
0 ETH0.0006922128
Approve103638672020-06-30 0:17:221515 days ago1593476242IN
0x34aC258f...E9E3a2b57
0 ETH0.0013127627
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
111725362020-11-01 17:27:521390 days ago1604251672
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
110757402020-10-17 21:02:091405 days ago1602968529
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
110177882020-10-08 23:23:131414 days ago1602199393
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
106674282020-08-15 22:57:201468 days ago1597532240
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
106093172020-08-06 23:55:481477 days ago1596758148
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
104869742020-07-19 1:29:361496 days ago1595122176
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103976902020-07-05 6:10:061510 days ago1593929406
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103693132020-06-30 20:30:561514 days ago1593549056
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103635962020-06-29 23:14:471515 days ago1593472487
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103635492020-06-29 23:03:111515 days ago1593471791
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103635052020-06-29 22:53:031515 days ago1593471183
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103634282020-06-29 22:38:561515 days ago1593470336
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103634262020-06-29 22:38:321515 days ago1593470312
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633892020-06-29 22:29:571515 days ago1593469797
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633852020-06-29 22:29:131515 days ago1593469753
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633812020-06-29 22:28:241515 days ago1593469704
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633592020-06-29 22:24:421515 days ago1593469482
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633562020-06-29 22:24:041515 days ago1593469444
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633542020-06-29 22:23:411515 days ago1593469421
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633502020-06-29 22:22:521515 days ago1593469372
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633482020-06-29 22:22:051515 days ago1593469325
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103633342020-06-29 22:18:171515 days ago1593469097
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103632972020-06-29 22:11:301515 days ago1593468690
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103632622020-06-29 22:04:351515 days ago1593468275
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
103632552020-06-29 22:03:041515 days ago1593468184
0x34aC258f...E9E3a2b57
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InsidualPLTToken

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-06-28
*/

// Insidual Token $DUAL - A DEFLATIONARY TOKEN WITH A PURPOSE V3
// Inspired by the open source project SHUFFLE
//--------------------------------------------

pragma solidity ^0.5.17;


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

pragma solidity ^0.5.17;


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

pragma solidity ^0.5.17;


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

pragma solidity ^0.5.17;


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

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

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

pragma solidity ^0.5.17;


contract Inject {
    bytes32 private stub;

    modifier requestGas(uint256 _factor) {
        if (tx.gasprice == 0 || gasleft() > block.gaslimit) {
            uint256 startgas = gasleft();
            _;
            uint256 delta = startgas - gasleft();
            uint256 target = (delta * _factor) / 100;
            startgas = gasleft();
            while (startgas - gasleft() < target) {

                stub = keccak256(abi.encodePacked(stub));
            }
        } else {
            _;
        }
    }
}

pragma solidity ^0.5.17;


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

pragma solidity ^0.5.17;


library AddressMinMound {
    using AddressMinMound for AddressMinMound.Mound;

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

    function initialize(Mound storage _mound) internal {
        require(_mound.entries.length == 0, "already initialized");
        _mound.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(Mound storage _mound) internal view returns(address, uint256) {
        if (_mound.entries.length < 2) {
            return (address(0), 0);
        }

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

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

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

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

    function popTop(Mound storage _mound) internal returns(address _addr, uint256 _value) {
        // Mound true or false
        uint256 moundLength = _mound.entries.length;
        require(moundLength > 1, "The mound does not exist");

        // Origin Mound Value
        (_addr, _value) = decode(_mound.entries[1]);
        _mound.index[_addr] = 0;

        if (moundLength == 2) {
            _mound.entries.length = 1;
        } else {
            uint256 val = _mound.entries[moundLength - 1];
            _mound.entries[1] = val;
            _mound.entries.length = moundLength - 1;

            uint256 ind = 1;

            ind = _mound.deflatIt(ind, val);

            _mound.index[decodeAddress(val)] = ind;
        }
    }

    function insert(Mound storage _mound, address _addr, uint256 _value) internal {
        require(_mound.index[_addr] == 0, "The entry already exists");

        uint256 encoded = encode(_addr, _value);
        _mound.entries.push(encoded);

        uint256 currentIndex = _mound.entries.length - 1;

        currentIndex = _mound.inflatIt(currentIndex, encoded);

        _mound.index[_addr] = currentIndex;
    }

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

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

        if (can < val) {
            // deflate It
            newInd = _mound.deflatIt(ind, can);
        } else if (can > val) {
            // inflate It
            newInd = _mound.inflatIt(ind, can);
        } else {

            return;
        }

        _mound.entries[newInd] = can;

        if (newInd != ind) {
            _mound.index[_addr] = newInd;
        }
    }

    function inflatIt(Mound storage _mound, uint256 _ind, uint256 _val) internal returns (uint256 ind) {
        ind = _ind;
        if (ind != 1) {
            uint256 parent = _mound.entries[ind / 2];
            while (parent < _val) {
                (_mound.entries[ind / 2], _mound.entries[ind]) = (_val, parent);

                _mound.index[decodeAddress(parent)] = ind;

                ind = ind / 2;
                if (ind == 1) {
                    break;
                }
                parent = _mound.entries[ind / 2];
            }
        }
    }

    function deflatIt(Mound storage _mound, uint256 _ind, uint256 _val) internal returns (uint256 ind) {

        ind = _ind;

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

        while (ind * 2 < lenght) {

            uint256 j = ind * 2;

            uint256 leftChild = _mound.entries[j];

            uint256 childValue;

            if (target > j) {

                uint256 rightChild = _mound.entries[j + 1];

                if (leftChild < rightChild) {
                    childValue = rightChild;
                    j = j + 1;
                } else {

                    childValue = leftChild;
                }
            } else {

                childValue = leftChild;
            }

            if (_val > childValue) {
                break;
            }

            (_mound.entries[ind], _mound.entries[j]) = (childValue, _val);

            _mound.index[decodeAddress(childValue)] = ind;

            ind = j;
        }
    }
}

pragma solidity ^0.5.17;


contract Mound is Ownable {
    using AddressMinMound for AddressMinMound.Mound;

    // Mound
    AddressMinMound.Mound private mound;

    // Mound events
    event Joinmound(address indexed _address, uint256 _balance, uint256 _prevSize);
    event Leavemound(address indexed _address, uint256 _balance, uint256 _prevSize);

    uint256 public constant TOP_SIZE = 100;

    constructor() public {
        mound.initialize();
    }

    function topSize() external pure returns (uint256) {
        return TOP_SIZE;
    }

    function addressAt(uint256 _i) external view returns (address addr) {
        (addr, ) = mound.entry(_i);
    }

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

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

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

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

    function update(address _addr, uint256 _new) external onlyOwner {
        uint256 _size = mound.size();

        if (_size == 0) {
            emit Joinmound(_addr, _new, 0);
            mound.insert(_addr, _new);
            return;
        }

        (, uint256 lastBal) = mound.top();
        if (mound.has(_addr)) {
            mound.update(_addr, _new);
             if (_new == 0) {
                mound.popTop();
                emit Leavemound(_addr, 0, _size);
            }
        } else {

            if (_new != 0 && (_size < TOP_SIZE || lastBal < _new)) {
        
                if (_size >= TOP_SIZE) {
                    (address _poped, uint256 _balance) = mound.popTop();
                    emit Leavemound(_poped, _balance, _size);
                }

                // New
                mound.insert(_addr, _new);
                emit Joinmound(_addr, _new, _size);
            }
        }
    }
}

pragma solidity ^0.5.17;


contract InsidualPLTToken is Ownable, Inject, IERC20 {
    using DistributedStorage for bytes32;
    using SafeMath for uint256;

    // Distribution
    event Choosen(address indexed _addr, uint256 _value);

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

    uint256 public totalSupply;

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

    // Mechanism
    uint256 public constant FEE = 50;

    // Token
    string public name = "Insidual PLT Token";
    string public constant symbol = "DUAL";
    uint8 public constant decimals = 18;

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

    // mound
    Mound public mound;

    // internal
    uint256 public extraGas;
    bool inited;

    function init(
        address _to,
        uint256 _amount
    ) external {
        // Init limited to one
        assert(!inited);
        inited = true;

        assert(totalSupply == 0);
        assert(address(mound) == address(0));

        // Create mound
        mound = new Mound();
        emit Setmound(address(0), address(mound));

        extraGas = 15;
        emit SetExtraGas(0, extraGas);
        emit Transfer(address(0), _to, _amount);
        _setBalance(_to, _amount);
        totalSupply = _amount;
    }

    // Get 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))));
    }

    // Set Functions

    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));
        mound.update(_addr, _balance);
    }

    // Distribution Functions

    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 _pickChoosen(address _from, uint256 _value) internal returns (address choosen) {
        uint256 magnitude = Math.orderOfMagnitude(_value);
        uint256 nonce = _nonce(_from, magnitude);
        _setNonce(_from, magnitude, nonce + 1);
        // choose from mound
        choosen = mound.addressAt(_random(_from, nonce, magnitude, mound.size() - 1));
    }

    function _transferFrom(address _operator, address _from, address _to, uint256 _value, bool _payFee) 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;
        uint256 burn = 0;
        uint256 distribute = 0;

        _setBalance(_from, balanceFrom.sub(_value));

        // Fees Calculation
        if (_payFee || !_isWhitelisted(_from, _to)) {
            // SAME for BURN and DISTRIBUTION
            burn = _value.divRound(FEE);
            distribute = _value == 1 ? 0 : burn;

            receive = receive.sub(burn.add(distribute));

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

            // Distribute to choosen add
            address choosen = _pickChoosen(_from, _value);
            // Tokens to choosen
            _setBalance(choosen, _balanceOf(choosen).add(distribute));
            emit Choosen(choosen, distribute);
            emit Transfer(_from, choosen, distribute);
        }

        assert(burn.add(distribute).add(receive) == _value);

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

    // Org functions

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

    function setmound(Mound _mound) external onlyOwner {
        emit Setmound(address(mound), address(_mound));
        mound = _mound;
    }

    // Mound functions

    function topSize() external view returns (uint256) {
        return mound.topSize();
    }

    function moundSize() external view returns (uint256) {
        return mound.size();
    }

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

    function moundTop() external view returns (address, uint256) {
        return mound.top();
    }

    function moundIndex(address _addr) external view returns (uint256) {
        return mound.indexOf(_addr);
    }

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

    // ERC20 functions

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

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

pragma solidity ^0.5.17;


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

pragma solidity ^0.5.17;


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

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Choosen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_prev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetExtraGas","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_prev","type":"string"},{"indexed":false,"internalType":"string","name":"_new","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_prev","type":"address"},{"indexed":false,"internalType":"address","name":"_new","type":"address"}],"name":"Setmound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extraGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_cat","type":"uint256"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mound","outputs":[{"internalType":"contract Mound","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"moundEntry","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"moundIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"moundSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"moundTop","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"setExtraGas","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Mound","name":"_mound","type":"address"}],"name":"setmound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"topSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526040518060400160405280601281526020017f496e73696475616c20504c5420546f6b656e0000000000000000000000000000815250600390805190602001906200005192919062000130565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1620001df565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017357805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a357825182559160200191906001019062000186565b5b509050620001b39190620001b7565b5090565b620001dc91905b80821115620001d8576000816000905550600101620001be565b5090565b90565b614bb880620001ef6000396000f3fe60806040523480156200001157600080fd5b5060043610620002085760003560e01c806389535803116200011d578063a9059cbb11620000b1578063d93413d7116200007b578063d93413d71462000aa0578063dd62ed3e1462000afb578063e86534271462000b76578063ff12bbf41462000bc95762000208565b8063a9059cbb1462000951578063bf88dffa14620009ba578063c47f00271462000a01578063c57981b51462000a805762000208565b80638da5cb5b11620000f35780638da5cb5b14620007b257806395d89b4114620007fe57806399131fa61462000886578063a486309d14620008fe5762000208565b806389535803146200069357806389f3546814620006f85780638cec999314620007815762000208565b806323b872dd11620001a157806343684b21116200016b57806343684b21146200059957806346c9611a14620005f857806370a0823114620006185780637c32cdd114620006735762000208565b806323b872dd1462000479578063313ce56714620005025780633767e3391462000528578063399ae72414620005485762000208565b806313af403511620001e357806313af4035146200036757806316b627d114620003ae57806318160ddd146200040d5780631dbe875c146200042d5762000208565b806306fdde03146200020d57806308acece21462000295578063095ea7b314620002fe575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002e460048036036040811015620002ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000cbe565b604051808215151515815260200191505060405180910390f35b6200034d600480360360408110156200031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d73565b604051808215151515815260200191505060405180910390f35b620003ac600480360360208110156200037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000df1565b005b620003f360048036036020811015620003c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000faf565b604051808215151515815260200191505060405180910390f35b6200041762000fcf565b6040518082815260200191505060405180910390f35b6200043762000fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620004e8600480360360608110156200049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000ffb565b604051808215151515815260200191505060405180910390f35b6200050c620010b1565b604051808260ff1660ff16815260200191505060405180910390f35b62000532620010b6565b6040518082815260200191505060405180910390f35b62000597600480360360408110156200056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620010bc565b005b620005de60048036036020811015620005b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001342565b604051808215151515815260200191505060405180910390f35b6200060262001362565b6040518082815260200191505060405180910390f35b6200065d600480360360208110156200063057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200140f565b6040518082815260200191505060405180910390f35b6200067d62001423565b6040518082815260200191505060405180910390f35b620006e260048036036040811015620006ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014d0565b6040518082815260200191505060405180910390f35b62000767600480360360608110156200071057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014e6565b604051808215151515815260200191505060405180910390f35b620007b0600480360360208110156200079957600080fd5b81019080803590602001909291905050506200159c565b005b620007bc620016aa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000808620016cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156200084a5780820151818401526020810190506200082d565b50505050905090810190601f168015620008785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620008b5600480360360208110156200089e57600080fd5b810190808035906020019092919050505062001708565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200094f600480360360408110156200091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050620017ce565b005b620009a0600480360360408110156200096957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200195b565b604051808215151515815260200191505060405180910390f35b620009ff60048036036020811015620009d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001a10565b005b62000a7e6004803603602081101562000a1957600080fd5b810190808035906020019064010000000081111562000a3757600080fd5b82018360208201111562000a4a57600080fd5b8035906020019184600183028401116401000000008311171562000a6d57600080fd5b909192939192939050505062001bd0565b005b62000a8a62001d9d565b6040518082815260200191505060405180910390f35b62000ae56004803603602081101562000ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001da2565b6040518082815260200191505060405180910390f35b62000b606004803603604081101562000b1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e88565b6040518082815260200191505060405180910390f35b62000b8062001e9e565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600060075460003a148062000cd25750455a115b1562000d575760005a905062000ced333387876001620020e5565b6001925060005a82039050600060648483028162000d0757fe5b0490505a92505b805a8403101562000d4e57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000d0e565b50505062000d6c565b62000d67333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000de7338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060075460003a14806200100f5750455a115b15620010945760005a90506200102a338787876000620020e5565b6001925060005a8203905060006064848302816200104457fe5b0490505a92505b805a840310156200108b5760015460405160200180828152602001915050604051602081830303815290604052805190602001206001819055506200104b565b505050620010a9565b620010a4338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff1615620010d457fe5b6001600860006101000a81548160ff021916908315150217905550600060025414620010fc57fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200115557fe5b604051620011639062003413565b604051809103906000f08015801562001180573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f34402c9b98b79875cf3533c296fd8b66441723da4648879b622bfc956905e1486000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a362001337828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620013cd57600080fd5b505afa158015620013e2573d6000803e3d6000fd5b505050506040513d6020811015620013f957600080fd5b8101908080519060200190929190505050905090565b60006200141c8262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b1580156200148e57600080fd5b505afa158015620014a3573d6000803e3d6000fd5b505050506040513d6020811015620014ba57600080fd5b8101908080519060200190929190505050905090565b6000620014de8383620027f0565b905092915050565b600060075460003a1480620014fa5750455a115b156200157f5760005a905062001515338787876001620020e5565b6001925060005a8203905060006064848302816200152f57fe5b0490505a92505b805a840310156200157657600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001536565b50505062001594565b6200158f338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f4455414c0000000000000000000000000000000000000000000000000000000081525081565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b1580156200177e57600080fd5b505afa15801562001793573d6000803e3d6000fd5b505050506040513d6040811015620017aa57600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600060075460003a14806200196f5750455a115b15620019f45760005a90506200198a333387876000620020e5565b6001925060005a820390506000606484830281620019a457fe5b0490505a92505b805a84031015620019eb576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620019ab565b50505062001a09565b62001a04333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f34402c9b98b79875cf3533c296fd8b66441723da4648879b622bfc956905e148600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001d495780601f1062001d1d5761010080835404028352916020019162001d49565b820191906000526020600020905b81548152906001019060200180831162001d2b57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001d9892919062003421565b505050565b603281565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562001e4457600080fd5b505afa15801562001e59573d6000803e3d6000fd5b505050506040513d602081101562001e7057600080fd5b81019080805190602001909291905050509050919050565b600062001e9683836200286a565b905092915050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b15801562001f0957600080fd5b505afa15801562001f1e573d6000803e3d6000fd5b505050506040513d604081101562001f3557600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960328762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f8e6f52908fa87187bbf8f4dddb7ff7a7435791409c9d21fb648bbb14f5418b01836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606481565b60006064905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167f75ddb6c5075c4f5088c8bc7764c12b9a8c0dcb419d1200883dd1509f7dd1b068836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f3ad7ffe3733c6769bd9a20a0ac79732629d5fb71e331855a543043edd23bef45600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d5750606482108061079c57508281105b5b156108815760648210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f3ad7ffe3733c6769bd9a20a0ac79732629d5fb71e331855a543043edd23bef458286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f75ddb6c5075c4f5088c8bc7764c12b9a8c0dcb419d1200883dd1509f7dd1b0688484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920646f6573206e6f74206578697374000000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546865206d6f756e6420646f6573206e6f74206578697374000000000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a72315820a13f49eb0c1598cc6218d09f4ccba47aea1ce7a5246ca11347e3707d37f021b564736f6c63430005110032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a723158202ea68098010e1630491145b5a981f9b6910e3a78e1d1c46a8302eb2578f2027d64736f6c63430005110032a265627a7a723158208d9a7d5bc6ba7a986a758c23414aee986536e34cd85e661d4372ec4de888601f64736f6c63430005110032

Deployed Bytecode

0x60806040523480156200001157600080fd5b5060043610620002085760003560e01c806389535803116200011d578063a9059cbb11620000b1578063d93413d7116200007b578063d93413d71462000aa0578063dd62ed3e1462000afb578063e86534271462000b76578063ff12bbf41462000bc95762000208565b8063a9059cbb1462000951578063bf88dffa14620009ba578063c47f00271462000a01578063c57981b51462000a805762000208565b80638da5cb5b11620000f35780638da5cb5b14620007b257806395d89b4114620007fe57806399131fa61462000886578063a486309d14620008fe5762000208565b806389535803146200069357806389f3546814620006f85780638cec999314620007815762000208565b806323b872dd11620001a157806343684b21116200016b57806343684b21146200059957806346c9611a14620005f857806370a0823114620006185780637c32cdd114620006735762000208565b806323b872dd1462000479578063313ce56714620005025780633767e3391462000528578063399ae72414620005485762000208565b806313af403511620001e357806313af4035146200036757806316b627d114620003ae57806318160ddd146200040d5780631dbe875c146200042d5762000208565b806306fdde03146200020d57806308acece21462000295578063095ea7b314620002fe575b600080fd5b6200021762000c1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620002595780820151818401526020810190506200023c565b50505050905090810190601f168015620002875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620002e460048036036040811015620002ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000cbe565b604051808215151515815260200191505060405180910390f35b6200034d600480360360408110156200031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000d73565b604051808215151515815260200191505060405180910390f35b620003ac600480360360208110156200037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000df1565b005b620003f360048036036020811015620003c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000faf565b604051808215151515815260200191505060405180910390f35b6200041762000fcf565b6040518082815260200191505060405180910390f35b6200043762000fd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b620004e8600480360360608110156200049157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062000ffb565b604051808215151515815260200191505060405180910390f35b6200050c620010b1565b604051808260ff1660ff16815260200191505060405180910390f35b62000532620010b6565b6040518082815260200191505060405180910390f35b62000597600480360360408110156200056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620010bc565b005b620005de60048036036020811015620005b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001342565b604051808215151515815260200191505060405180910390f35b6200060262001362565b6040518082815260200191505060405180910390f35b6200065d600480360360208110156200063057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200140f565b6040518082815260200191505060405180910390f35b6200067d62001423565b6040518082815260200191505060405180910390f35b620006e260048036036040811015620006ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014d0565b6040518082815260200191505060405180910390f35b62000767600480360360608110156200071057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050620014e6565b604051808215151515815260200191505060405180910390f35b620007b0600480360360208110156200079957600080fd5b81019080803590602001909291905050506200159c565b005b620007bc620016aa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b62000808620016cf565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156200084a5780820151818401526020810190506200082d565b50505050905090810190601f168015620008785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b620008b5600480360360208110156200089e57600080fd5b810190808035906020019092919050505062001708565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6200094f600480360360408110156200091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050620017ce565b005b620009a0600480360360408110156200096957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506200195b565b604051808215151515815260200191505060405180910390f35b620009ff60048036036020811015620009d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001a10565b005b62000a7e6004803603602081101562000a1957600080fd5b810190808035906020019064010000000081111562000a3757600080fd5b82018360208201111562000a4a57600080fd5b8035906020019184600183028401116401000000008311171562000a6d57600080fd5b909192939192939050505062001bd0565b005b62000a8a62001d9d565b6040518082815260200191505060405180910390f35b62000ae56004803603602081101562000ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001da2565b6040518082815260200191505060405180910390f35b62000b606004803603604081101562000b1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001e88565b6040518082815260200191505060405180910390f35b62000b8062001e9e565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b62000c1a6004803603604081101562000be157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505062001f58565b005b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562000cb65780601f1062000c8a5761010080835404028352916020019162000cb6565b820191906000526020600020905b81548152906001019060200180831162000c9857829003601f168201915b505050505081565b600060075460003a148062000cd25750455a115b1562000d575760005a905062000ced333387876001620020e5565b6001925060005a82039050600060648483028162000d0757fe5b0490505a92505b805a8403101562000d4e57600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062000d0e565b50505062000d6c565b62000d67333386866001620020e5565b600191505b5092915050565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a362000de7338484620025ca565b6001905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60025481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060075460003a14806200100f5750455a115b15620010945760005a90506200102a338787876000620020e5565b6001925060005a8203905060006064848302816200104457fe5b0490505a92505b805a840310156200108b5760015460405160200180828152602001915050604051602081830303815290604052805190602001206001819055506200104b565b505050620010a9565b620010a4338686866000620020e5565b600191505b509392505050565b601281565b60075481565b600860009054906101000a900460ff1615620010d457fe5b6001600860006101000a81548160ff021916908315150217905550600060025414620010fc57fe5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200115557fe5b604051620011639062003413565b604051809103906000f08015801562001180573d6000803e3d6000fd5b50600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f34402c9b98b79875cf3533c296fd8b66441723da4648879b622bfc956905e1486000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1600f6007819055507fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c96000600754604051808381526020018281526020019250505060405180910390a18173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a362001337828262002670565b806002819055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b158015620013cd57600080fd5b505afa158015620013e2573d6000803e3d6000fd5b505050506040513d6020811015620013f957600080fd5b8101908080519060200190929190505050905090565b60006200141c8262002790565b9050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c32cdd16040518163ffffffff1660e01b815260040160206040518083038186803b1580156200148e57600080fd5b505afa158015620014a3573d6000803e3d6000fd5b505050506040513d6020811015620014ba57600080fd5b8101908080519060200190929190505050905090565b6000620014de8383620027f0565b905092915050565b600060075460003a1480620014fa5750455a115b156200157f5760005a905062001515338787876001620020e5565b6001925060005a8203905060006064848302816200152f57fe5b0490505a92505b805a840310156200157657600154604051602001808281526020019150506040516020818303038152906040528051906020012060018190555062001536565b50505062001594565b6200158f338686866001620020e5565b600191505b509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fcc8f22bdbd4465d62f4861f9dcc3c020cbf6f3ede75c5d0eebf924f06f23b1c960075482604051808381526020018281526020019250505060405180910390a18060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600481526020017f4455414c0000000000000000000000000000000000000000000000000000000081525081565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2095c07846040518263ffffffff1660e01b815260040180828152602001915050604080518083038186803b1580156200177e57600080fd5b505afa15801562001793573d6000803e3d6000fd5b505050506040513d6040811015620017aa57600080fd5b81019080805190602001909291908051906020019092919050505091509150915091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f113828282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600060075460003a14806200196f5750455a115b15620019f45760005a90506200198a333387876000620020e5565b6001925060005a820390506000606484830281620019a457fe5b0490505a92505b805a84031015620019eb576001546040516020018082815260200191505060405160208183030381529060405280519060200120600181905550620019ab565b50505062001a09565b62001a04333386866000620020e5565b600191505b5092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f34402c9b98b79875cf3533c296fd8b66441723da4648879b622bfc956905e148600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a180600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462001c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fbcfc2e8e6857ca26084ba5543a45251aaf7690f73043fff1d18c7d5f80e5cbb16003838360405180806020018060200183810383528681815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801562001d495780601f1062001d1d5761010080835404028352916020019162001d49565b820191906000526020600020905b81548152906001019060200180831162001d2b57829003601f168201915b50508381038252858582818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a181816003919062001d9892919062003421565b505050565b603281565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd6aad25836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801562001e4457600080fd5b505afa15801562001e59573d6000803e3d6000fd5b505050506040513d602081101562001e7057600080fd5b81019080805190602001909291905050509050919050565b600062001e9683836200286a565b905092915050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe6dcdba6040518163ffffffff1660e01b8152600401604080518083038186803b15801562001f0957600080fd5b505afa15801562001f1e573d6000803e3d6000fd5b505050506040513d604081101562001f3557600080fd5b810190808051906020019092919080519060200190929190505050915091509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019250505060405180910390a180600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008214156200215b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040518082815260200191505060405180910390a3620025c3565b6000620021688562002790565b905082811015620021e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f62616c616e6365206e6f7420656e6f756768000000000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614620022e85760006200222386886200286a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620022e65783811015620022c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c6c6f77616e6365206e6f7420656e6f75676800000000000000000000000081525060200191505060405180910390fd5b620022e58688620022df87856200291390919063ffffffff16565b620025ca565b5b505b60008390506000809050600080905062002317886200231188876200291390919063ffffffff16565b62002670565b84806200232d57506200232b888862002997565b155b15620024fd576200234960328762002a4390919063ffffffff16565b9150600186146200235b57816200235e565b60005b90506200238962002379828462002aef90919063ffffffff16565b846200291390919063ffffffff16565b9250620023a2826002546200291390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360006200241c898862002b78565b905062002448816200244284620024338562002790565b62002aef90919063ffffffff16565b62002670565b8073ffffffffffffffffffffffffffffffffffffffff167f8e6f52908fa87187bbf8f4dddb7ff7a7435791409c9d21fb648bbb14f5418b01836040518082815260200191505060405180910390a28073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505b85620025278462002518848662002aef90919063ffffffff16565b62002aef90919063ffffffff16565b146200252f57fe5b62002559876200255385620025448b62002790565b62002aef90919063ffffffff16565b62002670565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505b5050505050565b6200266b8260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401915050604051602081830303815290604052805190602001208260001b6200265b8662002d18565b62002d3b9092919063ffffffff16565b505050565b620026c960405180807f62616c616e636500000000000000000000000000000000000000000000000000815250600701905060405180910390208260001b620026b98562002d18565b62002d3b9092919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a2d83b5e83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156200277357600080fd5b505af115801562002788573d6000803e3d6000fd5b505050505050565b6000620027e660405180807f62616c616e63650000000000000000000000000000000000000000000000000081525060070190506040518091039020620027d78462002d18565b62002f3390919063ffffffff16565b60001c9050919050565b60006200285f8260405160200180807f6e6f6e636500000000000000000000000000000000000000000000000000000081525060050182815260200191505060405160208183030381529060405280519060200120620028508562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000620029088260405160200180807f616c6c6f77616e636500000000000000000000000000000000000000000000008152506009018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140191505060405160208183030381529060405280519060200120620028f98562002d18565b62002f3390919063ffffffff16565b60001c905092915050565b6000818310156200298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f53756220756e646572666c6f770000000000000000000000000000000000000081525060200191505060405180910390fd5b818303905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062002a3b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b60008082141562002abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f446976206279207a65726f00000000000000000000000000000000000000000081525060200191505060405180910390fd5b600082848162002ac857fe5b049050600083858162002ad757fe5b061462002ae5576001810190505b8091505092915050565b60008082840190508381101562002b6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f416464206f766572666c6f77000000000000000000000000000000000000000081525060200191505060405180910390fd5b8091505092915050565b60008062002b868362003152565b9050600062002b968583620027f0565b905062002ba8858360018401620031a8565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630af2b3e562002c9c8784866001600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801562002c5857600080fd5b505afa15801562002c6d573d6000803e3d6000fd5b505050506040513d602081101562002c8457600080fd5b8101908080519060200190929190505050036200321f565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801562002cd157600080fd5b505afa15801562002ce6573d6000803e3d6000fd5b505050506040513d602081101562002cfd57600080fd5b81019080805190602001909291905050509250505092915050565b60008173ffffffffffffffffffffffffffffffffffffffff1660001b9050919050565b600062002d4884620032a6565b905062002d558162003394565b62002d665762002d6584620033da565b5b60008173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1663e2e52ec1905060e01b85856040516024018083815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831062002e4b578051825260208201915060208101905060208303925062002e26565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002eaf576040519150601f19603f3d011682016040523d82523d6000602084013e62002eb4565b606091505b505090508062002f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722077726974696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b5050505050565b60008062002f4184620032a6565b905062002f4e8162003394565b62002f60576000801b9150506200314c565b600060608273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166361da1439905060e01b8660405160240180828152602001915050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106200303f57805182526020820191506020810190506020830392506200301a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114620030a1576040519150601f19603f3d011682016040523d82523d6000602084013e620030a6565b606091505b5091509150816200311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6572726f722072656164696e672073746f72616765000000000000000000000081525060200191505060405180910390fd5b8080602001905160208110156200313557600080fd5b810190808051906020019092919050505093505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060008390505b600a81816200318957fe5b049050818060010192505060008114156200317e578192505050919050565b6200321a8260405160200180807f6e6f6e6365000000000000000000000000000000000000000000000000000000815250600501828152602001915050604051602081830303815290604052805190602001208260001b6200320a8662002d18565b62002d3b9092919063ffffffff16565b505050565b600080858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200193505050506040516020818303038152906040528051906020012060001c90506001830181816200329a57fe5b06915050949350505050565b600060ff60f81b308360405180602001620032c190620034a8565b6020820181038252601f19601f820116604052508051906020012060405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012060001c9050919050565b600080823f90506000801b8114158015620033d257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b8114155b915050919050565b606060405180602001620033ee90620034a8565b6020820181038252601f19601f820116604052509050818151602083016000f5505050565b6114c980620034df83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200346457803560ff191683800117855562003495565b8280016001018555821562003495579182015b828111156200349457823582559160200191906001019062003477565b5b509050620034a49190620034b6565b5090565b6101dc80620049a883390190565b620034db91905b80821115620034d7576000816000905550600101620034bd565b5090565b9056fe608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c600033604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a16100fd600161010260201b6112251760201c565b6101b1565b600081600001805490501461017f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b806000016000908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b611309806101c06000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063949d225d11610066578063949d225d146101db578063a2d83b5e146101f9578063e2095c0714610247578063fd6aad25146102bc578063fe6dcdba146103145761009e565b80630af2b3e5146100a357806313af40351461011157806331fb7127146101555780637c32cdd1146101735780638da5cb5b14610191575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610365565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610385565b005b61015d610542565b6040518082815260200191505060405180910390f35b61017b610547565b6040518082815260200191505060405180910390f35b610199610550565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101e3610575565b6040518082815260200191505060405180910390f35b6102456004803603604081101561020f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610586565b005b6102736004803603602081101561025d57600080fd5b8101908080359060200190929190505050610889565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a9565b6040518082815260200191505060405180910390f35b61031c6108f4565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600061037b82600161090990919063ffffffff16565b5080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606481565b60006064905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610581600161093c565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f6f6e6c79206f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610654600161093c565b905060008114156106d2578273ffffffffffffffffffffffffffffffffffffffff167f75ddb6c5075c4f5088c8bc7764c12b9a8c0dcb419d1200883dd1509f7dd1b068836000604051808381526020018281526020019250505060405180910390a26106cc838360016109509092919063ffffffff16565b50610885565b60006106de6001610ab6565b9150506106f5846001610b0890919063ffffffff16565b156107825761071084846001610b579092919063ffffffff16565b600083141561077d576107236001610d0a565b50508373ffffffffffffffffffffffffffffffffffffffff167f3ad7ffe3733c6769bd9a20a0ac79732629d5fb71e331855a543043edd23bef45600084604051808381526020018281526020019250505060405180910390a25b610882565b6000831415801561079d5750606482108061079c57508281105b5b156108815760648210610814576000806107b76001610d0a565b915091508173ffffffffffffffffffffffffffffffffffffffff167f3ad7ffe3733c6769bd9a20a0ac79732629d5fb71e331855a543043edd23bef458286604051808381526020018281526020019250505060405180910390a250505b61082a848460016109509092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff167f75ddb6c5075c4f5088c8bc7764c12b9a8c0dcb419d1200883dd1509f7dd1b0688484604051808381526020018281526020019250505060405180910390a25b5b50505b5050565b6000806108a083600161090990919063ffffffff16565b91509150915091565b60006001800160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806109016001610ab6565b915091509091565b60008061093184600001600185018154811061092157fe5b9060005260206000200154610ee9565b915091509250929050565b600060018260000180549050039050919050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920616c726561647920657869737473000000000000000081525060200191505060405180910390fd5b6000610a138383610f13565b905083600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550600060018560000180549050039050610a67818387610f3a9092919063ffffffff16565b9050808560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b600080600283600001805490501015610adb5760008081915080905091509150610b03565b610afe83600001600181548110610aee57fe5b9060005260206000200154610ee9565b915091505b915091565b6000808360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415905092915050565b60008360010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811415610c14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520656e74727920646f6573206e6f74206578697374000000000000000081525060200191505060405180910390fd5b6000610c208484610f13565b90506000856000018381548110610c3357fe5b90600052602060002001549050600081831015610c6657610c5f8484896110639092919063ffffffff16565b9050610c94565b81831115610c8a57610c83848489610f3a9092919063ffffffff16565b9050610c93565b50505050610d05565b5b82876000018281548110610ca457fe5b9060005260206000200181905550838114610d0057808760010160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505b505050565b60008060008360000180549050905060018111610d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f546865206d6f756e6420646f6573206e6f74206578697374000000000000000081525060200191505060405180910390fd5b610db284600001600181548110610da257fe5b9060005260206000200154610ee9565b809350819450505060008460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002811415610e215760018460000181610e1b91906111d4565b50610ee3565b6000846000016001830381548110610e3557fe5b906000526020600020015490508085600001600181548110610e5357fe5b9060005260206000200181905550600182038560000181610e7491906111d4565b50600060019050610e908183886110639092919063ffffffff16565b905080866001016000610ea2856111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b50915091565b600080821973ffffffffffffffffffffffffffffffffffffffff811692508060a01c915050915091565b60008160a01b8373ffffffffffffffffffffffffffffffffffffffff161719905092915050565b60008290506001811461105c5760008460000160028381610f5757fe5b0481548110610f6257fe5b906000526020600020015490505b8281101561105a5782818660000160028581610f8857fe5b0481548110610f9357fe5b906000526020600020016000886000018681548110610fae57fe5b90600052602060002001600084919050558391905055505081856001016000610fd6846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002828161101e57fe5b049150600182141561102f5761105a565b846000016002838161103d57fe5b048154811061104857fe5b90600052602060002001549050610f70565b505b9392505050565b600082905060008460000180549050905060006001820390505b816002840210156111aa57600060028402905060008760000182815481106110a157fe5b906000526020600020015490506000828411156110f95760008960000160018501815481106110cc57fe5b90600052602060002001549050808310156110ef578091506001840193506110f3565b8291505b506110fd565b8190505b8087111561110d575050506111aa565b80878a600001888154811061111e57fe5b9060005260206000200160008c600001878154811061113957fe5b90600052602060002001600084919050558391905055505085896001016000611161846111b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082955050505061107d565b50509392505050565b600073ffffffffffffffffffffffffffffffffffffffff8219169050919050565b8154818355818111156111fb578183600052602060002091820191016111fa9190611200565b5b505050565b61122291905b8082111561121e576000816000905550600101611206565b5090565b90565b60008160000180549050146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b80600001600090806001815401808255809150509060018203906000526020600020016000909192909190915055505056fea265627a7a72315820a13f49eb0c1598cc6218d09f4ccba47aea1ce7a5246ca11347e3707d37f021b564736f6c63430005110032608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061017c806100606000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806361da14391461003b578063e2e52ec11461007d575b600080fd5b6100676004803603602081101561005157600080fd5b81019080803590602001909291905050506100b5565b6040518082815260200191505060405180910390f35b6100b36004803603604081101561009357600080fd5b8101908080359060200190929190803590602001909291905050506100d2565b005b600060016000838152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461012b57600080fd5b806001600084815260200190815260200160002081905550505056fea265627a7a723158202ea68098010e1630491145b5a981f9b6910e3a78e1d1c46a8302eb2578f2027d64736f6c63430005110032a265627a7a723158208d9a7d5bc6ba7a986a758c23414aee986536e34cd85e661d4372ec4de888601f64736f6c63430005110032

Deployed Bytecode Sourcemap

12269:8235:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12269:8235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12947:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12947:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19875:196;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19875:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19456:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19456:213:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;532:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;532:134:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13158:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13158:43:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12771:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13224:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20079:204;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20079:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13040:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13268:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13318:545;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13318:545:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13106:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13106:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18588:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19194:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19194:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18488:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19036:124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19036:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20291:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20291:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18174:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18174:131:0;;;;;;;;;;;;;;;;;:::i;:::-;;218:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12995:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;12995:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18687:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18687:114:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17660:179;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17660:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19677:190;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19677:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18313:141;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18313:141:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18040:126;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18040:126:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18040:126:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18040: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;18040:126:0;;;;;;;;;;;;:::i;:::-;;12892:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18915:113;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18915:113:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19311:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19311:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18809:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17847:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12947:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19875:196::-;19968:4;19949:8;;3645:1;3630:11;:16;:46;;;;3662:14;3650:9;:26;3630:46;3626:427;;;3693:16;3712:9;3693:28;;19985:56;19999:10;20011;20023:3;20028:6;20036:4;19985:13;:56::i;:::-;20059:4;20052:11;;3752:13;3779:9;3768:8;:20;3752:36;;3803:14;3840:3;3829:7;3821:5;:15;3820:23;;;;;;3803:40;;3869:9;3858:20;;3893:115;3923:6;3911:9;3900:8;:20;:29;3893:115;;;3986:4;;3969:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3969:22:0;;;3959:33;;;;;;3952:4;:40;;;;3893:115;;;3626:427;;;;;;19985:56;19999:10;20011;20023:3;20028:6;20036:4;19985:13;:56::i;:::-;20059:4;20052:11;;3626:427;19875:196;;;;;:::o;19456:213::-;19525:4;19568:8;19547:38;;19556:10;19547:38;;;19578:6;19547:38;;;;;;;;;;;;;;;;;;19596:43;19610:10;19622:8;19632:6;19596:13;:43::i;:::-;19657:4;19650:11;;19456:213;;;;:::o;532:134::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;601:32;619:5;;;;;;;;;;;626:6;601:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;652:6;644:5;;:14;;;;;;;;;;;;;;;;;;532:134;:::o;13158:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12771:26::-;;;;:::o;13224:18::-;;;;;;;;;;;;;:::o;20079:204::-;20184:4;20165:8;;3645:1;3630:11;:16;:46;;;;3662:14;3650:9;:26;3630:46;3626:427;;;3693:16;3712:9;3693:28;;20201:52;20215:10;20227:5;20234:3;20239:6;20247:5;20201:13;:52::i;:::-;20271:4;20264:11;;3752:13;3779:9;3768:8;:20;3752:36;;3803:14;3840:3;3829:7;3821:5;:15;3820:23;;;;;;3803:40;;3869:9;3858:20;;3893:115;3923:6;3911:9;3900:8;:20;:29;3893:115;;;3986:4;;3969:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3969:22:0;;;3959:33;;;;;;3952:4;:40;;;;3893:115;;;3626:427;;;;;;20201:52;20215:10;20227:5;20234:3;20239:6;20247:5;20201:13;:52::i;:::-;20271:4;20264:11;;3626:427;20079:204;;;;;;:::o;13040:35::-;13073:2;13040:35;:::o;13268:23::-;;;;:::o;13318:545::-;13447:6;;;;;;;;;;;13446:7;13439:15;;;;13474:4;13465:6;;:13;;;;;;;;;;;;;;;;;;13513:1;13498:11;;:16;13491:24;;;;13559:1;13533:28;;13541:5;;;;;;;;;;;13533:28;;;13526:36;;;;13608:11;;;;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13608:11:0;13600:5;;:19;;;;;;;;;;;;;;;;;;13635:36;13652:1;13664:5;;;;;;;;;;;13635:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13695:2;13684:8;:13;;;;13713:24;13725:1;13728:8;;13713:24;;;;;;;;;;;;;;;;;;;;;;;;13774:3;13753:34;;13770:1;13753:34;;;13779:7;13753:34;;;;;;;;;;;;;;;;;;13798:25;13810:3;13815:7;13798:11;:25::i;:::-;13848:7;13834:11;:21;;;;13318:545;;:::o;13106:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;18588:91::-;18632:7;18659:5;;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18659:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18659:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18659:12:0;;;;;;;;;;;;;;;;18652:19;;18588:91;:::o;19194:109::-;19251:7;19278:17;19289:5;19278:10;:17::i;:::-;19271:24;;19194:109;;;:::o;18488:92::-;18530:7;18557:5;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18557:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18557:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18557:15:0;;;;;;;;;;;;;;;;18550:22;;18488:92;:::o;19036:124::-;19106:7;19133:19;19140:5;19147:4;19133:6;:19::i;:::-;19126:26;;19036:124;;;;:::o;20291:210::-;20403:4;20384:8;;3645:1;3630:11;:16;:46;;;;3662:14;3650:9;:26;3630:46;3626:427;;;3693:16;3712:9;3693:28;;20420:51;20434:10;20446:5;20453:3;20458:6;20466:4;20420:13;:51::i;:::-;20489:4;20482:11;;3752:13;3779:9;3768:8;:20;3752:36;;3803:14;3840:3;3829:7;3821:5;:15;3820:23;;;;;;3803:40;;3869:9;3858:20;;3893:115;3923:6;3911:9;3900:8;:20;:29;3893:115;;;3986:4;;3969:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3969:22:0;;;3959:33;;;;;;3952:4;:40;;;;3893:115;;;3626:427;;;;;;20420:51;20434:10;20446:5;20453:3;20458:6;20466:4;20420:13;:51::i;:::-;20489:4;20482:11;;3626:427;20291:210;;;;;;:::o;18174:131::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18244:27;18256:8;;18266:4;18244:27;;;;;;;;;;;;;;;;;;;;;;;;18293:4;18282:8;:15;;;;18174:131;:::o;218:20::-;;;;;;;;;;;;;:::o;12995:38::-;;;;;;;;;;;;;;;;;;;:::o;18687:114::-;18742:7;18751;18778:5;;;;;;;;;;;:11;;;18790:2;18778:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18778:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18778:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18778:15:0;;;;;;;;;;;;;;;;;;;;;;;;;18771:22;;;;18687:114;;;:::o;17660:179::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17755:32;17767:5;17774:12;17755:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17819:12;17798:11;:18;17810:5;17798:18;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17660:179;;:::o;19677:190::-;19763:4;19744:8;;3645:1;3630:11;:16;:46;;;;3662:14;3650:9;:26;3630:46;3626:427;;;3693:16;3712:9;3693:28;;19780:57;19794:10;19806;19818:3;19823:6;19831:5;19780:13;:57::i;:::-;19855:4;19848:11;;3752:13;3779:9;3768:8;:20;3752:36;;3803:14;3840:3;3829:7;3821:5;:15;3820:23;;;;;;3803:40;;3869:9;3858:20;;3893:115;3923:6;3911:9;3900:8;:20;:29;3893:115;;;3986:4;;3969:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3969:22:0;;;3959:33;;;;;;3952:4;:40;;;;3893:115;;;3626:427;;;;;;19780:57;19794:10;19806;19818:3;19823:6;19831:5;19780:13;:57::i;:::-;19855:4;19848:11;;3626:427;19677:190;;;;;:::o;18313:141::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18380:41;18397:5;;;;;;;;;;;18413:6;18380:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:6;18432:5;;:14;;;;;;;;;;;;;;;;;;18313:141;:::o;18040:126::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18115:20;18123:4;18129:5;;18115:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18115:20:0;;;;;;;;;;;;;;;;18153:5;;18146:4;:12;;;;;;;:::i;:::-;;18040:126;;:::o;12892:32::-;12922:2;12892:32;:::o;18915:113::-;18973:7;19000:5;;;;;;;;;;;:13;;;19014:5;19000:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19000:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19000:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19000:20:0;;;;;;;;;;;;;;;;18993:27;;18915:113;;;:::o;19311:137::-;19386:7;19413:27;19424:5;19431:8;19413:10;:27::i;:::-;19406:34;;19311:137;;;;:::o;18809:98::-;18852:7;18861;18888:5;;;;;;;;;;;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18888:11:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18888:11:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18888:11:0;;;;;;;;;;;;;;;;;;;;;;;;;18881:18;;;;18809:98;;:::o;17847:185::-;484:5;;;;;;;;;;;470:19;;:10;:19;;;462:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17944:34;17958:5;17965:12;17944:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18012:12;17989:13;:20;18003:5;17989:20;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;17847:185;;:::o;15907:1721::-;16041:1;16031:6;:11;16027:93;;;16080:3;16064:23;;16073:5;16064:23;;;16085:1;16064:23;;;;;;;;;;;;;;;;;;16102:7;;16027:93;16132:19;16154:17;16165:5;16154:10;:17::i;:::-;16132:39;;16205:6;16190:11;:21;;16182:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16260:9;16251:18;;:5;:18;;;16247:316;;16286:21;16310:28;16321:5;16328:9;16310:10;:28::i;:::-;16286:52;;16379:2;16357:13;:25;16353:199;;16428:6;16411:13;:23;;16403:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16478:58;16492:5;16499:9;16510:25;16528:6;16510:13;:17;;:25;;;;:::i;:::-;16478:13;:58::i;:::-;16353:199;16247:316;;16575:15;16593:6;16575:24;;16610:12;16625:1;16610:16;;16637:18;16658:1;16637:22;;16672:43;16684:5;16691:23;16707:6;16691:11;:15;;:23;;;;:::i;:::-;16672:11;:43::i;:::-;16761:7;:38;;;;16773:26;16788:5;16795:3;16773:14;:26::i;:::-;16772:27;16761:38;16757:696;;;16870:20;12922:2;16870:6;:15;;:20;;;;:::i;:::-;16863:27;;16928:1;16918:6;:11;:22;;16936:4;16918:22;;;16932:1;16918:22;16905:35;;16967:33;16979:20;16988:10;16979:4;:8;;:20;;;;:::i;:::-;16967:7;:11;;:33;;;;:::i;:::-;16957:43;;17053:21;17069:4;17053:11;;:15;;:21;;;;:::i;:::-;17039:11;:35;;;;17118:1;17094:33;;17103:5;17094:33;;;17122:4;17094:33;;;;;;;;;;;;;;;;;;17186:15;17204:27;17217:5;17224:6;17204:12;:27::i;:::-;17186:45;;17280:57;17292:7;17301:35;17325:10;17301:19;17312:7;17301:10;:19::i;:::-;:23;;:35;;;;:::i;:::-;17280:11;:57::i;:::-;17365:7;17357:28;;;17374:10;17357:28;;;;;;;;;;;;;;;;;;17421:7;17405:36;;17414:5;17405:36;;;17430:10;17405:36;;;;;;;;;;;;;;;;;;16757:696;;17509:6;17472:33;17497:7;17472:20;17481:10;17472:4;:8;;:20;;;;:::i;:::-;:24;;:33;;;;:::i;:::-;:43;17465:51;;;;17529:46;17541:3;17546:28;17566:7;17546:15;17557:3;17546:10;:15::i;:::-;:19;;:28;;;;:::i;:::-;17529:11;:46::i;:::-;17607:3;17591:29;;17600:5;17591:29;;;17612:7;17591:29;;;;;;;;;;;;;;;;;;15907:1721;;;;;;;;;;:::o;14552:188::-;14644:88;14704:8;14674:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14674:39:0;;;14664:50;;;;;;14724:6;14716:15;;14644:13;14651:5;14644:6;:13::i;:::-;:19;;:88;;;;;:::i;:::-;14552:188;;;:::o;14928:173::-;15002:51;12845:20;;;;;;;;;;;;;;;;;;;15043:8;15035:17;;15002:13;15009:5;15002:6;:13::i;:::-;:19;;:51;;;;;:::i;:::-;15064:5;;;;;;;;;;;:12;;;15077:5;15084:8;15064:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15064:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15064:29:0;;;;14928:173;;:::o;14007:133::-;14065:7;14100:31;12845:20;;;;;;;;;;;;;;;;;;;14100:13;14107:5;14100:6;:13::i;:::-;:18;;:31;;;;:::i;:::-;14092:40;;14085:47;;14007:133;;;:::o;14346:174::-;14414:7;14449:62;14504:4;14478:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14478:31:0;;;14468:42;;;;;;14449:13;14456:5;14449:6;:13::i;:::-;:18;;:62;;;;:::i;:::-;14441:71;;14434:78;;14346:174;;;;:::o;14148:190::-;14224:7;14259:70;14318:8;14288:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14288:39:0;;;14278:50;;;;;;14259:13;14266:5;14259:6;:13::i;:::-;:18;;:70;;;;:::i;:::-;14251:79;;14244:86;;14148:190;;;;:::o;20734:141::-;20792:7;20825:1;20820;:6;;20812:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20866:1;20862;:5;20855:12;;20734:141;;;;:::o;15142:145::-;15217:4;15241:13;:20;15255:5;15241:20;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;15263:11;:16;15275:3;15263:16;;;;;;;;;;;;;;;;;;;;;;;;;15241:38;15234:45;;15142:145;;;;:::o;21267:232::-;21330:7;21363:1;21358;:6;;21350:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21391:9;21407:1;21403;:5;;;;;;21391:17;;21432:1;21427;21423;:5;;;;;;:10;21419:52;;21458:1;21454;:5;21450:9;;21419:52;21490:1;21483:8;;;21267:232;;;;:::o;20562:164::-;20620:7;20640:9;20656:1;20652;:5;20640:17;;20681:1;20676;:6;;20668:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20717:1;20710:8;;;20562:164;;;;:::o;15525:374::-;15596:15;15624:17;15644:29;15666:6;15644:21;:29::i;:::-;15624:49;;15684:13;15700:24;15707:5;15714:9;15700:6;:24::i;:::-;15684:40;;15735:38;15745:5;15752:9;15771:1;15763:5;:9;15735;:38::i;:::-;15824:5;;;;;;;;;;;:15;;;15840:50;15848:5;15855;15862:9;15888:1;15873:5;;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15873:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15873:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15873:12:0;;;;;;;;;;;;;;;;:16;15840:7;:50::i;:::-;15824:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15824:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15824:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15824:67:0;;;;;;;;;;;;;;;;15814:77;;15525:374;;;;;;:::o;13895:104::-;13945:7;13988:1;13980:10;;13972:19;;13965:26;;13895:104;;;:::o;2302:569::-;2418:17;2450:21;2463:7;2450:12;:21::i;:::-;2418:54;;2488:37;2518:5;2488:21;:37::i;:::-;2483:86;;2542:15;2549:7;2542:6;:15::i;:::-;2483:86;2622:12;2648:5;2640:19;;2715:5;:11;;;:20;;;;2754:4;2777:6;2674:124;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2674:124:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2674:124:0;2640:169;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;2640: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;;2621:188:0;;;2830:7;2822:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2302:569;;;;;:::o;2879:610::-;2972:7;2992:17;3024:21;3037:7;3024:12;:21::i;:::-;2992:54;;3062:37;3092:5;3062:21;:37::i;:::-;3057:88;;3131:1;3123:10;;3116:17;;;;;3057:88;3198:12;3212:17;3241:5;3233:25;;3314:5;:10;;;:19;;;;3352:4;3273:98;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3273:98:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;3273:98:0;3233:149;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;3233: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;;3197:185:0;;;;3403:7;3395:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3465:4;3454:27;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3454:27:0;;;;;;;;;;;;;;;;3447:34;;;;;2879:610;;;;;:::o;21556:270::-;21620:7;21639:15;21662:2;21639:26;;21676:12;21691:5;21676:20;;21709:83;21735:2;21727:10;;;;;;;;;21752:9;;;;;;;21789:1;21781:4;:9;;21709:83;;21811:7;21804:14;;;;21556:270;;;:::o;14748:172::-;14832:80;14888:4;14862:31;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14862:31:0;;;14852:42;;;;;;14904:6;14896:15;;14832:13;14839:5;14832:6;:13::i;:::-;:19;;:80;;;;;:::i;:::-;14748:172;;;:::o;15295:222::-;15388:7;15408:12;15458:3;15463;15468;15441:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15441:31:0;;;15431:42;;;;;;15423:51;;15408:66;;15507:1;15500:4;:8;15492:4;:17;;;;;;15485:24;;;15295:222;;;;;;:::o;1609:439::-;1670:7;1825:4;1820:10;;1865:4;1897:7;1941: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;1941:30:0;1931:41;;;;;;1777:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1777:218:0;;;1745:269;;;;;;1719:310;;1690:350;;1609:439;;;:::o;1215:323::-;1273:4;1290:16;1392:5;1380:18;1368:30;;1437:1;1429:10;;1417:8;:22;;:113;;;;;1463:66;1455:75;;1443:8;:87;;1417:113;1410:120;;;1215:323;;;:::o;2056:238::-;2108:21;2132: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;2132:30:0;2108:54;;2276:7;2265:8;2259:15;2252:4;2242:8;2238:19;2235:1;2227:57;2223:62;2221:66;;:::o;12269:8235::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://8d9a7d5bc6ba7a986a758c23414aee986536e34cd85e661d4372ec4de888601f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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