ETH Price: $3,315.41 (+1.66%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit161029352022-12-03 7:56:11790 days ago1670054171IN
0x4a82D25C...0F2A09E5C
0 ETH0.00234612.33198995
Withdraw161029282022-12-03 7:54:47790 days ago1670054087IN
0x4a82D25C...0F2A09E5C
0 ETH0.0033533712.69583442
Withdraw160795482022-11-30 1:33:35793 days ago1669772015IN
0x4a82D25C...0F2A09E5C
0 ETH0.0003290610.48377755
Withdraw160795472022-11-30 1:33:23793 days ago1669772003IN
0x4a82D25C...0F2A09E5C
0 ETH0.0011488210.39274982
Withdraw160557662022-11-26 17:51:23797 days ago1669485083IN
0x4a82D25C...0F2A09E5C
0 ETH0.0015658514.16380726
Deposit160541602022-11-26 12:28:23797 days ago1669465703IN
0x4a82D25C...0F2A09E5C
0 ETH0.0036747311.24872825
Deposit160495972022-11-25 21:11:11798 days ago1669410671IN
0x4a82D25C...0F2A09E5C
0 ETH0.0015309210.14585881
Withdraw160355412022-11-23 22:03:59800 days ago1669241039IN
0x4a82D25C...0F2A09E5C
0 ETH0.0031323612.68060947
Withdraw159569912022-11-12 22:42:11810 days ago1668292931IN
0x4a82D25C...0F2A09E5C
0 ETH0.0013087511.83694204
Withdraw159569712022-11-12 22:38:11811 days ago1668292691IN
0x4a82D25C...0F2A09E5C
0 ETH0.0012322311.14729737
Deposit159423352022-11-10 21:34:35813 days ago1668116075IN
0x4a82D25C...0F2A09E5C
0 ETH0.003464122.95751657
Deposit159061642022-11-05 20:21:11818 days ago1667679671IN
0x4a82D25C...0F2A09E5C
0 ETH0.0017626612.90381017
Withdraw159060722022-11-05 20:02:47818 days ago1667678567IN
0x4a82D25C...0F2A09E5C
0 ETH0.0011279512.41581297
Withdraw158921742022-11-03 21:28:35820 days ago1667510915IN
0x4a82D25C...0F2A09E5C
0 ETH0.0017761616.06615868
Withdraw158748102022-11-01 11:14:23822 days ago1667301263IN
0x4a82D25C...0F2A09E5C
0 ETH0.001142410.33352151
Withdraw158419812022-10-27 21:05:35827 days ago1666904735IN
0x4a82D25C...0F2A09E5C
0 ETH0.0018037816.31604689
Withdraw158208982022-10-24 22:24:47830 days ago1666650287IN
0x4a82D25C...0F2A09E5C
0 ETH0.0015199413.74853834
Withdraw158208972022-10-24 22:24:23830 days ago1666650263IN
0x4a82D25C...0F2A09E5C
0 ETH0.0032121714.13093209
Withdraw158140332022-10-23 23:16:47830 days ago1666567007IN
0x4a82D25C...0F2A09E5C
0 ETH0.0028752310.88560184
Withdraw158036492022-10-22 12:28:23832 days ago1666441703IN
0x4a82D25C...0F2A09E5C
0 ETH0.0039165715.85528465
Withdraw158036472022-10-22 12:27:59832 days ago1666441679IN
0x4a82D25C...0F2A09E5C
0 ETH0.0039257117.26900358
Withdraw157904542022-10-20 16:18:23834 days ago1666282703IN
0x4a82D25C...0F2A09E5C
0 ETH0.0055426650.13036332
Withdraw157675262022-10-17 11:28:35837 days ago1666006115IN
0x4a82D25C...0F2A09E5C
0 ETH0.0017298815.64757561
Withdraw157625392022-10-16 18:43:11838 days ago1665945791IN
0x4a82D25C...0F2A09E5C
0 ETH0.0031608828.59157529
Withdraw157447262022-10-14 7:01:35840 days ago1665730895IN
0x4a82D25C...0F2A09E5C
0 ETH0.0016773515.17239109
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PalsStaking

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-11
*/

/**
 *Submitted for verification at BscScan.com on 2021-11-22
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }


    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }


    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }


    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

pragma solidity >=0.4.0;

interface IBEP20 {
 
    function totalSupply() external view returns (uint256);
   
    function decimals() external view returns (uint8);
   
    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function getOwner() external view returns (address);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address _owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin\contracts\utils\Address.sol



pragma solidity >=0.6.2 <0.8.0;

library Address {
   
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }


    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

   
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }


    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.6.0;

library SafeBEP20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IBEP20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IBEP20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IBEP20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeBEP20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            "SafeBEP20: decreased allowance below zero"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IBEP20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeBEP20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeBEP20: BEP20 operation did not succeed");
        }
    }
}

// File: contracts\libs\ITokenReferral.sol



pragma solidity 0.6.12;

interface ITokenReferral {
    /**
     * @dev Record referral.
     */
    function recordReferral(address user, address referrer) external;

    /**
     * @dev Record referral commission.
     */
    function recordReferralCommission(address referrer, uint256 commission) external;

    /**
     * @dev Get the referrer address that referred the user.
     */
    function getReferrer(address user) external view returns (address);
}

// File: node_modules\@openzeppelin\contracts\utils\Context.sol



pragma solidity >=0.6.0 <0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin\contracts\access\Ownable.sol



pragma solidity >=0.6.0 <0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin\contracts\utils\ReentrancyGuard.sol



pragma solidity >=0.6.0 <0.8.0;


abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }


    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;


        _status = _NOT_ENTERED;
    }
}

pragma solidity 0.6.12;

