ETH Price: $3,390.56 (+4.37%)
Gas: 2 Gwei

Token

FEG Staking (FST)
 

Overview

Max Total Supply

6,597,322,666.482820196754921815 FST

Holders

145

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,529,912.252579814185356633 FST

Value
$0.00
0x634c2a62df7decdb412683f78253cfe6fbcfbcae
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:
stakeInterface

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-27
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

/// Standard IERC20 interface
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function name() external view returns(string memory);
    function symbol() external view returns(string memory);
    function balanceOf(address user) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface sdep{
    function sdOwner() external view returns(address);
    function BackingLogicAddress() external view returns(address);
    function backingAsset() external view returns(address);
}

interface stakeDeployer{
    function isReward(address addy) external view returns(bool);
    function setIsReward(address addy) external;
    function readyMigrate(address addy) external view returns(bool);
    function migrateAddress(address addy) external view returns(address);
    function distributeBulk() external;
}

interface Reader {
    function isAdmin(address addy) external view returns (bool);
    function isSetter(address addy) external view returns (bool);
    function setIsSD(address addy) external;
    function protocolAddy() external view returns (address);    
    function feeConverter() external view returns (address);
    function sdDepAddy() external view returns (address);
    function getProtocolFee() external view returns (uint256);
    function breaker() external view returns (bool); //circuit breaked in case of an exploit to handle
    function dataAddress() external view returns (address);
    function isWhitelistContract(address addy) external view returns (bool);
    function setWhitelistContract(address addy, bool _bool) external;
    function stakeDeployerAddress() external view returns(address);
    function FEGstake() external view returns(address);
}

interface StakeLogics{    
    function start() external;
    function balanceOf(address user) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function amountStaked(address user) external view returns (uint256 StakedSD);  
    function isStakeholder(address user) external view returns (bool);
    function stake(address user, uint256 amt) external returns (uint256 poolAmountOut, uint256 afterFee);
    function withdraw(address user, uint256 amt) external returns (uint256);
    function setWithdrawalFee(uint256 amt) external;
    function withdrawFee() external view returns(uint256);
    function setDepositFee(uint256 amt) external;
    function depositFee() external view returns(uint256);
    function addReward(address reward, uint256 amt) external;
    function getTotalRewards(address reward) external view returns(uint256);
    function getRewardRound(address reward) external view returns(uint256);
    function claimRewardTokenEarned(address user, address reward) external returns (uint256 owing);
    function claimAllReward(address user) external;
    function pendingRewardTokenEarned(address user, address reward) external view returns (uint256 _pendingReward);
    function syncRewards() external;
    function userRewardCheck(address user) external view returns(bool owed);
    function setRewardToken(address reward, uint256 _syncLevel) external;
    function setSyncLevel(address reward, uint256 amt) external;
    function getSyncLevel(address reward) external view returns(uint256);
    function setDelay(uint256 amt) external;
    function delay() external view returns(uint256);
    function setMatureDelay(bool _bool) external;    
    function matureDelay() external view returns(bool);
    function setBoost(uint256 amt) external;
    function boost() external view returns(uint256);
    function setBoostBacking(bool _bool) external;
    function boostBacking() external view returns(bool);
    function setBurnWDFee(bool _bool) external;
    function burnWDFee() external view returns(bool);
    function setSacrificeEnabled(bool _bool) external;
    function sacrificeEnabled() external view returns(bool);
    function setSacrificeLevel(address user, uint256 amt) external;
    function parent() external view returns(address);
    function stakers(address user) external view returns(uint256, uint256, uint256, bool, bool);
    function rewards(address user) external view returns(bool, bool, uint256, uint256, uint256, uint256);
    function userRewards(address reward, address user) external view returns(uint256, uint256, uint256);
    function rewardRounds(address reward, uint256 round) external view returns(uint256, uint256, uint256);
    function rewardAddresses(uint256 amount) external view returns(address);
    function isRewardToken(address reward) external view returns(bool);
    function rewardLength() external view returns(uint256);
    function getAllPendingRewardTokenEarned(address user) external view returns (uint256[] memory, address[] memory);
    function live() external view returns(bool);
    function getStakeTime(address user) external view returns(uint256);
    function transferOwnership(address newowner) external;
    function sacrificed(address user) external view returns(uint256);
    function setOffRewardToken(address reward, bool _bool) external;
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }


    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

