ETH Price: $3,100.74 (+0.92%)
Gas: 4 Gwei

Token

Liquidity Income (LBI)
 

Overview

Max Total Supply

196,811,631.881021814802883153 LBI

Holders

260

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,057.867146608343108061 LBI

Value
$0.00
0x26bdde6506bd32bd7b5cc5c73cd252807ff18568
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LiquidityIncome

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-13
*/

/*

 This contract is provided "as is" and "with all faults." The deployer makes no representations or warranties
 of any kind concerning the safety, suitability, lack of exploits, inaccuracies, typographical errors, or other
 harmful components of this contract. There are inherent dangers in the use of any contract, and you are solely
 responsible for determining whether this contract is safe to use. You are also solely responsible for the 
 protection of your funds, and the deployer will not be liable for any damages you may suffer in connection with
 using, modifying, or distributing this contract.

*/

pragma solidity ^0.5.17;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "LBI::SafeMath: subtraction underflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint a, uint b) internal pure returns (uint) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b, errorMessage);

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts with custom message on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint a, uint b) internal pure returns (uint) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface UniswapPair {
    function sync() external;
    function transferFrom(address from, address to, uint value) external returns (bool);
    function balanceOf(address account) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function mint(address to) external returns (uint liquidity);
}

interface IBondingCurve {
    function calculatePurchaseReturn(uint _supply,  uint _reserveBalance, uint32 _reserveRatio, uint _depositAmount) external view returns (uint);
}

interface WETH9 {
    function deposit() external payable;
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function approve(address spender, uint amount) external returns (bool);
}

interface Uniswap {
    function factory() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface LBI {
    function approve(address spender, uint amount) external returns (bool);
}

interface RewardDistributionDelegate {
    function notifyRewardAmount(uint reward) external;
}

interface RewardDistributionFactory {
    function deploy(
        address lp_, 
        address earn_, 
        address rewardDistribution_,
        uint8 decimals_,
        string calldata name_,
        string calldata symbol_
    ) external returns (address);
}

interface GovernanceFactory {
    function deploy(address token) external returns (address);
}

contract LiquidityIncome {
    using SafeMath for uint;
    
    /* BondingCurve */
    
    uint public scale = 10**18;
    uint public reserveBalance = 1*10**14;
    uint32 public constant RATIO = 500000;
    
    WETH9 constant public WETH = WETH9(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    
    function () external payable { mint(0); }
    
    function mint(uint min) public payable {
        require(msg.value > 0, "LBI::mint: msg.value = 0");
        uint _bought = _continuousMint(msg.value);
        require(_bought >= min, "LBI::mint: slippage");
        WETH.deposit.value(msg.value)();
        WETH.transfer(address(pool), WETH.balanceOf(address(this)));
        pool.sync();
        _mint(msg.sender, _bought, true);
    }
    
    IBondingCurve constant public CURVE = IBondingCurve(0x16F6664c16beDE5d70818654dEfef11769D40983);

    function _buy(uint _amount) internal returns (uint _bought) {
        _bought = _continuousMint(_amount);
    }

    function calculateMint(uint _amount) public view returns (uint mintAmount) {
        return CURVE.calculatePurchaseReturn(totalSupply, reserveBalance, RATIO, _amount);
    }

    function _continuousMint(uint _deposit) internal returns (uint) {
        uint amount = calculateMint(_deposit);
        reserveBalance = reserveBalance.add(_deposit);
        return amount;
    }
    
    /// @notice EIP-20 token name for this token
    string public constant name = "Liquidity Income";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "LBI";

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;
    
    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // Initial 0
    
    /// @notice the last block the tick was applied
    uint public lastTick = 0;
    
    /// @notice the uniswap pool that will receive the rebase
    UniswapPair public pool;
    RewardDistributionDelegate public rewardDistribution;
    RewardDistributionFactory public constant REWARDFACTORY = RewardDistributionFactory(0x323B2b67Ed1a745e5208ac18625ecef187a421D0);
    GovernanceFactory public constant GOVERNANCEFACTORY = GovernanceFactory(0x4179Ef5dC359A4f73D5A14aF264f759052325bc1);
    
    /// @notice Allowance amounts on behalf of others
    mapping (address => mapping (address => uint)) internal allowances;

    /// @notice Official record of token balances for each account
    mapping (address => uint) internal balances;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint value,uint nonce,uint deadline)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint amount);
    