contract PalsStaking is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using SafeBEP20 for IBEP20;

    // Info of each user.
    struct UserInfo {
        uint256 amount;         // How many LP tokens the user has provided.
        uint256 rewardDebt;     // Reward debt. See explanation below.
        uint256 rewardLockedUp;  // Reward locked up.
        uint256 nextHarvestUntil; // When can the user harvest again.
        uint256 lastDepositTime; // when user deposited
    }

    // Info of each pool.
    struct PoolInfo {
        IBEP20 lpToken;             // Address of LP token contract.
        uint256 allocPoint;         // How many allocation points assigned to this pool. PALS to distribute per block.
        uint256 lastRewardBlock;    // Last block number that PALS distribution occurs.
        uint256 accTokenPerShare;   // Accumulated PALS per share, times 1e12. See below.
        uint16 depositFeeBP;        // Deposit fee in basis points
        uint256 harvestInterval;    // Harvest interval in seconds
        uint256 withdrawLockPeriod; // lock period for this pool
        uint256 balance;            // pool token balance, allow multiple pools with same token
    }

    IBEP20 public token;
    // Dev address.
    address public devAddress;
    // Deposit Fee address
    address public feeAddress;
    uint256 public tokenPerBlock;
    uint256 public constant BONUS_MULTIPLIER = 1;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    uint256 public startBlock;
    uint256 public endBlock;
    // Total locked up rewards
    uint256 public totalLockedUpRewards;

    // Token referral contract address.
    ITokenReferral public tokenReferral;
    // Referral commission rate in basis points.
    uint16 public referralCommissionRate = 100;
    // Max referral commission rate: 10%.
    uint16 public constant MAXIMUM_REFERRAL_COMMISSION_RATE = 1000;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmissionRateUpdated(address indexed caller, uint256 previousAmount, uint256 newAmount);
    event ReferralCommissionPaid(address indexed user, address indexed referrer, uint256 commissionAmount);
    event RewardLockedUp(address indexed user, uint256 indexed pid, uint256 amountLockedUp);

    constructor(
        IBEP20 _token,
        uint256 _startBlock,
        uint256 _tokenPerBlock
    ) public {
        token = _token;
        startBlock = _startBlock;
        tokenPerBlock = _tokenPerBlock;
        token.balanceOf( address(this) );
        devAddress = msg.sender;
        feeAddress = msg.sender;
    }

    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IBEP20 _lpToken, uint16 _depositFeeBP, uint256 _harvestInterval, bool _withUpdate,
        uint256 _withdrawLockPeriod ) external onlyOwner {
        require(_depositFeeBP <= 400, "add: invalid deposit fee basis points");
        require(_withdrawLockPeriod <= 90 days, "withdraw lock must be less than 90 days");
        require(_harvestInterval <= 90 days, "add: invalid harvest interval");
        if (_withUpdate) {
            massUpdatePools();
        }
        _lpToken.balanceOf(address(this)); // prevent adding invalid token.
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
            lpToken: _lpToken,
            allocPoint: _allocPoint,
            lastRewardBlock: lastRewardBlock,
            accTokenPerShare: 0,
            balance: 0,
            depositFeeBP: _depositFeeBP,
            harvestInterval: _harvestInterval,
            withdrawLockPeriod: _withdrawLockPeriod
        }));
    }

    function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, uint256 _harvestInterval, bool _withUpdate,
        uint256 _withdrawLockPeriod ) external onlyOwner {
        require(_depositFeeBP <= 400, "set: invalid deposit fee basis points");
        require(_withdrawLockPeriod <= 90 days, "withdraw lock must be less than 90 days");
        require(_harvestInterval <= 90 days, "set: invalid harvest interval");
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
        poolInfo[_pid].depositFeeBP = _depositFeeBP;
        poolInfo[_pid].harvestInterval = _harvestInterval;
        poolInfo[_pid].withdrawLockPeriod = _withdrawLockPeriod;
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
        if( treasure == 0 ){
            // if contract has no balance, stop emission.
            return 0;
        }
        return _to.sub(_from).mul(BONUS_MULTIPLIER);
    }

    function pendingToken(uint256 _pid, address _user) public view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accTokenPerShare = pool.accTokenPerShare;
        uint256 lpSupply = pool.balance;
        uint256 myBlock = (block.number <= endBlock ) ? block.number : endBlock;
        if (myBlock > pool.lastRewardBlock && lpSupply != 0 ) {
            uint256 multiplier = getMultiplier(pool.lastRewardBlock, myBlock);
            uint256 tokenReward = multiplier.mul(tokenPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            accTokenPerShare = accTokenPerShare.add(tokenReward.mul(1e12).div(lpSupply));
        }
        uint256 pending = user.amount.mul(accTokenPerShare).div(1e12).sub(user.rewardDebt);
        return pending.add(user.rewardLockedUp);
    }

    function canHarvest(uint256 _pid, address _user) public view returns (bool) {
        UserInfo storage user = userInfo[_pid][_user];
        return block.timestamp >= user.nextHarvestUntil;
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        uint256 myBlock = (block.number <= endBlock ) ? block.number : endBlock;
        if (myBlock <= pool.lastRewardBlock) {
            return;
        }
        uint256 lpSupply = pool.balance;
        if (lpSupply == 0 || pool.allocPoint == 0) {
            pool.lastRewardBlock = myBlock;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, myBlock);
        uint256 tokenReward = multiplier.mul(tokenPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
        mint(address(this), tokenReward);
        pool.accTokenPerShare = pool.accTokenPerShare.add(tokenReward.mul(1e12).div(lpSupply));
        pool.lastRewardBlock = myBlock;
    }

    function deposit(uint256 _pid, uint256 _amount, address _referrer) external nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
        if (_amount > 0 && address(tokenReferral) != address(0) && _referrer != address(0) && _referrer != msg.sender) {
            tokenReferral.recordReferral(msg.sender, _referrer);
        }
        payOrLockupPendingToken(_pid);
        if (_amount > 0) {

            uint256 oldBalance = pool.lpToken.balanceOf(address(this));
            pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
            uint256 newBalance = pool.lpToken.balanceOf(address(this));
            _amount = newBalance.sub(oldBalance);

            pool.balance = pool.balance.add(_amount);

            if (pool.depositFeeBP > 0) {
                uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000);
                pool.lpToken.safeTransfer(feeAddress, depositFee);
                user.amount = user.amount.add(_amount).sub(depositFee);
            } else {
                user.amount = user.amount.add(_amount);
            }
            user.lastDepositTime = block.timestamp;
        }
        user.rewardDebt = user.amount.mul(pool.accTokenPerShare).div(1e12);
        emit Deposit(msg.sender, _pid, _amount);
    }

    function withdraw(uint256 _pid, uint256 _amount) external nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        payOrLockupPendingToken(_pid);
        if (_amount > 0) {
            // check withdraw is locked:
            if( pool.withdrawLockPeriod > 0){
                bool isLocked = block.timestamp < user.lastDepositTime + pool.withdrawLockPeriod;
                require( isLocked == false, "withdraw still locked" );
            }
            user.amount = user.amount.sub(_amount);
            pool.balance = pool.balance.sub(_amount);
            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accTokenPerShare).div(1e12);
        emit Withdraw(msg.sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) external nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 amount = user.amount;
        pool.balance = pool.balance.sub(amount);
        user.amount = 0;
        user.rewardDebt = 0;
        user.rewardLockedUp = 0;
        user.nextHarvestUntil = 0;
        pool.lpToken.safeTransfer(address(msg.sender), amount);
        emit EmergencyWithdraw(msg.sender, _pid, amount);
    }

    function payOrLockupPendingToken(uint256 _pid) internal {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        if (user.nextHarvestUntil == 0) {
            user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
        }

        uint256 pending = user.amount.mul(pool.accTokenPerShare).div(1e12).sub(user.rewardDebt);
        if (canHarvest(_pid, msg.sender)) {
            if (pending > 0 || user.rewardLockedUp > 0) {
                uint256 totalRewards = pending.add(user.rewardLockedUp);

                // reset lockup
                totalLockedUpRewards = totalLockedUpRewards.sub(user.rewardLockedUp);
                user.rewardLockedUp = 0;
                user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);

                // send rewards
                safeTokenTransfer(msg.sender, totalRewards);
                payReferralCommission(msg.sender, totalRewards);
            }
        } else if (pending > 0) {
            user.rewardLockedUp = user.rewardLockedUp.add(pending);
            totalLockedUpRewards = totalLockedUpRewards.add(pending);
            emit RewardLockedUp(msg.sender, _pid, pending);
        }
    }

    // Update dev address by the previous dev.
    function setDevAddress(address _devAddress) external {
        require(msg.sender == devAddress, "setDevAddress: FORBIDDEN");
        require(_devAddress != address(0), "setDevAddress: ZERO");
        devAddress = _devAddress;
    }

    function setFeeAddress(address _feeAddress) external {
        require(msg.sender == feeAddress, "setFeeAddress: FORBIDDEN");
        require(_feeAddress != address(0), "setFeeAddress: ZERO");
        feeAddress = _feeAddress;
    }

    // Update the token referral contract address by the owner
    function setTokenReferral(ITokenReferral _tokenReferral) external onlyOwner {
        tokenReferral = _tokenReferral;
    }

    // Update referral commission rate by the owner
    function setReferralCommissionRate(uint16 _referralCommissionRate) external onlyOwner {
        require(_referralCommissionRate <= MAXIMUM_REFERRAL_COMMISSION_RATE, "setReferralCommissionRate: invalid referral commission rate basis points");
        referralCommissionRate = _referralCommissionRate;
    }

    // Pay referral commission to the referrer who referred this user.
    function payReferralCommission(address _user, uint256 _pending) internal {
        if (address(tokenReferral) != address(0) && referralCommissionRate > 0) {
            address referrer = tokenReferral.getReferrer(_user);
            uint256 commissionAmount = _pending.mul(referralCommissionRate).div(10000);

            if (referrer != address(0) && commissionAmount > 0) {
                mint(referrer, commissionAmount);
                tokenReferral.recordReferralCommission(referrer, commissionAmount);
                emit ReferralCommissionPaid(_user, referrer, commissionAmount);
            }
        }
    }


    uint256 public treasure;
    uint256 public allocated;
    uint256 public blocks;
    event Mint(address to,  uint256 amount);
    function addBalance(uint256 _amount, uint256 _endBlock) external onlyOwner {
        require( _amount > 0 , "err _amount=0");
        require( _endBlock > block.number , "err start<=block");

        uint256 oldBalance = token.balanceOf(address(this));
        token.safeTransferFrom(msg.sender, address(this), _amount);
        uint256 newBalance = token.balanceOf(address(this));
        _amount = newBalance.sub(oldBalance);

        endBlock = _endBlock;
        treasure = treasure.add(_amount);
        blocks = _endBlock - block.number;
        tokenPerBlock = treasure.div(blocks);
        startBlock = block.number;
    }
    function mint(address to,  uint256 amount ) internal {
        if( amount > treasure ){
            // treasure is 0, stop emission.
            tokenPerBlock = 0;
            amount = treasure; // last ming
        }
        treasure = treasure.sub(amount);
        allocated = allocated.add(amount);
        emit Mint(to, amount);
    }
    // Safe token transfer function, just in case if rounding error causes pool to not have enough Tokens
    function safeTokenTransfer(address _to, uint256 _amount) internal {
        uint256 tokenBal = token.balanceOf(address(this));
        if (_amount > tokenBal) {
            token.transfer(_to, tokenBal);
        } else {
            token.transfer(_to, _amount);
        }
    }

    function getBlock() public view returns (uint256) {
        return block.number;
    }

    function recoverTreasure( IBEP20 recoverToken, uint256 amount) external onlyOwner{
        uint256 length = poolInfo.length;
        for (uint256 pid = 1; pid < length; ++pid) {
            require(recoverToken != poolInfo[pid].lpToken,"can't transfer lp");
        }
        require(block.number > endBlock, "can recover only farming end.");
        // allow treasure recover unused/lost funds
        recoverToken.transfer(devAddress, amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IBEP20","name":"_token","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_tokenPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EmissionRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"commissionAmount","type":"uint256"}],"name":"ReferralCommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_REFERRAL_COMMISSION_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBEP20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_withdrawLockPeriod","type":"uint256"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"addBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allocated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accTokenPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"withdrawLockPeriod","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"recoverToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverTreasure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referralCommissionRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_withdrawLockPeriod","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_referralCommissionRate","type":"uint16"}],"name":"setReferralCommissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ITokenReferral","name":"_tokenReferral","type":"address"}],"name":"setTokenReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenReferral","outputs":[{"internalType":"contract ITokenReferral","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","type":"uint256"},{"internalType":"uint256","name":"lastDepositTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006008556064600c60146101000a81548161ffff021916908361ffff1602179055503480156200003457600080fd5b506040516200465238038062004652833981810160405260608110156200005a57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050600062000091620002d860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160098190555080600581905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156200020f57600080fd5b505afa15801562000224573d6000803e3d6000fd5b505050506040513d60208110156200023b57600080fd5b81019080805190602001909291905050505033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002e0565b600033905090565b61436280620002f06000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80635f8b6ff011610130578063967ff23e116100b8578063d0d41fe11161007c578063d0d41fe114610994578063d30ef61b146109d8578063e520fc7e146109fa578063f2fde38b14610a18578063fc0c546a14610a5c57610232565b8063967ff23e14610856578063a40398a614610874578063b304b2e1146108ac578063c816a54c146108ca578063caa84cd11461091857610232565b80638aa28550116100ff5780638aa28550146106e25780638da5cb5b146107005780638dbb1e3a146107345780638dbdbe6d1461078057806393f1a40b146107d857610232565b80635f8b6ff014610646578063630b5ba11461068a578063715018a6146106945780638705fcd41461069e57610232565b806341443304116101be57806348cd4cb11161018257806348cd4cb11461053857806348e43af41461055657806351eb05a6146105b85780635312ea8e146105e657806355dbc8261461061457610232565b8063414433041461046e5780634198709a146104a2578063441a3e70146104c0578063474fa630146104f857806348b22bfb1461051657610232565b80632e6c998d116102055780632e6c998d1461031e5780632e97766d146103825780632fb76f24146103a05780633ad10ef614610406578063412753581461043a57610232565b8063081e3eda14610237578063083c6323146102555780631526fe271461027357806317caf6f114610300575b600080fd5b61023f610a90565b6040518082815260200191505060405180910390f35b61025d610a9d565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561028957600080fd5b8101908080359060200190929190505050610aa3565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018561ffff1681526020018481526020018381526020018281526020019850505050505050505060405180910390f35b610308610b26565b6040518082815260200191505060405180910390f35b61036a6004803603604081101561033457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b2c565b60405180821515815260200191505060405180910390f35b61038a610b92565b6040518082815260200191505060405180910390f35b610404600480360360c08110156103b657600080fd5b810190808035906020019092919080359060200190929190803561ffff1690602001909291908035906020019092919080351515906020019092919080359060200190929190505050610b9a565b005b61040e610e81565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610442610ea7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610476610ecd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104aa610ef3565b6040518082815260200191505060405180910390f35b6104f6600480360360408110156104d657600080fd5b810190808035906020019092919080359060200190929190505050610ef9565b005b610500611240565b6040518082815260200191505060405180910390f35b61051e611246565b604051808261ffff16815260200191505060405180910390f35b61054061124c565b6040518082815260200191505060405180910390f35b6105a26004803603604081101561056c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611252565b6040518082815260200191505060405180910390f35b6105e4600480360360208110156105ce57600080fd5b810190808035906020019092919050505061140c565b005b610612600480360360208110156105fc57600080fd5b8101908080359060200190929190505050611540565b005b6106446004803603602081101561062a57600080fd5b81019080803561ffff16906020019092919050505061172f565b005b6106886004803603602081101561065c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611861565b005b610692611954565b005b61069c611981565b005b6106e0600480360360208110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aee565b005b6106ea611c98565b6040518082815260200191505060405180910390f35b610708611c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61076a6004803603604081101561074a57600080fd5b810190808035906020019092919080359060200190929190505050611cc6565b6040518082815260200191505060405180910390f35b6107d66004803603606081101561079657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d0a565b005b610824600480360360408110156107ee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612394565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b61085e6123d7565b6040518082815260200191505060405180910390f35b6108aa6004803603604081101561088a57600080fd5b8101908080359060200190929190803590602001909291905050506123dd565b005b6108b46127c0565b6040518082815260200191505060405180910390f35b610916600480360360408110156108e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127c6565b005b610992600480360360c081101561092e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080351515906020019092919080359060200190929190505050612ac5565b005b6109d6600480360360208110156109aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ebe565b005b6109e0613068565b604051808261ffff16815260200191505060405180910390f35b610a0261307c565b6040518082815260200191505060405180910390f35b610a5a60048036036020811015610a2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613082565b005b610a64613274565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600680549050905090565b600a5481565b60068181548110610ab057fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16908060050154908060060154908060070154905088565b60085481565b6000806007600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806003015442101591505092915050565b600043905090565b610ba261329a565b73ffffffffffffffffffffffffffffffffffffffff16610bc0611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614610c49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101908461ffff161115610ca8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143086025913960400191505060405180910390fd5b6276a700811115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061429a6027913960400191505060405180910390fd5b6276a700831115610d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7365743a20696e76616c6964206861727665737420696e74657276616c00000081525060200191505060405180910390fd5b8115610d8c57610d8b611954565b5b610dd185610dc360068981548110610da057fe5b9060005260206000209060080201600101546008546132a290919063ffffffff16565b61332590919063ffffffff16565b6008819055508460068781548110610de557fe5b9060005260206000209060080201600101819055508360068781548110610e0857fe5b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508260068781548110610e4157fe5b9060005260206000209060080201600501819055508060068781548110610e6457fe5b906000526020600020906008020160060181905550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60026001541415610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068381548110610f8957fe5b9060005260206000209060080201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015611067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b6110708461140c565b611079846133ad565b60008311156111aa5760008260060154111561111c576000826006015482600401540142109050600015158115151461111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7769746864726177207374696c6c206c6f636b6564000000000000000000000081525060200191505060405180910390fd5b505b6111338382600001546132a290919063ffffffff16565b81600001819055506111528383600701546132a290919063ffffffff16565b82600701819055506111a933848460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b5b6111dc64e8d4a510006111ce8460030154846000015461367a90919063ffffffff16565b61370090919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568856040518082815260200191505060405180910390a35050600180819055505050565b600b5481565b6103e881565b60095481565b6000806006848154811061126257fe5b9060005260206000209060080201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000826003015490506000836007015490506000600a544311156112ec57600a546112ee565b435b9050846002015481118015611304575060008214155b1561139f576000611319866002015483611cc6565b9050600061135c60085461134e89600101546113406005548761367a90919063ffffffff16565b61367a90919063ffffffff16565b61370090919063ffffffff16565b905061139a61138b8561137d64e8d4a510008561367a90919063ffffffff16565b61370090919063ffffffff16565b8661332590919063ffffffff16565b945050505b60006113e585600101546113d764e8d4a510006113c9888a6000015461367a90919063ffffffff16565b61370090919063ffffffff16565b6132a290919063ffffffff16565b90506113fe85600201548261332590919063ffffffff16565b965050505050505092915050565b60006006828154811061141b57fe5b906000526020600020906008020190506000600a5443111561143f57600a54611441565b435b90508160020154811161145557505061153d565b6000826007015490506000811480611471575060008360010154145b156114875781836002018190555050505061153d565b6000611497846002015484611cc6565b905060006114da6008546114cc87600101546114be6005548761367a90919063ffffffff16565b61367a90919063ffffffff16565b61370090919063ffffffff16565b90506114e63082613789565b6115266115138461150564e8d4a510008561367a90919063ffffffff16565b61370090919063ffffffff16565b866003015461332590919063ffffffff16565b856003018190555083856002018190555050505050505b50565b600260015414156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600682815481106115d057fe5b9060005260206000209060080201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506116548184600701546132a290919063ffffffff16565b8360070181905550600082600001819055506000826001018190555060008260020181905550600082600301819055506116d333828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a35050506001808190555050565b61173761329a565b73ffffffffffffffffffffffffffffffffffffffff16611755611c9d565b73ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e861ffff168161ffff161115611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806142026048913960600191505060405180910390fd5b80600c60146101000a81548161ffff021916908361ffff16021790555050565b61186961329a565b73ffffffffffffffffffffffffffffffffffffffff16611887611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600680549050905060005b8181101561197d576119728161140c565b806001019050611961565b5050565b61198961329a565b73ffffffffffffffffffffffffffffffffffffffff166119a7611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614611a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f736574466565416464726573733a20464f5242494444454e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f736574466565416464726573733a205a45524f0000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600181565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600d541415611cdb5760009050611d04565b611d016001611cf385856132a290919063ffffffff16565b61367a90919063ffffffff16565b90505b92915050565b60026001541415611d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068481548110611d9a57fe5b9060005260206000209060080201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611e078561140c565b600084118015611e665750600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e9f5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611ed757503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c7f7b6b33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b505050505b611fa7856133ad565b60008411156122fd5760008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561203d57600080fd5b505afa158015612051573d6000803e3d6000fd5b505050506040513d602081101561206757600080fd5b810190808051906020019092919050505090506120cb3330878660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613830909392919063ffffffff16565b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215857600080fd5b505afa15801561216c573d6000803e3d6000fd5b505050506040513d602081101561218257600080fd5b810190808051906020019092919050505090506121a882826132a290919063ffffffff16565b95506121c186856007015461332590919063ffffffff16565b846007018190555060008460040160009054906101000a900461ffff1661ffff1611156122d15760006122276127106122198760040160009054906101000a900461ffff1661ffff168a61367a90919063ffffffff16565b61370090919063ffffffff16565b905061229a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b6122c3816122b589876000015461332590919063ffffffff16565b6132a290919063ffffffff16565b8460000181905550506122f1565b6122e886846000015461332590919063ffffffff16565b83600001819055505b42836004018190555050505b61232f64e8d4a510006123218460030154846000015461367a90919063ffffffff16565b61370090919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15866040518082815260200191505060405180910390a3505060018081905550505050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154908060040154905085565b600f5481565b6123e561329a565b73ffffffffffffffffffffffffffffffffffffffff16612403611c9d565b73ffffffffffffffffffffffffffffffffffffffff161461248c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211612502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f657272205f616d6f756e743d300000000000000000000000000000000000000081525060200191505060405180910390fd5b438111612577576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6572722073746172743c3d626c6f636b0000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561260257600080fd5b505afa158015612616573d6000803e3d6000fd5b505050506040513d602081101561262c57600080fd5b8101908080519060200190929190505050905061268e333085600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613830909392919063ffffffff16565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561271957600080fd5b505afa15801561272d573d6000803e3d6000fd5b505050506040513d602081101561274357600080fd5b8101908080519060200190929190505050905061276982826132a290919063ffffffff16565b935082600a8190555061278784600d5461332590919063ffffffff16565b600d81905550438303600f819055506127ad600f54600d5461370090919063ffffffff16565b6005819055504360098190555050505050565b600e5481565b6127ce61329a565b73ffffffffffffffffffffffffffffffffffffffff166127ec611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614612875576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060068054905090506000600190505b81811015612979576006818154811061289b57fe5b906000526020600020906008020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561296e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f63616e2774207472616e73666572206c7000000000000000000000000000000081525060200191505060405180910390fd5b806001019050612886565b50600a5443116129f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f63616e207265636f766572206f6e6c79206661726d696e6720656e642e00000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a8457600080fd5b505af1158015612a98573d6000803e3d6000fd5b505050506040513d6020811015612aae57600080fd5b810190808051906020019092919050505050505050565b612acd61329a565b73ffffffffffffffffffffffffffffffffffffffff16612aeb611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614612b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101908461ffff161115612bd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806141dd6025913960400191505060405180910390fd5b6276a700811115612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061429a6027913960400191505060405180910390fd5b6276a700831115612ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6164643a20696e76616c6964206861727665737420696e74657276616c00000081525060200191505060405180910390fd5b8115612cb757612cb6611954565b5b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d1e57600080fd5b505afa158015612d32573d6000803e3d6000fd5b505050506040513d6020811015612d4857600080fd5b81019080805190602001909291905050505060006009544311612d6d57600954612d6f565b435b9050612d868760085461332590919063ffffffff16565b60088190555060066040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001898152602001838152602001600081526020018761ffff1681526020018681526020018481526020016000815250908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555060a0820151816005015560c0820151816006015560e08201518160070155505050505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f736574446576416464726573733a20464f5242494444454e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f736574446576416464726573733a205a45524f0000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60149054906101000a900461ffff1681565b600d5481565b61308a61329a565b73ffffffffffffffffffffffffffffffffffffffff166130a8611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614613131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142746026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008282111561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808284019050838110156133a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600682815481106133bc57fe5b9060005260206000209060080201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160030154141561344d5761344482600501544261332590919063ffffffff16565b81600301819055505b6000613497826001015461348964e8d4a5100061347b8760030154876000015461367a90919063ffffffff16565b61370090919063ffffffff16565b6132a290919063ffffffff16565b90506134a38433610b2c565b1561353e5760008111806134bb575060008260020154115b156135395760006134d983600201548361332590919063ffffffff16565b90506134f48360020154600b546132a290919063ffffffff16565b600b819055506000836002018190555061351b84600501544261332590919063ffffffff16565b836003018190555061352d33826138f1565b6135373382613b6a565b505b6135d2565b60008111156135d15761355e81836002015461332590919063ffffffff16565b826002018190555061357b81600b5461332590919063ffffffff16565b600b81905550833373ffffffffffffffffffffffffffffffffffffffff167fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c1836040518082815260200191505060405180910390a35b5b50505050565b6136758363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e4d565b505050565b60008083141561368d57600090506136fa565b600082840290508284828161369e57fe5b04146136f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142e76021913960400191505060405180910390fd5b809150505b92915050565b6000808211613777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161378057fe5b04905092915050565b600d548111156137a1576000600581905550600d5490505b6137b681600d546132a290919063ffffffff16565b600d819055506137d181600e5461332590919063ffffffff16565b600e819055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6138eb846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e4d565b50505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561397c57600080fd5b505afa158015613990573d6000803e3d6000fd5b505050506040513d60208110156139a657600080fd5b8101908080519060200190929190505050905080821115613a9557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a5457600080fd5b505af1158015613a68573d6000803e3d6000fd5b505050506040513d6020811015613a7e57600080fd5b810190808051906020019092919050505050613b65565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b2857600080fd5b505af1158015613b3c573d6000803e3d6000fd5b505050506040513d6020811015613b5257600080fd5b8101908080519060200190929190505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613bdd57506000600c60149054906101000a900461ffff1661ffff16115b15613e49576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634a9fefc7846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c6d57600080fd5b505afa158015613c81573d6000803e3d6000fd5b505050506040513d6020811015613c9757600080fd5b810190808051906020019092919050505090506000613ce7612710613cd9600c60149054906101000a900461ffff1661ffff168661367a90919063ffffffff16565b61370090919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613d265750600081115b15613e4657613d358282613789565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc1694b883836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613dc857600080fd5b505af1158015613ddc573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f86ddab457291316e0f5496737e5ca67c4037234c32c3be04c48ae96186893a7b836040518082815260200191505060405180910390a35b50505b5050565b6060613eaf826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f3c9092919063ffffffff16565b9050600081511115613f3757808060200190516020811015613ed057600080fd5b8101908080519060200190929190505050613f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061424a602a913960400191505060405180910390fd5b5b505050565b6060613f4b8484600085613f54565b90509392505050565b606082471015613faf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142c16026913960400191505060405180910390fd5b613fb8856140fd565b61402a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061407a5780518252602082019150602081019050602083039250614057565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146140dc576040519150601f19603f3d011682016040523d82523d6000602084013e6140e1565b606091505b50915091506140f1828286614110565b92505050949350505050565b600080823b905060008111915050919050565b60608315614120578290506141d5565b6000835111156141335782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561419a57808201518184015260208101905061417f565b50505050905090810190601f1680156141c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736574526566657272616c436f6d6d697373696f6e526174653a20696e76616c696420726566657272616c20636f6d6d697373696f6e207261746520626173697320706f696e74735361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737769746864726177206c6f636b206d757374206265206c657373207468616e2039302064617973416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e7473a2646970667358221220a5573015ee6810e9d39db445b6ccedf860897541b944ff64b074d7bac65b0f5864736f6c634300060c00330000000000000000000000005b6a35c90d7f7d25899ee52f1aa63344a5be786f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80635f8b6ff011610130578063967ff23e116100b8578063d0d41fe11161007c578063d0d41fe114610994578063d30ef61b146109d8578063e520fc7e146109fa578063f2fde38b14610a18578063fc0c546a14610a5c57610232565b8063967ff23e14610856578063a40398a614610874578063b304b2e1146108ac578063c816a54c146108ca578063caa84cd11461091857610232565b80638aa28550116100ff5780638aa28550146106e25780638da5cb5b146107005780638dbb1e3a146107345780638dbdbe6d1461078057806393f1a40b146107d857610232565b80635f8b6ff014610646578063630b5ba11461068a578063715018a6146106945780638705fcd41461069e57610232565b806341443304116101be57806348cd4cb11161018257806348cd4cb11461053857806348e43af41461055657806351eb05a6146105b85780635312ea8e146105e657806355dbc8261461061457610232565b8063414433041461046e5780634198709a146104a2578063441a3e70146104c0578063474fa630146104f857806348b22bfb1461051657610232565b80632e6c998d116102055780632e6c998d1461031e5780632e97766d146103825780632fb76f24146103a05780633ad10ef614610406578063412753581461043a57610232565b8063081e3eda14610237578063083c6323146102555780631526fe271461027357806317caf6f114610300575b600080fd5b61023f610a90565b6040518082815260200191505060405180910390f35b61025d610a9d565b6040518082815260200191505060405180910390f35b61029f6004803603602081101561028957600080fd5b8101908080359060200190929190505050610aa3565b604051808973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018561ffff1681526020018481526020018381526020018281526020019850505050505050505060405180910390f35b610308610b26565b6040518082815260200191505060405180910390f35b61036a6004803603604081101561033457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b2c565b60405180821515815260200191505060405180910390f35b61038a610b92565b6040518082815260200191505060405180910390f35b610404600480360360c08110156103b657600080fd5b810190808035906020019092919080359060200190929190803561ffff1690602001909291908035906020019092919080351515906020019092919080359060200190929190505050610b9a565b005b61040e610e81565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610442610ea7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610476610ecd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104aa610ef3565b6040518082815260200191505060405180910390f35b6104f6600480360360408110156104d657600080fd5b810190808035906020019092919080359060200190929190505050610ef9565b005b610500611240565b6040518082815260200191505060405180910390f35b61051e611246565b604051808261ffff16815260200191505060405180910390f35b61054061124c565b6040518082815260200191505060405180910390f35b6105a26004803603604081101561056c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611252565b6040518082815260200191505060405180910390f35b6105e4600480360360208110156105ce57600080fd5b810190808035906020019092919050505061140c565b005b610612600480360360208110156105fc57600080fd5b8101908080359060200190929190505050611540565b005b6106446004803603602081101561062a57600080fd5b81019080803561ffff16906020019092919050505061172f565b005b6106886004803603602081101561065c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611861565b005b610692611954565b005b61069c611981565b005b6106e0600480360360208110156106b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aee565b005b6106ea611c98565b6040518082815260200191505060405180910390f35b610708611c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61076a6004803603604081101561074a57600080fd5b810190808035906020019092919080359060200190929190505050611cc6565b6040518082815260200191505060405180910390f35b6107d66004803603606081101561079657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d0a565b005b610824600480360360408110156107ee57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612394565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b61085e6123d7565b6040518082815260200191505060405180910390f35b6108aa6004803603604081101561088a57600080fd5b8101908080359060200190929190803590602001909291905050506123dd565b005b6108b46127c0565b6040518082815260200191505060405180910390f35b610916600480360360408110156108e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127c6565b005b610992600480360360c081101561092e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff1690602001909291908035906020019092919080351515906020019092919080359060200190929190505050612ac5565b005b6109d6600480360360208110156109aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ebe565b005b6109e0613068565b604051808261ffff16815260200191505060405180910390f35b610a0261307c565b6040518082815260200191505060405180910390f35b610a5a60048036036020811015610a2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613082565b005b610a64613274565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600680549050905090565b600a5481565b60068181548110610ab057fe5b90600052602060002090600802016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16908060050154908060060154908060070154905088565b60085481565b6000806007600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806003015442101591505092915050565b600043905090565b610ba261329a565b73ffffffffffffffffffffffffffffffffffffffff16610bc0611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614610c49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101908461ffff161115610ca8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143086025913960400191505060405180910390fd5b6276a700811115610d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061429a6027913960400191505060405180910390fd5b6276a700831115610d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7365743a20696e76616c6964206861727665737420696e74657276616c00000081525060200191505060405180910390fd5b8115610d8c57610d8b611954565b5b610dd185610dc360068981548110610da057fe5b9060005260206000209060080201600101546008546132a290919063ffffffff16565b61332590919063ffffffff16565b6008819055508460068781548110610de557fe5b9060005260206000209060080201600101819055508360068781548110610e0857fe5b906000526020600020906008020160040160006101000a81548161ffff021916908361ffff1602179055508260068781548110610e4157fe5b9060005260206000209060080201600501819055508060068781548110610e6457fe5b906000526020600020906008020160060181905550505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60026001541415610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068381548110610f8957fe5b9060005260206000209060080201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600001541015611067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b6110708461140c565b611079846133ad565b60008311156111aa5760008260060154111561111c576000826006015482600401540142109050600015158115151461111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7769746864726177207374696c6c206c6f636b6564000000000000000000000081525060200191505060405180910390fd5b505b6111338382600001546132a290919063ffffffff16565b81600001819055506111528383600701546132a290919063ffffffff16565b82600701819055506111a933848460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b5b6111dc64e8d4a510006111ce8460030154846000015461367a90919063ffffffff16565b61370090919063ffffffff16565b8160010181905550833373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568856040518082815260200191505060405180910390a35050600180819055505050565b600b5481565b6103e881565b60095481565b6000806006848154811061126257fe5b9060005260206000209060080201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000826003015490506000836007015490506000600a544311156112ec57600a546112ee565b435b9050846002015481118015611304575060008214155b1561139f576000611319866002015483611cc6565b9050600061135c60085461134e89600101546113406005548761367a90919063ffffffff16565b61367a90919063ffffffff16565b61370090919063ffffffff16565b905061139a61138b8561137d64e8d4a510008561367a90919063ffffffff16565b61370090919063ffffffff16565b8661332590919063ffffffff16565b945050505b60006113e585600101546113d764e8d4a510006113c9888a6000015461367a90919063ffffffff16565b61370090919063ffffffff16565b6132a290919063ffffffff16565b90506113fe85600201548261332590919063ffffffff16565b965050505050505092915050565b60006006828154811061141b57fe5b906000526020600020906008020190506000600a5443111561143f57600a54611441565b435b90508160020154811161145557505061153d565b6000826007015490506000811480611471575060008360010154145b156114875781836002018190555050505061153d565b6000611497846002015484611cc6565b905060006114da6008546114cc87600101546114be6005548761367a90919063ffffffff16565b61367a90919063ffffffff16565b61370090919063ffffffff16565b90506114e63082613789565b6115266115138461150564e8d4a510008561367a90919063ffffffff16565b61370090919063ffffffff16565b866003015461332590919063ffffffff16565b856003018190555083856002018190555050505050505b50565b600260015414156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600682815481106115d057fe5b9060005260206000209060080201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506116548184600701546132a290919063ffffffff16565b8360070181905550600082600001819055506000826001018190555060008260020181905550600082600301819055506116d333828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a35050506001808190555050565b61173761329a565b73ffffffffffffffffffffffffffffffffffffffff16611755611c9d565b73ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e861ffff168161ffff161115611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806142026048913960600191505060405180910390fd5b80600c60146101000a81548161ffff021916908361ffff16021790555050565b61186961329a565b73ffffffffffffffffffffffffffffffffffffffff16611887611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614611910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600680549050905060005b8181101561197d576119728161140c565b806001019050611961565b5050565b61198961329a565b73ffffffffffffffffffffffffffffffffffffffff166119a7611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614611a30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f736574466565416464726573733a20464f5242494444454e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f736574466565416464726573733a205a45524f0000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600181565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600d541415611cdb5760009050611d04565b611d016001611cf385856132a290919063ffffffff16565b61367a90919063ffffffff16565b90505b92915050565b60026001541415611d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068481548110611d9a57fe5b9060005260206000209060080201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611e078561140c565b600084118015611e665750600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8015611e9f5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611ed757503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c7f7b6b33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b505050505b611fa7856133ad565b60008411156122fd5760008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561203d57600080fd5b505afa158015612051573d6000803e3d6000fd5b505050506040513d602081101561206757600080fd5b810190808051906020019092919050505090506120cb3330878660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613830909392919063ffffffff16565b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215857600080fd5b505afa15801561216c573d6000803e3d6000fd5b505050506040513d602081101561218257600080fd5b810190808051906020019092919050505090506121a882826132a290919063ffffffff16565b95506121c186856007015461332590919063ffffffff16565b846007018190555060008460040160009054906101000a900461ffff1661ffff1611156122d15760006122276127106122198760040160009054906101000a900461ffff1661ffff168a61367a90919063ffffffff16565b61370090919063ffffffff16565b905061229a600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166135d89092919063ffffffff16565b6122c3816122b589876000015461332590919063ffffffff16565b6132a290919063ffffffff16565b8460000181905550506122f1565b6122e886846000015461332590919063ffffffff16565b83600001819055505b42836004018190555050505b61232f64e8d4a510006123218460030154846000015461367a90919063ffffffff16565b61370090919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15866040518082815260200191505060405180910390a3505060018081905550505050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154908060030154908060040154905085565b600f5481565b6123e561329a565b73ffffffffffffffffffffffffffffffffffffffff16612403611c9d565b73ffffffffffffffffffffffffffffffffffffffff161461248c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211612502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f657272205f616d6f756e743d300000000000000000000000000000000000000081525060200191505060405180910390fd5b438111612577576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6572722073746172743c3d626c6f636b0000000000000000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561260257600080fd5b505afa158015612616573d6000803e3d6000fd5b505050506040513d602081101561262c57600080fd5b8101908080519060200190929190505050905061268e333085600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613830909392919063ffffffff16565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561271957600080fd5b505afa15801561272d573d6000803e3d6000fd5b505050506040513d602081101561274357600080fd5b8101908080519060200190929190505050905061276982826132a290919063ffffffff16565b935082600a8190555061278784600d5461332590919063ffffffff16565b600d81905550438303600f819055506127ad600f54600d5461370090919063ffffffff16565b6005819055504360098190555050505050565b600e5481565b6127ce61329a565b73ffffffffffffffffffffffffffffffffffffffff166127ec611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614612875576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060068054905090506000600190505b81811015612979576006818154811061289b57fe5b906000526020600020906008020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561296e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f63616e2774207472616e73666572206c7000000000000000000000000000000081525060200191505060405180910390fd5b806001019050612886565b50600a5443116129f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f63616e207265636f766572206f6e6c79206661726d696e6720656e642e00000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a8457600080fd5b505af1158015612a98573d6000803e3d6000fd5b505050506040513d6020811015612aae57600080fd5b810190808051906020019092919050505050505050565b612acd61329a565b73ffffffffffffffffffffffffffffffffffffffff16612aeb611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614612b74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101908461ffff161115612bd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806141dd6025913960400191505060405180910390fd5b6276a700811115612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061429a6027913960400191505060405180910390fd5b6276a700831115612ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6164643a20696e76616c6964206861727665737420696e74657276616c00000081525060200191505060405180910390fd5b8115612cb757612cb6611954565b5b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d1e57600080fd5b505afa158015612d32573d6000803e3d6000fd5b505050506040513d6020811015612d4857600080fd5b81019080805190602001909291905050505060006009544311612d6d57600954612d6f565b435b9050612d868760085461332590919063ffffffff16565b60088190555060066040518061010001604052808873ffffffffffffffffffffffffffffffffffffffff168152602001898152602001838152602001600081526020018761ffff1681526020018681526020018481526020016000815250908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555060a0820151816005015560c0820151816006015560e08201518160070155505050505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f736574446576416464726573733a20464f5242494444454e000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f736574446576416464726573733a205a45524f0000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60149054906101000a900461ffff1681565b600d5481565b61308a61329a565b73ffffffffffffffffffffffffffffffffffffffff166130a8611c9d565b73ffffffffffffffffffffffffffffffffffffffff1614613131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142746026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008282111561331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6000808284019050838110156133a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600682815481106133bc57fe5b9060005260206000209060080201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160030154141561344d5761344482600501544261332590919063ffffffff16565b81600301819055505b6000613497826001015461348964e8d4a5100061347b8760030154876000015461367a90919063ffffffff16565b61370090919063ffffffff16565b6132a290919063ffffffff16565b90506134a38433610b2c565b1561353e5760008111806134bb575060008260020154115b156135395760006134d983600201548361332590919063ffffffff16565b90506134f48360020154600b546132a290919063ffffffff16565b600b819055506000836002018190555061351b84600501544261332590919063ffffffff16565b836003018190555061352d33826138f1565b6135373382613b6a565b505b6135d2565b60008111156135d15761355e81836002015461332590919063ffffffff16565b826002018190555061357b81600b5461332590919063ffffffff16565b600b81905550833373ffffffffffffffffffffffffffffffffffffffff167fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c1836040518082815260200191505060405180910390a35b5b50505050565b6136758363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e4d565b505050565b60008083141561368d57600090506136fa565b600082840290508284828161369e57fe5b04146136f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806142e76021913960400191505060405180910390fd5b809150505b92915050565b6000808211613777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161378057fe5b04905092915050565b600d548111156137a1576000600581905550600d5490505b6137b681600d546132a290919063ffffffff16565b600d819055506137d181600e5461332590919063ffffffff16565b600e819055507f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6138eb846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e4d565b50505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561397c57600080fd5b505afa158015613990573d6000803e3d6000fd5b505050506040513d60208110156139a657600080fd5b8101908080519060200190929190505050905080821115613a9557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a5457600080fd5b505af1158015613a68573d6000803e3d6000fd5b505050506040513d6020811015613a7e57600080fd5b810190808051906020019092919050505050613b65565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b2857600080fd5b505af1158015613b3c573d6000803e3d6000fd5b505050506040513d6020811015613b5257600080fd5b8101908080519060200190929190505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613bdd57506000600c60149054906101000a900461ffff1661ffff16115b15613e49576000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634a9fefc7846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c6d57600080fd5b505afa158015613c81573d6000803e3d6000fd5b505050506040513d6020811015613c9757600080fd5b810190808051906020019092919050505090506000613ce7612710613cd9600c60149054906101000a900461ffff1661ffff168661367a90919063ffffffff16565b61370090919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613d265750600081115b15613e4657613d358282613789565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc1694b883836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613dc857600080fd5b505af1158015613ddc573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f86ddab457291316e0f5496737e5ca67c4037234c32c3be04c48ae96186893a7b836040518082815260200191505060405180910390a35b50505b5050565b6060613eaf826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613f3c9092919063ffffffff16565b9050600081511115613f3757808060200190516020811015613ed057600080fd5b8101908080519060200190929190505050613f36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061424a602a913960400191505060405180910390fd5b5b505050565b6060613f4b8484600085613f54565b90509392505050565b606082471015613faf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806142c16026913960400191505060405180910390fd5b613fb8856140fd565b61402a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061407a5780518252602082019150602081019050602083039250614057565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146140dc576040519150601f19603f3d011682016040523d82523d6000602084013e6140e1565b606091505b50915091506140f1828286614110565b92505050949350505050565b600080823b905060008111915050919050565b60608315614120578290506141d5565b6000835111156141335782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561419a57808201518184015260208101905061417f565b50505050905090810190601f1680156141c75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736574526566657272616c436f6d6d697373696f6e526174653a20696e76616c696420726566657272616c20636f6d6d697373696f6e207261746520626173697320706f696e74735361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737769746864726177206c6f636b206d757374206265206c657373207468616e2039302064617973416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e7473a2646970667358221220a5573015ee6810e9d39db445b6ccedf860897541b944ff64b074d7bac65b0f5864736f6c634300060c0033

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

0000000000000000000000005b6a35c90d7f7d25899ee52f1aa63344a5be786f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _token (address): 0x5b6a35c90d7f7D25899EE52F1Aa63344a5bE786F
Arg [1] : _startBlock (uint256): 0
Arg [2] : _tokenPerBlock (uint256): 0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005b6a35c90d7f7d25899ee52f1aa63344a5be786f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

13354:15913:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16461:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15166:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14852:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15093:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19802:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28707:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17742:827;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14645:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14705;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15313:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14737:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22546:940;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15228:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15497:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15134:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18919:875;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20339:794;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23557:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26140:308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25954:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20083:180;;;:::i;:::-;;12239:148;;;:::i;:::-;;25646:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14772:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11931:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18645:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21141:1397;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14934:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27230:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27304:644;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27199:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28803:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16631:1103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25402:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15405:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27169:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12397:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14598:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16461:95;16506:7;16533:8;:15;;;;16526:22;;16461:95;:::o;15166:23::-;;;;:::o;14852:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15093:34::-;;;;:::o;19802:198::-;19872:4;19889:21;19913:8;:14;19922:4;19913:14;;;;;;;;;;;:21;19928:5;19913:21;;;;;;;;;;;;;;;19889:45;;19971:4;:21;;;19952:15;:40;;19945:47;;;19802:198;;;;:::o;28707:88::-;28748:7;28775:12;28768:19;;28707:88;:::o;17742:827::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17950:3:::1;17933:13;:20;;;;17925:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18037:7;18014:19;:30;;18006:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18127:7;18107:16;:27;;18099:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18183:11;18179:61;;;18211:17;:15;:17::i;:::-;18179:61;18268:63;18319:11;18268:46;18288:8;18297:4;18288:14;;;;;;;;;;;;;;;;;;:25;;;18268:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;18250:15;:81;;;;18370:11;18342:8;18351:4;18342:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;18422:13;18392:8;18401:4;18392:14;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;18479:16;18446:8;18455:4;18446:14;;;;;;;;;;;;;;;;;;:30;;:49;;;;18542:19;18506:8;18515:4;18506:14;;;;;;;;;;;;;;;;;;:33;;:55;;;;17742:827:::0;;;;;;:::o;14645:25::-;;;;;;;;;;;;;:::o;14705:::-;;;;;;;;;;;;;:::o;15313:35::-;;;;;;;;;;;;;:::o;14737:28::-;;;;:::o;22546:940::-;12878:1;13110:7;;:19;;13102:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:1;13243:7;:18;;;;22628:21:::1;22652:8;22661:4;22652:14;;;;;;;;;;;;;;;;;;22628:38;;22677:21;22701:8;:14;22710:4;22701:14;;;;;;;;;;;:26;22716:10;22701:26;;;;;;;;;;;;;;;22677:50;;22761:7;22746:4;:11;;;:22;;22738:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22802:16;22813:4;22802:10;:16::i;:::-;22829:29;22853:4;22829:23;:29::i;:::-;22883:1;22873:7;:11;22869:482;;;22973:1;22947:4;:23;;;:27;22943:219;;;22994:13;23051:4;:23;;;23028:4;:20;;;:46;23010:15;:64;22994:80;;23114:5;23102:17;;:8;:17;;;23093:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22943:219;;23190:24;23206:7;23190:4;:11;;;:15;;:24;;;;:::i;:::-;23176:4;:11;;:38;;;;23244:25;23261:7;23244:4;:12;;;:16;;:25;;;;:::i;:::-;23229:4;:12;;:40;;;;23284:55;23318:10;23331:7;23284:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;22869:482;23379:48;23422:4;23379:38;23395:4;:21;;;23379:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;23361:4;:15;;:66;;;;23464:4;23452:10;23443:35;;;23470:7;23443:35;;;;;;;;;;;;;;;;;;13274:1;;12834::::0;13290:7;:22;;;;22546:940;;:::o;15228:35::-;;;;:::o;15497:62::-;15555:4;15497:62;:::o;15134:25::-;;;;:::o;18919:875::-;18991:7;19011:21;19035:8;19044:4;19035:14;;;;;;;;;;;;;;;;;;19011:38;;19060:21;19084:8;:14;19093:4;19084:14;;;;;;;;;;;:21;19099:5;19084:21;;;;;;;;;;;;;;;19060:45;;19116:24;19143:4;:21;;;19116:48;;19175:16;19194:4;:12;;;19175:31;;19217:15;19252:8;;19236:12;:24;;19235:53;;19280:8;;19235:53;;;19265:12;19235:53;19217:71;;19313:4;:20;;;19303:7;:30;:47;;;;;19349:1;19337:8;:13;;19303:47;19299:345;;;19368:18;19389:44;19403:4;:20;;;19425:7;19389:13;:44::i;:::-;19368:65;;19448:19;19470:71;19525:15;;19470:50;19504:4;:15;;;19470:29;19485:13;;19470:10;:14;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;:54;;:71;;;;:::i;:::-;19448:93;;19575:57;19596:35;19622:8;19596:21;19612:4;19596:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;19575:16;:20;;:57;;;;:::i;:::-;19556:76;;19299:345;;;19654:15;19672:64;19720:4;:15;;;19672:43;19710:4;19672:33;19688:16;19672:4;:11;;;:15;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;:47;;:64;;;;:::i;:::-;19654:82;;19754:32;19766:4;:19;;;19754:7;:11;;:32;;;;:::i;:::-;19747:39;;;;;;;;18919:875;;;;:::o;20339:794::-;20391:21;20415:8;20424:4;20415:14;;;;;;;;;;;;;;;;;;20391:38;;20440:15;20475:8;;20459:12;:24;;20458:53;;20503:8;;20458:53;;;20488:12;20458:53;20440:71;;20537:4;:20;;;20526:7;:31;20522:70;;20574:7;;;;20522:70;20602:16;20621:4;:12;;;20602:31;;20660:1;20648:8;:13;:37;;;;20684:1;20665:4;:15;;;:20;20648:37;20644:121;;;20725:7;20702:4;:20;;:30;;;;20747:7;;;;;20644:121;20775:18;20796:44;20810:4;:20;;;20832:7;20796:13;:44::i;:::-;20775:65;;20851:19;20873:71;20928:15;;20873:50;20907:4;:15;;;20873:29;20888:13;;20873:10;:14;;:29;;;;:::i;:::-;:33;;:50;;;;:::i;:::-;:54;;:71;;;;:::i;:::-;20851:93;;20955:32;20968:4;20975:11;20955:4;:32::i;:::-;21022:62;21048:35;21074:8;21048:21;21064:4;21048:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;21022:4;:21;;;:25;;:62;;;;:::i;:::-;20998:4;:21;;:86;;;;21118:7;21095:4;:20;;:30;;;;20339:794;;;;;;;:::o;23557:520::-;12878:1;13110:7;;:19;;13102:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:1;13243:7;:18;;;;23631:21:::1;23655:8;23664:4;23655:14;;;;;;;;;;;;;;;;;;23631:38;;23680:21;23704:8;:14;23713:4;23704:14;;;;;;;;;;;:26;23719:10;23704:26;;;;;;;;;;;;;;;23680:50;;23741:14;23758:4;:11;;;23741:28;;23795:24;23812:6;23795:4;:12;;;:16;;:24;;;;:::i;:::-;23780:4;:12;;:39;;;;23844:1;23830:4;:11;;:15;;;;23874:1;23856:4;:15;;:19;;;;23908:1;23886:4;:19;;:23;;;;23944:1;23920:4;:21;;:25;;;;23956:54;23990:10;24003:6;23956:4;:12;;;;;;;;;;;;:25;;;;:54;;;;;:::i;:::-;24056:4;24044:10;24026:43;;;24062:6;24026:43;;;;;;;;;;;;;;;;;;13274:1;;;12834::::0;13290:7;:22;;;;23557:520;:::o;26140:308::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15555:4:::1;26245:59;;:23;:59;;;;26237:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26417:23;26392:22;;:48;;;;;;;;;;;;;;;;;;26140:308:::0;:::o;25954:125::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26057:14:::1;26041:13;;:30;;;;;;;;;;;;;;;;;;25954:125:::0;:::o;20083:180::-;20128:14;20145:8;:15;;;;20128:32;;20176:11;20171:85;20199:6;20193:3;:12;20171:85;;;20229:15;20240:3;20229:10;:15::i;:::-;20207:5;;;;;20171:85;;;;20083:180;:::o;12239:148::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12346:1:::1;12309:40;;12330:6;::::0;::::1;;;;;;;;12309:40;;;;;;;;;;;;12377:1;12360:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;12239:148::o:0;25646:236::-;25732:10;;;;;;;;;;;25718:24;;:10;:24;;;25710:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25813:1;25790:25;;:11;:25;;;;25782:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25863:11;25850:10;;:24;;;;;;;;;;;;;;;;;;25646:236;:::o;14772:44::-;14815:1;14772:44;:::o;11931:87::-;11977:7;12004:6;;;;;;;;;;;11997:13;;11931:87;:::o;18645:266::-;18717:7;18753:1;18741:8;;:13;18737:113;;;18837:1;18830:8;;;;18737:113;18867:36;14815:1;18867:14;18875:5;18867:3;:7;;:14;;;;:::i;:::-;:18;;:36;;;;:::i;:::-;18860:43;;18645:266;;;;;:::o;21141:1397::-;12878:1;13110:7;;:19;;13102:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:1;13243:7;:18;;;;21241:21:::1;21265:8;21274:4;21265:14;;;;;;;;;;;;;;;;;;21241:38;;21290:21;21314:8;:14;21323:4;21314:14;;;;;;;;;;;:26;21329:10;21314:26;;;;;;;;;;;;;;;21290:50;;21351:16;21362:4;21351:10;:16::i;:::-;21392:1;21382:7;:11;:51;;;;;21431:1;21397:36;;21405:13;;;;;;;;;;;21397:36;;;;21382:51;:78;;;;;21458:1;21437:23;;:9;:23;;;;21382:78;:105;;;;;21477:10;21464:23;;:9;:23;;;;21382:105;21378:189;;;21504:13;;;;;;;;;;;:28;;;21533:10;21545:9;21504:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21378:189;21577:29;21601:4;21577:23;:29::i;:::-;21631:1;21621:7;:11;21617:787;;;21651:18;21672:4;:12;;;;;;;;;;;;:22;;;21703:4;21672:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;21651:58;;21724:74;21762:10;21783:4;21790:7;21724:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;21813:18;21834:4;:12;;;;;;;;;;;;:22;;;21865:4;21834:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;21813:58;;21896:26;21911:10;21896;:14;;:26;;;;:::i;:::-;21886:36;;21954:25;21971:7;21954:4;:12;;;:16;;:25;;;;:::i;:::-;21939:4;:12;;:40;;;;22020:1;22000:4;:17;;;;;;;;;;;;:21;;;21996:344;;;22042:18;22063:41;22098:5;22063:30;22075:4;:17;;;;;;;;;;;;22063:30;;:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;22042:62;;22123:49;22149:10;;;;;;;;;;;22161;22123:4;:12;;;;;;;;;;;;:25;;;;:49;;;;;:::i;:::-;22205:40;22234:10;22205:24;22221:7;22205:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;22191:4;:11;;:54;;;;21996:344;;;;22300:24;22316:7;22300:4;:11;;;:15;;:24;;;;:::i;:::-;22286:4;:11;;:38;;;;21996:344;22377:15;22354:4;:20;;:38;;;;21617:787;;;22432:48;22475:4;22432:38;22448:4;:21;;;22432:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;22414:4;:15;;:66;;;;22516:4;22504:10;22496:34;;;22522:7;22496:34;;;;;;;;;;;;;;;;;;13274:1;;12834::::0;13290:7;:22;;;;21141:1397;;;:::o;14934:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27230:21::-;;;;:::o;27304:644::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27409:1:::1;27399:7;:11;27390:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27461:12;27449:9;:24;27440:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27508:18;27529:5;;;;;;;;;;;:15;;;27553:4;27529:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27508:51;;27570:58;27593:10;27613:4;27620:7;27570:5;;;;;;;;;;;:22;;;;:58;;;;;;:::i;:::-;27639:18;27660:5;;;;;;;;;;;:15;;;27684:4;27660:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;27639:51;;27711:26;27726:10;27711;:14;;:26;;;;:::i;:::-;27701:36;;27761:9;27750:8;:20;;;;27792:21;27805:7;27792:8;;:12;;:21;;;;:::i;:::-;27781:8;:32;;;;27845:12;27833:9;:24;27824:6;:33;;;;27884:20;27897:6;;27884:8;;:12;;:20;;;;:::i;:::-;27868:13;:36;;;;27928:12;27915:10;:25;;;;12222:1;;27304:644:::0;;:::o;27199:24::-;;;;:::o;28803:459::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28895:14:::1;28912:8;:15;;;;28895:32;;28943:11;28957:1;28943:15;;28938:136;28966:6;28960:3;:12;28938:136;;;29020:8;29029:3;29020:13;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;29004:37;;:12;:37;;;;28996:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28974:5;;;;;28938:136;;;;29107:8;;29092:12;:23;29084:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29213:12;:21;;;29235:10;;;;;;;;;;;29247:6;29213:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;12222:1;28803:459:::0;;:::o;16631:1103::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16842:3:::1;16825:13;:20;;;;16817:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16929:7;16906:19;:30;;16898:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17019:7;16999:16;:27;;16991:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17075:11;17071:61;;;17103:17;:15;:17::i;:::-;17071:61;17142:8;:18;;;17169:4;17142:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;17219:23;17260:10;;17245:12;:25;:53;;17288:10;;17245:53;;;17273:12;17245:53;17219:79;;17327:32;17347:11;17327:15;;:19;;:32;;;;:::i;:::-;17309:15;:50;;;;17370:8;17384:341;;;;;;;;17417:8;17384:341;;;;;;17452:11;17384:341;;;;17495:15;17384:341;;;;17543:1;17384:341;;;;17598:13;17384:341;;;;;;17643:16;17384:341;;;;17694:19;17384:341;;;;17568:1;17384:341;;::::0;17370:356:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12222:1;16631:1103:::0;;;;;;:::o;25402:236::-;25488:10;;;;;;;;;;;25474:24;;:10;:24;;;25466:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25569:1;25546:25;;:11;:25;;;;25538:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25619:11;25606:10;;:24;;;;;;;;;;;;;;;;;;25402:236;:::o;15405:42::-;;;;;;;;;;;;;:::o;27169:23::-;;;;:::o;12397:244::-;12162:12;:10;:12::i;:::-;12151:23;;:7;:5;:7::i;:::-;:23;;;12143:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12506:1:::1;12486:22;;:8;:22;;;;12478:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12596:8;12567:38;;12588:6;::::0;::::1;;;;;;;;12567:38;;;;;;;;;;;;12625:8;12616:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;12397:244:::0;:::o;14598:19::-;;;;;;;;;;;;;:::o;10973:106::-;11026:15;11061:10;11054:17;;10973:106;:::o;1251:158::-;1309:7;1342:1;1337;:6;;1329:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1400:1;1396;:5;1389:12;;1251:158;;;;:::o;1064:179::-;1122:7;1142:9;1158:1;1154;:5;1142:17;;1183:1;1178;:6;;1170:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1234:1;1227:8;;;1064:179;;;;:::o;24085:1261::-;24152:21;24176:8;24185:4;24176:14;;;;;;;;;;;;;;;;;;24152:38;;24201:21;24225:8;:14;24234:4;24225:14;;;;;;;;;;;:26;24240:10;24225:26;;;;;;;;;;;;;;;24201:50;;24293:1;24268:4;:21;;;:26;24264:124;;;24335:41;24355:4;:20;;;24335:15;:19;;:41;;;;:::i;:::-;24311:4;:21;;:65;;;;24264:124;24400:15;24418:69;24471:4;:15;;;24418:48;24461:4;24418:38;24434:4;:21;;;24418:4;:11;;;:15;;:38;;;;:::i;:::-;:42;;:48;;;;:::i;:::-;:52;;:69;;;;:::i;:::-;24400:87;;24502:28;24513:4;24519:10;24502;:28::i;:::-;24498:841;;;24561:1;24551:7;:11;:38;;;;24588:1;24566:4;:19;;;:23;24551:38;24547:545;;;24610:20;24633:32;24645:4;:19;;;24633:7;:11;;:32;;;;:::i;:::-;24610:55;;24742:45;24767:4;:19;;;24742:20;;:24;;:45;;;;:::i;:::-;24719:20;:68;;;;24828:1;24806:4;:19;;:23;;;;24872:41;24892:4;:20;;;24872:15;:19;;:41;;;;:::i;:::-;24848:4;:21;;:65;;;;24967:43;24985:10;24997:12;24967:17;:43::i;:::-;25029:47;25051:10;25063:12;25029:21;:47::i;:::-;24547:545;;24498:841;;;25123:1;25113:7;:11;25109:230;;;25163:32;25187:7;25163:4;:19;;;:23;;:32;;;;:::i;:::-;25141:4;:19;;:54;;;;25233:33;25258:7;25233:20;;:24;;:33;;;;:::i;:::-;25210:20;:56;;;;25313:4;25301:10;25286:41;;;25319:7;25286:41;;;;;;;;;;;;;;;;;;25109:230;24498:841;24085:1261;;;;:::o;7984:211::-;8101:86;8121:5;8151:23;;;8176:2;8180:5;8128:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8101:19;:86::i;:::-;7984:211;;;:::o;1417:220::-;1475:7;1504:1;1499;:6;1495:20;;;1514:1;1507:8;;;;1495:20;1526:9;1542:1;1538;:5;1526:17;;1571:1;1566;1562;:5;;;;;;:10;1554:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1628:1;1621:8;;;1417:220;;;;;:::o;1645:153::-;1703:7;1735:1;1731;:5;1723:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1789:1;1785;:5;;;;;;1778:12;;1645:153;;;;:::o;27954:347::-;28031:8;;28022:6;:17;28018:158;;;28118:1;28102:13;:17;;;;28143:8;;28134:17;;28018:158;28197:20;28210:6;28197:8;;:12;;:20;;;;:::i;:::-;28186:8;:31;;;;28240:21;28254:6;28240:9;;:13;;:21;;;;:::i;:::-;28228:9;:33;;;;28277:16;28282:2;28286:6;28277:16;;;;;;;;;;;;;;;;;;;;;;;;;;27954:347;;:::o;8203:248::-;8347:96;8367:5;8397:27;;;8426:4;8432:2;8436:5;8374:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8347:19;:96::i;:::-;8203:248;;;;:::o;28414:285::-;28491:16;28510:5;;;;;;;;;;;:15;;;28534:4;28510:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28491:49;;28565:8;28555:7;:18;28551:141;;;28590:5;;;;;;;;;;;:14;;;28605:3;28610:8;28590:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28551:141;;;28652:5;;;;;;;;;;;:14;;;28667:3;28672:7;28652:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28551:141;28414:285;;;:::o;26528:631::-;26650:1;26616:36;;26624:13;;;;;;;;;;;26616:36;;;;:66;;;;;26681:1;26656:22;;;;;;;;;;;:26;;;26616:66;26612:540;;;26699:16;26718:13;;;;;;;;;;;:25;;;26744:5;26718:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26699:51;;26765:24;26792:47;26833:5;26792:36;26805:22;;;;;;;;;;;26792:36;;:8;:12;;:36;;;;:::i;:::-;:40;;:47;;;;:::i;:::-;26765:74;;26880:1;26860:22;;:8;:22;;;;:46;;;;;26905:1;26886:16;:20;26860:46;26856:285;;;26927:32;26932:8;26942:16;26927:4;:32::i;:::-;26978:13;;;;;;;;;;;:38;;;27017:8;27027:16;26978:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27098:8;27068:57;;27091:5;27068:57;;;27108:16;27068:57;;;;;;;;;;;;;;;;;;26856:285;26612:540;;;26528:631;;:::o;9862:433::-;9945:23;9971:69;9999:4;9971:69;;;;;;;;;;;;;;;;;9979:5;9971:27;;;;:69;;;;;:::i;:::-;9945:95;;10075:1;10055:10;:17;:21;10051:237;;;10210:10;10199:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10051:237;9862:433;;;:::o;4863:195::-;4966:12;4998:52;5020:6;5028:4;5034:1;5037:12;4998:21;:52::i;:::-;4991:59;;4863:195;;;;;:::o;5300:530::-;5427:12;5485:5;5460:21;:30;;5452:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5552:18;5563:6;5552:10;:18::i;:::-;5544:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5678:12;5692:23;5719:6;:11;;5739:5;5747:4;5719:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5677:75;;;;5770:52;5788:7;5797:10;5809:12;5770:17;:52::i;:::-;5763:59;;;;5300:530;;;;;;:::o;3618:422::-;3678:4;3886:12;3997:7;3985:20;3977:28;;4031:1;4024:4;:8;4017:15;;;3618:422;;;:::o;7116:742::-;7231:12;7260:7;7256:595;;;7291:10;7284:17;;;;7256:595;7425:1;7405:10;:17;:21;7401:439;;;7668:10;7662:17;7729:15;7716:10;7712:2;7708:19;7701:44;7616:148;7811:12;7804:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7116:742;;;;;;:::o

Swarm Source

ipfs://a5573015ee6810e9d39db445b6ccedf860897541b944ff64b074d7bac65b0f58

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  ]

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.