/// Transfer Helper to ensure the correct transfer of the tokens or ETH
library SafeTransfer {
    using Address for address;
    /** Safe Transfer asset from one wallet with approval of the wallet
    * @param erc20: the contract address of the erc20 token
    * @param from: the wallet to take from
    * @param amount: the amount to take from the wallet
    **/
    function _pullUnderlying(IERC20 erc20, address from, uint amount) internal
    {
        safeTransferFrom(erc20,from,address(this),amount);
    }

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

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

    /** Safe Transfer asset to one wallet from within the contract
    * @param erc20: the contract address of the erc20 token
    * @param to: the wallet to send to
    * @param amount: the amount to send from the contract
    **/
    function _pushUnderlying(IERC20 erc20, address to, uint amount) internal
    {
        safeTransfer(erc20,to,amount);
    }

    /** Safe Transfer ETH to one wallet from within the contract
    * @param to: the wallet to send to
    * @param value: the amount to send from the contract
    **/
    function safeTransferETH(address to, uint256 value) internal {
        (bool success,) = to.call{value : value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

interface Dataport {
    function DATA_READ() external view returns(address);
}

contract stakeInterface is ReentrancyGuard{
    address public SD;
    address public _owner;
    address public stakeLogic;
    string  private _name;
    string  private _symbol;
    bool    public paused;
    uint8   private _decimals = 18;
    mapping(address => uint256) public staked;
    mapping(address => uint256) public accu;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address user, address token, string memory tname, string memory tsymbol) {
        SD = token;
        _name = tname;
        _symbol = tsymbol;
        _owner = user;
    }
    
    event STAKED(address staker, uint256 tokens);
    event ADDREWARD(address reward, uint256 amount);
    event WITHDRAW(address staker, uint256 tokens);
    event PAYOUT(uint256 round, uint256 tokens, address sender);
    event CLAIMEDREWARD(address staker, address reward, uint256 amount);
    event CLAIMEDSDEARNED(address staker, uint256 reward); 
    event CLAIMALLREWARD(address staker); 
    event Transfer(address indexed from, address indexed to, uint256 value);

    modifier live() {
        require(!paused, "Paused");
        _;
    }

    modifier dist() {
        if(address(this) != Reader(DATA_READ()).FEGstake()){
        stakeDeployer(stakeDeployerAddress()).distributeBulk();
        }
        _;
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */    

    modifier onlyOwner {
        if(_owner != address(0)) {
        require(msg.sender == _owner, "owner");
        }
        if(_owner == address(0)) {
        require(Reader(DATA_READ()).isAdmin(msg.sender));
        }
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "use renounce");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
        StakeLogics(stakeLogic).transferOwnership(newOwner);
    }

    function DATA_READ() public view returns(address) {
       return Dataport(0xcCeD1a96321B2B2a06E8F3F4B0B883dDD059968c).DATA_READ();
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns(uint8) {
        return _decimals;
    }

    function isLive() public view returns(bool) {
        return StakeLogics(stakeLogic).live();
    }

    function setPause(bool _bool) external onlyOwner {
        require(stakeDeployer(stakeDeployerAddress()).readyMigrate(SD), "Not ready");
        paused = _bool;
    }

    function setLogics(address addy) external {
        require(stakeLogic == address(0), "0x");
        stakeLogic = addy;
    }

    function userRewardCheck(address user) public view returns(bool) {
        return StakeLogics(stakeLogic).userRewardCheck(user);
    }

    function getStakeTime(address user) public view returns(uint256) {
        return StakeLogics(stakeLogic).getStakeTime(user);
    }

    function getTotalRewards(address reward) external view returns(uint256) {
        return StakeLogics(stakeLogic).getTotalRewards(reward);        
    }

    function sendTokens(address user, uint256 amt, uint256 amt0) external {
        require(msg.sender == stakeLogic, "Not SL");
        SafeTransfer.safeTransfer(IERC20(SD), user, amt);
        uint256 ts = staked[user];
        uint256 us = accu[user];
        staked[user] = amt0 > ts ? 0 : ts - amt0;
        accu[user] = amt0 > us ? 0 : us - amt0;
    }

    function sendReward(address reward, address user, uint256 amt) external {
        require(msg.sender == stakeLogic, "Not SL");
        SafeTransfer.safeTransfer(IERC20(reward), user, amt);
    }

    function setStakeLogic() external onlyOwner {
        require(stakeDeployer(stakeDeployerAddress()).readyMigrate(SD), "Not ready");
        stakeLogic = stakeDeployer(stakeDeployerAddress()).migrateAddress(SD);
    }

    function setWithdrawalFee(uint256 amt) external onlyOwner {
        StakeLogics(stakeLogic).setWithdrawalFee(amt);
    }

    function withdrawalFee() external view returns(uint256) {
        return StakeLogics(stakeLogic).withdrawFee();
    }

    function setDepositFee(uint256 amt) external onlyOwner {
        StakeLogics(stakeLogic).setDepositFee(amt);
    }

    function depositFee() external view returns(uint256) {
        return StakeLogics(stakeLogic).depositFee();
    }

    function balanceOf(address user) external view returns(uint256) {
        return StakeLogics(stakeLogic).balanceOf(user);
    }

    function totalSupply() public view returns (uint256) {
        return StakeLogics(stakeLogic).totalSupply();
    }

    function isStaker(address user) public view returns(bool) {
        return StakeLogics(stakeLogic).isStakeholder(user);
    }
    
    function start() external {
        require(msg.sender == _owner, "owner");
        StakeLogics(stakeLogic).start();
    }

    function sacrificed(address user) external view returns(uint256) {
        return StakeLogics(stakeLogic).sacrificed(user);
    }

    function stake(uint256 amount) public nonReentrant returns(uint256) { 
        require(isLive(), "not live");
        SafeTransfer.safeTransferFrom(IERC20(SD), msg.sender, stakeLogic, amount); 
        (uint256 poolAmountOut, uint256 afterFee) = StakeLogics(stakeLogic).stake(msg.sender, amount);
        staked[msg.sender] += afterFee;
        accu[msg.sender] += afterFee;
        emit STAKED(msg.sender, amount);
        emit Transfer(msg.sender, address(this), poolAmountOut);
        return poolAmountOut;        
    }

    function stake(address user, uint256 amount) public nonReentrant returns(uint256) { 
        require(isLive(), "not live");
        SafeTransfer.safeTransferFrom(IERC20(SD), msg.sender, stakeLogic, amount); 
        (uint256 poolAmountOut, uint256 afterFee) = StakeLogics(stakeLogic).stake(user, amount);
        staked[user] += afterFee;
        accu[user] += afterFee;
        emit STAKED(user, amount);
        emit Transfer(user, address(this), poolAmountOut);
        return poolAmountOut;        
    }

    // ------------------------------------------------------------------------
    // Owners can send the funds to be distributed to stakers using this function
    // @param tokens number of tokens to distribute
    // ------------------------------------------------------------------------
    function addReward(address reward, uint256 amt) public nonReentrant {   
        SafeTransfer.safeTransferFrom(IERC20(reward), msg.sender, address(this), amt); 
        StakeLogics(stakeLogic).addReward(reward, amt);
        emit ADDREWARD(reward, amt);  
    }
    
    function setOffRewardToken(address reward, bool _bool) external nonReentrant onlyOwner {
        StakeLogics(stakeLogic).setOffRewardToken(reward, _bool);
    }

    function claimRewardTokenEarned(address reward) public nonReentrant  live returns(uint256 owing) {      
        owing = StakeLogics(stakeLogic).claimRewardTokenEarned(msg.sender, reward);   
        emit CLAIMEDREWARD(msg.sender, reward, owing);
        return owing;
    }    
    
    function claimAllReward() public nonReentrant live {    
        StakeLogics(stakeLogic).claimAllReward(msg.sender);
        emit CLAIMALLREWARD(msg.sender);
    }

    // ------------------------------------------------------------------------
    // Get the pending rewards of the staker
    // @param _staker the address of the staker
    // ------------------------------------------------------------------------    
    
    function pendingRewardTokenEarned(address staker, address reward) public view returns(uint256 _pendingReward) {
        require(staker != address(0), "ERC20: sending to the zero address");
        return StakeLogics(stakeLogic).pendingRewardTokenEarned(staker, reward);
    }
    
    // ------------------------------------------------------------------------
    // Get the SST balance of the token holder
    // @param user the address of the token holder includes earned SD tokens from staking
    // ------------------------------------------------------------------------
    function amountStaked(address user) public view returns(uint256 StakedSD) {
        require(user != address(0), "ERC20: sending to the zero address");
        uint256 a = StakeLogics(stakeLogic).amountStaked(user);
        StakedSD = a < staked[user] ? staked[user] : a;
    }
    
    // ------------------------------------------------------------------------
    // Stakers can un stake the staked tokens using this function
    // @param tokens the number of tokens to withdraw
    // ------------------------------------------------------------------------
    function withdraw(uint256 amount) public nonReentrant live dist returns (uint256 tokenAmountOut) {
        require(isLive(), "not live");
        tokenAmountOut = StakeLogics(stakeLogic).withdraw(msg.sender, amount); 
        emit WITHDRAW(msg.sender, amount);
        emit Transfer(address(this), msg.sender, tokenAmountOut);
        return tokenAmountOut;
    }

    function stk(address user, uint256 amount, bool _bool) public nonReentrant live {
        require(msg.sender == stakeLogic, "SL");
        staked[user] = _bool ? staked[user] + amount : staked[user] - amount;
    }

    function accumulated(address user) external view returns(uint256) {
        uint256 a = accu[user];
        uint256 c = amountStaked(user);
        return c > a ? c - a : 0; 
    }
    
    function resetAccumulated() external {
        accu[msg.sender] = amountStaked(msg.sender);
    }

    function emergencySaveLostTokens(address to, address _token, uint256 _amt) public dist onlyOwner {
        require(_token != SD, "Can't remove Main Token");
        require(!stakeDeployer(stakeDeployerAddress()).isReward(_token), "Cannot remove rewards");
        IERC20(_token).transfer(to, _amt);
    }

    function setRewardToken(address reward, uint256 _syncLevel) external{ // Incase wraps ever update
        if(msg.sender != stakeDeployerAddress()){
        require(msg.sender == owner(), "OO");
    }
        if(!stakeDeployer(stakeDeployerAddress()).isReward(reward)){
        stakeDeployer(stakeDeployerAddress()).setIsReward(reward);
        }
        StakeLogics(stakeLogic).setRewardToken(reward, _syncLevel);
    }
    
    function syncRewards() public nonReentrant {
        StakeLogics(stakeLogic).syncRewards();
    }

    function setSacrificeLevel(uint256 amt) external {
        StakeLogics(stakeLogic).setSacrificeLevel(msg.sender, amt);
    }
    
    function setSacrificeEnabled(bool _bool) external onlyOwner {
        StakeLogics(stakeLogic).setSacrificeEnabled(_bool);
    }

    function setBurnWDFee(bool _bool) external onlyOwner {
        StakeLogics(stakeLogic).setBurnWDFee(_bool);
    }

    function setBoostBacking(bool _bool) external onlyOwner {
        StakeLogics(stakeLogic).setBoostBacking(_bool);
    }
    
    function setBoost(uint256 amt) external onlyOwner {
        StakeLogics(stakeLogic).setBoost(amt);
    }
    
    function setSyncLevel(address reward, uint256 amt) external onlyOwner {
        require(amt > 1e7, " 1e7");
        StakeLogics(stakeLogic).setSyncLevel(reward, amt);
    }

    function getSyncLevel(address reward) external view returns(uint256) {
        return StakeLogics(stakeLogic).getSyncLevel(reward);
    }
    
    function delay() external view returns(uint256) {
        return StakeLogics(stakeLogic).delay();
    }
    
    function getRewardRound(address reward) external view returns(uint256) {
        return StakeLogics(stakeLogic).getRewardRound(reward);
    }
    
    function boost() external view returns(uint256) {
        return StakeLogics(stakeLogic).boost();
    }
    
    function boostBacking() external view returns(bool) {
        return StakeLogics(stakeLogic).boostBacking();
    }
    
    function burnWDFee() external view returns(bool) {
        return StakeLogics(stakeLogic).burnWDFee();
    }
    
    function sacrificeEnabled() external view returns(bool) {
        return StakeLogics(stakeLogic).sacrificeEnabled();
    }
    
    function matureDelay() external view returns(bool) {
        return StakeLogics(stakeLogic).matureDelay();
    }

    function setMatureDelay(bool _bool) external onlyOwner {
        StakeLogics(stakeLogic).setMatureDelay(_bool);
    }
    
    function setDelay(uint256 amt) external onlyOwner {
        StakeLogics(stakeLogic).setDelay(amt);
    }

    function getStakers(address user) external view returns(uint256 stakeTime, uint256 sacrificeLevel, uint256 withdrawFee, bool initialized, bool preDelay) {
        return StakeLogics(stakeLogic).stakers(user);
    }

    function getRewards(address reward) external view returns(bool islive, bool isOn, uint256 round, uint256 totalDividends, uint256 totalRewards, uint256 _syncLevel) {
        return StakeLogics(stakeLogic).rewards(reward);
    }

    function getUserRewards(address reward, address user) external view returns(uint256 entryRound, uint256 lastEarned, uint256 totalEarned) {
        return StakeLogics(stakeLogic).userRewards(reward, user);
    }
    
    function getRewardRounds(address reward, uint256 round) external view returns(uint256 entryRound, uint256 lastEarned, uint256 totalEarned) {
        return StakeLogics(stakeLogic).rewardRounds(reward, round);
    }

    function rewardAddresses(uint256 reward) public view returns(address) {        
        return StakeLogics(stakeLogic).rewardAddresses(reward);
    }

    function rewardLength() public view returns(uint256) {
        return StakeLogics(stakeLogic).rewardLength();
    }

    function getAllPendingRewardTokenEarned(address user) public view returns (uint256[] memory amounts, address[] memory reward, string[] memory name_, string[] memory symbol_, uint8[] memory decimals_) {
        uint256 rl = rewardLength();
        address rw;
        reward = new address[](rl);
        amounts = new uint256[](rl);
        name_ = new string[](rl);
        symbol_ = new string[](rl);
        decimals_ = new uint8[](rl);
        for (uint256 j = 0; j < rl; j++) {
            rw = rewardAddresses(j);
            reward[j] = rw;
            amounts[j] = pendingRewardTokenEarned(user, rw);
            name_[j] = IERC20(rw).name();
            symbol_[j] = IERC20(rw).symbol();
            decimals_[j] = IERC20(rw).decimals();
        }
    }

    function getPaginatedPendingRewardTokenEarned(address user, uint256 starting, uint256 amount) public view returns (uint256[] memory amounts, address[] memory reward, string[] memory name_, string[] memory symbol_, uint8[] memory decimals_) {
        uint256 rl = amount;
        address rw;
        starting -= 1;
        reward = new address[](rl);
        amounts = new uint256[](rl);
        name_ = new string[](rl);
        symbol_ = new string[](rl);
        decimals_ = new uint8[](rl);
        for (uint256 j = starting; j < rl + starting; j++) {
            rw = rewardAddresses(j);
            reward[j] = rw;
            amounts[j] = pendingRewardTokenEarned(user, rw);
            name_[j] = IERC20(rw).name();
            symbol_[j] = IERC20(rw).symbol();
            decimals_[j] = IERC20(rw).decimals();
        }
    }

    function getRewardList() external view returns(address[] memory reward, string[] memory name_, string[] memory symbol_) {
        uint256 rl = rewardLength();
        address rw;
        reward = new address[](rl);
        name_ = new string[](rl);
        symbol_ = new string[](rl);
        for (uint256 j = 0; j < rl; j++) {
            rw = rewardAddresses(j);
            reward[j] = rw;
            name_[j] = IERC20(rw).name();
            symbol_[j] = IERC20(rw).symbol();
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"tname","type":"string"},{"internalType":"string","name":"tsymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ADDREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"}],"name":"CLAIMALLREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CLAIMEDREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDSDEARNED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"STAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"WITHDRAW","type":"event"},{"inputs":[],"name":"DATA_READ","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accu","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"accumulated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"StakedSD","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostBacking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWDFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewardTokenEarned","outputs":[{"internalType":"uint256","name":"owing","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"emergencySaveLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAllPendingRewardTokenEarned","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"reward","type":"address[]"},{"internalType":"string[]","name":"name_","type":"string[]"},{"internalType":"string[]","name":"symbol_","type":"string[]"},{"internalType":"uint8[]","name":"decimals_","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"starting","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPaginatedPendingRewardTokenEarned","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"reward","type":"address[]"},{"internalType":"string[]","name":"name_","type":"string[]"},{"internalType":"string[]","name":"symbol_","type":"string[]"},{"internalType":"uint8[]","name":"decimals_","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardList","outputs":[{"internalType":"address[]","name":"reward","type":"address[]"},{"internalType":"string[]","name":"name_","type":"string[]"},{"internalType":"string[]","name":"symbol_","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"round","type":"uint256"}],"name":"getRewardRounds","outputs":[{"internalType":"uint256","name":"entryRound","type":"uint256"},{"internalType":"uint256","name":"lastEarned","type":"uint256"},{"internalType":"uint256","name":"totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getRewards","outputs":[{"internalType":"bool","name":"islive","type":"bool"},{"internalType":"bool","name":"isOn","type":"bool"},{"internalType":"uint256","name":"round","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"_syncLevel","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakers","outputs":[{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"sacrificeLevel","type":"uint256"},{"internalType":"uint256","name":"withdrawFee","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"bool","name":"preDelay","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getSyncLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserRewards","outputs":[{"internalType":"uint256","name":"entryRound","type":"uint256"},{"internalType":"uint256","name":"lastEarned","type":"uint256"},{"internalType":"uint256","name":"totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isStaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"matureDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"pendingRewardTokenEarned","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetAccumulated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"rewardAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sacrificeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"sacrificed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"sendReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"amt0","type":"uint256"}],"name":"sendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBoostBacking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBurnWDFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setLogics","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setMatureDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setOffRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"_syncLevel","type":"uint256"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setSacrificeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setSacrificeLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStakeLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setSyncLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeDeployerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeLogic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"staked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"stk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userRewardCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526006805461ff0019166112001790553480156200001f575f80fd5b5060405162004c4938038062004c49833981016040819052620000429162000187565b60015f81905580546001600160a01b0319166001600160a01b03851617905560046200006f83826200029c565b5060056200007e82826200029c565b5050600280546001600160a01b0319166001600160a01b03949094169390931790925550620003689050565b80516001600160a01b0381168114620000c1575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620000ea575f80fd5b81516001600160401b0380821115620001075762000107620000c6565b604051601f8301601f19908116603f01168101908282118183101715620001325762000132620000c6565b81604052838152602092508660208588010111156200014f575f80fd5b5f91505b8382101562000172578582018301518183018401529082019062000153565b5f602085830101528094505050505092915050565b5f805f80608085870312156200019b575f80fd5b620001a685620000aa565b9350620001b660208601620000aa565b60408601519093506001600160401b0380821115620001d3575f80fd5b620001e188838901620000da565b93506060870151915080821115620001f7575f80fd5b506200020687828801620000da565b91505092959194509250565b600181811c908216806200022757607f821691505b6020821081036200024657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200029757805f5260205f20601f840160051c81016020851015620002735750805b601f840160051c820191505b8181101562000294575f81556001016200027f565b50505b505050565b81516001600160401b03811115620002b857620002b8620000c6565b620002d081620002c9845462000212565b846200024c565b602080601f83116001811462000306575f8415620002ee5750858301515b5f19600386901b1c1916600185901b17855562000360565b5f85815260208120601f198616915b82811015620003365788860151825594840194600190910190840162000315565b50858210156200035457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6148d380620003765f395ff3fe608060405234801561000f575f80fd5b5060043610610416575f3560e01c80638a623d8611610221578063bcfd8dbf1161012a578063d65d1604116100b4578063f06fc10311610084578063f06fc1031461091b578063f2fde38b1461092e578063f648141614610941578063f77a3fb914610954578063fa2c24d214610967575f80fd5b8063d65d1604146108c3578063e177246e146108d6578063ef40a670146108e9578063f063b503146108fc575f80fd5b8063cc2153d1116100fa578063cc2153d11461085e578063cd636b1f14610871578063d00d13ef14610884578063d1f794b8146108a8578063d55bfdcd146108b0575f80fd5b8063bcfd8dbf1461081d578063be9a655514610830578063bedb86fb14610838578063c28b354c1461084b575f80fd5b8063a66f42c0116101ab578063adc9772e1161017b578063adc9772e146107df578063b2bdfa7b146107f2578063b445eb7014610805578063b8f7a6651461080d578063b95c574614610815575f80fd5b8063a66f42c01461079e578063a694fc3a146107a6578063aa240d6f146107b9578063ac1e5025146107cc575f80fd5b806395d89b41116101f157806395d89b411461073e57806398807d84146107465780639ea725d9146107655780639feb8f5014610778578063a4d501141461078b575f80fd5b80638a623d86146107155780638bc7e8c41461071d5780638da5cb5b1461072557806393e6cda614610736575f80fd5b80634f25a95c1161032357806370a08231116102ad578063791936101161027d578063791936101461064b57806379ee54f71461068a5780637a4b2830146106cc5780637c8c7775146106fa57806385523a1b1461070d575f80fd5b806370a0823114610611578063715018a61461062457806371b5ef461461062c57806372c0c21114610643575f80fd5b80635c975abb116102f35780635c975abb146105ce57806367a52793146105db5780636a42b8f8146105e35780636b1af75e146105eb5780636f1e8533146105fe575f80fd5b80634f25a95c14610582578063522b9e52146105955780635646696e146105a857806359508b84146105bb575f80fd5b80632e1a7d4d116103a4578063384002a211610374578063384002a21461052e5780633b066d34146105415780633b857a2814610554578063490ae210146105675780634db841431461057a575f80fd5b80632e1a7d4d146104e357806330c1f39d146104f6578063313ce567146104fe57806336662c3c1461051b575f80fd5b806318160ddd116103ea57806318160ddd1461048c5780631f6866be146104a257806329f4ce8d146104aa5780632bcf161c146104bd5780632d162159146104d0575f80fd5b8062be3bd31461041a57806306fdde031461043757806309fa3efc1461044c5780631336ffeb14610477575b5f80fd5b61042261097a565b60405190151581526020015b60405180910390f35b61043f6109e8565b60405161042e919061419b565b60035461045f906001600160a01b031681565b6040516001600160a01b03909116815260200161042e565b61048a6104853660046141c4565b610a78565b005b610494610da2565b60405190815260200161042e565b61048a610e0d565b61045f6104b8366004614202565b610e27565b6104946104cb366004614219565b610e98565b61048a6104de366004614219565b610f05565b6104946104f1366004614202565b610f65565b610422611194565b600654610100900460ff1660405160ff909116815260200161042e565b610494610529366004614219565b6111db565b60015461045f906001600160a01b031681565b61049461054f366004614219565b6112ec565b61048a610562366004614202565b61131e565b61048a610575366004614202565b61143e565b610422611532565b610494610590366004614234565b611579565b6104226105a3366004614219565b61161b565b61048a6105b6366004614278565b611688565b61048a6105c9366004614278565b61177d565b6006546104229060ff1681565b610494611872565b6104946118b9565b61048a6105f93660046141c4565b611900565b61042261060c366004614219565b611953565b61049461061f366004614219565b611985565b61048a6119b7565b610634611ac3565b60405161042e9392919061432e565b61048a611d0a565b61065e610659366004614219565b611d8c565b60408051958652602086019490945292840191909152151560608301521515608082015260a00161042e565b61069d610698366004614219565b611e13565b6040805196151587529415156020870152938501929092526060840152608083015260a082015260c00161042e565b6106df6106da366004614370565b611e9f565b6040805193845260208401929092529082015260600161042e565b61048a61070836600461439a565b611f21565b61045f61201c565b61048a612091565b61049461216b565b6002546001600160a01b031661045f565b61045f6121b2565b61043f6121f6565b610494610754366004614219565b60076020525f908152604090205481565b61048a6107733660046143d9565b612205565b61048a610786366004614370565b612357565b61048a610799366004614278565b612428565b61049461251d565b6104946107b4366004614202565b612564565b6104946107c7366004614219565b612709565b61048a6107da366004614202565b61273b565b6104946107ed366004614370565b61282f565b60025461045f906001600160a01b031681565b61048a6129f0565b610422612bd1565b610494612c18565b61049461082b366004614219565b612c5f565b61048a612c91565b61048a610846366004614278565b612d19565b61048a610859366004614202565b612e9a565b61049461086c366004614219565b612ecc565b6106df61087f366004614234565b612f0f565b610897610892366004614219565b612f4f565b60405161042e959493929190614405565b6104226132d1565b61048a6108be366004614370565b613318565b61048a6108d1366004614278565b613479565b61048a6108e4366004614202565b61356e565b6104946108f7366004614219565b613662565b61049461090a366004614219565b60086020525f908152604090205481565b61048a6109293660046144c0565b613738565b61048a61093c366004614219565b613820565b61089761094f3660046144c0565b6139aa565b61048a610962366004614370565b613d38565b610494610975366004614219565b613ea0565b6003546040805162be3bd360e01b815290515f926001600160a01b03169162be3bd39160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e391906144f2565b905090565b6060600480546109f79061450d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a239061450d565b8015610a6e5780601f10610a4557610100808354040283529160200191610a6e565b820191905f5260205f20905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b610a8061201c565b6001600160a01b0316639a78458a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adf9190614545565b6001600160a01b0316306001600160a01b031614610b4d57610aff6121b2565b6001600160a01b031663b0bae7716040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b36575f80fd5b505af1158015610b48573d5f803e3d5ffd5b505050505b6002546001600160a01b031615610b91576002546001600160a01b03163314610b915760405162461bcd60e51b8152600401610b8890614560565b60405180910390fd5b6002546001600160a01b0316610c1957610ba961201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015610bed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1191906144f2565b610c19575f80fd5b6001546001600160a01b0390811690831603610c775760405162461bcd60e51b815260206004820152601760248201527f43616e27742072656d6f7665204d61696e20546f6b656e0000000000000000006044820152606401610b88565b610c7f6121b2565b6040516309ab9c0760e31b81526001600160a01b0384811660048301529190911690634d5ce03890602401602060405180830381865afa158015610cc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce991906144f2565b15610d2e5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742072656d6f7665207265776172647360581b6044820152606401610b88565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610d5c908690859060040161457f565b6020604051808303815f875af1158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c91906144f2565b50505050565b600354604080516318160ddd60e01b815290515f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e39190614598565b610e1633613662565b335f90815260086020526040902055565b6003546040516329f4ce8d60e01b8152600481018390525f916001600160a01b0316906329f4ce8d90602401602060405180830381865afa158015610e6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190614545565b92915050565b600354604051630af3c58760e21b81526001600160a01b0383811660048301525f921690632bcf161c906024015b602060405180830381865afa158015610ee1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190614598565b6003546001600160a01b031615610f435760405162461bcd60e51b8152602060048201526002602482015261060f60f31b6044820152606401610b88565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b5f60025f5403610f875760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff1615610fae5760405162461bcd60e51b8152600401610b88906145e6565b610fb661201c565b6001600160a01b0316639a78458a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110159190614545565b6001600160a01b0316306001600160a01b031614611083576110356121b2565b6001600160a01b031663b0bae7716040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561106c575f80fd5b505af115801561107e573d5f803e3d5ffd5b505050505b61108b612bd1565b6110a75760405162461bcd60e51b8152600401610b8890614606565b60035460405163f3fef3a360e01b81526001600160a01b039091169063f3fef3a3906110d9903390869060040161457f565b6020604051808303815f875af11580156110f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111199190614598565b90507f4f14ea4e43cc569e4fb4d8fa171366f2f6925bfade37c5cc93334e373a4c9847338360405161114c92919061457f565b60405180910390a1604051818152339030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360015f55919050565b600354604080516330c1f39d60e01b815290515f926001600160a01b0316916330c1f39d9160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b5f60025f54036111fd5760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff16156112245760405162461bcd60e51b8152600401610b88906145e6565b60035460405163a006c32960e01b81523360048201526001600160a01b0384811660248301529091169063a006c329906044016020604051808303815f875af1158015611273573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112979190614598565b604080513381526001600160a01b03851660208201529081018290529091507fc3643628e7aacc422cc2da58691273d6e9fc5b7d306dc4886edd1b5e4892788b9060600160405180910390a160015f55919050565b600354604051630ec19b4d60e21b81526001600160a01b0383811660048301525f921690633b066d3490602401610ec6565b6002546001600160a01b031615611359576002546001600160a01b031633146113595760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166113e15761137161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d991906144f2565b6113e1575f80fd5b600354604051630770af4560e31b8152600481018390526001600160a01b0390911690633b857a28906024015b5f604051808303815f87803b158015611425575f80fd5b505af1158015611437573d5f803e3d5ffd5b5050505050565b6002546001600160a01b031615611479576002546001600160a01b031633146114795760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166115015761149161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156114d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f991906144f2565b611501575f80fd5b600354604051630490ae2160e41b8152600481018390526001600160a01b039091169063490ae2109060240161140e565b60035460408051634db8414360e01b815290515f926001600160a01b031691634db841439160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b5f6001600160a01b0383166115a05760405162461bcd60e51b8152600401610b8890614628565b6003546040516313c96a5760e21b81526001600160a01b038581166004830152848116602483015290911690634f25a95c90604401602060405180830381865afa1580156115f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116149190614598565b9392505050565b600354604051632915cf2960e11b81526001600160a01b0383811660048301525f92169063522b9e52906024015b602060405180830381865afa158015611664573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9291906144f2565b6002546001600160a01b0316156116c3576002546001600160a01b031633146116c35760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b031661174b576116db61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa15801561171f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174391906144f2565b61174b575f80fd5b600354604051632b2334b760e11b815282151560048201526001600160a01b0390911690635646696e9060240161140e565b6002546001600160a01b0316156117b8576002546001600160a01b031633146117b85760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316611840576117d061201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015611814573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183891906144f2565b611840575f80fd5b60035460405163165422e160e21b815282151560048201526001600160a01b03909116906359508b849060240161140e565b600354604080516367a5279360e01b815290515f926001600160a01b0316916367a527939160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b60035460408051630d48571f60e31b815290515f926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b6003546001600160a01b031633146119435760405162461bcd60e51b8152602060048201526006602482015265139bdd0814d360d21b6044820152606401610b88565b61194e838383613ed2565b505050565b600354604051630ef037b960e41b81526001600160a01b0383811660048301525f92169063ef037b9090602401611649565b6003546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a0823190602401610ec6565b6002546001600160a01b0316156119f2576002546001600160a01b031633146119f25760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316611a7a57611a0a61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015611a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7291906144f2565b611a7a575f80fd5b6002546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b60608060605f611ad1612c18565b90505f816001600160401b03811115611aec57611aec61466a565b604051908082528060200260200182016040528015611b15578160200160208202803683370190505b509450816001600160401b03811115611b3057611b3061466a565b604051908082528060200260200182016040528015611b6357816020015b6060815260200190600190039081611b4e5790505b509350816001600160401b03811115611b7e57611b7e61466a565b604051908082528060200260200182016040528015611bb157816020015b6060815260200190600190039081611b9c5790505b5092505f5b82811015611d0257611bc781610e27565b915081868281518110611bdc57611bdc61467e565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015611c37573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c5e9190810190614692565b858281518110611c7057611c7061467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611cb6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cdd9190810190614692565b848281518110611cef57611cef61467e565b6020908102919091010152600101611bb6565b505050909192565b60025f5403611d2b5760405162461bcd60e51b8152600401610b88906145af565b60025f908155600354604080516372c0c21160e01b815290516001600160a01b03909216926372c0c2119260048084019382900301818387803b158015611d70575f80fd5b505af1158015611d82573d5f803e3d5ffd5b505060015f555050565b6003546040516348b4573960e11b81526001600160a01b0383811660048301525f928392839283928392911690639168ae729060240160a060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e01919061472e565b939a9299509097509550909350915050565b600354604051630700037d60e01b81526001600160a01b0383811660048301525f928392839283928392839290911690630700037d9060240160c060405180830381865afa158015611e67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8b9190614781565b949c939b5091995097509550909350915050565b600354604051637c5a991160e11b81525f91829182916001600160a01b03169063f8b5322290611ed5908890889060040161457f565b606060405180830381865afa158015611ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1491906147db565b9250925092509250925092565b60025f5403611f425760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff1615611f695760405162461bcd60e51b8152600401610b88906145e6565b6003546001600160a01b03163314611fa85760405162461bcd60e51b815260206004820152600260248201526114d360f21b6044820152606401610b88565b80611fd5576001600160a01b0383165f90815260076020526040902054611fd090839061481a565b611ff8565b6001600160a01b0383165f90815260076020526040902054611ff890839061482d565b6001600160a01b039093165f90815260076020526040812093909355505060019055565b5f73cced1a96321b2b2a06e8f3f4b0b883ddd059968c6001600160a01b03166385523a1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e39190614545565b60025f54036120b25760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff16156120d95760405162461bcd60e51b8152600401610b88906145e6565b60035460405163dfed3be360e01b81523360048201526001600160a01b039091169063dfed3be3906024015f604051808303815f87803b15801561211b575f80fd5b505af115801561212d573d5f803e3d5ffd5b50506040513381527fcbc8531f30b5587d02c74c69691859d7466bc514ed6c53473f5c9a852a1149609250602001905060405180910390a160015f55565b60035460408051631d283f4f60e31b815290515f926001600160a01b03169163e941fa789160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b5f6121bb61201c565b6001600160a01b03166393e6cda66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b6060600580546109f79061450d565b60025f54036122265760405162461bcd60e51b8152600401610b88906145af565b60025f819055546001600160a01b031615612265576002546001600160a01b031633146122655760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166122ed5761227d61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156122c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e591906144f2565b6122ed575f80fd5b600354604051639ea725d960e01b81526001600160a01b038481166004830152831515602483015290911690639ea725d9906044015f604051808303815f87803b158015612339575f80fd5b505af115801561234b573d5f803e3d5ffd5b505060015f5550505050565b60025f54036123785760405162461bcd60e51b8152600401610b88906145af565b60025f5561238882333084613f28565b6003546040516309feb8f560e41b81526001600160a01b0390911690639feb8f50906123ba908590859060040161457f565b5f604051808303815f87803b1580156123d1575f80fd5b505af11580156123e3573d5f803e3d5ffd5b505050507fb894c34e05f879592877ccb0d16cfff612ee7dfa607b93cb7c2c7e7b78d6763f828260405161241892919061457f565b60405180910390a1505060015f55565b6002546001600160a01b031615612463576002546001600160a01b031633146124635760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166124eb5761247b61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156124bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e391906144f2565b6124eb575f80fd5b600354604051632935404560e21b815282151560048201526001600160a01b039091169063a4d501149060240161140e565b60035460408051630299bd0b60e61b815290515f926001600160a01b03169163a66f42c09160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b5f60025f54036125865760405162461bcd60e51b8152600401610b88906145af565b60025f55612592612bd1565b6125ae5760405162461bcd60e51b8152600401610b8890614606565b6001546003546125cd916001600160a01b039081169133911685613f28565b6003546040516356e4bb9760e11b81525f9182916001600160a01b039091169063adc9772e90612603903390889060040161457f565b60408051808303815f875af115801561261e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126429190614840565b335f9081526007602052604081208054939550919350839261266590849061482d565b9091555050335f908152600860205260408120805483929061268890849061482d565b90915550506040517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c8906126bf903390879061457f565b60405180910390a1604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060015f5592915050565b60035460405163aa240d6f60e01b81526001600160a01b0383811660048301525f92169063aa240d6f90602401610ec6565b6002546001600160a01b031615612776576002546001600160a01b031633146127765760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166127fe5761278e61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156127d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f691906144f2565b6127fe575f80fd5b60035460405163ac1e502560e01b8152600481018390526001600160a01b039091169063ac1e50259060240161140e565b5f60025f54036128515760405162461bcd60e51b8152600401610b88906145af565b60025f5561285d612bd1565b6128795760405162461bcd60e51b8152600401610b8890614606565b600154600354612898916001600160a01b039081169133911685613f28565b6003546040516356e4bb9760e11b81525f9182916001600160a01b039091169063adc9772e906128ce908890889060040161457f565b60408051808303815f875af11580156128e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290d9190614840565b6001600160a01b0387165f9081526007602052604081208054939550919350839261293990849061482d565b90915550506001600160a01b0385165f908152600860205260408120805483929061296590849061482d565b90915550506040517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c89061299c908790879061457f565b60405180910390a160405182815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060015f559392505050565b6002546001600160a01b031615612a2b576002546001600160a01b03163314612a2b5760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316612ab357612a4361201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015612a87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aab91906144f2565b612ab3575f80fd5b612abb6121b2565b60015460405163f968d96f60e01b81526001600160a01b03918216600482015291169063f968d96f90602401602060405180830381865afa158015612b02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2691906144f2565b612b5e5760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610b88565b612b666121b2565b600154604051637b42db0f60e01b81526001600160a01b039182166004820152911690637b42db0f90602401602060405180830381865afa158015612bad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f439190614545565b6003546040805163255ea96360e21b815290515f926001600160a01b03169163957aa58c9160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b60035460408051635cae2ba360e11b815290515f926001600160a01b03169163b95c57469160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b60035460405163bcfd8dbf60e01b81526001600160a01b0383811660048301525f92169063bcfd8dbf90602401610ec6565b6002546001600160a01b03163314612cbb5760405162461bcd60e51b8152600401610b8890614560565b60035f9054906101000a90046001600160a01b03166001600160a01b031663be9a65556040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612d07575f80fd5b505af1158015610d9c573d5f803e3d5ffd5b6002546001600160a01b031615612d54576002546001600160a01b03163314612d545760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316612ddc57612d6c61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015612db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd491906144f2565b612ddc575f80fd5b612de46121b2565b60015460405163f968d96f60e01b81526001600160a01b03918216600482015291169063f968d96f90602401602060405180830381865afa158015612e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4f91906144f2565b612e875760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610b88565b6006805460ff1916911515919091179055565b60035460405163e72e326b60e01b81526001600160a01b039091169063e72e326b9061140e903390859060040161457f565b6001600160a01b0381165f9081526008602052604081205481612eee84613662565b9050818111612efd575f612f07565b612f07828261481a565b949350505050565b6003546040516354c01ab560e11b81526001600160a01b03848116600483015283811660248301525f92839283929091169063a980356a90604401611ed5565b60608060608060605f612f60612c18565b90505f816001600160401b03811115612f7b57612f7b61466a565b604051908082528060200260200182016040528015612fa4578160200160208202803683370190505b509550816001600160401b03811115612fbf57612fbf61466a565b604051908082528060200260200182016040528015612fe8578160200160208202803683370190505b509650816001600160401b038111156130035761300361466a565b60405190808252806020026020018201604052801561303657816020015b60608152602001906001900390816130215790505b509450816001600160401b038111156130515761305161466a565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b509350816001600160401b0381111561309f5761309f61466a565b6040519080825280602002602001820160405280156130c8578160200160208202803683370190505b5092505f5b828110156132c5576130de81610e27565b9150818782815181106130f3576130f361467e565b60200260200101906001600160a01b031690816001600160a01b03168152505061311d8983611579565b88828151811061312f5761312f61467e565b602002602001018181525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015613176573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319d9190810190614692565b8682815181106131af576131af61467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156131f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261321c9190810190614692565b85828151811061322e5761322e61467e565b6020026020010181905250816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613275573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132999190614862565b8482815181106132ab576132ab61467e565b60ff909216602092830291909101909101526001016130cd565b50505091939590929450565b60035460408051631a3ef29760e31b815290515f926001600160a01b03169163d1f794b89160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b6002546001600160a01b031615613353576002546001600160a01b031633146133535760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166133db5761336b61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156133af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133d391906144f2565b6133db575f80fd5b6298968081116134165760405162461bcd60e51b8152600401610b88906020808252600490820152632031653760e01b604082015260600190565b60035460405163d55bfdcd60e01b81526001600160a01b039091169063d55bfdcd90613448908590859060040161457f565b5f604051808303815f87803b15801561345f575f80fd5b505af1158015613471573d5f803e3d5ffd5b505050505050565b6002546001600160a01b0316156134b4576002546001600160a01b031633146134b45760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b031661353c576134cc61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061353491906144f2565b61353c575f80fd5b600354604051633597458160e21b815282151560048201526001600160a01b039091169063d65d16049060240161140e565b6002546001600160a01b0316156135a9576002546001600160a01b031633146135a95760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316613631576135c161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015613605573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061362991906144f2565b613631575f80fd5b6003546040516370bb923760e11b8152600481018390526001600160a01b039091169063e177246e9060240161140e565b5f6001600160a01b0382166136895760405162461bcd60e51b8152600401610b8890614628565b600354604051630ef40a6760e41b81526001600160a01b0384811660048301525f92169063ef40a67090602401602060405180830381865afa1580156136d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f59190614598565b6001600160a01b0384165f90815260076020526040902054909150811061371c5780611614565b50506001600160a01b03165f9081526007602052604090205490565b6003546001600160a01b0316331461377b5760405162461bcd60e51b8152602060048201526006602482015265139bdd0814d360d21b6044820152606401610b88565b600154613792906001600160a01b03168484613ed2565b6001600160a01b0383165f908152600760209081526040808320546008909252909120548183116137cc576137c7838361481a565b6137ce565b5f5b6001600160a01b0386165f908152600760205260409020558083116137fc576137f7838261481a565b6137fe565b5f5b6001600160a01b039095165f9081526008602052604090209490945550505050565b6002546001600160a01b03161561385b576002546001600160a01b0316331461385b5760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166138e35761387361201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156138b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138db91906144f2565b6138e3575f80fd5b6001600160a01b0381166139285760405162461bcd60e51b815260206004820152600c60248201526b7573652072656e6f756e636560a01b6044820152606401610b88565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600280546001600160a01b0319166001600160a01b0383811691821790925560035460405163f2fde38b60e01b815260048101929092529091169063f2fde38b9060240161140e565b606080808080855f6139bd60018a61481a565b9850816001600160401b038111156139d7576139d761466a565b604051908082528060200260200182016040528015613a00578160200160208202803683370190505b509550816001600160401b03811115613a1b57613a1b61466a565b604051908082528060200260200182016040528015613a44578160200160208202803683370190505b509650816001600160401b03811115613a5f57613a5f61466a565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b509450816001600160401b03811115613aad57613aad61466a565b604051908082528060200260200182016040528015613ae057816020015b6060815260200190600190039081613acb5790505b509350816001600160401b03811115613afb57613afb61466a565b604051908082528060200260200182016040528015613b24578160200160208202803683370190505b509250885b613b338a8461482d565b811015613d2a57613b4381610e27565b915081878281518110613b5857613b5861467e565b60200260200101906001600160a01b031690816001600160a01b031681525050613b828b83611579565b888281518110613b9457613b9461467e565b602002602001018181525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015613bdb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c029190810190614692565b868281518110613c1457613c1461467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015613c5a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c819190810190614692565b858281518110613c9357613c9361467e565b6020026020010181905250816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cfe9190614862565b848281518110613d1057613d1061467e565b60ff90921660209283029190910190910152600101613b29565b505050939792965093509350565b613d406121b2565b6001600160a01b0316336001600160a01b031614613d97576002546001600160a01b03163314613d975760405162461bcd60e51b81526020600482015260026024820152614f4f60f01b6044820152606401610b88565b613d9f6121b2565b6040516309ab9c0760e31b81526001600160a01b0384811660048301529190911690634d5ce03890602401602060405180830381865afa158015613de5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e0991906144f2565b613e6e57613e156121b2565b6040516371dcdcaf60e01b81526001600160a01b03848116600483015291909116906371dcdcaf906024015f604051808303815f87803b158015613e57575f80fd5b505af1158015613e69573d5f803e3d5ffd5b505050505b60035460405163f77a3fb960e01b81526001600160a01b039091169063f77a3fb990613448908590859060040161457f565b600354604051637d16126960e11b81526001600160a01b0383811660048301525f92169063fa2c24d290602401610ec6565b61194e8363a9059cbb60e01b8484604051602401613ef192919061457f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613f60565b6040516001600160a01b0380851660248301528316604482015260648101829052610d9c9085906323b872dd60e01b90608401613ef1565b5f613fb4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140319092919063ffffffff16565b80519091501561194e5780806020019051810190613fd291906144f2565b61194e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b88565b6060612f0784845f85855f80866001600160a01b031685876040516140569190614882565b5f6040518083038185875af1925050503d805f8114614090576040519150601f19603f3d011682016040523d82523d5f602084013e614095565b606091505b50915091506140a6878383876140b1565b979650505050505050565b6060831561411f5782515f03614118576001600160a01b0385163b6141185760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b88565b5081612f07565b612f0783838151156141345781518083602001fd5b8060405162461bcd60e51b8152600401610b88919061419b565b5f5b83811015614168578181015183820152602001614150565b50505f910152565b5f815180845261418781602086016020860161414e565b601f01601f19169290920160200192915050565b602081525f6116146020830184614170565b6001600160a01b03811681146141c1575f80fd5b50565b5f805f606084860312156141d6575f80fd5b83356141e1816141ad565b925060208401356141f1816141ad565b929592945050506040919091013590565b5f60208284031215614212575f80fd5b5035919050565b5f60208284031215614229575f80fd5b8135611614816141ad565b5f8060408385031215614245575f80fd5b8235614250816141ad565b91506020830135614260816141ad565b809150509250929050565b80151581146141c1575f80fd5b5f60208284031215614288575f80fd5b81356116148161426b565b5f815180845260208085019450602084015f5b838110156142cb5781516001600160a01b0316875295820195908201906001016142a6565b509495945050505050565b5f8282518085526020808601955060208260051b840101602086015f5b8481101561432157601f1986840301895261430f838351614170565b988401989250908301906001016142f3565b5090979650505050505050565b606081525f6143406060830186614293565b828103602084015261435281866142d6565b9050828103604084015261436681856142d6565b9695505050505050565b5f8060408385031215614381575f80fd5b823561438c816141ad565b946020939093013593505050565b5f805f606084860312156143ac575f80fd5b83356143b7816141ad565b92506020840135915060408401356143ce8161426b565b809150509250925092565b5f80604083850312156143ea575f80fd5b82356143f5816141ad565b915060208301356142608161426b565b60a080825286519082018190525f9060209060c0840190828a01845b8281101561443d57815184529284019290840190600101614421565b505050838103828501526144518189614293565b9050838103604085015261446581886142d6565b9050838103606085015261447981876142d6565b848103608086015285518082528387019250908301905f5b818110156144b057835160ff1683529284019291840191600101614491565b50909a9950505050505050505050565b5f805f606084860312156144d2575f80fd5b83356144dd816141ad565b95602085013595506040909401359392505050565b5f60208284031215614502575f80fd5b81516116148161426b565b600181811c9082168061452157607f821691505b60208210810361453f57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215614555575f80fd5b8151611614816141ad565b60208082526005908201526437bbb732b960d91b604082015260600190565b6001600160a01b03929092168252602082015260400190565b5f602082840312156145a8575f80fd5b5051919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252600890820152676e6f74206c69766560c01b604082015260600190565b60208082526022908201527f45524332303a2073656e64696e6720746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156146a2575f80fd5b81516001600160401b03808211156146b8575f80fd5b818401915084601f8301126146cb575f80fd5b8151818111156146dd576146dd61466a565b604051601f8201601f19908116603f011681019083821181831017156147055761470561466a565b8160405282815287602084870101111561471d575f80fd5b6140a683602083016020880161414e565b5f805f805f60a08688031215614742575f80fd5b85519450602086015193506040860151925060608601516147628161426b565b60808701519092506147738161426b565b809150509295509295909350565b5f805f805f8060c08789031215614796575f80fd5b86516147a18161426b565b60208801519096506147b28161426b565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b5f805f606084860312156147ed575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610e9257610e92614806565b80820180821115610e9257610e92614806565b5f8060408385031215614851575f80fd5b505080516020909101519092909150565b5f60208284031215614872575f80fd5b815160ff81168114611614575f80fd5b5f825161489381846020870161414e565b919091019291505056fea2646970667358221220ea23e88dcead24c6956f1cfd82af22a7bc9bf7ed7c69d7c9229d3abe6bfa8e7864736f6c634300081800330000000000000000000000008d5e1cd48b17d807e81dbfbe6c591cb7fab63971000000000000000000000000f3c7cecf8cbc3066f9a87b310cebe198d00479ac000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000b464547205374616b696e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034653540000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610416575f3560e01c80638a623d8611610221578063bcfd8dbf1161012a578063d65d1604116100b4578063f06fc10311610084578063f06fc1031461091b578063f2fde38b1461092e578063f648141614610941578063f77a3fb914610954578063fa2c24d214610967575f80fd5b8063d65d1604146108c3578063e177246e146108d6578063ef40a670146108e9578063f063b503146108fc575f80fd5b8063cc2153d1116100fa578063cc2153d11461085e578063cd636b1f14610871578063d00d13ef14610884578063d1f794b8146108a8578063d55bfdcd146108b0575f80fd5b8063bcfd8dbf1461081d578063be9a655514610830578063bedb86fb14610838578063c28b354c1461084b575f80fd5b8063a66f42c0116101ab578063adc9772e1161017b578063adc9772e146107df578063b2bdfa7b146107f2578063b445eb7014610805578063b8f7a6651461080d578063b95c574614610815575f80fd5b8063a66f42c01461079e578063a694fc3a146107a6578063aa240d6f146107b9578063ac1e5025146107cc575f80fd5b806395d89b41116101f157806395d89b411461073e57806398807d84146107465780639ea725d9146107655780639feb8f5014610778578063a4d501141461078b575f80fd5b80638a623d86146107155780638bc7e8c41461071d5780638da5cb5b1461072557806393e6cda614610736575f80fd5b80634f25a95c1161032357806370a08231116102ad578063791936101161027d578063791936101461064b57806379ee54f71461068a5780637a4b2830146106cc5780637c8c7775146106fa57806385523a1b1461070d575f80fd5b806370a0823114610611578063715018a61461062457806371b5ef461461062c57806372c0c21114610643575f80fd5b80635c975abb116102f35780635c975abb146105ce57806367a52793146105db5780636a42b8f8146105e35780636b1af75e146105eb5780636f1e8533146105fe575f80fd5b80634f25a95c14610582578063522b9e52146105955780635646696e146105a857806359508b84146105bb575f80fd5b80632e1a7d4d116103a4578063384002a211610374578063384002a21461052e5780633b066d34146105415780633b857a2814610554578063490ae210146105675780634db841431461057a575f80fd5b80632e1a7d4d146104e357806330c1f39d146104f6578063313ce567146104fe57806336662c3c1461051b575f80fd5b806318160ddd116103ea57806318160ddd1461048c5780631f6866be146104a257806329f4ce8d146104aa5780632bcf161c146104bd5780632d162159146104d0575f80fd5b8062be3bd31461041a57806306fdde031461043757806309fa3efc1461044c5780631336ffeb14610477575b5f80fd5b61042261097a565b60405190151581526020015b60405180910390f35b61043f6109e8565b60405161042e919061419b565b60035461045f906001600160a01b031681565b6040516001600160a01b03909116815260200161042e565b61048a6104853660046141c4565b610a78565b005b610494610da2565b60405190815260200161042e565b61048a610e0d565b61045f6104b8366004614202565b610e27565b6104946104cb366004614219565b610e98565b61048a6104de366004614219565b610f05565b6104946104f1366004614202565b610f65565b610422611194565b600654610100900460ff1660405160ff909116815260200161042e565b610494610529366004614219565b6111db565b60015461045f906001600160a01b031681565b61049461054f366004614219565b6112ec565b61048a610562366004614202565b61131e565b61048a610575366004614202565b61143e565b610422611532565b610494610590366004614234565b611579565b6104226105a3366004614219565b61161b565b61048a6105b6366004614278565b611688565b61048a6105c9366004614278565b61177d565b6006546104229060ff1681565b610494611872565b6104946118b9565b61048a6105f93660046141c4565b611900565b61042261060c366004614219565b611953565b61049461061f366004614219565b611985565b61048a6119b7565b610634611ac3565b60405161042e9392919061432e565b61048a611d0a565b61065e610659366004614219565b611d8c565b60408051958652602086019490945292840191909152151560608301521515608082015260a00161042e565b61069d610698366004614219565b611e13565b6040805196151587529415156020870152938501929092526060840152608083015260a082015260c00161042e565b6106df6106da366004614370565b611e9f565b6040805193845260208401929092529082015260600161042e565b61048a61070836600461439a565b611f21565b61045f61201c565b61048a612091565b61049461216b565b6002546001600160a01b031661045f565b61045f6121b2565b61043f6121f6565b610494610754366004614219565b60076020525f908152604090205481565b61048a6107733660046143d9565b612205565b61048a610786366004614370565b612357565b61048a610799366004614278565b612428565b61049461251d565b6104946107b4366004614202565b612564565b6104946107c7366004614219565b612709565b61048a6107da366004614202565b61273b565b6104946107ed366004614370565b61282f565b60025461045f906001600160a01b031681565b61048a6129f0565b610422612bd1565b610494612c18565b61049461082b366004614219565b612c5f565b61048a612c91565b61048a610846366004614278565b612d19565b61048a610859366004614202565b612e9a565b61049461086c366004614219565b612ecc565b6106df61087f366004614234565b612f0f565b610897610892366004614219565b612f4f565b60405161042e959493929190614405565b6104226132d1565b61048a6108be366004614370565b613318565b61048a6108d1366004614278565b613479565b61048a6108e4366004614202565b61356e565b6104946108f7366004614219565b613662565b61049461090a366004614219565b60086020525f908152604090205481565b61048a6109293660046144c0565b613738565b61048a61093c366004614219565b613820565b61089761094f3660046144c0565b6139aa565b61048a610962366004614370565b613d38565b610494610975366004614219565b613ea0565b6003546040805162be3bd360e01b815290515f926001600160a01b03169162be3bd39160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e391906144f2565b905090565b6060600480546109f79061450d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a239061450d565b8015610a6e5780601f10610a4557610100808354040283529160200191610a6e565b820191905f5260205f20905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b610a8061201c565b6001600160a01b0316639a78458a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adf9190614545565b6001600160a01b0316306001600160a01b031614610b4d57610aff6121b2565b6001600160a01b031663b0bae7716040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b36575f80fd5b505af1158015610b48573d5f803e3d5ffd5b505050505b6002546001600160a01b031615610b91576002546001600160a01b03163314610b915760405162461bcd60e51b8152600401610b8890614560565b60405180910390fd5b6002546001600160a01b0316610c1957610ba961201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015610bed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1191906144f2565b610c19575f80fd5b6001546001600160a01b0390811690831603610c775760405162461bcd60e51b815260206004820152601760248201527f43616e27742072656d6f7665204d61696e20546f6b656e0000000000000000006044820152606401610b88565b610c7f6121b2565b6040516309ab9c0760e31b81526001600160a01b0384811660048301529190911690634d5ce03890602401602060405180830381865afa158015610cc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce991906144f2565b15610d2e5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742072656d6f7665207265776172647360581b6044820152606401610b88565b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90610d5c908690859060040161457f565b6020604051808303815f875af1158015610d78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c91906144f2565b50505050565b600354604080516318160ddd60e01b815290515f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e39190614598565b610e1633613662565b335f90815260086020526040902055565b6003546040516329f4ce8d60e01b8152600481018390525f916001600160a01b0316906329f4ce8d90602401602060405180830381865afa158015610e6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190614545565b92915050565b600354604051630af3c58760e21b81526001600160a01b0383811660048301525f921690632bcf161c906024015b602060405180830381865afa158015610ee1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e929190614598565b6003546001600160a01b031615610f435760405162461bcd60e51b8152602060048201526002602482015261060f60f31b6044820152606401610b88565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b5f60025f5403610f875760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff1615610fae5760405162461bcd60e51b8152600401610b88906145e6565b610fb661201c565b6001600160a01b0316639a78458a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110159190614545565b6001600160a01b0316306001600160a01b031614611083576110356121b2565b6001600160a01b031663b0bae7716040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561106c575f80fd5b505af115801561107e573d5f803e3d5ffd5b505050505b61108b612bd1565b6110a75760405162461bcd60e51b8152600401610b8890614606565b60035460405163f3fef3a360e01b81526001600160a01b039091169063f3fef3a3906110d9903390869060040161457f565b6020604051808303815f875af11580156110f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111199190614598565b90507f4f14ea4e43cc569e4fb4d8fa171366f2f6925bfade37c5cc93334e373a4c9847338360405161114c92919061457f565b60405180910390a1604051818152339030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360015f55919050565b600354604080516330c1f39d60e01b815290515f926001600160a01b0316916330c1f39d9160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b5f60025f54036111fd5760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff16156112245760405162461bcd60e51b8152600401610b88906145e6565b60035460405163a006c32960e01b81523360048201526001600160a01b0384811660248301529091169063a006c329906044016020604051808303815f875af1158015611273573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112979190614598565b604080513381526001600160a01b03851660208201529081018290529091507fc3643628e7aacc422cc2da58691273d6e9fc5b7d306dc4886edd1b5e4892788b9060600160405180910390a160015f55919050565b600354604051630ec19b4d60e21b81526001600160a01b0383811660048301525f921690633b066d3490602401610ec6565b6002546001600160a01b031615611359576002546001600160a01b031633146113595760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166113e15761137161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d991906144f2565b6113e1575f80fd5b600354604051630770af4560e31b8152600481018390526001600160a01b0390911690633b857a28906024015b5f604051808303815f87803b158015611425575f80fd5b505af1158015611437573d5f803e3d5ffd5b5050505050565b6002546001600160a01b031615611479576002546001600160a01b031633146114795760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166115015761149161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156114d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f991906144f2565b611501575f80fd5b600354604051630490ae2160e41b8152600481018390526001600160a01b039091169063490ae2109060240161140e565b60035460408051634db8414360e01b815290515f926001600160a01b031691634db841439160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b5f6001600160a01b0383166115a05760405162461bcd60e51b8152600401610b8890614628565b6003546040516313c96a5760e21b81526001600160a01b038581166004830152848116602483015290911690634f25a95c90604401602060405180830381865afa1580156115f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116149190614598565b9392505050565b600354604051632915cf2960e11b81526001600160a01b0383811660048301525f92169063522b9e52906024015b602060405180830381865afa158015611664573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9291906144f2565b6002546001600160a01b0316156116c3576002546001600160a01b031633146116c35760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b031661174b576116db61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa15801561171f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174391906144f2565b61174b575f80fd5b600354604051632b2334b760e11b815282151560048201526001600160a01b0390911690635646696e9060240161140e565b6002546001600160a01b0316156117b8576002546001600160a01b031633146117b85760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316611840576117d061201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015611814573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183891906144f2565b611840575f80fd5b60035460405163165422e160e21b815282151560048201526001600160a01b03909116906359508b849060240161140e565b600354604080516367a5279360e01b815290515f926001600160a01b0316916367a527939160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b60035460408051630d48571f60e31b815290515f926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b6003546001600160a01b031633146119435760405162461bcd60e51b8152602060048201526006602482015265139bdd0814d360d21b6044820152606401610b88565b61194e838383613ed2565b505050565b600354604051630ef037b960e41b81526001600160a01b0383811660048301525f92169063ef037b9090602401611649565b6003546040516370a0823160e01b81526001600160a01b0383811660048301525f9216906370a0823190602401610ec6565b6002546001600160a01b0316156119f2576002546001600160a01b031633146119f25760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316611a7a57611a0a61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015611a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a7291906144f2565b611a7a575f80fd5b6002546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b60608060605f611ad1612c18565b90505f816001600160401b03811115611aec57611aec61466a565b604051908082528060200260200182016040528015611b15578160200160208202803683370190505b509450816001600160401b03811115611b3057611b3061466a565b604051908082528060200260200182016040528015611b6357816020015b6060815260200190600190039081611b4e5790505b509350816001600160401b03811115611b7e57611b7e61466a565b604051908082528060200260200182016040528015611bb157816020015b6060815260200190600190039081611b9c5790505b5092505f5b82811015611d0257611bc781610e27565b915081868281518110611bdc57611bdc61467e565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015611c37573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c5e9190810190614692565b858281518110611c7057611c7061467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611cb6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cdd9190810190614692565b848281518110611cef57611cef61467e565b6020908102919091010152600101611bb6565b505050909192565b60025f5403611d2b5760405162461bcd60e51b8152600401610b88906145af565b60025f908155600354604080516372c0c21160e01b815290516001600160a01b03909216926372c0c2119260048084019382900301818387803b158015611d70575f80fd5b505af1158015611d82573d5f803e3d5ffd5b505060015f555050565b6003546040516348b4573960e11b81526001600160a01b0383811660048301525f928392839283928392911690639168ae729060240160a060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e01919061472e565b939a9299509097509550909350915050565b600354604051630700037d60e01b81526001600160a01b0383811660048301525f928392839283928392839290911690630700037d9060240160c060405180830381865afa158015611e67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8b9190614781565b949c939b5091995097509550909350915050565b600354604051637c5a991160e11b81525f91829182916001600160a01b03169063f8b5322290611ed5908890889060040161457f565b606060405180830381865afa158015611ef0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f1491906147db565b9250925092509250925092565b60025f5403611f425760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff1615611f695760405162461bcd60e51b8152600401610b88906145e6565b6003546001600160a01b03163314611fa85760405162461bcd60e51b815260206004820152600260248201526114d360f21b6044820152606401610b88565b80611fd5576001600160a01b0383165f90815260076020526040902054611fd090839061481a565b611ff8565b6001600160a01b0383165f90815260076020526040902054611ff890839061482d565b6001600160a01b039093165f90815260076020526040812093909355505060019055565b5f73cced1a96321b2b2a06e8f3f4b0b883ddd059968c6001600160a01b03166385523a1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e39190614545565b60025f54036120b25760405162461bcd60e51b8152600401610b88906145af565b60025f5560065460ff16156120d95760405162461bcd60e51b8152600401610b88906145e6565b60035460405163dfed3be360e01b81523360048201526001600160a01b039091169063dfed3be3906024015f604051808303815f87803b15801561211b575f80fd5b505af115801561212d573d5f803e3d5ffd5b50506040513381527fcbc8531f30b5587d02c74c69691859d7466bc514ed6c53473f5c9a852a1149609250602001905060405180910390a160015f55565b60035460408051631d283f4f60e31b815290515f926001600160a01b03169163e941fa789160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b5f6121bb61201c565b6001600160a01b03166393e6cda66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b6060600580546109f79061450d565b60025f54036122265760405162461bcd60e51b8152600401610b88906145af565b60025f819055546001600160a01b031615612265576002546001600160a01b031633146122655760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166122ed5761227d61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156122c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e591906144f2565b6122ed575f80fd5b600354604051639ea725d960e01b81526001600160a01b038481166004830152831515602483015290911690639ea725d9906044015f604051808303815f87803b158015612339575f80fd5b505af115801561234b573d5f803e3d5ffd5b505060015f5550505050565b60025f54036123785760405162461bcd60e51b8152600401610b88906145af565b60025f5561238882333084613f28565b6003546040516309feb8f560e41b81526001600160a01b0390911690639feb8f50906123ba908590859060040161457f565b5f604051808303815f87803b1580156123d1575f80fd5b505af11580156123e3573d5f803e3d5ffd5b505050507fb894c34e05f879592877ccb0d16cfff612ee7dfa607b93cb7c2c7e7b78d6763f828260405161241892919061457f565b60405180910390a1505060015f55565b6002546001600160a01b031615612463576002546001600160a01b031633146124635760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166124eb5761247b61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156124bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e391906144f2565b6124eb575f80fd5b600354604051632935404560e21b815282151560048201526001600160a01b039091169063a4d501149060240161140e565b60035460408051630299bd0b60e61b815290515f926001600160a01b03169163a66f42c09160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b5f60025f54036125865760405162461bcd60e51b8152600401610b88906145af565b60025f55612592612bd1565b6125ae5760405162461bcd60e51b8152600401610b8890614606565b6001546003546125cd916001600160a01b039081169133911685613f28565b6003546040516356e4bb9760e11b81525f9182916001600160a01b039091169063adc9772e90612603903390889060040161457f565b60408051808303815f875af115801561261e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126429190614840565b335f9081526007602052604081208054939550919350839261266590849061482d565b9091555050335f908152600860205260408120805483929061268890849061482d565b90915550506040517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c8906126bf903390879061457f565b60405180910390a1604051828152309033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060015f5592915050565b60035460405163aa240d6f60e01b81526001600160a01b0383811660048301525f92169063aa240d6f90602401610ec6565b6002546001600160a01b031615612776576002546001600160a01b031633146127765760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166127fe5761278e61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156127d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f691906144f2565b6127fe575f80fd5b60035460405163ac1e502560e01b8152600481018390526001600160a01b039091169063ac1e50259060240161140e565b5f60025f54036128515760405162461bcd60e51b8152600401610b88906145af565b60025f5561285d612bd1565b6128795760405162461bcd60e51b8152600401610b8890614606565b600154600354612898916001600160a01b039081169133911685613f28565b6003546040516356e4bb9760e11b81525f9182916001600160a01b039091169063adc9772e906128ce908890889060040161457f565b60408051808303815f875af11580156128e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290d9190614840565b6001600160a01b0387165f9081526007602052604081208054939550919350839261293990849061482d565b90915550506001600160a01b0385165f908152600860205260408120805483929061296590849061482d565b90915550506040517f4031c63bb53dc5dfada7ef8d75bef8c44d0283658c1585fc74107ed5b75e97c89061299c908790879061457f565b60405180910390a160405182815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060015f559392505050565b6002546001600160a01b031615612a2b576002546001600160a01b03163314612a2b5760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316612ab357612a4361201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015612a87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aab91906144f2565b612ab3575f80fd5b612abb6121b2565b60015460405163f968d96f60e01b81526001600160a01b03918216600482015291169063f968d96f90602401602060405180830381865afa158015612b02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2691906144f2565b612b5e5760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610b88565b612b666121b2565b600154604051637b42db0f60e01b81526001600160a01b039182166004820152911690637b42db0f90602401602060405180830381865afa158015612bad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f439190614545565b6003546040805163255ea96360e21b815290515f926001600160a01b03169163957aa58c9160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b60035460408051635cae2ba360e11b815290515f926001600160a01b03169163b95c57469160048083019260209291908290030181865afa158015610de9573d5f803e3d5ffd5b60035460405163bcfd8dbf60e01b81526001600160a01b0383811660048301525f92169063bcfd8dbf90602401610ec6565b6002546001600160a01b03163314612cbb5760405162461bcd60e51b8152600401610b8890614560565b60035f9054906101000a90046001600160a01b03166001600160a01b031663be9a65556040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612d07575f80fd5b505af1158015610d9c573d5f803e3d5ffd5b6002546001600160a01b031615612d54576002546001600160a01b03163314612d545760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316612ddc57612d6c61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015612db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd491906144f2565b612ddc575f80fd5b612de46121b2565b60015460405163f968d96f60e01b81526001600160a01b03918216600482015291169063f968d96f90602401602060405180830381865afa158015612e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4f91906144f2565b612e875760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610b88565b6006805460ff1916911515919091179055565b60035460405163e72e326b60e01b81526001600160a01b039091169063e72e326b9061140e903390859060040161457f565b6001600160a01b0381165f9081526008602052604081205481612eee84613662565b9050818111612efd575f612f07565b612f07828261481a565b949350505050565b6003546040516354c01ab560e11b81526001600160a01b03848116600483015283811660248301525f92839283929091169063a980356a90604401611ed5565b60608060608060605f612f60612c18565b90505f816001600160401b03811115612f7b57612f7b61466a565b604051908082528060200260200182016040528015612fa4578160200160208202803683370190505b509550816001600160401b03811115612fbf57612fbf61466a565b604051908082528060200260200182016040528015612fe8578160200160208202803683370190505b509650816001600160401b038111156130035761300361466a565b60405190808252806020026020018201604052801561303657816020015b60608152602001906001900390816130215790505b509450816001600160401b038111156130515761305161466a565b60405190808252806020026020018201604052801561308457816020015b606081526020019060019003908161306f5790505b509350816001600160401b0381111561309f5761309f61466a565b6040519080825280602002602001820160405280156130c8578160200160208202803683370190505b5092505f5b828110156132c5576130de81610e27565b9150818782815181106130f3576130f361467e565b60200260200101906001600160a01b031690816001600160a01b03168152505061311d8983611579565b88828151811061312f5761312f61467e565b602002602001018181525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015613176573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261319d9190810190614692565b8682815181106131af576131af61467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa1580156131f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261321c9190810190614692565b85828151811061322e5761322e61467e565b6020026020010181905250816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613275573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132999190614862565b8482815181106132ab576132ab61467e565b60ff909216602092830291909101909101526001016130cd565b50505091939590929450565b60035460408051631a3ef29760e31b815290515f926001600160a01b03169163d1f794b89160048083019260209291908290030181865afa1580156109bf573d5f803e3d5ffd5b6002546001600160a01b031615613353576002546001600160a01b031633146133535760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166133db5761336b61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156133af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133d391906144f2565b6133db575f80fd5b6298968081116134165760405162461bcd60e51b8152600401610b88906020808252600490820152632031653760e01b604082015260600190565b60035460405163d55bfdcd60e01b81526001600160a01b039091169063d55bfdcd90613448908590859060040161457f565b5f604051808303815f87803b15801561345f575f80fd5b505af1158015613471573d5f803e3d5ffd5b505050505050565b6002546001600160a01b0316156134b4576002546001600160a01b031633146134b45760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b031661353c576134cc61201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061353491906144f2565b61353c575f80fd5b600354604051633597458160e21b815282151560048201526001600160a01b039091169063d65d16049060240161140e565b6002546001600160a01b0316156135a9576002546001600160a01b031633146135a95760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b0316613631576135c161201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa158015613605573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061362991906144f2565b613631575f80fd5b6003546040516370bb923760e11b8152600481018390526001600160a01b039091169063e177246e9060240161140e565b5f6001600160a01b0382166136895760405162461bcd60e51b8152600401610b8890614628565b600354604051630ef40a6760e41b81526001600160a01b0384811660048301525f92169063ef40a67090602401602060405180830381865afa1580156136d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136f59190614598565b6001600160a01b0384165f90815260076020526040902054909150811061371c5780611614565b50506001600160a01b03165f9081526007602052604090205490565b6003546001600160a01b0316331461377b5760405162461bcd60e51b8152602060048201526006602482015265139bdd0814d360d21b6044820152606401610b88565b600154613792906001600160a01b03168484613ed2565b6001600160a01b0383165f908152600760209081526040808320546008909252909120548183116137cc576137c7838361481a565b6137ce565b5f5b6001600160a01b0386165f908152600760205260409020558083116137fc576137f7838261481a565b6137fe565b5f5b6001600160a01b039095165f9081526008602052604090209490945550505050565b6002546001600160a01b03161561385b576002546001600160a01b0316331461385b5760405162461bcd60e51b8152600401610b8890614560565b6002546001600160a01b03166138e35761387361201c565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c90602401602060405180830381865afa1580156138b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138db91906144f2565b6138e3575f80fd5b6001600160a01b0381166139285760405162461bcd60e51b815260206004820152600c60248201526b7573652072656e6f756e636560a01b6044820152606401610b88565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600280546001600160a01b0319166001600160a01b0383811691821790925560035460405163f2fde38b60e01b815260048101929092529091169063f2fde38b9060240161140e565b606080808080855f6139bd60018a61481a565b9850816001600160401b038111156139d7576139d761466a565b604051908082528060200260200182016040528015613a00578160200160208202803683370190505b509550816001600160401b03811115613a1b57613a1b61466a565b604051908082528060200260200182016040528015613a44578160200160208202803683370190505b509650816001600160401b03811115613a5f57613a5f61466a565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b509450816001600160401b03811115613aad57613aad61466a565b604051908082528060200260200182016040528015613ae057816020015b6060815260200190600190039081613acb5790505b509350816001600160401b03811115613afb57613afb61466a565b604051908082528060200260200182016040528015613b24578160200160208202803683370190505b509250885b613b338a8461482d565b811015613d2a57613b4381610e27565b915081878281518110613b5857613b5861467e565b60200260200101906001600160a01b031690816001600160a01b031681525050613b828b83611579565b888281518110613b9457613b9461467e565b602002602001018181525050816001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015613bdb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c029190810190614692565b868281518110613c1457613c1461467e565b6020026020010181905250816001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015613c5a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613c819190810190614692565b858281518110613c9357613c9361467e565b6020026020010181905250816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cfe9190614862565b848281518110613d1057613d1061467e565b60ff90921660209283029190910190910152600101613b29565b505050939792965093509350565b613d406121b2565b6001600160a01b0316336001600160a01b031614613d97576002546001600160a01b03163314613d975760405162461bcd60e51b81526020600482015260026024820152614f4f60f01b6044820152606401610b88565b613d9f6121b2565b6040516309ab9c0760e31b81526001600160a01b0384811660048301529190911690634d5ce03890602401602060405180830381865afa158015613de5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e0991906144f2565b613e6e57613e156121b2565b6040516371dcdcaf60e01b81526001600160a01b03848116600483015291909116906371dcdcaf906024015f604051808303815f87803b158015613e57575f80fd5b505af1158015613e69573d5f803e3d5ffd5b505050505b60035460405163f77a3fb960e01b81526001600160a01b039091169063f77a3fb990613448908590859060040161457f565b600354604051637d16126960e11b81526001600160a01b0383811660048301525f92169063fa2c24d290602401610ec6565b61194e8363a9059cbb60e01b8484604051602401613ef192919061457f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613f60565b6040516001600160a01b0380851660248301528316604482015260648101829052610d9c9085906323b872dd60e01b90608401613ef1565b5f613fb4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140319092919063ffffffff16565b80519091501561194e5780806020019051810190613fd291906144f2565b61194e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b88565b6060612f0784845f85855f80866001600160a01b031685876040516140569190614882565b5f6040518083038185875af1925050503d805f8114614090576040519150601f19603f3d011682016040523d82523d5f602084013e614095565b606091505b50915091506140a6878383876140b1565b979650505050505050565b6060831561411f5782515f03614118576001600160a01b0385163b6141185760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b88565b5081612f07565b612f0783838151156141345781518083602001fd5b8060405162461bcd60e51b8152600401610b88919061419b565b5f5b83811015614168578181015183820152602001614150565b50505f910152565b5f815180845261418781602086016020860161414e565b601f01601f19169290920160200192915050565b602081525f6116146020830184614170565b6001600160a01b03811681146141c1575f80fd5b50565b5f805f606084860312156141d6575f80fd5b83356141e1816141ad565b925060208401356141f1816141ad565b929592945050506040919091013590565b5f60208284031215614212575f80fd5b5035919050565b5f60208284031215614229575f80fd5b8135611614816141ad565b5f8060408385031215614245575f80fd5b8235614250816141ad565b91506020830135614260816141ad565b809150509250929050565b80151581146141c1575f80fd5b5f60208284031215614288575f80fd5b81356116148161426b565b5f815180845260208085019450602084015f5b838110156142cb5781516001600160a01b0316875295820195908201906001016142a6565b509495945050505050565b5f8282518085526020808601955060208260051b840101602086015f5b8481101561432157601f1986840301895261430f838351614170565b988401989250908301906001016142f3565b5090979650505050505050565b606081525f6143406060830186614293565b828103602084015261435281866142d6565b9050828103604084015261436681856142d6565b9695505050505050565b5f8060408385031215614381575f80fd5b823561438c816141ad565b946020939093013593505050565b5f805f606084860312156143ac575f80fd5b83356143b7816141ad565b92506020840135915060408401356143ce8161426b565b809150509250925092565b5f80604083850312156143ea575f80fd5b82356143f5816141ad565b915060208301356142608161426b565b60a080825286519082018190525f9060209060c0840190828a01845b8281101561443d57815184529284019290840190600101614421565b505050838103828501526144518189614293565b9050838103604085015261446581886142d6565b9050838103606085015261447981876142d6565b848103608086015285518082528387019250908301905f5b818110156144b057835160ff1683529284019291840191600101614491565b50909a9950505050505050505050565b5f805f606084860312156144d2575f80fd5b83356144dd816141ad565b95602085013595506040909401359392505050565b5f60208284031215614502575f80fd5b81516116148161426b565b600181811c9082168061452157607f821691505b60208210810361453f57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215614555575f80fd5b8151611614816141ad565b60208082526005908201526437bbb732b960d91b604082015260600190565b6001600160a01b03929092168252602082015260400190565b5f602082840312156145a8575f80fd5b5051919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526006908201526514185d5cd95960d21b604082015260600190565b6020808252600890820152676e6f74206c69766560c01b604082015260600190565b60208082526022908201527f45524332303a2073656e64696e6720746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156146a2575f80fd5b81516001600160401b03808211156146b8575f80fd5b818401915084601f8301126146cb575f80fd5b8151818111156146dd576146dd61466a565b604051601f8201601f19908116603f011681019083821181831017156147055761470561466a565b8160405282815287602084870101111561471d575f80fd5b6140a683602083016020880161414e565b5f805f805f60a08688031215614742575f80fd5b85519450602086015193506040860151925060608601516147628161426b565b60808701519092506147738161426b565b809150509295509295909350565b5f805f805f8060c08789031215614796575f80fd5b86516147a18161426b565b60208801519096506147b28161426b565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b5f805f606084860312156147ed575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610e9257610e92614806565b80820180821115610e9257610e92614806565b5f8060408385031215614851575f80fd5b505080516020909101519092909150565b5f60208284031215614872575f80fd5b815160ff81168114611614575f80fd5b5f825161489381846020870161414e565b919091019291505056fea2646970667358221220ea23e88dcead24c6956f1cfd82af22a7bc9bf7ed7c69d7c9229d3abe6bfa8e7864736f6c63430008180033

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

0000000000000000000000008d5e1cd48b17d807e81dbfbe6c591cb7fab63971000000000000000000000000f3c7cecf8cbc3066f9a87b310cebe198d00479ac000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000b464547205374616b696e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034653540000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : user (address): 0x8d5E1CD48b17d807e81DBfBe6c591CB7faB63971
Arg [1] : token (address): 0xF3c7CECF8cBC3066F9a87b310cEBE198d00479aC
Arg [2] : tname (string): FEG Staking
Arg [3] : tsymbol (string): FST

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000008d5e1cd48b17d807e81dbfbe6c591cb7fab63971
Arg [1] : 000000000000000000000000f3c7cecf8cbc3066f9a87b310cebe198d00479ac
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 464547205374616b696e67000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4653540000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

12807:17184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26141:124;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;26141:124:0;;;;;;;;15919:83;;;:::i;:::-;;;;;;;:::i;12908:25::-;;;;;-1:-1:-1;;;;;12908:25:0;;;;;;-1:-1:-1;;;;;1126:32:1;;;1108:51;;1096:2;1081:18;12908:25:0;962:203:1;23657:308:0;;;;;;:::i;:::-;;:::i;:::-;;18504:116;;;:::i;:::-;;;1913:25:1;;;1901:2;1886:18;18504:116:0;1767:177:1;23550:99:0;;;:::i;27552:151::-;;;;;;:::i;:::-;;:::i;16901:153::-;;;;;;:::i;:::-;;:::i;16480:128::-;;;;;;:::i;:::-;;:::i;22752:369::-;;;;;;:::i;:::-;;:::i;26019:110::-;;;:::i;16105:82::-;16170:9;;;;;;;16105:82;;2558:4:1;2546:17;;;2528:36;;2516:2;2501:18;16105:82:0;2386:184:1;20850:278:0;;;;;;:::i;:::-;;:::i;12856:17::-;;;;;-1:-1:-1;;;;;12856:17:0;;;18900:131;;;;;;:::i;:::-;;:::i;25050:106::-;;;;;;:::i;:::-;;:::i;18120:116::-;;;;;;:::i;:::-;;:::i;25891:::-;;;:::i;21585:278::-;;;;;;:::i;:::-;;:::i;16616:136::-;;;;;;:::i;:::-;;:::i;24917:121::-;;;;;;:::i;:::-;;:::i;24794:115::-;;;;;;:::i;:::-;;:::i;12998:21::-;;;;;;;;;18244:115;;;:::i;25502:105::-;;;:::i;17431:197::-;;;;;;:::i;:::-;;:::i;18628:127::-;;;;;;:::i;:::-;;:::i;18367:129::-;;;;;;:::i;:::-;;:::i;15181:148::-;;;:::i;29480:508::-;;;:::i;:::-;;;;;;;;;:::i;24412:99::-;;;:::i;26644:216::-;;;;;;:::i;:::-;;:::i;:::-;;;;5369:25:1;;;5425:2;5410:18;;5403:34;;;;5453:18;;;5446:34;;;;5523:14;5516:22;5511:2;5496:18;;5489:50;5583:14;5576:22;5570:3;5555:19;;5548:51;5356:3;5341:19;26644:216:0;5122:483:1;26868:228:0;;;;;;:::i;:::-;;:::i;:::-;;;;5910:14:1;;5903:22;5885:41;;5969:14;;5962:22;5957:2;5942:18;;5935:50;6001:18;;;5994:34;;;;6059:2;6044:18;;6037:34;6102:3;6087:19;;6080:35;6146:3;6131:19;;6124:35;5872:3;5857:19;26868:228:0;5610:555:1;27328:216:0;;;;;;:::i;:::-;;:::i;:::-;;;;6692:25:1;;;6748:2;6733:18;;6726:34;;;;6776:18;;;6769:34;6680:2;6665:18;27328:216:0;6490:319:1;23129:217:0;;;;;;:::i;:::-;;:::i;15772:139::-;;;:::i;21144:166::-;;;:::i;17993:119::-;;;:::i;14411:79::-;14476:6;;-1:-1:-1;;;;;14476:6:0;14411:79;;14197:129;;;:::i;16010:87::-;;;:::i;13063:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;20680:162;;;;;;:::i;:::-;;:::i;20403:265::-;;;;;;:::i;:::-;;:::i;24657:129::-;;;;;;:::i;:::-;;:::i;25774:105::-;;;:::i;19039:533::-;;;;;;:::i;:::-;;:::i;25351:139::-;;;;;;:::i;:::-;;:::i;17863:122::-;;;;;;:::i;:::-;;:::i;19580:517::-;;;;;;:::i;:::-;;:::i;12880:21::-;;;;;-1:-1:-1;;;;;12880:21:0;;;17636:219;;;:::i;16195:100::-;;;:::i;27711:117::-;;;:::i;16760:133::-;;;;;;:::i;:::-;;:::i;18767:125::-;;;:::i;16303:169::-;;;;;;:::i;:::-;;:::i;24519:126::-;;;;;;:::i;:::-;;:::i;23354:184::-;;;;;;:::i;:::-;;:::i;27104:212::-;;;;;;:::i;:::-;;:::i;27836:777::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;26277:114::-;;;:::i;25168:175::-;;;;;;:::i;:::-;;:::i;26399:119::-;;;;;;:::i;:::-;;:::i;26530:106::-;;;;;;:::i;:::-;;:::i;22176:280::-;;;;;;:::i;:::-;;:::i;13111:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;17062:361;;;;;;:::i;:::-;;:::i;15484:280::-;;;;;;:::i;:::-;;:::i;28621:851::-;;;;;;:::i;:::-;;:::i;23973:427::-;;;;;;:::i;:::-;;:::i;25619:143::-;;;;;;:::i;:::-;;:::i;26141:124::-;26227:10;;26215:42;;;-1:-1:-1;;;26215:42:0;;;;26191:4;;-1:-1:-1;;;;;26227:10:0;;26215:40;;:42;;;;;;;;;;;;;;26227:10;26215:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26208:49;;26141:124;:::o;15919:83::-;15956:13;15989:5;15982:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15919:83;:::o;23657:308::-;14069:11;:9;:11::i;:::-;-1:-1:-1;;;;;14062:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14045:47:0;14053:4;-1:-1:-1;;;;;14045:47:0;;14042:128;;14118:22;:20;:22::i;:::-;-1:-1:-1;;;;;14104:52:0;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14042:128;14622:6:::1;::::0;-1:-1:-1;;;;;14622:6:0::1;:20:::0;14619:86:::1;;14677:6;::::0;-1:-1:-1;;;;;14677:6:0::1;14663:10;:20;14655:38;;;;-1:-1:-1::0;;;14655:38:0::1;;;;;;;:::i;:::-;;;;;;;;;14718:6;::::0;-1:-1:-1;;;;;14718:6:0::1;14715:96;;14766:11;:9;:11::i;:::-;14759:39;::::0;-1:-1:-1;;;14759:39:0;;14787:10:::1;14759:39;::::0;::::1;1108:51:1::0;-1:-1:-1;;;;;14759:27:0;;;::::1;::::0;::::1;::::0;1081:18:1;;14759:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;::::0;::::1;;23783:2:::2;::::0;-1:-1:-1;;;;;23783:2:0;;::::2;23773:12:::0;;::::2;::::0;23765:48:::2;;;::::0;-1:-1:-1;;;23765:48:0;;11294:2:1;23765:48:0::2;::::0;::::2;11276:21:1::0;11333:2;11313:18;;;11306:30;11372:25;11352:18;;;11345:53;11415:18;;23765:48:0::2;11092:347:1::0;23765:48:0::2;23847:22;:20;:22::i;:::-;23833:54;::::0;-1:-1:-1;;;23833:54:0;;-1:-1:-1;;;;;1126:32:1;;;23833:54:0::2;::::0;::::2;1108:51:1::0;23833:46:0;;;::::2;::::0;::::2;::::0;1081:18:1;;23833:54:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23832:55;23824:89;;;::::0;-1:-1:-1;;;23824:89:0;;11646:2:1;23824:89:0::2;::::0;::::2;11628:21:1::0;11685:2;11665:18;;;11658:30;-1:-1:-1;;;11704:18:1;;;11697:51;11765:18;;23824:89:0::2;11444:345:1::0;23824:89:0::2;23924:33;::::0;-1:-1:-1;;;23924:33:0;;-1:-1:-1;;;;;23924:23:0;::::2;::::0;::::2;::::0;:33:::2;::::0;23948:2;;23952:4;;23924:33:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23657:308:::0;;;:::o;18504:116::-;18587:10;;18575:37;;;-1:-1:-1;;;18575:37:0;;;;18548:7;;-1:-1:-1;;;;;18587:10:0;;18575:35;;:37;;;;;;;;;;;;;;18587:10;18575:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23550:99::-;23617:24;23630:10;23617:12;:24::i;:::-;23603:10;23598:16;;;;:4;:16;;;;;:43;23550:99::o;27552:151::-;27660:10;;27648:47;;-1:-1:-1;;;27648:47:0;;;;;1913:25:1;;;27613:7:0;;-1:-1:-1;;;;;27660:10:0;;27648:39;;1886:18:1;;27648:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27641:54;27552:151;-1:-1:-1;;27552:151:0:o;16901:153::-;17003:10;;16991:47;;-1:-1:-1;;;16991:47:0;;-1:-1:-1;;;;;1126:32:1;;;16991:47:0;;;1108:51:1;16964:7:0;;17003:10;;16991:39;;1081:18:1;;16991:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16480:128::-;16541:10;;-1:-1:-1;;;;;16541:10:0;:24;16533:39;;;;-1:-1:-1;;;16533:39:0;;12464:2:1;16533:39:0;;;12446:21:1;12503:1;12483:18;;;12476:29;-1:-1:-1;;;12521:18:1;;;12514:32;12563:18;;16533:39:0;12262:325:1;16533:39:0;16583:10;:17;;-1:-1:-1;;;;;;16583:17:0;-1:-1:-1;;;;;16583:17:0;;;;;;;;;;16480:128::o;22752:369::-;22825:22;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;13970:6:::1;::::0;::::1;;13969:7;13961:26;;;;-1:-1:-1::0;;;13961:26:0::1;;;;;;;:::i;:::-;14069:11:::2;:9;:11::i;:::-;-1:-1:-1::0;;;;;14062:28:0::2;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14045:47:0::2;14053:4;-1:-1:-1::0;;;;;14045:47:0::2;;14042:128;;14118:22;:20;:22::i;:::-;-1:-1:-1::0;;;;;14104:52:0::2;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14042:128;22868:8:::3;:6;:8::i;:::-;22860:29;;;;-1:-1:-1::0;;;22860:29:0::3;;;;;;;:::i;:::-;22929:10;::::0;22917:52:::3;::::0;-1:-1:-1;;;22917:52:0;;-1:-1:-1;;;;;22929:10:0;;::::3;::::0;22917:32:::3;::::0;:52:::3;::::0;22950:10:::3;::::0;22962:6;;22917:52:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22900:69;;22986:28;22995:10;23007:6;22986:28;;;;;;;:::i;:::-;;;;;;;;23030:51;::::0;1913:25:1;;;23054:10:0::3;::::0;23047:4:::3;::::0;23030:51:::3;::::0;1901:2:1;1886:18;23030:51:0::3;;;;;;;12387:1:::0;12685:7;:22;22752:369;;-1:-1:-1;22752:369:0:o;26019:110::-;26098:10;;26086:35;;;-1:-1:-1;;;26086:35:0;;;;26062:4;;-1:-1:-1;;;;;26098:10:0;;26086:33;;:35;;;;;;;;;;;;;;26098:10;26086:35;;;;;;;;;;;;;;20850:278;20932:13;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;13970:6:::1;::::0;::::1;;13969:7;13961:26;;;;-1:-1:-1::0;;;13961:26:0::1;;;;;;;:::i;:::-;20984:10:::2;::::0;20972:66:::2;::::0;-1:-1:-1;;;20972:66:0;;21019:10:::2;20972:66;::::0;::::2;13834:34:1::0;-1:-1:-1;;;;;13904:15:1;;;13884:18;;;13877:43;20984:10:0;;::::2;::::0;20972:46:::2;::::0;13769:18:1;;20972:66:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21057:40;::::0;;21071:10:::2;14171:34:1::0;;-1:-1:-1;;;;;14241:15:1;;14236:2;14221:18;;14214:43;14273:18;;;14266:34;;;20964:74:0;;-1:-1:-1;21057:40:0::2;::::0;14121:2:1;14106:18;21057:40:0::2;;;;;;;12387:1:::0;12685:7;:22;20850:278;;-1:-1:-1;20850:278:0:o;18900:131::-;18995:10;;18983:40;;-1:-1:-1;;;18983:40:0;;-1:-1:-1;;;;;1126:32:1;;;18983:40:0;;;1108:51:1;18956:7:0;;18995:10;;18983:34;;1081:18:1;;18983:40:0;962:203:1;25050:106:0;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;25123:10:::1;::::0;25111:37:::1;::::0;-1:-1:-1;;;25111:37:0;;::::1;::::0;::::1;1913:25:1::0;;;-1:-1:-1;;;;;25123:10:0;;::::1;::::0;25111:32:::1;::::0;1886:18:1;;25111:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25050:106:::0;:::o;18120:116::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;18198:10:::1;::::0;18186:42:::1;::::0;-1:-1:-1;;;18186:42:0;;::::1;::::0;::::1;1913:25:1::0;;;-1:-1:-1;;;;;18198:10:0;;::::1;::::0;18186:37:::1;::::0;1886:18:1;;18186:42:0::1;1767:177:1::0;25891:116:0;25973:10;;25961:38;;;-1:-1:-1;;;25961:38:0;;;;25937:4;;-1:-1:-1;;;;;25973:10:0;;25961:36;;:38;;;;;;;;;;;;;;25973:10;25961:38;;;;;;;;;;;;;;21585:278;21671:22;-1:-1:-1;;;;;21714:20:0;;21706:67;;;;-1:-1:-1;;;21706:67:0;;;;;;;:::i;:::-;21803:10;;21791:64;;-1:-1:-1;;;21791:64:0;;-1:-1:-1;;;;;13852:15:1;;;21791:64:0;;;13834:34:1;13904:15;;;13884:18;;;13877:43;21803:10:0;;;;21791:48;;13769:18:1;;21791:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21784:71;21585:278;-1:-1:-1;;;21585:278:0:o;16616:136::-;16711:10;;16699:45;;-1:-1:-1;;;16699:45:0;;-1:-1:-1;;;;;1126:32:1;;;16699:45:0;;;1108:51:1;16675:4:0;;16711:10;;16699:39;;1081:18:1;;16699:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24917:121::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;24996:10:::1;::::0;24984:46:::1;::::0;-1:-1:-1;;;24984:46:0;;179:14:1;;172:22;24984:46:0::1;::::0;::::1;154:41:1::0;-1:-1:-1;;;;;24996:10:0;;::::1;::::0;24984:39:::1;::::0;127:18:1;;24984:46:0::1;14:187:1::0;24794:115:0;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;24870:10:::1;::::0;24858:43:::1;::::0;-1:-1:-1;;;24858:43:0;;179:14:1;;172:22;24858:43:0::1;::::0;::::1;154:41:1::0;-1:-1:-1;;;;;24870:10:0;;::::1;::::0;24858:36:::1;::::0;127:18:1;;24858:43:0::1;14:187:1::0;18244:115:0;18327:10;;18315:36;;;-1:-1:-1;;;18315:36:0;;;;18288:7;;-1:-1:-1;;;;;18327:10:0;;18315:34;;:36;;;;;;;;;;;;;;18327:10;18315:36;;;;;;;;;;;;;;25502:105;25580:10;;25568:31;;;-1:-1:-1;;;25568:31:0;;;;25541:7;;-1:-1:-1;;;;;25580:10:0;;25568:29;;:31;;;;;;;;;;;;;;25580:10;25568:31;;;;;;;;;;;;;;17431:197;17536:10;;-1:-1:-1;;;;;17536:10:0;17522;:24;17514:43;;;;-1:-1:-1;;;17514:43:0;;14916:2:1;17514:43:0;;;14898:21:1;14955:1;14935:18;;;14928:29;-1:-1:-1;;;14973:18:1;;;14966:36;15019:18;;17514:43:0;14714:329:1;17514:43:0;17568:52;17601:6;17610:4;17616:3;17568:25;:52::i;:::-;17431:197;;;:::o;18628:127::-;18716:10;;18704:43;;-1:-1:-1;;;18704:43:0;;-1:-1:-1;;;;;1126:32:1;;;18704:43:0;;;1108:51:1;18680:4:0;;18716:10;;18704:37;;1081:18:1;;18704:43:0;962:203:1;18367:129:0;18461:10;;18449:39;;-1:-1:-1;;;18449:39:0;;-1:-1:-1;;;;;1126:32:1;;;18449:39:0;;;1108:51:1;18422:7:0;;18461:10;;18449:33;;1081:18:1;;18449:39:0;962:203:1;15181:148:0;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;15272:6:::1;::::0;15251:40:::1;::::0;15288:1:::1;::::0;-1:-1:-1;;;;;15272:6:0::1;::::0;15251:40:::1;::::0;15288:1;;15251:40:::1;15302:6;:19:::0;;-1:-1:-1;;;;;;15302:19:0::1;::::0;;15181:148::o;29480:508::-;29527:23;29552:21;29575:23;29611:10;29624:14;:12;:14::i;:::-;29611:27;;29649:10;29693:2;-1:-1:-1;;;;;29679:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29679:17:0;;29670:26;;29728:2;-1:-1:-1;;;;;29715:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29707:24;;29765:2;-1:-1:-1;;;;;29752:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29742:26;;29784:9;29779:202;29803:2;29799:1;:6;29779:202;;;29832:18;29848:1;29832:15;:18::i;:::-;29827:23;;29877:2;29865:6;29872:1;29865:9;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;29865:14:0;;;-1:-1:-1;;;;;29865:14:0;;;;;29912:2;-1:-1:-1;;;;;29905:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29905:17:0;;;;;;;;;;;;:::i;:::-;29894:5;29900:1;29894:8;;;;;;;;:::i;:::-;;;;;;:28;;;;29957:2;-1:-1:-1;;;;;29950:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29950:19:0;;;;;;;;;;;;:::i;:::-;29937:7;29945:1;29937:10;;;;;;;;:::i;:::-;;;;;;;;;;:32;29807:3;;29779:202;;;;29600:388;;29480:508;;;:::o;24412:99::-;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;;;24478:10:::1;::::0;24466:37:::1;::::0;;-1:-1:-1;;;24466:37:0;;;;-1:-1:-1;;;;;24478:10:0;;::::1;::::0;24466:35:::1;::::0;:37:::1;::::0;;::::1;::::0;;;;;;12644:7;24478:10;24466:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;12387:1:0;12685:7;:22;-1:-1:-1;;24412:99:0:o;26644:216::-;26827:10;;26815:37;;-1:-1:-1;;;26815:37:0;;-1:-1:-1;;;;;1126:32:1;;;26815:37:0;;;1108:51:1;26700:17:0;;;;;;;;;;26827:10;;;26815:31;;1081:18:1;;26815:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26808:44;;;;-1:-1:-1;26808:44:0;;-1:-1:-1;26808:44:0;-1:-1:-1;26808:44:0;;-1:-1:-1;26644:216:0;-1:-1:-1;;26644:216:0:o;26868:228::-;27061:10;;27049:39;;-1:-1:-1;;;27049:39:0;;-1:-1:-1;;;;;1126:32:1;;;27049:39:0;;;1108:51:1;26926:11:0;;;;;;;;;;;;27061:10;;;;27049:31;;1081:18:1;;27049:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27042:46;;;;-1:-1:-1;27042:46:0;;-1:-1:-1;27042:46:0;-1:-1:-1;27042:46:0;-1:-1:-1;27042:46:0;;-1:-1:-1;26868:228:0;-1:-1:-1;;26868:228:0:o;27328:216::-;27497:10;;27485:51;;-1:-1:-1;;;27485:51:0;;27406:18;;;;;;-1:-1:-1;;;;;27497:10:0;;27485:36;;:51;;27522:6;;27530:5;;27485:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27478:58;;;;;;27328:216;;;;;:::o;23129:217::-;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;13970:6:::1;::::0;::::1;;13969:7;13961:26;;;;-1:-1:-1::0;;;13961:26:0::1;;;;;;;:::i;:::-;23242:10:::2;::::0;-1:-1:-1;;;;;23242:10:0::2;23228;:24;23220:39;;;::::0;-1:-1:-1;;;23220:39:0;;17915:2:1;23220:39:0::2;::::0;::::2;17897:21:1::0;17954:1;17934:18;;;17927:29;-1:-1:-1;;;17972:18:1;;;17965:32;18014:18;;23220:39:0::2;17713:325:1::0;23220:39:0::2;23285:5;:53;;-1:-1:-1::0;;;;;23317:12:0;::::2;;::::0;;;:6:::2;:12;::::0;;;;;:21:::2;::::0;23332:6;;23317:21:::2;:::i;:::-;23285:53;;;-1:-1:-1::0;;;;;23293:12:0;::::2;;::::0;;;:6:::2;:12;::::0;;;;;:21:::2;::::0;23308:6;;23293:21:::2;:::i;:::-;-1:-1:-1::0;;;;;23270:12:0;;::::2;;::::0;;;:6:::2;:12;::::0;;;;:68;;;;-1:-1:-1;;12387:1:0;12685:22;;23129:217::o;15772:139::-;15813:7;15848:42;-1:-1:-1;;;;;15839:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21144:166::-;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;13970:6:::1;::::0;::::1;;13969:7;13961:26;;;;-1:-1:-1::0;;;13961:26:0::1;;;;;;;:::i;:::-;21222:10:::2;::::0;21210:50:::2;::::0;-1:-1:-1;;;21210:50:0;;21249:10:::2;21210:50;::::0;::::2;1108:51:1::0;-1:-1:-1;;;;;21222:10:0;;::::2;::::0;21210:38:::2;::::0;1081:18:1;;21210:50:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21276:26:0::2;::::0;21291:10:::2;1108:51:1::0;;21276:26:0::2;::::0;-1:-1:-1;1096:2:1;1081:18;;-1:-1:-1;21276:26:0::2;;;;;;;12387:1:::0;12685:7;:22;21144:166::o;17993:119::-;18079:10;;18067:37;;;-1:-1:-1;;;18067:37:0;;;;18040:7;;-1:-1:-1;;;;;18079:10:0;;18067:35;;:37;;;;;;;;;;;;;;18079:10;18067:37;;;;;;;;;;;;;;14197:129;14249:7;14283:11;:9;:11::i;:::-;-1:-1:-1;;;;;14276:40:0;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16010:87;16049:13;16082:7;16075:14;;;;;:::i;20680:162::-;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;;;14622:6;-1:-1:-1;;;;;14622:6:0::1;:20:::0;14619:86:::1;;14677:6;::::0;-1:-1:-1;;;;;14677:6:0::1;14663:10;:20;14655:38;;;;-1:-1:-1::0;;;14655:38:0::1;;;;;;;:::i;:::-;14718:6;::::0;-1:-1:-1;;;;;14718:6:0::1;14715:96;;14766:11;:9;:11::i;:::-;14759:39;::::0;-1:-1:-1;;;14759:39:0;;14787:10:::1;14759:39;::::0;::::1;1108:51:1::0;-1:-1:-1;;;;;14759:27:0;;;::::1;::::0;::::1;::::0;1081:18:1;;14759:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;::::0;::::1;;20790:10:::2;::::0;20778:56:::2;::::0;-1:-1:-1;;;20778:56:0;;-1:-1:-1;;;;;18624:32:1;;;20778:56:0::2;::::0;::::2;18606:51:1::0;18700:14;;18693:22;18673:18;;;18666:50;20790:10:0;;::::2;::::0;20778:41:::2;::::0;18579:18:1;;20778:56:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;12387:1:0;12685:7;:22;-1:-1:-1;;;;20680:162:0:o;20403:265::-;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;20485:77:::1;20522:6:::0;20531:10:::1;20551:4;20558:3:::0;20485:29:::1;:77::i;:::-;20586:10;::::0;20574:46:::1;::::0;-1:-1:-1;;;20574:46:0;;-1:-1:-1;;;;;20586:10:0;;::::1;::::0;20574:33:::1;::::0;:46:::1;::::0;20608:6;;20616:3;;20574:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20636:22;20646:6;20654:3;20636:22;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;12387:1:0;12685:7;:22;20403:265::o;24657:129::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;24740:10:::1;::::0;24728:50:::1;::::0;-1:-1:-1;;;24728:50:0;;179:14:1;;172:22;24728:50:0::1;::::0;::::1;154:41:1::0;-1:-1:-1;;;;;24740:10:0;;::::1;::::0;24728:43:::1;::::0;127:18:1;;24728:50:0::1;14:187:1::0;25774:105:0;25852:10;;25840:31;;;-1:-1:-1;;;25840:31:0;;;;25813:7;;-1:-1:-1;;;;;25852:10:0;;25840:29;;:31;;;;;;;;;;;;;;25852:10;25840:31;;;;;;;;;;;;;;19039:533;19098:7;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;19127:8:::1;:6;:8::i;:::-;19119:29;;;;-1:-1:-1::0;;;19119:29:0::1;;;;;;;:::i;:::-;19196:2;::::0;19213:10:::1;::::0;19159:73:::1;::::0;-1:-1:-1;;;;;19196:2:0;;::::1;::::0;19201:10:::1;::::0;19213::::1;19225:6:::0;19159:29:::1;:73::i;:::-;19300:10;::::0;19288:49:::1;::::0;-1:-1:-1;;;19288:49:0;;19245:21:::1;::::0;;;-1:-1:-1;;;;;19300:10:0;;::::1;::::0;19288:29:::1;::::0;:49:::1;::::0;19318:10:::1;::::0;19330:6;;19288:49:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19355:10;19348:18;::::0;;;:6:::1;:18;::::0;;;;:30;;19244:93;;-1:-1:-1;19244:93:0;;-1:-1:-1;19244:93:0;;19348:30:::1;::::0;19244:93;;19348:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;19394:10:0::1;19389:16;::::0;;;:4:::1;:16;::::0;;;;:28;;19409:8;;19389:16;:28:::1;::::0;19409:8;;19389:28:::1;:::i;:::-;::::0;;;-1:-1:-1;;19433:26:0::1;::::0;::::1;::::0;::::1;::::0;19440:10:::1;::::0;19452:6;;19433:26:::1;:::i;:::-;;;;;;;;19475:50;::::0;1913:25:1;;;19504:4:0::1;::::0;19484:10:::1;::::0;19475:50:::1;::::0;1901:2:1;1886:18;19475:50:0::1;;;;;;;-1:-1:-1::0;12387:1:0;12685:7;:22;19543:13;19039:533;-1:-1:-1;;19039:533:0:o;25351:139::-;25450:10;;25438:44;;-1:-1:-1;;;25438:44:0;;-1:-1:-1;;;;;1126:32:1;;;25438:44:0;;;1108:51:1;25411:7:0;;25450:10;;25438:36;;1081:18:1;;25438:44:0;962:203:1;17863:122:0;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;17944:10:::1;::::0;17932:45:::1;::::0;-1:-1:-1;;;17932:45:0;;::::1;::::0;::::1;1913:25:1::0;;;-1:-1:-1;;;;;17944:10:0;;::::1;::::0;17932:40:::1;::::0;1886:18:1;;17932:45:0::1;1767:177:1::0;19580:517:0;19653:7;12431:1;12578:7;;:19;12570:63;;;;-1:-1:-1;;;12570:63:0;;;;;;;:::i;:::-;12431:1;12644:7;:18;19682:8:::1;:6;:8::i;:::-;19674:29;;;;-1:-1:-1::0;;;19674:29:0::1;;;;;;;:::i;:::-;19751:2;::::0;19768:10:::1;::::0;19714:73:::1;::::0;-1:-1:-1;;;;;19751:2:0;;::::1;::::0;19756:10:::1;::::0;19768::::1;19780:6:::0;19714:29:::1;:73::i;:::-;19855:10;::::0;19843:43:::1;::::0;-1:-1:-1;;;19843:43:0;;19800:21:::1;::::0;;;-1:-1:-1;;;;;19855:10:0;;::::1;::::0;19843:29:::1;::::0;:43:::1;::::0;19873:4;;19879:6;;19843:43:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19897:12:0;::::1;;::::0;;;:6:::1;:12;::::0;;;;:24;;19799:87;;-1:-1:-1;19799:87:0;;-1:-1:-1;19799:87:0;;19897:24:::1;::::0;19799:87;;19897:24:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;19932:10:0;::::1;;::::0;;;:4:::1;:10;::::0;;;;:22;;19946:8;;19932:10;:22:::1;::::0;19946:8;;19932:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;19970:20:0::1;::::0;::::1;::::0;::::1;::::0;19977:4;;19983:6;;19970:20:::1;:::i;:::-;;;;;;;;20006:44;::::0;1913:25:1;;;20029:4:0::1;::::0;-1:-1:-1;;;;;20006:44:0;::::1;::::0;::::1;::::0;1901:2:1;1886:18;20006:44:0::1;;;;;;;-1:-1:-1::0;12387:1:0;12685:7;:22;20068:13;19580:517;-1:-1:-1;;;19580:517:0:o;17636:219::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;17713:22:::1;:20;:22::i;:::-;17750:2;::::0;17699:54:::1;::::0;-1:-1:-1;;;17699:54:0;;-1:-1:-1;;;;;17750:2:0;;::::1;17699:54;::::0;::::1;1108:51:1::0;17699:50:0;::::1;::::0;::::1;::::0;1081:18:1;;17699:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17691:76;;;::::0;-1:-1:-1;;;17691:76:0;;19179:2:1;17691:76:0::1;::::0;::::1;19161:21:1::0;19218:1;19198:18;;;19191:29;-1:-1:-1;;;19236:18:1;;;19229:39;19285:18;;17691:76:0::1;18977:332:1::0;17691:76:0::1;17805:22;:20;:22::i;:::-;17844:2;::::0;17791:56:::1;::::0;-1:-1:-1;;;17791:56:0;;-1:-1:-1;;;;;17844:2:0;;::::1;17791:56;::::0;::::1;1108:51:1::0;17791:52:0;::::1;::::0;::::1;::::0;1081:18:1;;17791:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16195:100::-:0;16269:10;;16257:30;;;-1:-1:-1;;;16257:30:0;;;;16233:4;;-1:-1:-1;;;;;16269:10:0;;16257:28;;:30;;;;;;;;;;;;;;16269:10;16257:30;;;;;;;;;;;;;;27711:117;27794:10;;27782:38;;;-1:-1:-1;;;27782:38:0;;;;27755:7;;-1:-1:-1;;;;;27794:10:0;;27782:36;;:38;;;;;;;;;;;;;;27794:10;27782:38;;;;;;;;;;;;;;16760:133;16855:10;;16843:42;;-1:-1:-1;;;16843:42:0;;-1:-1:-1;;;;;1126:32:1;;;16843:42:0;;;1108:51:1;16816:7:0;;16855:10;;16843:36;;1081:18:1;;16843:42:0;962:203:1;18767:125:0;18826:6;;-1:-1:-1;;;;;18826:6:0;18812:10;:20;18804:38;;;;-1:-1:-1;;;18804:38:0;;;;;;;:::i;:::-;18865:10;;;;;;;;;-1:-1:-1;;;;;18865:10:0;-1:-1:-1;;;;;18853:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16303:169;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;16385:22:::1;:20;:22::i;:::-;16422:2;::::0;16371:54:::1;::::0;-1:-1:-1;;;16371:54:0;;-1:-1:-1;;;;;16422:2:0;;::::1;16371:54;::::0;::::1;1108:51:1::0;16371:50:0;::::1;::::0;::::1;::::0;1081:18:1;;16371:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16363:76;;;::::0;-1:-1:-1;;;16363:76:0;;19179:2:1;16363:76:0::1;::::0;::::1;19161:21:1::0;19218:1;19198:18;;;19191:29;-1:-1:-1;;;19236:18:1;;;19229:39;19285:18;;16363:76:0::1;18977:332:1::0;16363:76:0::1;16450:6;:14:::0;;-1:-1:-1;;16450:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16303:169::o;24519:126::-;24591:10;;24579:58;;-1:-1:-1;;;24579:58:0;;-1:-1:-1;;;;;24591:10:0;;;;24579:41;;:58;;24621:10;;24633:3;;24579:58;;;:::i;23354:184::-;-1:-1:-1;;;;;23443:10:0;;23411:7;23443:10;;;:4;:10;;;;;;23411:7;23476:18;23448:4;23476:12;:18::i;:::-;23464:30;;23516:1;23512;:5;:17;;23528:1;23512:17;;;23520:5;23524:1;23520;:5;:::i;:::-;23505:24;23354:184;-1:-1:-1;;;;23354:184:0:o;27104:212::-;27271:10;;27259:49;;-1:-1:-1;;;27259:49:0;;-1:-1:-1;;;;;13852:15:1;;;27259:49:0;;;13834:34:1;13904:15;;;13884:18;;;13877:43;27180:18:0;;;;;;27271:10;;;;27259:35;;13769:18:1;;27259:49:0;13622:304:1;27836:777:0;27911:24;27937:23;27962:21;27985:23;28010:24;28047:10;28060:14;:12;:14::i;:::-;28047:27;;28085:10;28129:2;-1:-1:-1;;;;;28115:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28115:17:0;;28106:26;;28167:2;-1:-1:-1;;;;;28153:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28153:17:0;;28143:27;;28202:2;-1:-1:-1;;;;;28189:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28181:24;;28239:2;-1:-1:-1;;;;;28226:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28216:26;;28277:2;-1:-1:-1;;;;;28265:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28265:15:0;;28253:27;;28296:9;28291:315;28315:2;28311:1;:6;28291:315;;;28344:18;28360:1;28344:15;:18::i;:::-;28339:23;;28389:2;28377:6;28384:1;28377:9;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;28377:14:0;;;-1:-1:-1;;;;;28377:14:0;;;;;28419:34;28444:4;28450:2;28419:24;:34::i;:::-;28406:7;28414:1;28406:10;;;;;;;;:::i;:::-;;;;;;:47;;;;;28486:2;-1:-1:-1;;;;;28479:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28479:17:0;;;;;;;;;;;;:::i;:::-;28468:5;28474:1;28468:8;;;;;;;;:::i;:::-;;;;;;:28;;;;28531:2;-1:-1:-1;;;;;28524:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28524:19:0;;;;;;;;;;;;:::i;:::-;28511:7;28519:1;28511:10;;;;;;;;:::i;:::-;;;;;;:32;;;;28580:2;-1:-1:-1;;;;;28573:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28558:9;28568:1;28558:12;;;;;;;;:::i;:::-;:36;;;;:12;;;;;;;;;;;:36;28319:3;;28291:315;;;;28036:577;;27836:777;;;;;;;:::o;26277:114::-;26358:10;;26346:37;;;-1:-1:-1;;;26346:37:0;;;;26322:4;;-1:-1:-1;;;;;26358:10:0;;26346:35;;:37;;;;;;;;;;;;;;26358:10;26346:37;;;;;;;;;;;;;;25168:175;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;25263:3:::1;25257;:9;25249:26;;;;-1:-1:-1::0;;;25249:26:0::1;;;;;;19794:2:1::0;19776:21;;;19833:1;19813:18;;;19806:29;-1:-1:-1;;;19866:2:1;19851:18;;19844:34;19910:2;19895:18;;19592:327;25249:26:0::1;25298:10;::::0;25286:49:::1;::::0;-1:-1:-1;;;25286:49:0;;-1:-1:-1;;;;;25298:10:0;;::::1;::::0;25286:36:::1;::::0;:49:::1;::::0;25323:6;;25331:3;;25286:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25168:175:::0;;:::o;26399:119::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;26477:10:::1;::::0;26465:45:::1;::::0;-1:-1:-1;;;26465:45:0;;179:14:1;;172:22;26465:45:0::1;::::0;::::1;154:41:1::0;-1:-1:-1;;;;;26477:10:0;;::::1;::::0;26465:38:::1;::::0;127:18:1;;26465:45:0::1;14:187:1::0;26530:106:0;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;26603:10:::1;::::0;26591:37:::1;::::0;-1:-1:-1;;;26591:37:0;;::::1;::::0;::::1;1913:25:1::0;;;-1:-1:-1;;;;;26603:10:0;;::::1;::::0;26591:32:::1;::::0;1886:18:1;;26591:37:0::1;1767:177:1::0;22176:280:0;22232:16;-1:-1:-1;;;;;22269:18:0;;22261:65;;;;-1:-1:-1;;;22261:65:0;;;;;;;:::i;:::-;22361:10;;22349:42;;-1:-1:-1;;;22349:42:0;;-1:-1:-1;;;;;1126:32:1;;;22349:42:0;;;1108:51:1;22337:9:0;;22361:10;;22349:36;;1081:18:1;;22349:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22417:12:0;;;;;;:6;:12;;;;;;22337:54;;-1:-1:-1;22413:16:0;;:35;;22447:1;22413:35;;;-1:-1:-1;;;;;;;22432:12:0;;;;;:6;:12;;;;;;;22176:280::o;17062:361::-;17165:10;;-1:-1:-1;;;;;17165:10:0;17151;:24;17143:43;;;;-1:-1:-1;;;17143:43:0;;14916:2:1;17143:43:0;;;14898:21:1;14955:1;14935:18;;;14928:29;-1:-1:-1;;;14973:18:1;;;14966:36;15019:18;;17143:43:0;14714:329:1;17143:43:0;17230:2;;17197:48;;-1:-1:-1;;;;;17230:2:0;17235:4;17241:3;17197:25;:48::i;:::-;-1:-1:-1;;;;;17269:12:0;;17256:10;17269:12;;;:6;:12;;;;;;;;;17305:4;:10;;;;;;;17341:9;;;:25;;17357:9;17362:4;17357:2;:9;:::i;:::-;17341:25;;;17353:1;17341:25;-1:-1:-1;;;;;17326:12:0;;;;;;:6;:12;;;;;:40;17390:9;;;:25;;17406:9;17411:4;17406:2;:9;:::i;:::-;17390:25;;;17402:1;17390:25;-1:-1:-1;;;;;17377:10:0;;;;;;;:4;:10;;;;;:38;;;;-1:-1:-1;;;;17062:361:0:o;15484:280::-;14622:6;;-1:-1:-1;;;;;14622:6:0;:20;14619:86;;14677:6;;-1:-1:-1;;;;;14677:6:0;14663:10;:20;14655:38;;;;-1:-1:-1;;;14655:38:0;;;;;;;:::i;:::-;14718:6;;-1:-1:-1;;;;;14718:6:0;14715:96;;14766:11;:9;:11::i;:::-;14759:39;;-1:-1:-1;;;14759:39:0;;14787:10;14759:39;;;1108:51:1;-1:-1:-1;;;;;14759:27:0;;;;;;;1081:18:1;;14759:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14751:48;;;;;;-1:-1:-1;;;;;15573:22:0;::::1;15565:47;;;::::0;-1:-1:-1;;;15565:47:0;;20126:2:1;15565:47:0::1;::::0;::::1;20108:21:1::0;20165:2;20145:18;;;20138:30;-1:-1:-1;;;20184:18:1;;;20177:42;20236:18;;15565:47:0::1;19924:336:1::0;15565:47:0::1;15649:6;::::0;15628:38:::1;::::0;-1:-1:-1;;;;;15628:38:0;;::::1;::::0;15649:6:::1;::::0;15628:38:::1;::::0;15649:6:::1;::::0;15628:38:::1;15677:6;:17:::0;;-1:-1:-1;;;;;;15677:17:0::1;-1:-1:-1::0;;;;;15677:17:0;;::::1;::::0;;::::1;::::0;;;15717:10:::1;::::0;15705:51:::1;::::0;-1:-1:-1;;;15705:51:0;;::::1;::::0;::::1;1108::1::0;;;;15717:10:0;;::::1;::::0;15705:41:::1;::::0;1081:18:1;;15705:51:0::1;962:203:1::0;28621:851:0;28736:24;;;;;28885:6;28872:10;28923:13;28935:1;28923:13;;:::i;:::-;;;28970:2;-1:-1:-1;;;;;28956:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28956:17:0;;28947:26;;29008:2;-1:-1:-1;;;;;28994:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28994:17:0;;28984:27;;29043:2;-1:-1:-1;;;;;29030:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29022:24;;29080:2;-1:-1:-1;;;;;29067:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29057:26;;29118:2;-1:-1:-1;;;;;29106:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29106:15:0;-1:-1:-1;29094:27:0;-1:-1:-1;29149:8:0;29132:333;29163:13;29168:8;29163:2;:13;:::i;:::-;29159:1;:17;29132:333;;;29203:18;29219:1;29203:15;:18::i;:::-;29198:23;;29248:2;29236:6;29243:1;29236:9;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;29236:14:0;;;-1:-1:-1;;;;;29236:14:0;;;;;29278:34;29303:4;29309:2;29278:24;:34::i;:::-;29265:7;29273:1;29265:10;;;;;;;;:::i;:::-;;;;;;:47;;;;;29345:2;-1:-1:-1;;;;;29338:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29338:17:0;;;;;;;;;;;;:::i;:::-;29327:5;29333:1;29327:8;;;;;;;;:::i;:::-;;;;;;:28;;;;29390:2;-1:-1:-1;;;;;29383:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29383:19:0;;;;;;;;;;;;:::i;:::-;29370:7;29378:1;29370:10;;;;;;;;:::i;:::-;;;;;;:32;;;;29439:2;-1:-1:-1;;;;;29432:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29417:9;29427:1;29417:12;;;;;;;;:::i;:::-;:36;;;;:12;;;;;;;;;;;:36;29178:3;;29132:333;;;;28861:611;;28621:851;;;;;;;;;:::o;23973:427::-;24097:22;:20;:22::i;:::-;-1:-1:-1;;;;;24083:36:0;:10;-1:-1:-1;;;;;24083:36:0;;24080:95;;14476:6;;-1:-1:-1;;;;;14476:6:0;24139:10;:21;24131:36;;;;-1:-1:-1;;;24131:36:0;;20467:2:1;24131:36:0;;;20449:21:1;20506:1;20486:18;;;20479:29;-1:-1:-1;;;20524:18:1;;;20517:32;20566:18;;24131:36:0;20265:325:1;24131:36:0;24203:22;:20;:22::i;:::-;24189:54;;-1:-1:-1;;;24189:54:0;;-1:-1:-1;;;;;1126:32:1;;;24189:54:0;;;1108:51:1;24189:46:0;;;;;;;1081:18:1;;24189:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24185:139;;24269:22;:20;:22::i;:::-;24255:57;;-1:-1:-1;;;24255:57:0;;-1:-1:-1;;;;;1126:32:1;;;24255:57:0;;;1108:51:1;24255:49:0;;;;;;;1081:18:1;;24255:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24185:139;24346:10;;24334:58;;-1:-1:-1;;;24334:58:0;;-1:-1:-1;;;;;24346:10:0;;;;24334:38;;:58;;24373:6;;24381:10;;24334:58;;;:::i;25619:143::-;25720:10;;25708:46;;-1:-1:-1;;;25708:46:0;;-1:-1:-1;;;;;1126:32:1;;;25708:46:0;;;1108:51:1;25681:7:0;;25720:10;;25708:38;;1081:18:1;;25708:46:0;962:203:1;10348:211:0;10465:86;10485:5;10515:23;;;10540:2;10544:5;10492:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10492:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10492:58:0;-1:-1:-1;;;;;;10492:58:0;;;;;;;;;;10465:19;:86::i;10567:248::-;10738:68;;-1:-1:-1;;;;;14189:15:1;;;10738:68:0;;;14171:34:1;14241:15;;14221:18;;;14214:43;14273:18;;;14266:34;;;10711:96:0;;10731:5;;-1:-1:-1;;;10761:27:0;14106:18:1;;10738:68:0;13931:375:1;11592:716:0;12016:23;12042:69;12070:4;12042:69;;;;;;;;;;;;;;;;;12050:5;-1:-1:-1;;;;;12042:27:0;;;:69;;;;;:::i;:::-;12126:17;;12016:95;;-1:-1:-1;12126:21:0;12122:179;;12223:10;12212:30;;;;;;;;;;;;:::i;:::-;12204:85;;;;-1:-1:-1;;;12204:85:0;;20797:2:1;12204:85:0;;;20779:21:1;20836:2;20816:18;;;20809:30;20875:34;20855:18;;;20848:62;-1:-1:-1;;;20926:18:1;;;20919:40;20976:19;;12204:85:0;20595:406:1;7366:229:0;7503:12;7535:52;7557:6;7565:4;7571:1;7574:12;7503;8139;8153:23;8180:6;-1:-1:-1;;;;;8180:11:0;8199:5;8206:4;8180:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8138:73;;;;8229:69;8256:6;8264:7;8273:10;8285:12;8229:26;:69::i;:::-;8222:76;7851:455;-1:-1:-1;;;;;;;7851:455:0:o;8604:644::-;8789:12;8818:7;8814:427;;;8846:10;:17;8867:1;8846:22;8842:290;;-1:-1:-1;;;;;7105:19:0;;;9056:60;;;;-1:-1:-1;;;9056:60:0;;21907:2:1;9056:60:0;;;21889:21:1;21946:2;21926:18;;;21919:30;21985:31;21965:18;;;21958:59;22034:18;;9056:60:0;21705:353:1;9056:60:0;-1:-1:-1;9153:10:0;9146:17;;8814:427;9196:33;9204:10;9216:12;9417:17;;:21;9413:388;;9649:10;9643:17;9706:15;9693:10;9689:2;9685:19;9678:44;9413:388;9776:12;9769:20;;-1:-1:-1;;;9769:20:0;;;;;;;;:::i;206:250:1:-;291:1;301:113;315:6;312:1;309:13;301:113;;;391:11;;;385:18;372:11;;;365:39;337:2;330:10;301:113;;;-1:-1:-1;;448:1:1;430:16;;423:27;206:250::o;461:271::-;503:3;541:5;535:12;568:6;563:3;556:19;584:76;653:6;646:4;641:3;637:14;630:4;623:5;619:16;584:76;:::i;:::-;714:2;693:15;-1:-1:-1;;689:29:1;680:39;;;;721:4;676:50;;461:271;-1:-1:-1;;461:271:1:o;737:220::-;886:2;875:9;868:21;849:4;906:45;947:2;936:9;932:18;924:6;906:45;:::i;1170:131::-;-1:-1:-1;;;;;1245:31:1;;1235:42;;1225:70;;1291:1;1288;1281:12;1225:70;1170:131;:::o;1306:456::-;1383:6;1391;1399;1452:2;1440:9;1431:7;1427:23;1423:32;1420:52;;;1468:1;1465;1458:12;1420:52;1507:9;1494:23;1526:31;1551:5;1526:31;:::i;:::-;1576:5;-1:-1:-1;1633:2:1;1618:18;;1605:32;1646:33;1605:32;1646:33;:::i;:::-;1306:456;;1698:7;;-1:-1:-1;;;1752:2:1;1737:18;;;;1724:32;;1306:456::o;1949:180::-;2008:6;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;2100:23:1;;1949:180;-1:-1:-1;1949:180:1:o;2134:247::-;2193:6;2246:2;2234:9;2225:7;2221:23;2217:32;2214:52;;;2262:1;2259;2252:12;2214:52;2301:9;2288:23;2320:31;2345:5;2320:31;:::i;2575:388::-;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:33;2857:32;2898:33;:::i;:::-;2950:7;2940:17;;;2575:388;;;;;:::o;2968:118::-;3054:5;3047:13;3040:21;3033:5;3030:32;3020:60;;3076:1;3073;3066:12;3091:241;3147:6;3200:2;3188:9;3179:7;3175:23;3171:32;3168:52;;;3216:1;3213;3206:12;3168:52;3255:9;3242:23;3274:28;3296:5;3274:28;:::i;3337:465::-;3390:3;3428:5;3422:12;3455:6;3450:3;3443:19;3481:4;3510;3505:3;3501:14;3494:21;;3549:4;3542:5;3538:16;3572:1;3582:195;3596:6;3593:1;3590:13;3582:195;;;3661:13;;-1:-1:-1;;;;;3657:39:1;3645:52;;3717:12;;;;3752:15;;;;3693:1;3611:9;3582:195;;;-1:-1:-1;3793:3:1;;3337:465;-1:-1:-1;;;;;3337:465:1:o;3807:598::-;3859:3;3890;3922:5;3916:12;3949:6;3944:3;3937:19;3975:4;4004;3999:3;3995:14;3988:21;;4062:4;4052:6;4049:1;4045:14;4038:5;4034:26;4030:37;4101:4;4094:5;4090:16;4124:1;4134:245;4148:6;4145:1;4142:13;4134:245;;;4235:2;4231:7;4223:5;4217:4;4213:16;4209:30;4204:3;4197:43;4261:38;4294:4;4285:6;4279:13;4261:38;:::i;:::-;4357:12;;;;4253:46;-1:-1:-1;4322:15:1;;;;4170:1;4163:9;4134:245;;;-1:-1:-1;4395:4:1;;3807:598;-1:-1:-1;;;;;;;3807:598:1:o;4410:707::-;4785:2;4774:9;4767:21;4748:4;4811:56;4863:2;4852:9;4848:18;4840:6;4811:56;:::i;:::-;4915:9;4907:6;4903:22;4898:2;4887:9;4883:18;4876:50;4949:43;4985:6;4977;4949:43;:::i;:::-;4935:57;;5040:9;5032:6;5028:22;5023:2;5012:9;5008:18;5001:50;5068:43;5104:6;5096;5068:43;:::i;:::-;5060:51;4410:707;-1:-1:-1;;;;;;4410:707:1:o;6170:315::-;6238:6;6246;6299:2;6287:9;6278:7;6274:23;6270:32;6267:52;;;6315:1;6312;6305:12;6267:52;6354:9;6341:23;6373:31;6398:5;6373:31;:::i;:::-;6423:5;6475:2;6460:18;;;;6447:32;;-1:-1:-1;;;6170:315:1:o;6814:450::-;6888:6;6896;6904;6957:2;6945:9;6936:7;6932:23;6928:32;6925:52;;;6973:1;6970;6963:12;6925:52;7012:9;6999:23;7031:31;7056:5;7031:31;:::i;:::-;7081:5;-1:-1:-1;7133:2:1;7118:18;;7105:32;;-1:-1:-1;7189:2:1;7174:18;;7161:32;7202:30;7161:32;7202:30;:::i;:::-;7251:7;7241:17;;;6814:450;;;;;:::o;7269:382::-;7334:6;7342;7395:2;7383:9;7374:7;7370:23;7366:32;7363:52;;;7411:1;7408;7401:12;7363:52;7450:9;7437:23;7469:31;7494:5;7469:31;:::i;:::-;7519:5;-1:-1:-1;7576:2:1;7561:18;;7548:32;7589:30;7548:32;7589:30;:::i;7656:1819::-;8194:3;8207:22;;;8278:13;;8179:19;;;8300:22;;;8146:4;;8376;;8353:3;8338:19;;;8403:15;;;8146:4;8446:169;8460:6;8457:1;8454:13;8446:169;;;8521:13;;8509:26;;8555:12;;;;8590:15;;;;8482:1;8475:9;8446:169;;;8450:3;;;8660:9;8655:3;8651:19;8646:2;8635:9;8631:18;8624:47;8694:41;8731:3;8723:6;8694:41;:::i;:::-;8680:55;;8783:9;8775:6;8771:22;8766:2;8755:9;8751:18;8744:50;8817:43;8853:6;8845;8817:43;:::i;:::-;8803:57;;8908:9;8900:6;8896:22;8891:2;8880:9;8876:18;8869:50;8942:43;8978:6;8970;8942:43;:::i;:::-;9022:22;;;9016:3;9001:19;;8994:51;9098:13;;9120:24;;;9202:15;;;;-1:-1:-1;9162:15:1;;;;9237:1;9247:200;9263:8;9258:3;9255:17;9247:200;;;9336:15;;9353:4;9332:26;9318:41;;9420:17;;;;9381:14;;;;9291:1;9282:11;9247:200;;;-1:-1:-1;9464:5:1;;7656:1819;-1:-1:-1;;;;;;;;;;7656:1819:1:o;9480:383::-;9557:6;9565;9573;9626:2;9614:9;9605:7;9601:23;9597:32;9594:52;;;9642:1;9639;9632:12;9594:52;9681:9;9668:23;9700:31;9725:5;9700:31;:::i;:::-;9750:5;9802:2;9787:18;;9774:32;;-1:-1:-1;9853:2:1;9838:18;;;9825:32;;9480:383;-1:-1:-1;;;9480:383:1:o;9868:245::-;9935:6;9988:2;9976:9;9967:7;9963:23;9959:32;9956:52;;;10004:1;10001;9994:12;9956:52;10036:9;10030:16;10055:28;10077:5;10055:28;:::i;10118:380::-;10197:1;10193:12;;;;10240;;;10261:61;;10315:4;10307:6;10303:17;10293:27;;10261:61;10368:2;10360:6;10357:14;10337:18;10334:38;10331:161;;10414:10;10409:3;10405:20;10402:1;10395:31;10449:4;10446:1;10439:15;10477:4;10474:1;10467:15;10331:161;;10118:380;;;:::o;10503:251::-;10573:6;10626:2;10614:9;10605:7;10601:23;10597:32;10594:52;;;10642:1;10639;10632:12;10594:52;10674:9;10668:16;10693:31;10718:5;10693:31;:::i;10759:328::-;10961:2;10943:21;;;11000:1;10980:18;;;10973:29;-1:-1:-1;;;11033:2:1;11018:18;;11011:35;11078:2;11063:18;;10759:328::o;11794:274::-;-1:-1:-1;;;;;11986:32:1;;;;11968:51;;12050:2;12035:18;;12028:34;11956:2;11941:18;;11794:274::o;12073:184::-;12143:6;12196:2;12184:9;12175:7;12171:23;12167:32;12164:52;;;12212:1;12209;12202:12;12164:52;-1:-1:-1;12235:16:1;;12073:184;-1:-1:-1;12073:184:1:o;12592:355::-;12794:2;12776:21;;;12833:2;12813:18;;;12806:30;12872:33;12867:2;12852:18;;12845:61;12938:2;12923:18;;12592:355::o;12952:329::-;13154:2;13136:21;;;13193:1;13173:18;;;13166:29;-1:-1:-1;;;13226:2:1;13211:18;;13204:36;13272:2;13257:18;;12952:329::o;13286:331::-;13488:2;13470:21;;;13527:1;13507:18;;;13500:29;-1:-1:-1;;;13560:2:1;13545:18;;13538:38;13608:2;13593:18;;13286:331::o;14311:398::-;14513:2;14495:21;;;14552:2;14532:18;;;14525:30;14591:34;14586:2;14571:18;;14564:62;-1:-1:-1;;;14657:2:1;14642:18;;14635:32;14699:3;14684:19;;14311:398::o;15048:127::-;15109:10;15104:3;15100:20;15097:1;15090:31;15140:4;15137:1;15130:15;15164:4;15161:1;15154:15;15180:127;15241:10;15236:3;15232:20;15229:1;15222:31;15272:4;15269:1;15262:15;15296:4;15293:1;15286:15;15312:897;15392:6;15445:2;15433:9;15424:7;15420:23;15416:32;15413:52;;;15461:1;15458;15451:12;15413:52;15494:9;15488:16;-1:-1:-1;;;;;15564:2:1;15556:6;15553:14;15550:34;;;15580:1;15577;15570:12;15550:34;15618:6;15607:9;15603:22;15593:32;;15663:7;15656:4;15652:2;15648:13;15644:27;15634:55;;15685:1;15682;15675:12;15634:55;15714:2;15708:9;15736:2;15732;15729:10;15726:36;;;15742:18;;:::i;:::-;15817:2;15811:9;15785:2;15871:13;;-1:-1:-1;;15867:22:1;;;15891:2;15863:31;15859:40;15847:53;;;15915:18;;;15935:22;;;15912:46;15909:72;;;15961:18;;:::i;:::-;16001:10;15997:2;15990:22;16036:2;16028:6;16021:18;16076:7;16071:2;16066;16062;16058:11;16054:20;16051:33;16048:53;;;16097:1;16094;16087:12;16048:53;16110:68;16175:2;16170;16162:6;16158:15;16153:2;16149;16145:11;16110:68;:::i;16214:558::-;16314:6;16322;16330;16338;16346;16399:3;16387:9;16378:7;16374:23;16370:33;16367:53;;;16416:1;16413;16406:12;16367:53;16445:9;16439:16;16429:26;;16495:2;16484:9;16480:18;16474:25;16464:35;;16539:2;16528:9;16524:18;16518:25;16508:35;;16586:2;16575:9;16571:18;16565:25;16599:28;16621:5;16599:28;:::i;:::-;16696:3;16681:19;;16675:26;16646:5;;-1:-1:-1;16710:30:1;16675:26;16710:30;:::i;:::-;16759:7;16749:17;;;16214:558;;;;;;;;:::o;16777:620::-;16886:6;16894;16902;16910;16918;16926;16979:3;16967:9;16958:7;16954:23;16950:33;16947:53;;;16996:1;16993;16986:12;16947:53;17028:9;17022:16;17047:28;17069:5;17047:28;:::i;:::-;17144:2;17129:18;;17123:25;17094:5;;-1:-1:-1;17157:30:1;17123:25;17157:30;:::i;:::-;17253:2;17238:18;;17232:25;17297:2;17282:18;;17276:25;17341:3;17326:19;;17320:26;17386:3;17371:19;;;17365:26;16777:620;;17206:7;;-1:-1:-1;17232:25:1;;17276;;17320:26;;-1:-1:-1;17365:26:1;-1:-1:-1;16777:620:1;-1:-1:-1;;;16777:620:1:o;17402:306::-;17490:6;17498;17506;17559:2;17547:9;17538:7;17534:23;17530:32;17527:52;;;17575:1;17572;17565:12;17527:52;17604:9;17598:16;17588:26;;17654:2;17643:9;17639:18;17633:25;17623:35;;17698:2;17687:9;17683:18;17677:25;17667:35;;17402:306;;;;;:::o;18043:127::-;18104:10;18099:3;18095:20;18092:1;18085:31;18135:4;18132:1;18125:15;18159:4;18156:1;18149:15;18175:128;18242:9;;;18263:11;;;18260:37;;;18277:18;;:::i;18308:125::-;18373:9;;;18394:10;;;18391:36;;;18407:18;;:::i;18727:245::-;18806:6;18814;18867:2;18855:9;18846:7;18842:23;18838:32;18835:52;;;18883:1;18880;18873:12;18835:52;-1:-1:-1;;18906:16:1;;18962:2;18947:18;;;18941:25;18906:16;;18941:25;;-1:-1:-1;18727:245:1:o;19314:273::-;19382:6;19435:2;19423:9;19414:7;19410:23;19406:32;19403:52;;;19451:1;19448;19441:12;19403:52;19483:9;19477:16;19533:4;19526:5;19522:16;19515:5;19512:27;19502:55;;19553:1;19550;19543:12;21413:287;21542:3;21580:6;21574:13;21596:66;21655:6;21650:3;21643:4;21635:6;21631:17;21596:66;:::i;:::-;21678:16;;;;;21413:287;-1:-1:-1;;21413:287:1:o

Swarm Source

ipfs://ea23e88dcead24c6956f1cfd82af22a7bc9bf7ed7c69d7c9229d3abe6bfa8e78
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.