    /// @notice Tick event
    event Tick(uint block, uint minted);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint amount);
    
    Uniswap public constant UNI = Uniswap(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    
    /* Incremental system for balance increments */
    uint256 public index = 0; // previously accumulated index
    uint256 public bal = 0; // previous calculated balance of COMP

    mapping(address => uint256) public supplyIndex;
    
    function _update(bool sync) internal {
        if (totalSupply > 0) {
            uint256 _before = balances[address(this)];
            tick(sync);
            uint256 _bal = balances[address(this)];
            if (_bal > 0 && _bal > _before) {
                uint256 _diff = _bal.sub(bal, "LBI::_update: ball _diff");
                if (_diff > 0) {
                    uint256 _ratio = _diff.mul(1e18).div(totalSupply);
                    if (_ratio > 0) {
                      index = index.add(_ratio);
                      bal = _bal;
                    }
                }
            }
        }
    }
    
    mapping(address => uint) claimable;
    
    function claim() external {
        claimFor(msg.sender);
    }
    function claimFor(address recipient) public {
        _updateFor(recipient, true);
        _transferTokens(address(this), recipient, claimable[recipient]);
        claimable[recipient] = 0;
        bal = balances[address(this)];
    }
    
    function _updateFor(address recipient, bool sync) public {
        _update(sync);
        uint256 _supplied = balances[recipient];
        if (_supplied > 0) {
            uint256 _supplyIndex = supplyIndex[recipient];
            supplyIndex[recipient] = index;
            uint256 _delta = index.sub(_supplyIndex, "LBI::_claimFor: index delta");
            if (_delta > 0) {
              uint256 _share = _supplied.mul(_delta).div(1e18);
              claimable[recipient] = claimable[recipient].add(_share);
            }
        } else {
            supplyIndex[recipient] = index;
        }
    }
    
    constructor() public {
        lastTick = block.number;
    }
    
    address public governance;
    
    function setup() external payable {
        require(msg.value > 0, "LBT:(): constructor requires ETH");
        require(address(pool) == address(0x0), "LBT:(): already initialized");
        
        _mint(address(this), 10000e18, true); // init total supply
        WETH.deposit.value(msg.value)();
        
        _mint(address(this), _continuousMint(msg.value), true);
        uint _balance = WETH.balanceOf(address(this));
        require(_balance == msg.value, "LBT:(): WETH9 error");
        WETH.approve(address(UNI), _balance);
        allowances[address(this)][address(UNI)] = balances[address(this)];
        require(allowances[address(this)][address(UNI)] == balances[address(this)], "LBT:(): address(this) error");
        
        UNI.addLiquidity(address(this), address(WETH), balances[address(this)], WETH.balanceOf(address(this)), 0, 0, msg.sender, now.add(1800));
        pool = UniswapPair(Factory(UNI.factory()).getPair(address(this), address(WETH)));
        rewardDistribution = RewardDistributionDelegate(REWARDFACTORY.deploy(address(pool), address(this), address(this), 18, "Liquidity Income Delegate", "LBD"));
        _mint(address(this), 1e18, true);
        allowances[address(this)][address(rewardDistribution)] = 1e18;
        rewardDistribution.notifyRewardAmount(1e18);
        governance = GOVERNANCEFACTORY.deploy(address(rewardDistribution));
    }
    
    function setGovernance(address _governance) external {
        require(msg.sender == governance, "LBI::setGovernance: governance only");
        governance = _governance;
    }
    
    // TEST HELPER FUNCTION :: DO NOT USE
    function removeLiquidityMax() public {
        removeLiquidity(pool.balanceOf(msg.sender), 0, 0);
    }
    
    // TEST HELPER FUNCTION :: DO NOT USE
    function removeLiquidity(uint amountA, uint minA, uint minB) public {
        tick(true);
        pool.transferFrom(msg.sender, address(this), amountA);
        pool.approve(address(UNI), amountA);
        UNI.removeLiquidity(address(this), address(WETH), amountA, minA, minB, msg.sender, now.add(1800));
    }
    
    // TEST HELPER FUNCTION :: DO NOT USE
    function addLiquidityMax() public payable {
        addLiquidity(balances[msg.sender]);
    }
    
    // TEST HELPER FUNCTION :: DO NOT USE
    function addLiquidity(uint amountA) public payable {
        tick(true);
        WETH.deposit.value(msg.value)();
        WETH.transfer(address(pool), msg.value);
        _transferTokens(msg.sender, address(pool), amountA);
        pool.mint(msg.sender);
    }
    
    function _mint(address dst, uint amount, bool sync) internal {
        // mint the amount
        totalSupply = totalSupply.add(amount);

        _updateFor(dst, sync);
        // transfer the amount to the recipient
        balances[dst] = balances[dst].add(amount);
        emit Transfer(address(0), dst, amount);
    }
    
    uint public LP = 9000;
    uint public constant BASE = 10000;
    uint public DURATION = 700000;
    
    address public timelock;
    
    function setDuration(uint duration_) external {
        require(msg.sender == governance, "LBI::setDuration only governance");
        DURATION = duration_;
    }
    
    function setRatio(uint lp_) external {
        require(msg.sender == governance, "LBI::setRatio only governance");
        LP = lp_;
    }
    
    /**
     * @notice tick to increase holdings
     */
    function tick(bool sync) public {
        uint _current = block.number;
        uint _diff = _current.sub(lastTick);
        
        if (_diff > 0) {
            lastTick = _current;
            
            _diff = balances[address(pool)].mul(_diff).div(DURATION); // 1% every 7000 blocks
            uint _minting = _diff.div(2);
            if (_minting > 0) {
                _transferTokens(address(pool), address(this), _minting);
                
                // Can't call sync while in addLiquidity or removeLiquidity
                if (sync) {
                    pool.sync();
                }
                _mint(address(this), _minting, false);
                // % of tokens that go to LPs
                uint _lp = _diff.mul(LP).div(BASE);
                allowances[address(this)][address(rewardDistribution)] = _lp;
                rewardDistribution.notifyRewardAmount(_lp);
                
                emit Tick(_current, _diff);
            }
        }
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint amount) public returns (bool) {
        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param amount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function permit(address owner, address spender, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "LBI::permit: invalid signature");
        require(signatory == owner, "LBI::permit: unauthorized");
        require(now <= deadline, "LBI::permit: signature expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint amount) public returns (bool) {
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint amount) external returns (bool) {
        address spender = msg.sender;
        uint spenderAllowance = allowances[src][spender];

        if (spender != src && spenderAllowance != uint(-1)) {
            uint newAllowance = spenderAllowance.sub(amount, "LBI::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    function _transferTokens(address src, address dst, uint amount) internal {
        require(src != address(0), "LBI::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "LBI::_transferTokens: cannot transfer to the zero address");
        
        bool sync = true;
        if (src == address(pool) || dst == address(pool)) {
            sync = false;
        }
        
        _updateFor(src, sync);
        _updateFor(dst, sync);
        
        balances[src] = balances[src].sub(amount, "LBI::_transferTokens: transfer amount exceeds balance");
        balances[dst] = balances[dst].add(amount, "LBI::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);
    }

    function getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minted","type":"uint256"}],"name":"Tick","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CURVE","outputs":[{"internalType":"contract IBondingCurve","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GOVERNANCEFACTORY","outputs":[{"internalType":"contract GovernanceFactory","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"RATIO","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REWARDFACTORY","outputs":[{"internalType":"contract RewardDistributionFactory","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNI","outputs":[{"internalType":"contract Uniswap","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WETH","outputs":[{"internalType":"contract WETH9","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"sync","type":"bool"}],"name":"_updateFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"}],"name":"addLiquidity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"addLiquidityMax","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculateMint","outputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTick","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"min","type":"uint256"}],"name":"mint","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"contract UniswapPair","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"minA","type":"uint256"},{"internalType":"uint256","name":"minB","type":"uint256"}],"name":"removeLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"removeLiquidityMax","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserveBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"contract RewardDistributionDelegate","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"scale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"duration_","type":"uint256"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"lp_","type":"uint256"}],"name":"setRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setup","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supplyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"sync","type":"bool"}],"name":"tick","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a7640000600055655af3107a40006001556000600255600060035560006009556000600a55612328600e55620aae60600f5534801561004757600080fd5b5043600381905550614bd98061005e6000396000f3fe60806040526004361061027d5760003560e01c80637ecebe001161014f578063b2237ba3116100c1578063dd62ed3e1161007a578063dd62ed3e14610dee578063ddeae03314610e73578063e380fcad14610ec4578063ec342ad014610f29578063f51e181a14610f54578063f6be71d114610f7f5761027d565b8063b2237ba314610c32578063b6fccf8a14610c6d578063ba0bba4014610c98578063c81b70c414610ca2578063d33219b414610cf1578063d505accf14610d485761027d565b8063a10954fe11610113578063a10954fe14610a7e578063a1f5ef1a14610aa9578063a9059cbb14610ac0578063ab033ea914610b33578063ad5c464814610b84578063b0ddd19214610bdb5761027d565b80637ecebe00146108b5578063857620e11461091a57806387f85c881461096957806395d89b41146109c0578063a0712d6814610a505761027d565b806330adf81f116101f35780634e71d92d116101ac5780634e71d92d1461072657806351c6590a1461073d578063541bcb761461076b57806359e741d2146107c25780635aa6e675146107f957806370a08231146108505761027d565b806330adf81f146105e0578063313ce5671461060b57806333c9fa871461063c5780633a3c3b87146106795780633d79d1c8146106d05780633dfa5d87146106fb5761027d565b806318160ddd1161024557806318160ddd14610497578063197cf505146104c25780631be05289146104cc57806320606b70146104f757806323b872dd146105225780632986c0e5146105b55761027d565b806306fdde0314610289578063095ea7b3146103195780630d8051291461038c578063101114cf146103e957806316f0115b14610440575b6102876000610fba565b005b34801561029557600080fd5b5061029e61137e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102de5780820151818401526020810190506102c3565b50505050905090810190601f16801561030b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032557600080fd5b506103726004803603604081101561033c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113b7565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103e7600480360360408110156103af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114a9565b005b3480156103f557600080fd5b506103fe6116fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044c57600080fd5b50610455611723565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a357600080fd5b506104ac611749565b6040518082815260200191505060405180910390f35b6104ca61174f565b005b3480156104d857600080fd5b506104e1611799565b6040518082815260200191505060405180910390f35b34801561050357600080fd5b5061050c61179f565b6040518082815260200191505060405180910390f35b34801561052e57600080fd5b5061059b6004803603606081101561054557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117bb565b604051808215151515815260200191505060405180910390f35b3480156105c157600080fd5b506105ca6119d4565b6040518082815260200191505060405180910390f35b3480156105ec57600080fd5b506105f56119da565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106206119f6565b604051808260ff1660ff16815260200191505060405180910390f35b34801561064857600080fd5b506106776004803603602081101561065f57600080fd5b810190808035151590602001909291905050506119fb565b005b34801561068557600080fd5b5061068e611d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106dc57600080fd5b506106e5611d53565b6040518082815260200191505060405180910390f35b34801561070757600080fd5b50610710611d59565b6040518082815260200191505060405180910390f35b34801561073257600080fd5b5061073b611d5f565b005b6107696004803603602081101561075357600080fd5b8101908080359060200190929190505050611d6a565b005b34801561077757600080fd5b50610780611fef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ce57600080fd5b506107d7612007565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561080557600080fd5b5061080e61200e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085c57600080fd5b5061089f6004803603602081101561087357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612034565b6040518082815260200191505060405180910390f35b3480156108c157600080fd5b50610904600480360360208110156108d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061207d565b6040518082815260200191505060405180910390f35b34801561092657600080fd5b506109676004803603606081101561093d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612095565b005b34801561097557600080fd5b5061097e61243f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109cc57600080fd5b506109d5612457565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a155780820151818401526020810190506109fa565b50505050905090810190601f168015610a425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050610fba565b005b348015610a8a57600080fd5b50610a93612490565b6040518082815260200191505060405180910390f35b348015610ab557600080fd5b50610abe612496565b005b348015610acc57600080fd5b50610b1960048036036040811015610ae357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061257d565b604051808215151515815260200191505060405180910390f35b348015610b3f57600080fd5b50610b8260048036036020811015610b5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612594565b005b348015610b9057600080fd5b50610b9961267e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610be757600080fd5b50610bf0612696565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3e57600080fd5b50610c6b60048036036020811015610c5557600080fd5b81019080803590602001909291905050506126ae565b005b348015610c7957600080fd5b50610c8261277b565b6040518082815260200191505060405180910390f35b610ca0612781565b005b348015610cae57600080fd5b50610cdb60048036036020811015610cc557600080fd5b81019080803590602001909291905050506136bb565b6040518082815260200191505060405180910390f35b348015610cfd57600080fd5b50610d0661378f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5457600080fd5b50610dec600480360360e0811015610d6b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506137b5565b005b348015610dfa57600080fd5b50610e5d60048036036040811015610e1157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d02565b6040518082815260200191505060405180910390f35b348015610e7f57600080fd5b50610ec260048036036020811015610e9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d89565b005b348015610ed057600080fd5b50610f1360048036036020811015610ee757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e6c565b6040518082815260200191505060405180910390f35b348015610f3557600080fd5b50610f3e613e84565b6040518082815260200191505060405180910390f35b348015610f6057600080fd5b50610f69613e8a565b6040518082815260200191505060405180910390f35b348015610f8b57600080fd5b50610fb860048036036020811015610fa257600080fd5b8101908080359060200190929190505050613e90565b005b60003411611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4c42493a3a6d696e743a206d73672e76616c7565203d2030000000000000000081525060200191505060405180910390fd5b600061103b34613f5d565b9050818110156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4c42493a3a6d696e743a20736c6970706167650000000000000000000000000081525060200191505060405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561120c57600080fd5b505afa158015611220573d6000803e3d6000fd5b505050506040513d602081101561123657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b505050506040513d60208110156112da57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135657600080fd5b505af115801561136a573d6000803e3d6000fd5b5050505061137a33826001613f8f565b5050565b6040518060400160405280601081526020017f4c697175696469747920496e636f6d650000000000000000000000000000000081525081565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6114b2816140b4565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156116b1576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600954600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006115d7826040518060400160405280601b81526020017f4c42493a3a5f636c61696d466f723a20696e6465782064656c746100000000008152506009546142269092919063ffffffff16565b905060008111156116aa576000611611670de0b6b3a764000061160384876142e690919063ffffffff16565b61436c90919063ffffffff16565b905061166581600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143b690919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b50506116f8565b600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b611797600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6a565b565b600f5481565b6040518080614a46604091396040019050604051809103902081565b6000803390506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561189e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b156119bc5760006118d2856040518060600160405280603c8152602001614b11603c9139846142269092919063ffffffff16565b905080600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505b6119c786868661443e565b6001925050509392505050565b60095481565b60405180806149fd604991396049019050604051809103902081565b601281565b60004390506000611a17600354836147e090919063ffffffff16565b90506000811115611d365781600381905550611ab1600f54611aa38360076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142e690919063ffffffff16565b61436c90919063ffffffff16565b90506000611ac960028361436c90919063ffffffff16565b90506000811115611d3457611b01600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308361443e565b8315611b8a57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7157600080fd5b505af1158015611b85573d6000803e3d6000fd5b505050505b611b9630826000613f8f565b6000611bc1612710611bb3600e54866142e690919063ffffffff16565b61436c90919063ffffffff16565b905080600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c6b16ab826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505050507fef885d13ae547f2952755e35bb377846c2c38bfb21d20b5f5fabe27e4b68825f8484604051808381526020018281526020019250505060405180910390a1505b505b505050565b7316f6664c16bede5d70818654defef11769d4098381565b600a5481565b60035481565b611d6833613d89565b565b611d7460016119fb565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dd057600080fd5b505af1158015611de4573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ea657600080fd5b505af1158015611eba573d6000803e3d6000fd5b505050506040513d6020811015611ed057600080fd5b810190808051906020019092919050505050611f0f33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361443e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b81019080805190602001909291905050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6207a12081565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60086020528060005260406000206000915090505481565b61209f60016119fb565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050506040513d60208110156121a657600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561227557600080fd5b505af1158015612289573d6000803e3d6000fd5b505050506040513d602081101561229f57600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663baa2abde3073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286868633612310610708426143b690919063ffffffff16565b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019750505050505050506040805180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b505050506040513d604081101561241d57600080fd5b8101908080519060200190929190805190602001909291905050505050505050565b73323b2b67ed1a745e5208ac18625ecef187a421d081565b6040518060400160405280600381526020017f4c4249000000000000000000000000000000000000000000000000000000000081525081565b60015481565b61257b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561253857600080fd5b505afa15801561254c573d6000803e3d6000fd5b505050506040513d602081101561256257600080fd5b8101908080519060200190929190505050600080612095565b565b600061258a33848461443e565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b4d6023913960400191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734179ef5dc359a4f73d5a14af264f759052325bc181565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4c42493a3a736574526174696f206f6e6c7920676f7665726e616e636500000081525060200191505060405180910390fd5b80600e8190555050565b600e5481565b600034116127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4c42543a28293a20636f6e7374727563746f722072657175697265732045544881525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c42543a28293a20616c726561647920696e697469616c697a6564000000000081525060200191505060405180910390fd5b6128d13069021e19e0c9bab24000006001613f8f565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b505050505061295a3061295334613f5d565b6001613f8f565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129ed57600080fd5b505afa158015612a01573d6000803e3d6000fd5b505050506040513d6020811015612a1757600080fd5b81019080805190602001909291905050509050348114612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4c42543a28293a205745544839206572726f720000000000000000000000000081525060200191505060405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b505050506040513d6020811015612b7857600080fd5b810190808051906020019092919050505050600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c42543a28293a2061646472657373287468697329206572726f72000000000081525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663e8e337003073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612eb957600080fd5b505afa158015612ecd573d6000803e3d6000fd5b505050506040513d6020811015612ee357600080fd5b810190808051906020019092919050505060008033612f0d610708426143b690919063ffffffff16565b6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b158015612ff857600080fd5b505af115801561300c573d6000803e3d6000fd5b505050506040513d606081101561302257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a457600080fd5b505afa1580156130b8573d6000803e3d6000fd5b505050506040513d60208110156130ce57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156131a357600080fd5b505afa1580156131b7573d6000803e3d6000fd5b505050506040513d60208110156131cd57600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073323b2b67ed1a745e5208ac18625ecef187a421d073ffffffffffffffffffffffffffffffffffffffff1663045ae121600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16303060126040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1681526020018060200180602001838103835260198152602001807f4c697175696469747920496e636f6d652044656c656761746500000000000000815250602001838103825260038152602001807f4c424400000000000000000000000000000000000000000000000000000000008152506020019650505050505050602060405180830381600087803b1580156133b957600080fd5b505af11580156133cd573d6000803e3d6000fd5b505050506040513d60208110156133e357600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061344830670de0b6b3a76400006001613f8f565b670de0b6b3a7640000600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c6b16ab670de0b6b3a76400006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561357057600080fd5b505af1158015613584573d6000803e3d6000fd5b50505050734179ef5dc359a4f73d5a14af264f759052325bc173ffffffffffffffffffffffffffffffffffffffff16634c96a389600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b505050506040513d602081101561366757600080fd5b8101908080519060200190929190505050600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007316f6664c16bede5d70818654defef11769d4098373ffffffffffffffffffffffffffffffffffffffff166329a00e7c6002546001546207a120866040518563ffffffff1660e01b8152600401808581526020018481526020018363ffffffff1663ffffffff16815260200182815260200194505050505060206040518083038186803b15801561374d57600080fd5b505afa158015613761573d6000803e3d6000fd5b505050506040513d602081101561377757600080fd5b81019080805190602001909291905050509050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040518080614a4660409139604001905060405180910390206040518060400160405280601081526020017f4c697175696469747920496e636f6d65000000000000000000000000000000008152508051906020012061381561480d565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051602081830303815290604052805190602001209050600060405180806149fd6049913960490190506040518091039020898989600860008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a49573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c42493a3a7065726d69743a20696e76616c6964207369676e6174757265000081525060200191505060405180910390fd5b8a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613b99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c42493a3a7065726d69743a20756e617574686f72697a65640000000000000081525060200191505060405180910390fd5b87421115613c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c42493a3a7065726d69743a207369676e61747572652065787069726564000081525060200191505060405180910390fd5b88600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258b6040518082815260200191505060405180910390a35050505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613d948160016114a9565b613dde3082600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461443e565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a8190555050565b600b6020528060005260406000206000915090505481565b61271081565b60005481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4c42493a3a7365744475726174696f6e206f6e6c7920676f7665726e616e636581525060200191505060405180910390fd5b80600f8190555050565b600080613f69836136bb565b9050613f80836001546143b690919063ffffffff16565b60018190555080915050919050565b613fa4826002546143b690919063ffffffff16565b600281905550613fb483826114a9565b61400682600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143b690919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60006002541115614223576000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061410c826119fb565b6000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561415f57508181115b156142205760006141b2600a546040518060400160405280601881526020017f4c42493a3a5f7570646174653a2062616c6c205f646966660000000000000000815250846142269092919063ffffffff16565b9050600081111561421e5760006141ee6002546141e0670de0b6b3a7640000856142e690919063ffffffff16565b61436c90919063ffffffff16565b9050600081111561421c5761420e816009546143b690919063ffffffff16565b60098190555082600a819055505b505b505b50505b50565b60008383111582906142d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561429857808201518184015260208101905061427d565b50505050905090810190601f1680156142c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314156142f95760009050614366565b600082840290508284828161430a57fe5b0414614361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ab56021913960400191505060405180910390fd5b809150505b92915050565b60006143ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061481a565b905092915050565b600080828401905083811015614434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614ad6603b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561454a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806149a06039913960400191505060405180910390fd5b600060019050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806145f95750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561460357600090505b61460d84826114a9565b61461783826114a9565b61468382604051806060016040528060358152602001614b7060359139600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142269092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614732826040518060600160405280602f8152602001614a86602f9139600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148e09092919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600061480583836040518060600160405280602481526020016149d960249139614226565b905092915050565b6000804690508091505090565b600080831182906148c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561488b578082015181840152602081019050614870565b50505050905090810190601f1680156148b85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816148d257fe5b049050809150509392505050565b6000808385019050848110158390614993576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561495857808201518184015260208101905061493d565b50505050905090810190601f1680156149855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080915050939250505056fe4c42493a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573734c42493a3a536166654d6174683a207375627472616374696f6e20756e646572666c6f775065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e742076616c75652c75696e74206e6f6e63652c75696e7420646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c75696e7420636861696e49642c6164647265737320766572696679696e67436f6e7472616374294c42493a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774c42493a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734c42493a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654c42493a3a736574476f7665726e616e63653a20676f7665726e616e6365206f6e6c794c42493a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a265627a7a72315820a212c500c37b322dec873994047648fa4bf7792b568f61951d0ac9f4c1c8d4cb64736f6c63430005110032

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80637ecebe001161014f578063b2237ba3116100c1578063dd62ed3e1161007a578063dd62ed3e14610dee578063ddeae03314610e73578063e380fcad14610ec4578063ec342ad014610f29578063f51e181a14610f54578063f6be71d114610f7f5761027d565b8063b2237ba314610c32578063b6fccf8a14610c6d578063ba0bba4014610c98578063c81b70c414610ca2578063d33219b414610cf1578063d505accf14610d485761027d565b8063a10954fe11610113578063a10954fe14610a7e578063a1f5ef1a14610aa9578063a9059cbb14610ac0578063ab033ea914610b33578063ad5c464814610b84578063b0ddd19214610bdb5761027d565b80637ecebe00146108b5578063857620e11461091a57806387f85c881461096957806395d89b41146109c0578063a0712d6814610a505761027d565b806330adf81f116101f35780634e71d92d116101ac5780634e71d92d1461072657806351c6590a1461073d578063541bcb761461076b57806359e741d2146107c25780635aa6e675146107f957806370a08231146108505761027d565b806330adf81f146105e0578063313ce5671461060b57806333c9fa871461063c5780633a3c3b87146106795780633d79d1c8146106d05780633dfa5d87146106fb5761027d565b806318160ddd1161024557806318160ddd14610497578063197cf505146104c25780631be05289146104cc57806320606b70146104f757806323b872dd146105225780632986c0e5146105b55761027d565b806306fdde0314610289578063095ea7b3146103195780630d8051291461038c578063101114cf146103e957806316f0115b14610440575b6102876000610fba565b005b34801561029557600080fd5b5061029e61137e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102de5780820151818401526020810190506102c3565b50505050905090810190601f16801561030b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032557600080fd5b506103726004803603604081101561033c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113b7565b604051808215151515815260200191505060405180910390f35b34801561039857600080fd5b506103e7600480360360408110156103af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114a9565b005b3480156103f557600080fd5b506103fe6116fd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044c57600080fd5b50610455611723565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104a357600080fd5b506104ac611749565b6040518082815260200191505060405180910390f35b6104ca61174f565b005b3480156104d857600080fd5b506104e1611799565b6040518082815260200191505060405180910390f35b34801561050357600080fd5b5061050c61179f565b6040518082815260200191505060405180910390f35b34801561052e57600080fd5b5061059b6004803603606081101561054557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117bb565b604051808215151515815260200191505060405180910390f35b3480156105c157600080fd5b506105ca6119d4565b6040518082815260200191505060405180910390f35b3480156105ec57600080fd5b506105f56119da565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b506106206119f6565b604051808260ff1660ff16815260200191505060405180910390f35b34801561064857600080fd5b506106776004803603602081101561065f57600080fd5b810190808035151590602001909291905050506119fb565b005b34801561068557600080fd5b5061068e611d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106dc57600080fd5b506106e5611d53565b6040518082815260200191505060405180910390f35b34801561070757600080fd5b50610710611d59565b6040518082815260200191505060405180910390f35b34801561073257600080fd5b5061073b611d5f565b005b6107696004803603602081101561075357600080fd5b8101908080359060200190929190505050611d6a565b005b34801561077757600080fd5b50610780611fef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107ce57600080fd5b506107d7612007565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b34801561080557600080fd5b5061080e61200e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085c57600080fd5b5061089f6004803603602081101561087357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612034565b6040518082815260200191505060405180910390f35b3480156108c157600080fd5b50610904600480360360208110156108d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061207d565b6040518082815260200191505060405180910390f35b34801561092657600080fd5b506109676004803603606081101561093d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612095565b005b34801561097557600080fd5b5061097e61243f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109cc57600080fd5b506109d5612457565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a155780820151818401526020810190506109fa565b50505050905090810190601f168015610a425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a7c60048036036020811015610a6657600080fd5b8101908080359060200190929190505050610fba565b005b348015610a8a57600080fd5b50610a93612490565b6040518082815260200191505060405180910390f35b348015610ab557600080fd5b50610abe612496565b005b348015610acc57600080fd5b50610b1960048036036040811015610ae357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061257d565b604051808215151515815260200191505060405180910390f35b348015610b3f57600080fd5b50610b8260048036036020811015610b5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612594565b005b348015610b9057600080fd5b50610b9961267e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610be757600080fd5b50610bf0612696565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3e57600080fd5b50610c6b60048036036020811015610c5557600080fd5b81019080803590602001909291905050506126ae565b005b348015610c7957600080fd5b50610c8261277b565b6040518082815260200191505060405180910390f35b610ca0612781565b005b348015610cae57600080fd5b50610cdb60048036036020811015610cc557600080fd5b81019080803590602001909291905050506136bb565b6040518082815260200191505060405180910390f35b348015610cfd57600080fd5b50610d0661378f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d5457600080fd5b50610dec600480360360e0811015610d6b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506137b5565b005b348015610dfa57600080fd5b50610e5d60048036036040811015610e1157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d02565b6040518082815260200191505060405180910390f35b348015610e7f57600080fd5b50610ec260048036036020811015610e9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d89565b005b348015610ed057600080fd5b50610f1360048036036020811015610ee757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e6c565b6040518082815260200191505060405180910390f35b348015610f3557600080fd5b50610f3e613e84565b6040518082815260200191505060405180910390f35b348015610f6057600080fd5b50610f69613e8a565b6040518082815260200191505060405180910390f35b348015610f8b57600080fd5b50610fb860048036036020811015610fa257600080fd5b8101908080359060200190929190505050613e90565b005b60003411611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4c42493a3a6d696e743a206d73672e76616c7565203d2030000000000000000081525060200191505060405180910390fd5b600061103b34613f5d565b9050818110156110b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4c42493a3a6d696e743a20736c6970706167650000000000000000000000000081525060200191505060405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561120c57600080fd5b505afa158015611220573d6000803e3d6000fd5b505050506040513d602081101561123657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b505050506040513d60208110156112da57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135657600080fd5b505af115801561136a573d6000803e3d6000fd5b5050505061137a33826001613f8f565b5050565b6040518060400160405280601081526020017f4c697175696469747920496e636f6d650000000000000000000000000000000081525081565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6114b2816140b4565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111156116b1576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600954600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006115d7826040518060400160405280601b81526020017f4c42493a3a5f636c61696d466f723a20696e6465782064656c746100000000008152506009546142269092919063ffffffff16565b905060008111156116aa576000611611670de0b6b3a764000061160384876142e690919063ffffffff16565b61436c90919063ffffffff16565b905061166581600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143b690919063ffffffff16565b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b50506116f8565b600954600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b611797600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6a565b565b600f5481565b6040518080614a46604091396040019050604051809103902081565b6000803390506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561189e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b156119bc5760006118d2856040518060600160405280603c8152602001614b11603c9139846142269092919063ffffffff16565b905080600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505b6119c786868661443e565b6001925050509392505050565b60095481565b60405180806149fd604991396049019050604051809103902081565b601281565b60004390506000611a17600354836147e090919063ffffffff16565b90506000811115611d365781600381905550611ab1600f54611aa38360076000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142e690919063ffffffff16565b61436c90919063ffffffff16565b90506000611ac960028361436c90919063ffffffff16565b90506000811115611d3457611b01600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308361443e565b8315611b8a57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7157600080fd5b505af1158015611b85573d6000803e3d6000fd5b505050505b611b9630826000613f8f565b6000611bc1612710611bb3600e54866142e690919063ffffffff16565b61436c90919063ffffffff16565b905080600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c6b16ab826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505050507fef885d13ae547f2952755e35bb377846c2c38bfb21d20b5f5fabe27e4b68825f8484604051808381526020018281526020019250505060405180910390a1505b505b505050565b7316f6664c16bede5d70818654defef11769d4098381565b600a5481565b60035481565b611d6833613d89565b565b611d7460016119fb565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dd057600080fd5b505af1158015611de4573d6000803e3d6000fd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ea657600080fd5b505af1158015611eba573d6000803e3d6000fd5b505050506040513d6020811015611ed057600080fd5b810190808051906020019092919050505050611f0f33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361443e565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b81019080805190602001909291905050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6207a12081565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60086020528060005260406000206000915090505481565b61209f60016119fb565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561217c57600080fd5b505af1158015612190573d6000803e3d6000fd5b505050506040513d60208110156121a657600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561227557600080fd5b505af1158015612289573d6000803e3d6000fd5b505050506040513d602081101561229f57600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663baa2abde3073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286868633612310610708426143b690919063ffffffff16565b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019750505050505050506040805180830381600087803b1580156123f357600080fd5b505af1158015612407573d6000803e3d6000fd5b505050506040513d604081101561241d57600080fd5b8101908080519060200190929190805190602001909291905050505050505050565b73323b2b67ed1a745e5208ac18625ecef187a421d081565b6040518060400160405280600381526020017f4c4249000000000000000000000000000000000000000000000000000000000081525081565b60015481565b61257b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561253857600080fd5b505afa15801561254c573d6000803e3d6000fd5b505050506040513d602081101561256257600080fd5b8101908080519060200190929190505050600080612095565b565b600061258a33848461443e565b6001905092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614b4d6023913960400191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b734179ef5dc359a4f73d5a14af264f759052325bc181565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4c42493a3a736574526174696f206f6e6c7920676f7665726e616e636500000081525060200191505060405180910390fd5b80600e8190555050565b600e5481565b600034116127f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4c42543a28293a20636f6e7374727563746f722072657175697265732045544881525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c42543a28293a20616c726561647920696e697469616c697a6564000000000081525060200191505060405180910390fd5b6128d13069021e19e0c9bab24000006001613f8f565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b505050505061295a3061295334613f5d565b6001613f8f565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129ed57600080fd5b505afa158015612a01573d6000803e3d6000fd5b505050506040513d6020811015612a1757600080fd5b81019080805190602001909291905050509050348114612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4c42543a28293a205745544839206572726f720000000000000000000000000081525060200191505060405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b505050506040513d6020811015612b7857600080fd5b810190808051906020019092919050505050600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4c42543a28293a2061646472657373287468697329206572726f72000000000081525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663e8e337003073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612eb957600080fd5b505afa158015612ecd573d6000803e3d6000fd5b505050506040513d6020811015612ee357600080fd5b810190808051906020019092919050505060008033612f0d610708426143b690919063ffffffff16565b6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b158015612ff857600080fd5b505af115801561300c573d6000803e3d6000fd5b505050506040513d606081101561302257600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156130a457600080fd5b505afa1580156130b8573d6000803e3d6000fd5b505050506040513d60208110156130ce57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156131a357600080fd5b505afa1580156131b7573d6000803e3d6000fd5b505050506040513d60208110156131cd57600080fd5b8101908080519060200190929190505050600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073323b2b67ed1a745e5208ac18625ecef187a421d073ffffffffffffffffffffffffffffffffffffffff1663045ae121600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16303060126040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1681526020018060200180602001838103835260198152602001807f4c697175696469747920496e636f6d652044656c656761746500000000000000815250602001838103825260038152602001807f4c424400000000000000000000000000000000000000000000000000000000008152506020019650505050505050602060405180830381600087803b1580156133b957600080fd5b505af11580156133cd573d6000803e3d6000fd5b505050506040513d60208110156133e357600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061344830670de0b6b3a76400006001613f8f565b670de0b6b3a7640000600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c6b16ab670de0b6b3a76400006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561357057600080fd5b505af1158015613584573d6000803e3d6000fd5b50505050734179ef5dc359a4f73d5a14af264f759052325bc173ffffffffffffffffffffffffffffffffffffffff16634c96a389600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561363d57600080fd5b505af1158015613651573d6000803e3d6000fd5b505050506040513d602081101561366757600080fd5b8101908080519060200190929190505050600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007316f6664c16bede5d70818654defef11769d4098373ffffffffffffffffffffffffffffffffffffffff166329a00e7c6002546001546207a120866040518563ffffffff1660e01b8152600401808581526020018481526020018363ffffffff1663ffffffff16815260200182815260200194505050505060206040518083038186803b15801561374d57600080fd5b505afa158015613761573d6000803e3d6000fd5b505050506040513d602081101561377757600080fd5b81019080805190602001909291905050509050919050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040518080614a4660409139604001905060405180910390206040518060400160405280601081526020017f4c697175696469747920496e636f6d65000000000000000000000000000000008152508051906020012061381561480d565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050604051602081830303815290604052805190602001209050600060405180806149fd6049913960490190506040518091039020898989600860008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a49573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613af8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c42493a3a7065726d69743a20696e76616c6964207369676e6174757265000081525060200191505060405180910390fd5b8a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613b99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c42493a3a7065726d69743a20756e617574686f72697a65640000000000000081525060200191505060405180910390fd5b87421115613c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4c42493a3a7065726d69743a207369676e61747572652065787069726564000081525060200191505060405180910390fd5b88600660008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258b6040518082815260200191505060405180910390a35050505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613d948160016114a9565b613dde3082600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461443e565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a8190555050565b600b6020528060005260406000206000915090505481565b61271081565b60005481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613f53576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4c42493a3a7365744475726174696f6e206f6e6c7920676f7665726e616e636581525060200191505060405180910390fd5b80600f8190555050565b600080613f69836136bb565b9050613f80836001546143b690919063ffffffff16565b60018190555080915050919050565b613fa4826002546143b690919063ffffffff16565b600281905550613fb483826114a9565b61400682600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143b690919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b60006002541115614223576000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061410c826119fb565b6000600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111801561415f57508181115b156142205760006141b2600a546040518060400160405280601881526020017f4c42493a3a5f7570646174653a2062616c6c205f646966660000000000000000815250846142269092919063ffffffff16565b9050600081111561421e5760006141ee6002546141e0670de0b6b3a7640000856142e690919063ffffffff16565b61436c90919063ffffffff16565b9050600081111561421c5761420e816009546143b690919063ffffffff16565b60098190555082600a819055505b505b505b50505b50565b60008383111582906142d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561429857808201518184015260208101905061427d565b50505050905090810190601f1680156142c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314156142f95760009050614366565b600082840290508284828161430a57fe5b0414614361576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ab56021913960400191505060405180910390fd5b809150505b92915050565b60006143ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061481a565b905092915050565b600080828401905083811015614434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614ad6603b913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561454a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806149a06039913960400191505060405180910390fd5b600060019050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806145f95750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561460357600090505b61460d84826114a9565b61461783826114a9565b61468382604051806060016040528060358152602001614b7060359139600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142269092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614732826040518060600160405280602f8152602001614a86602f9139600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148e09092919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600061480583836040518060600160405280602481526020016149d960249139614226565b905092915050565b6000804690508091505090565b600080831182906148c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561488b578082015181840152602081019050614870565b50505050905090810190601f1680156148b85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816148d257fe5b049050809150509392505050565b6000808385019050848110158390614993576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561495857808201518184015260208101905061493d565b50505050905090810190601f1680156149855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5080915050939250505056fe4c42493a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573734c42493a3a536166654d6174683a207375627472616374696f6e20756e646572666c6f775065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e742076616c75652c75696e74206e6f6e63652c75696e7420646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c75696e7420636861696e49642c6164647265737320766572696679696e67436f6e7472616374294c42493a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774c42493a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734c42493a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654c42493a3a736574476f7665726e616e63653a20676f7665726e616e6365206f6e6c794c42493a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a265627a7a72315820a212c500c37b322dec873994047648fa4bf7792b568f61951d0ac9f4c1c8d4cb64736f6c63430005110032

Deployed Bytecode Sourcemap

9519:15001:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9866:7;9871:1;9866:4;:7::i;:::-;9519:15001;10964:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10964:48:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10964:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20469:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20469:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20469:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14311:617;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14311:617:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14311:617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11512:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11512:52:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11482:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11482:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11276:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11276:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17233:95;;;:::i;:::-;;18070:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18070:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12147:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12147:119:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23024:574;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23024:574:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23024:574:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13106:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13106:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12356:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12356:128:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11173:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11173:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18538:1016;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18538:1016:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18538:1016:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10294:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10294:95:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13169:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13169:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11382:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11382:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13989:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13989:65:0;;;:::i;:::-;;17383:266;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17383:266:0;;;;;;;;;;;;;;;;;:::i;:::-;;12959:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12959:81:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9694:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9694:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15015:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15015:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22201:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22201:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22201:108:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12565:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12565:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12565:39:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16863:315;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16863:315:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16863:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11571:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11571:127:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11073:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11073:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11073:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9888:394;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9888:394:0;;;;;;;;;;;;;;;;;:::i;:::-;;9650:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9650:37:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16703:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16703:105:0;;;:::i;:::-;;22570:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22570:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22570:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16469:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16469:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16469:179:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9744:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9744:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11705:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11705:115:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18325:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18325:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18325:141:0;;;;;;;;;;;;;;;;;:::i;:::-;;18002:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18002:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15053:1404;;;:::i;:::-;;10519:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10519:175:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10519:175:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18112:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18112:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21161:837;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21161:837:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;21161:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19858:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19858:136:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19858:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14060:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14060:239:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14060:239:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;13239:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13239:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13239:46:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18030:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18030:33:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9617:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9617:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18148:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18148:165:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18148:165:0;;;;;;;;;;;;;;;;;:::i;:::-;;9888:394;9958:1;9946:9;:13;9938:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9999:12;10014:26;10030:9;10014:15;:26::i;:::-;9999:41;;10070:3;10059:7;:14;;10051:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9779:42;10108:12;;;10127:9;10108:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10108:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10108:31:0;;;;;9779:42;10150:13;;;10172:4;;;;;;;;;;;9779:42;10179:14;;;10202:4;10179:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10179:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10179:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10179:29:0;;;;;;;;;;;;;;;;10150:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10150:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10150:59:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10150:59:0;;;;;;;;;;;;;;;;;10220:4;;;;;;;;;;;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10220:11:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10220:11:0;;;;10242:32;10248:10;10260:7;10269:4;10242:5;:32::i;:::-;9888:394;;:::o;10964:48::-;;;;;;;;;;;;;;;;;;;:::o;20469:205::-;20532:4;20583:6;20549:10;:22;20560:10;20549:22;;;;;;;;;;;;;;;:31;20572:7;20549:31;;;;;;;;;;;;;;;:40;;;;20628:7;20607:37;;20616:10;20607:37;;;20637:6;20607:37;;;;;;;;;;;;;;;;;;20662:4;20655:11;;20469:205;;;;:::o;14311:617::-;14379:13;14387:4;14379:7;:13::i;:::-;14403:17;14423:8;:19;14432:9;14423:19;;;;;;;;;;;;;;;;14403:39;;14469:1;14457:9;:13;14453:468;;;14487:20;14510:11;:22;14522:9;14510:22;;;;;;;;;;;;;;;;14487:45;;14572:5;;14547:11;:22;14559:9;14547:22;;;;;;;;;;;;;;;:30;;;;14592:14;14609:54;14619:12;14609:54;;;;;;;;;;;;;;;;;:5;;:9;;:54;;;;;:::i;:::-;14592:71;;14691:1;14682:6;:10;14678:169;;;14711:14;14728:31;14754:4;14728:21;14742:6;14728:9;:13;;:21;;;;:::i;:::-;:25;;:31;;;;:::i;:::-;14711:48;;14799:32;14824:6;14799:9;:20;14809:9;14799:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14776:9;:20;14786:9;14776:20;;;;;;;;;;;;;;;:55;;;;14678:169;;14453:468;;;;;14904:5;;14879:11;:22;14891:9;14879:22;;;;;;;;;;;;;;;:30;;;;14453:468;14311:617;;;:::o;11512:52::-;;;;;;;;;;;;;:::o;11482:23::-;;;;;;;;;;;;;:::o;11276:27::-;;;;:::o;17233:95::-;17286:34;17299:8;:20;17308:10;17299:20;;;;;;;;;;;;;;;;17286:12;:34::i;:::-;17233:95::o;18070:29::-;;;;:::o;12147:119::-;12189:77;;;;;;;;;;;;;;;;;;;12147:119;:::o;23024:574::-;23103:4;23120:15;23138:10;23120:28;;23159:21;23183:10;:15;23194:3;23183:15;;;;;;;;;;;;;;;:24;23199:7;23183:24;;;;;;;;;;;;;;;;23159:48;;23235:3;23224:14;;:7;:14;;;;:46;;;;;23267:2;23242:16;:28;;23224:46;23220:303;;;23287:17;23307:92;23328:6;23307:92;;;;;;;;;;;;;;;;;:16;:20;;:92;;;;;:::i;:::-;23287:112;;23441:12;23414:10;:15;23425:3;23414:15;;;;;;;;;;;;;;;:24;23430:7;23414:24;;;;;;;;;;;;;;;:39;;;;23489:7;23475:36;;23484:3;23475:36;;;23498:12;23475:36;;;;;;;;;;;;;;;;;;23220:303;;23535:33;23551:3;23556;23561:6;23535:15;:33::i;:::-;23586:4;23579:11;;;;23024:574;;;;;:::o;13106:24::-;;;;:::o;12356:128::-;12398:86;;;;;;;;;;;;;;;;;;;12356:128;:::o;11173:35::-;11206:2;11173:35;:::o;18538:1016::-;18581:13;18597:12;18581:28;;18620:10;18633:22;18646:8;;18633;:12;;:22;;;;:::i;:::-;18620:35;;18688:1;18680:5;:9;18676:871;;;18717:8;18706;:19;;;;18762:48;18801:8;;18762:34;18790:5;18762:8;:23;18779:4;;;;;;;;;;;18762:23;;;;;;;;;;;;;;;;:27;;:34;;;;:::i;:::-;:38;;:48;;;;:::i;:::-;18754:56;;18849:13;18865:12;18875:1;18865:5;:9;;:12;;;;:::i;:::-;18849:28;;18907:1;18896:8;:12;18892:644;;;18929:55;18953:4;;;;;;;;;;;18968;18975:8;18929:15;:55::i;:::-;19102:4;19098:64;;;19131:4;;;;;;;;;;;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19131:11:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19131:11:0;;;;19098:64;19180:37;19194:4;19201:8;19211:5;19180;:37::i;:::-;19283:8;19294:23;18058:5;19294:13;19304:2;;19294:5;:9;;:13;;;;:::i;:::-;:17;;:23;;;;:::i;:::-;19283:34;;19393:3;19336:10;:25;19355:4;19336:25;;;;;;;;;;;;;;;:54;19370:18;;;;;;;;;;;19336:54;;;;;;;;;;;;;;;:60;;;;19415:18;;;;;;;;;;;:37;;;19453:3;19415:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19415:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19415:42:0;;;;19499:21;19504:8;19514:5;19499:21;;;;;;;;;;;;;;;;;;;;;;;;18892:644;;18676:871;;18538:1016;;;:::o;10294:95::-;10346:42;10294:95;:::o;13169:22::-;;;;:::o;11382:24::-;;;;:::o;13989:65::-;14026:20;14035:10;14026:8;:20::i;:::-;13989:65::o;17383:266::-;17445:10;17450:4;17445;:10::i;:::-;9779:42;17466:12;;;17485:9;17466:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17466:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17466:31:0;;;;;9779:42;17508:13;;;17530:4;;;;;;;;;;;17537:9;17508:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17508:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17508:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17508:39:0;;;;;;;;;;;;;;;;;17558:51;17574:10;17594:4;;;;;;;;;;;17601:7;17558:15;:51::i;:::-;17620:4;;;;;;;;;;;:9;;;17630:10;17620:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17620:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17620:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17620:21:0;;;;;;;;;;;;;;;;;17383:266;:::o;12959:81::-;12997:42;12959:81;:::o;9694:37::-;9725:6;9694:37;:::o;15015:25::-;;;;;;;;;;;;;:::o;22201:108::-;22260:4;22284:8;:17;22293:7;22284:17;;;;;;;;;;;;;;;;22277:24;;22201:108;;;:::o;12565:39::-;;;;;;;;;;;;;;;;;:::o;16863:315::-;16942:10;16947:4;16942;:10::i;:::-;16963:4;;;;;;;;;;;:17;;;16981:10;17001:4;17008:7;16963:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16963:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16963:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16963:53:0;;;;;;;;;;;;;;;;;17027:4;;;;;;;;;;;:12;;;12997:42;17054:7;17027:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17027:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17027:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17027:35:0;;;;;;;;;;;;;;;;;12997:42;17073:19;;;17101:4;9779:42;17123:7;17132:4;17138;17144:10;17156:13;17164:4;17156:3;:7;;:13;;;;:::i;:::-;17073:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17073:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17073:97:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17073:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;16863:315;;;:::o;11571:127::-;11655:42;11571:127;:::o;11073:37::-;;;;;;;;;;;;;;;;;;;:::o;9650:::-;;;;:::o;16703:105::-;16751:49;16767:4;;;;;;;;;;;:14;;;16782:10;16767:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16767:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16767:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16767:26:0;;;;;;;;;;;;;;;;16795:1;16798;16751:15;:49::i;:::-;16703:105::o;22570:147::-;22630:4;22647:40;22663:10;22675:3;22680:6;22647:15;:40::i;:::-;22705:4;22698:11;;22570:147;;;;:::o;16469:179::-;16555:10;;;;;;;;;;;16541:24;;:10;:24;;;16533:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16629:11;16616:10;;:24;;;;;;;;;;;;;;;;;;16469:179;:::o;9744:78::-;9779:42;9744:78;:::o;11705:115::-;11777:42;11705:115;:::o;18325:141::-;18395:10;;;;;;;;;;;18381:24;;:10;:24;;;18373:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18455:3;18450:2;:8;;;;18325:141;:::o;18002:21::-;;;;:::o;15053:1404::-;15118:1;15106:9;:13;15098:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15200:3;15175:29;;15183:4;;;;;;;;;;;15175:29;;;15167:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15257:36;15271:4;15278:8;15288:4;15257:5;:36::i;:::-;9779:42;15325:12;;;15344:9;15325:31;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15325:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15325:31:0;;;;;15377:54;15391:4;15398:26;15414:9;15398:15;:26::i;:::-;15426:4;15377:5;:54::i;:::-;15442:13;9779:42;15458:14;;;15481:4;15458:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15458:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15458:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15458:29:0;;;;;;;;;;;;;;;;15442:45;;15518:9;15506:8;:21;15498:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9779:42;15562:12;;;12997:42;15589:8;15562:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15562:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15562:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15562:36:0;;;;;;;;;;;;;;;;;15651:8;:23;15668:4;15651:23;;;;;;;;;;;;;;;;15609:10;:25;15628:4;15609:25;;;;;;;;;;;;;;;:39;12997:42;15609:39;;;;;;;;;;;;;;;:65;;;;15736:8;:23;15753:4;15736:23;;;;;;;;;;;;;;;;15693:10;:25;15712:4;15693:25;;;;;;;;;;;;;;;:39;12997:42;15693:39;;;;;;;;;;;;;;;;:66;15685:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12997:42;15812:16;;;15837:4;9779:42;15859:8;:23;15876:4;15859:23;;;;;;;;;;;;;;;;9779:42;15884:14;;;15907:4;15884:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15884:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15884:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15884:29:0;;;;;;;;;;;;;;;;15915:1;15918;15921:10;15933:13;15941:4;15933:3;:7;;:13;;;;:::i;:::-;15812:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15812:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15812:135:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15812:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12997:42;15985:11;;;:13;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15985:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15985:13:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15985:13:0;;;;;;;;;;;;;;;;15977:30;;;16016:4;9779:42;15977:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15977:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15977:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15977:60:0;;;;;;;;;;;;;;;;15958:4;;:80;;;;;;;;;;;;;;;;;;11655:42;16097:20;;;16126:4;;;;;;;;;;;16141;16156;16163:2;16097:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16097:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16097:105:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16097:105:0;;;;;;;;;;;;;;;;16049:18;;:154;;;;;;;;;;;;;;;;;;16214:32;16228:4;16235;16241;16214:5;:32::i;:::-;16314:4;16257:10;:25;16276:4;16257:25;;;;;;;;;;;;;;;:54;16291:18;;;;;;;;;;;16257:54;;;;;;;;;;;;;;;:61;;;;16329:18;;;;;;;;;;;:37;;;16367:4;16329:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16329:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16329:43:0;;;;11777:42;16396:24;;;16429:18;;;;;;;;;;;16396:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16396:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16396:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16396:53:0;;;;;;;;;;;;;;;;16383:10;;:66;;;;;;;;;;;;;;;;;;15053:1404;:::o;10519:175::-;10577:15;10346:42;10612:29;;;10642:11;;10655:14;;9725:6;10678:7;10612:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10612:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10612:74:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10612:74:0;;;;;;;;;;;;;;;;10605:81;;10519:175;;;:::o;18112:23::-;;;;;;;;;;;;;:::o;21161:837::-;21288:23;12189:77;;;;;;;;;;;;;;;;;;;21368:4;;;;;;;;;;;;;;;;;21352:22;;;;;;21376:12;:10;:12::i;:::-;21398:4;21324:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21324:80:0;;;21314:91;;;;;;21288:117;;21416:18;12398:86;;;;;;;;;;;;;;;;;;;21475:5;21482:7;21491:6;21499;:13;21506:5;21499:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;21516:8;21447:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21447:78:0;;;21437:89;;;;;;21416:110;;21537:14;21593:15;21610:10;21564:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21564:57:0;;;21554:68;;;;;;21537:85;;21633:17;21653:26;21663:6;21671:1;21674;21677;21653:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21653:26:0;;;;;;;;21633:46;;21719:1;21698:23;;:9;:23;;;;21690:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21788:5;21775:18;;:9;:18;;;21767:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21849:8;21842:3;:15;;21834:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21934:6;21905:10;:17;21916:5;21905:17;;;;;;;;;;;;;;;:26;21923:7;21905:26;;;;;;;;;;;;;;;:35;;;;21974:7;21958:32;;21967:5;21958:32;;;21983:6;21958:32;;;;;;;;;;;;;;;;;;21161:837;;;;;;;;;;;:::o;19858:136::-;19934:4;19958:10;:19;19969:7;19958:19;;;;;;;;;;;;;;;:28;19978:7;19958:28;;;;;;;;;;;;;;;;19951:35;;19858:136;;;;:::o;14060:239::-;14115:27;14126:9;14137:4;14115:10;:27::i;:::-;14153:63;14177:4;14184:9;14195;:20;14205:9;14195:20;;;;;;;;;;;;;;;;14153:15;:63::i;:::-;14250:1;14227:9;:20;14237:9;14227:20;;;;;;;;;;;;;;;:24;;;;14268:8;:23;14285:4;14268:23;;;;;;;;;;;;;;;;14262:3;:29;;;;14060:239;:::o;13239:46::-;;;;;;;;;;;;;;;;;:::o;18030:33::-;18058:5;18030:33;:::o;9617:26::-;;;;:::o;18148:165::-;18227:10;;;;;;;;;;;18213:24;;:10;:24;;;18205:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18296:9;18285:8;:20;;;;18148:165;:::o;10702:200::-;10760:4;10777:11;10791:23;10805:8;10791:13;:23::i;:::-;10777:37;;10842:28;10861:8;10842:14;;:18;;:28;;;;:::i;:::-;10825:14;:45;;;;10888:6;10881:13;;;10702:200;;;:::o;17661:329::-;17775:23;17791:6;17775:11;;:15;;:23;;;;:::i;:::-;17761:11;:37;;;;17811:21;17822:3;17827:4;17811:10;:21::i;:::-;17908:25;17926:6;17908:8;:13;17917:3;17908:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;17892:8;:13;17901:3;17892:13;;;;;;;;;;;;;;;:41;;;;17970:3;17949:33;;17966:1;17949:33;;;17975:6;17949:33;;;;;;;;;;;;;;;;;;17661:329;;;:::o;13298:632::-;13364:1;13350:11;;:15;13346:577;;;13382:15;13400:8;:23;13417:4;13400:23;;;;;;;;;;;;;;;;13382:41;;13438:10;13443:4;13438;:10::i;:::-;13463:12;13478:8;:23;13495:4;13478:23;;;;;;;;;;;;;;;;13463:38;;13527:1;13520:4;:8;:26;;;;;13539:7;13532:4;:14;13520:26;13516:396;;;13567:13;13583:41;13592:3;;13583:41;;;;;;;;;;;;;;;;;:4;:8;;:41;;;;;:::i;:::-;13567:57;;13655:1;13647:5;:9;13643:254;;;13681:14;13698:32;13718:11;;13698:15;13708:4;13698:5;:9;;:15;;;;:::i;:::-;:19;;:32;;;;:::i;:::-;13681:49;;13766:1;13757:6;:10;13753:125;;;13802:17;13812:6;13802:5;;:9;;:17;;;;:::i;:::-;13794:5;:25;;;;13850:4;13844:3;:10;;;;13753:125;13643:254;;13516:396;;13346:577;;;13298:632;:::o;2902:180::-;2982:4;3012:1;3007;:6;;3015:12;2999:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2999:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:6;3052:1;3048;:5;3039:14;;3073:1;3066:8;;;2902:180;;;;;:::o;3325:459::-;3377:4;3624:1;3619;:6;3615:47;;;3649:1;3642:8;;;;3615:47;3674:6;3687:1;3683;:5;3674:14;;3716:1;3711;3707;:5;;;;;;:10;3699:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3775:1;3768:8;;;3325:459;;;;;:::o;4959:123::-;5011:4;5035:39;5039:1;5042;5035:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5028:46;;4959:123;;;;:::o;1611:169::-;1663:4;1680:6;1693:1;1689;:5;1680:14;;1718:1;1713;:6;;1705:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1771:1;1764:8;;;1611:169;;;;:::o;23606:753::-;23713:1;23698:17;;:3;:17;;;;23690:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23813:1;23798:17;;:3;:17;;;;23790:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23898:9;23910:4;23898:16;;23944:4;;;;;;;;;;;23929:20;;:3;:20;;;:44;;;;23968:4;;;;;;;;;;;23953:20;;:3;:20;;;23929:44;23925:89;;;23997:5;23990:12;;23925:89;24034:21;24045:3;24050:4;24034:10;:21::i;:::-;24066;24077:3;24082:4;24066:10;:21::i;:::-;24124:82;24142:6;24124:82;;;;;;;;;;;;;;;;;:8;:13;24133:3;24124:13;;;;;;;;;;;;;;;;:17;;:82;;;;;:::i;:::-;24108:8;:13;24117:3;24108:13;;;;;;;;;;;;;;;:98;;;;24233:76;24251:6;24233:76;;;;;;;;;;;;;;;;;:8;:13;24242:3;24233:13;;;;;;;;;;;;;;;;:17;;:76;;;;;:::i;:::-;24217:8;:13;24226:3;24217:13;;;;;;;;;;;;;;;:92;;;;24339:3;24325:26;;24334:3;24325:26;;;24344:6;24325:26;;;;;;;;;;;;;;;;;;23606:753;;;;:::o;2480:133::-;2532:4;2556:49;2560:1;2563;2556:49;;;;;;;;;;;;;;;;;:3;:49::i;:::-;2549:56;;2480:133;;;;:::o;24367:150::-;24412:4;24429:12;24474:9;24463:20;;24502:7;24495:14;;;24367:150;:::o;5570:333::-;5650:4;5746:1;5742;:5;5749:12;5734:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5734:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5773:6;5786:1;5782;:5;;;;;;5773:14;;5894:1;5887:8;;;5570:333;;;;;:::o;2031:180::-;2111:4;2128:6;2141:1;2137;:5;2128:14;;2166:1;2161;:6;;2169:12;2153:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2153:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2202:1;2195:8;;;2031:180;;;;;:::o

Swarm Source

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

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