ETH Price: $2,630.21 (+7.47%)
Gas: 2 Gwei

Token

Apollo (APOLLO)
 

Overview

Max Total Supply

88,564,706.921903468 APOLLO

Holders

319

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
40,660.015605808 APOLLO

Value
$0.00
0xd0fecdd0f78514056429647a36a9eeb01ee651ce
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:
Apollo

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @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 {
        _transferOwnership(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), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Pair {
    function token0() external view returns (address);

    function token1() external view returns (address);
}

interface ISpiralChef {
    function userBurntForNum(uint256 burnNum, address user) external view returns (uint256);
    function userAmount(uint256 _pid, address user) external view returns (uint256);
}

contract Apollo is Context, IERC20, Ownable {

    struct UserInfo {
        uint16 rateNum;
        uint64 burnt;
        uint64 balances;
        uint104 lastRate;
    }

    struct TransferInfo {
        bool swapEnabled;
        bool swapping;
        uint16 buyTotal;
        uint16 buyLP;
        uint16 buyRew;
        uint16 buyBurn;
        uint16 sellTotal;
        uint16 sellLP;
        uint16 sellRew;
        uint16 sellBurn;
        uint16 timePeriod;
        uint32 preTradingUntil;
        uint64 swapTokensAtAmount;
    }

    struct SupplyInfo {
        bool actBurn;
        uint8 burnRef;
        uint16 ampRate;
        uint16 rateNum; 
        uint88 rSupply;
        uint104 currentRate;
    }

    struct MainBalances{
        uint64 thisBalance;
        uint64 deadBalance;
        uint64 pairBalance;
    }

    string private _name = 'Apollo';
    string private _symbol = 'APOLLO';
    uint8 private _decimals = 9;

    uint104 private constant MAX_UINT104 = ~uint104(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 1 * 1e8 * 1e9;
    uint256 public constant maxFee = 200;
    TransferInfo public transferInfoStor;
    SupplyInfo public currentSupply;
    MainBalances public mainBalances;

    mapping(uint256 => SupplyInfo) public supplyInfo;
    mapping(address => UserInfo) public userInfo;
    mapping(address => bool) public rewardsExcluded;
    mapping(address => bool) public feesExcluded;
    mapping (address => mapping (address => uint256)) private _allowances;

    ISpiralChef public immutable spiralChef;
    IUniswapV2Router02 public constant mainRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public fundAddress;
    address public immutable mainPair;
    address public immutable pairedToken;
    address public constant deadAddress = address(0xdead);
    bool public showDead = true;    

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromRewards(address indexed account, bool isExcluded);
    event Burnt(address indexed account, uint256 amount);

    constructor (address _fundAddress, address _pairedToken, ISpiralChef _spiralChef) {
        userInfo[_msgSender()] = UserInfo(0, 0, uint64(INITIAL_FRAGMENTS_SUPPLY), uint104(MAX_UINT104));
        currentSupply = SupplyInfo(false,0,20,0,uint64(INITIAL_FRAGMENTS_SUPPLY), MAX_UINT104);
        mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(address(this), _pairedToken);
        transferInfoStor = TransferInfo(true, false, 70,10,20,0,70,10,20,0,0,~uint32(0),1 * 1e2 * 1e9);
        pairedToken = _pairedToken;
        fundAddress = _fundAddress;
        spiralChef = _spiralChef;
        rewardsExcluded[mainPair] = true;
        rewardsExcluded[address(this)] = true;
        rewardsExcluded[deadAddress] = true;
        feesExcluded[deadAddress] = true;
        _approve(address(this), address(mainRouter), ~uint(256));

        emit Transfer(address(0), _msgSender(), INITIAL_FRAGMENTS_SUPPLY);
    }

    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 totalSupply() public view override returns (uint256) {
        return INITIAL_FRAGMENTS_SUPPLY - mainBalances.deadBalance;
    }

    function deadSupply() public view returns (uint256) {
        return mainBalances.deadBalance;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == address(this)) return mainBalances.thisBalance;
        if (account == mainPair) return mainBalances.pairBalance;
        if (account == deadAddress && showDead) return mainBalances.deadBalance;
        if (rewardsExcluded[account]) return userInfo[account].balances;
        UserInfo memory accountInfo = userInfo[account];
        if (accountInfo.rateNum == currentSupply.rateNum) {
            return _reflectionBalance(accountInfo, currentSupply);
        }
        return _reflectionBalance(accountInfo, supplyInfo[accountInfo.rateNum]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(_allowances[sender][_msgSender()]-amount >= 0, "ERC20: transfer amount exceeds allowance");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()]-amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function rewardsEarned(address account) external view returns (uint256) {
        require(!rewardsExcluded[account]);
        UserInfo memory accountInfo = userInfo[account];
        if (accountInfo.rateNum == currentSupply.rateNum) {
            return _reflectionBalance(accountInfo, currentSupply) - accountInfo.balances;
        }
        return _reflectionBalance(accountInfo, supplyInfo[accountInfo.rateNum]) - accountInfo.balances;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        transferInfoStor.swapTokensAtAmount = uint64(newAmount);
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        transferInfoStor.swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner {
        feesExcluded[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeFromRewards(address account, bool excluded) public onlyOwner {
        require(account != address(this) && account != deadAddress && account != mainPair);
        UserInfo memory accountInfo = userInfo[account];
        SupplyInfo memory supply = currentSupply;
        if (!rewardsExcluded[account] && excluded) {
            if (supply.rateNum == accountInfo.rateNum) {   
                accountInfo.balances = uint64(_reflectionBalance(accountInfo, supply));
                supply.rSupply -= uint88(_getUserBurnt(accountInfo)*supply.ampRate+accountInfo.balances);
                currentSupply = supply;
            }
            else {
                accountInfo.balances = uint64(_reflectionBalance(accountInfo, supplyInfo[accountInfo.rateNum]));
            }
            rewardsExcluded[account] = true;
        }
        else if (rewardsExcluded[account] && !excluded) {
            accountInfo.lastRate = supply.currentRate;
            accountInfo.rateNum = supply.rateNum;
            supply.rSupply += uint88(_getUserBurnt(accountInfo)*supply.ampRate+accountInfo.balances);
            rewardsExcluded[account] = false;
            currentSupply = supply;
        }
        userInfo[account] = accountInfo;
        emit ExcludeFromRewards(account, excluded);
    }

    function updateFundAddress(address _fundAddress) external onlyOwner {
        fundAddress = _fundAddress;
    }

    function setPreTradingUntil(uint256 _preTradingUntil) external onlyOwner {
        transferInfoStor.preTradingUntil = uint32(_preTradingUntil);
    }

    function setTimePeriod(uint256 _timePeriod) external onlyOwner {
        transferInfoStor.timePeriod = uint16(_timePeriod);
    }

    function updaterateNums(address[] memory addr) external onlyOwner {
        uint256 length = addr.length;
        for (uint256 i = 0; i < length; i++) {
            _updateUser(addr[i]);
        }
    }

    function updateBurnRef(uint256 _burnRef, bool _actBurn) external onlyOwner {
        require (_burnRef < 100);
        currentSupply.burnRef = uint8(_burnRef);
        currentSupply.actBurn = _actBurn;
    }

    function updateAmpRate(uint256 _ampRate) external onlyOwner {
        require(_ampRate < 1000);
        SupplyInfo memory _currentSupply = currentSupply;
        require(_currentSupply.rateNum + 1 != ~uint16(0));
        supplyInfo[_currentSupply.rateNum] = _currentSupply;
        currentSupply = SupplyInfo(_currentSupply.actBurn, _currentSupply.burnRef, uint16(_ampRate), uint16(_currentSupply.rateNum + 1), 0, MAX_UINT104);
    }

    function updateTax(uint256 _buyLP, uint256 _buyRew, uint256 _buyBurn, uint256 _buyTotal, uint256 _sellLP, uint256 _sellRew, uint256 _sellBurn, uint256 _sellTotal) external onlyOwner {
        require (_buyTotal <= maxFee);
        require (_sellTotal <= maxFee);
        require (_buyLP + _buyRew + _buyBurn <= _buyTotal);
        require (_sellLP + _sellRew + _sellBurn <= _sellTotal);
        transferInfoStor.buyLP = uint16(_buyLP);
        transferInfoStor.buyRew = uint16(_buyRew);
        transferInfoStor.buyBurn = uint16(_buyBurn);
        transferInfoStor.buyTotal = uint16(_buyTotal);
        transferInfoStor.sellLP = uint16(_sellLP);
        transferInfoStor.sellRew = uint16(_sellRew);
        transferInfoStor.sellBurn = uint16(_sellBurn);
        transferInfoStor.sellTotal = uint16(_sellTotal);
        _approve(address(this), address(mainRouter), ~uint(256));
    }

    function setShowDead(bool _showDead) external onlyOwner {
        showDead = _showDead;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal {
        if (from == to) {
            _updateUser(from);
            return;
        }
        require(amount != 0);
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 tokensForReflection;
        if (from != owner() && to != owner()) {
            uint256 contractBalance = mainBalances.thisBalance;
            TransferInfo memory transferInfo = transferInfoStor;
            bool canSwap = contractBalance > transferInfo.swapTokensAtAmount;
            
            if (
                mainPair == to &&
                !feesExcluded[from] &&
                !feesExcluded[to] &&
                canSwap &&
                transferInfoStor.swapEnabled &&
                !transferInfoStor.swapping
            ) {
                transferInfoStor.swapping = true;
                
                if (contractBalance > transferInfo.swapTokensAtAmount * 20) {
                    contractBalance = transferInfo.swapTokensAtAmount * 20;
                }

                swapBack(contractBalance);

                transferInfoStor.swapping = false;
            }

            bool takeFee = !transferInfoStor.swapping;
            if (feesExcluded[from] || feesExcluded[to]) {
                takeFee = false;
            }

            if (takeFee) {
                (uint256 fees, uint256 tokensForLiquidity, uint256 tokensForBurn) = (0,0,0);

                    // on sell
                    if (to == mainPair && transferInfo.sellTotal != 0) {
                        fees = amount*transferInfo.sellTotal/1000;
                        tokensForReflection = amount*transferInfo.sellRew/1000;
                        tokensForLiquidity = amount*transferInfo.sellLP/1000;
                        tokensForBurn = amount*transferInfo.sellBurn/1000;
                        if (fees > 0) {
                            _tokenTransfer(from, address(this), fees);
                            if (tokensForLiquidity > 0) {
                                _tokenTransfer(address(this), to, tokensForLiquidity);
                            }
                            if (tokensForBurn > 0) {
                                _tokenTransfer(address(this), deadAddress, tokensForBurn);
                            }
                        }
                    }
                    // on buy
                    else if (from == mainPair && transferInfo.buyTotal != 0) {
                        fees = amount*transferInfo.buyTotal/1000;
                        tokensForReflection = amount*transferInfo.buyRew/1000;
                        tokensForLiquidity = amount*transferInfo.buyLP/1000;
                        tokensForBurn = amount*transferInfo.buyBurn/1000;
                        if (fees > 0) {
                            _tokenTransfer(from, address(this), fees - tokensForLiquidity);
                            if (tokensForBurn > 0) {
                                _tokenTransfer(address(this), deadAddress, tokensForBurn);
                            }
                        }
                    }
                    amount -= fees;

                    if (block.timestamp < transferInfo.preTradingUntil + 7200 && mainPair != to) {
                        uint256 staked = spiralChef.userAmount(0, to)*10;
                        uint256 burnt = spiralChef.userBurntForNum(0, to);
                        if (block.timestamp >= transferInfo.preTradingUntil && burnt >= 1000) {
                            staked = staked*5;
                        }
                        require(staked >= (balanceOf(to) + amount));
                        require(block.timestamp >= transferInfo.preTradingUntil - burnt*transferInfo.timePeriod);
                    }
                }
        }
        _tokenTransfer(from, to, amount);

        if (tokensForReflection > 0) {
            (currentSupply, tokensForReflection) = _reflect(currentSupply, tokensForReflection);
            mainBalances.thisBalance -= uint64(tokensForReflection);
        }
    }

    function _updateUser(address user) internal {
        UserInfo memory userAcc = userInfo[user];
        SupplyInfo memory supply = currentSupply;
        if (rewardsExcluded[user] || userAcc.rateNum == supply.rateNum) {
            return;
        }
        userAcc.balances = uint64(_reflectionBalance(userAcc, supplyInfo[userAcc.rateNum]));
        supply.rSupply += uint88(_getUserBurnt(userAcc)*supply.ampRate + userAcc.balances); 
        userAcc.rateNum = supply.rateNum;
        userAcc.lastRate = supply.currentRate;
        userInfo[user] = userAcc;
        currentSupply = supply;
    }

    function _tokenTransfer(address from, address to, uint256 amount) internal {
        emit Transfer(from, to, amount);

        if (rewardsExcluded[from] && !rewardsExcluded[to]) {
            _transferFromExcluded(from, to, amount);
        } else if (!rewardsExcluded[from] && rewardsExcluded[to]) {
            if (to == deadAddress) {
                _transferToDead(from, amount);
            } else {
                _transferToExcluded(from, to, amount);}
        } else if (!rewardsExcluded[from] && !rewardsExcluded[to]) {
            _transferStandard(from, to, amount);
        } else if (rewardsExcluded[from] && rewardsExcluded[to]) {
            _transferBothExcluded(from, to, amount);
        }
    }

    function _transferToDead(address from, uint256 amount) internal {
        UserInfo memory fromAcc = userInfo[from];
        SupplyInfo memory supply = currentSupply;
        uint256 deadAmount;
        if (fromAcc.rateNum == supply.rateNum) {
            supply.rSupply -= uint88(_getUserBurnt(fromAcc)*supply.ampRate + amount);
            fromAcc.balances = uint64(_reflectionBalance(fromAcc, supply) - amount);
            supply.rSupply -= fromAcc.balances;
        }
        else {
            fromAcc.balances = uint64(_reflectionBalance(fromAcc, supplyInfo[fromAcc.rateNum]) - amount);
        }
        uint256 brAmount = amount*(supply.burnRef)/100;
        if (supply.actBurn) {
            fromAcc.burnt += uint64(amount - brAmount);
        }
        else {
            fromAcc.burnt += uint64(amount);
        }
        amount -= brAmount;
        deadAmount += amount;
        if (brAmount != 0) {
            (supply, amount) = _reflect(supply, brAmount);
            deadAmount += brAmount - amount; 
        }
        supply.rSupply += uint88(_getUserBurnt(fromAcc)*supply.ampRate + fromAcc.balances);
        fromAcc.lastRate = supply.currentRate;
        fromAcc.rateNum = supply.rateNum;
        userInfo[from] = fromAcc;
        mainBalances.deadBalance += uint64(deadAmount);
        currentSupply = supply; 

        emit Burnt(from, deadAmount);
    }

    function _transferFromExcluded(address from, address to, uint256 amount) internal {
        UserInfo memory toAcc = userInfo[to];
        SupplyInfo memory supply = currentSupply;
        if (from == address(this)) {
            mainBalances.thisBalance -= uint64(amount);
        }
        else if (from == mainPair) {
            mainBalances.pairBalance -= uint64(amount);
        } 
        else {
            userInfo[from].balances -= uint64(amount);
        } 
        uint256 oldToBurnt; 
        uint256 newToBurnt;
        if (toAcc.rateNum == supply.rateNum) {
            oldToBurnt = _getUserBurnt(toAcc)*supply.ampRate;
            toAcc.balances = uint64(_reflectionBalance(toAcc, supply) + amount);
        }
        else {
            newToBurnt =  _reflectionBalance(toAcc, supplyInfo[toAcc.rateNum]);
            toAcc.balances = uint64(newToBurnt + amount);
        }
        toAcc.lastRate = supply.currentRate; 
        toAcc.rateNum = supply.rateNum;
        newToBurnt += _getUserBurnt(toAcc)*supply.ampRate;
        supply.rSupply = uint88(supply.rSupply + newToBurnt - oldToBurnt + amount);
        userInfo[to] = toAcc;
        currentSupply = supply;
    }

    function _transferToExcluded(address from, address to, uint256 amount) internal {
        UserInfo memory fromAcc = userInfo[from];
        SupplyInfo memory supply = currentSupply;
        if (to == address(this)) {
            mainBalances.thisBalance += uint64(amount);
        } 
        else if (to == mainPair) {
            mainBalances.pairBalance += uint64(amount);
        }
        else {
            userInfo[to].balances += uint64(amount);
        }
        uint256 oldFromBurnt; 
        uint256 newFromBurnt;
        if (fromAcc.rateNum == supply.rateNum) {
            oldFromBurnt = _getUserBurnt(fromAcc)*supply.ampRate;
            fromAcc.balances = uint64(_reflectionBalance(fromAcc, supply) - amount);
        }
        else {
            newFromBurnt = _reflectionBalance(fromAcc, supplyInfo[fromAcc.rateNum]);
            fromAcc.balances = uint64(newFromBurnt - amount);
        }
        fromAcc.lastRate = supply.currentRate;
        fromAcc.rateNum = supply.rateNum;
        newFromBurnt += _getUserBurnt(fromAcc)*supply.ampRate;
        supply.rSupply = uint88(supply.rSupply + newFromBurnt - oldFromBurnt - amount);
        userInfo[from] = fromAcc;
        currentSupply = supply;
    }

    function _transferStandard(address from, address to, uint256 amount) internal {
        UserInfo memory fromAcc = userInfo[from];
        UserInfo memory toAcc = userInfo[to];
        SupplyInfo memory supply = currentSupply;
        uint256 oldFromBurnt; 
        uint256 oldToBurnt; 
        uint256 newFromBurnt;
        uint256 newToBurnt;
        if (fromAcc.rateNum == supply.rateNum) {
            oldFromBurnt = _getUserBurnt(fromAcc)*supply.ampRate + amount;
            fromAcc.balances = uint64(_reflectionBalance(fromAcc, supply) - amount);
        }
        else{
            fromAcc.balances = uint64(_reflectionBalance(fromAcc, supplyInfo[fromAcc.rateNum]) - amount);
            newFromBurnt = fromAcc.balances;
        }
        if (toAcc.rateNum == supply.rateNum) {
            oldToBurnt = _getUserBurnt(toAcc)*supply.ampRate;
            toAcc.balances = uint64(_reflectionBalance(toAcc, supply) + amount);
            newToBurnt = amount;
        }
        else {
            toAcc.balances = uint64(_reflectionBalance(toAcc, supplyInfo[toAcc.rateNum]) + amount);
            newToBurnt =  toAcc.balances;
        }
        fromAcc.lastRate = supply.currentRate;
        toAcc.lastRate = supply.currentRate;
        fromAcc.rateNum = supply.rateNum;
        toAcc.rateNum = supply.rateNum;
        newToBurnt += _getUserBurnt(toAcc)*supply.ampRate;
        newFromBurnt += _getUserBurnt(fromAcc)*supply.ampRate;
        supply.rSupply = uint88(supply.rSupply + newFromBurnt + newToBurnt - oldFromBurnt - oldToBurnt);
        userInfo[from] = fromAcc;
        userInfo[to] = toAcc;
        currentSupply = supply;
    }

    function _transferBothExcluded(address from, address to, uint256 amount) internal {
        if (from == address(this)) {
            mainBalances.thisBalance -= uint64(amount);
        }
        else if (from == mainPair) {
            mainBalances.pairBalance -= uint64(amount);
        }
        else if (from == deadAddress) {
            mainBalances.deadBalance -= uint64(amount);
        } 
        else {
            userInfo[from].balances -= uint64(amount);
        } 
        if (to == address(this)) {
            mainBalances.thisBalance += uint64(amount);
        } 
        else if (to == mainPair) {
            mainBalances.pairBalance += uint64(amount);
        }
        else if (to == deadAddress) {
            mainBalances.deadBalance += uint64(amount);
        }
        else {
            userInfo[to].balances += uint64(amount);
        }
    }

    function _getUserBurnt(UserInfo memory accountInfo) private pure returns (uint256) {
        return accountInfo.burnt > accountInfo.balances ? accountInfo.balances : accountInfo.burnt;
    }

    function _reflectionBalance(UserInfo memory accountInfo, SupplyInfo memory supply) private pure returns (uint256) {
        uint256 burnt = _getUserBurnt(accountInfo);
        return accountInfo.balances != 0 ? (burnt*supply.ampRate+accountInfo.balances)*accountInfo.lastRate/supply.currentRate-burnt*supply.ampRate : 0;
    }

    function _reflect(SupplyInfo memory supply, uint256 amount) private pure returns (SupplyInfo memory, uint256) {
        amount = amount < supply.rSupply/100 ? amount : supply.rSupply/100;
        if (amount != 0) {
            uint256 rTotalBalances = uint256(supply.rSupply)*supply.currentRate;
            supply.rSupply += uint88(amount);
            uint104 currentRate = uint104(rTotalBalances/supply.rSupply);
            currentRate = currentRate != 0 ? currentRate : 1;
            supply.currentRate = currentRate;
        }
        return (supply, amount);
    } 

    function swapBack(uint256 tokenAmount) private {
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pairedToken;
        
        mainRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            fundAddress,
            block.timestamp
        );
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_fundAddress","type":"address"},{"internalType":"address","name":"_pairedToken","type":"address"},{"internalType":"contract ISpiralChef","name":"_spiralChef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"bool","name":"actBurn","type":"bool"},{"internalType":"uint8","name":"burnRef","type":"uint8"},{"internalType":"uint16","name":"ampRate","type":"uint16"},{"internalType":"uint16","name":"rateNum","type":"uint16"},{"internalType":"uint88","name":"rSupply","type":"uint88"},{"internalType":"uint104","name":"currentRate","type":"uint104"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feesExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainBalances","outputs":[{"internalType":"uint64","name":"thisBalance","type":"uint64"},{"internalType":"uint64","name":"deadBalance","type":"uint64"},{"internalType":"uint64","name":"pairBalance","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pairedToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewardsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_preTradingUntil","type":"uint256"}],"name":"setPreTradingUntil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_showDead","type":"bool"}],"name":"setShowDead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timePeriod","type":"uint256"}],"name":"setTimePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDead","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spiralChef","outputs":[{"internalType":"contract ISpiralChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyInfo","outputs":[{"internalType":"bool","name":"actBurn","type":"bool"},{"internalType":"uint8","name":"burnRef","type":"uint8"},{"internalType":"uint16","name":"ampRate","type":"uint16"},{"internalType":"uint16","name":"rateNum","type":"uint16"},{"internalType":"uint88","name":"rSupply","type":"uint88"},{"internalType":"uint104","name":"currentRate","type":"uint104"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferInfoStor","outputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"swapping","type":"bool"},{"internalType":"uint16","name":"buyTotal","type":"uint16"},{"internalType":"uint16","name":"buyLP","type":"uint16"},{"internalType":"uint16","name":"buyRew","type":"uint16"},{"internalType":"uint16","name":"buyBurn","type":"uint16"},{"internalType":"uint16","name":"sellTotal","type":"uint16"},{"internalType":"uint16","name":"sellLP","type":"uint16"},{"internalType":"uint16","name":"sellRew","type":"uint16"},{"internalType":"uint16","name":"sellBurn","type":"uint16"},{"internalType":"uint16","name":"timePeriod","type":"uint16"},{"internalType":"uint32","name":"preTradingUntil","type":"uint32"},{"internalType":"uint64","name":"swapTokensAtAmount","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ampRate","type":"uint256"}],"name":"updateAmpRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnRef","type":"uint256"},{"internalType":"bool","name":"_actBurn","type":"bool"}],"name":"updateBurnRef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fundAddress","type":"address"}],"name":"updateFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLP","type":"uint256"},{"internalType":"uint256","name":"_buyRew","type":"uint256"},{"internalType":"uint256","name":"_buyBurn","type":"uint256"},{"internalType":"uint256","name":"_buyTotal","type":"uint256"},{"internalType":"uint256","name":"_sellLP","type":"uint256"},{"internalType":"uint256","name":"_sellRew","type":"uint256"},{"internalType":"uint256","name":"_sellBurn","type":"uint256"},{"internalType":"uint256","name":"_sellTotal","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"updaterateNums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint16","name":"rateNum","type":"uint16"},{"internalType":"uint64","name":"burnt","type":"uint64"},{"internalType":"uint64","name":"balances","type":"uint64"},{"internalType":"uint104","name":"lastRate","type":"uint104"}],"stateMutability":"view","type":"function"}]

610120604052600660e09081526541706f6c6c6f60d01b6101005260019062000029908262000690565b5060408051808201909152600681526541504f4c4c4f60d01b602082015260029062000056908262000690565b506003805460ff19166009179055600c805460ff60a01b1916600160a01b1790553480156200008457600080fd5b506040516200554b3803806200554b833981016040819052620000a79162000775565b620000b2336200046f565b60408051608080820183526000808352602080840182815267016345785d8a00008587018181526001600160681b036060808901828152338852600887528a882099518a549651945191518416600160901b02600160901b600160f81b03196001600160401b039384166a01000000000000000000000216600160501b600160f81b03199390961662010000026001600160501b031990981661ffff9092169190911796909617169290921793909317909655865160c081018852848152808401859052601481890152958601939093529284019190915260a090920152600580547dffffffffffffffffffffffffff000000016345785d8a00000000001400006001600160f01b0319909116179055815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9263c45a01559260048083019391928290030181865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002349190620007c9565b6040516364e329cb60e11b81523060048201526001600160a01b038481166024830152919091169063c9c65396906044016020604051808303816000875af115801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab9190620007c9565b6001600160a01b0390811660a0908152604080516101a0810182526001808252600060208084018290526046848601819052600a6060860181905260146080808801829052878a0186905260c08089019490945260e088018390526101008801919091526101208701859052610140870185905263ffffffff61016088015264174876e800610180909701969096527c174876e800ffffffff000000000014000a004600000014000a004600016004558a8916909152600c80546001600160a01b0319168c8a161790558888169094529451909516855260098452828520805460ff19908116831790915530808752938620805482168317905561dead9095527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805486168217905592527f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80549093169091179091556200042690737a250d5630b4cf539739df2c5dacb4c659f2488d61010019620004bf565b60405167016345785d8a0000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050620007f0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620005275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200058a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200051e565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200061657607f821691505b6020821081036200063757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200068b57600081815260208120601f850160051c81016020861015620006665750805b601f850160051c820191505b81811015620006875782815560010162000672565b5050505b505050565b81516001600160401b03811115620006ac57620006ac620005eb565b620006c481620006bd845462000601565b846200063d565b602080601f831160018114620006fc5760008415620006e35750858301515b600019600386901b1c1916600185901b17855562000687565b600085815260208120601f198616915b828110156200072d578886015182559484019460019091019084016200070c565b50858210156200074c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03811681146200077257600080fd5b50565b6000806000606084860312156200078b57600080fd5b835162000798816200075c565b6020850151909350620007ab816200075c565b6040850151909250620007be816200075c565b809150509250925092565b600060208284031215620007dc57600080fd5b8151620007e9816200075c565b9392505050565b60805160a05160c051614cd06200087b600039600081816108760152612be901526000818161063901528181610b69015281816110da015281816123130152818161247e0152818161258e015281816126cc0152818161308d01528181613a40015281816144bd015261460a0152600081816106fb0152818161272601526127ca0152614cd06000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80638bf2581c11610146578063b1503c15116100c3578063e125f91111610087578063e125f91114610812578063e473b90714610825578063e82bef2914610838578063f2fde38b1461084b578063fb0aec8e1461085e578063ffc94f901461087157600080fd5b8063b1503c1514610785578063c024666814610798578063cf188ad0146107ab578063d257b34f146107c6578063dd62ed3e146107d957600080fd5b806395d89b411161010a57806395d89b41146106c8578063a4c5827c146106d0578063a9059cbb146106e3578063a98a7fc1146106f6578063ab657dee1461071d57600080fd5b80638bf2581c1461065b5780638bfea4391461067e5780638da5cb5b14610691578063924de9b7146106a2578063947e42cb146106b557600080fd5b80632ad4cab7116101d4578063771282f611610198578063771282f61461041b5780637c3d2eba146104b857806382595a051461050b5780638319f3131461062057806385af30c51461063457600080fd5b80632ad4cab7146103b5578063313ce567146103c8578063412738e0146103dd57806370a0823114610400578063715018a61461041357600080fd5b80631959a0021161021b5780631959a002146102c85780631d5459f7146103565780631f8624951461036957806323b872dd1461038157806327c8f8351461039457600080fd5b806301f59d161461025857806306fdde0314610273578063095ea7b314610288578063178d77b6146102ab57806318160ddd146102c0575b600080fd5b61026060c881565b6040519081526020015b60405180910390f35b61027b610898565b60405161026a91906146d9565b61029b61029636600461474a565b61092a565b604051901515815260200161026a565b6102be6102b936600461478a565b610940565b005b6102606109b9565b61031b6102d636600461484e565b60086020526000908152604090205461ffff8116906001600160401b03620100008204811691600160501b8104909116906001600160681b03600160901b9091041684565b6040805161ffff9590951685526001600160401b03938416602086015291909216908301526001600160681b0316606082015260800161026a565b6102be61036436600461484e565b6109e6565b600654600160401b90046001600160401b0316610260565b61029b61038f366004614869565b610a32565b61039d61dead81565b6040516001600160a01b03909116815260200161026a565b6102be6103c33660046148b5565b610b12565b60035460405160ff909116815260200161026a565b61029b6103eb36600461484e565b600a6020526000908152604090205460ff1681565b61026061040e36600461484e565b6110b5565b6102be611345565b60055461046d9060ff8082169161010081049091169061ffff620100008204811691600160201b8104909116906001600160581b03600160301b820416906001600160681b03600160881b9091041686565b60408051961515875260ff909516602087015261ffff93841694860194909452911660608401526001600160581b031660808301526001600160681b031660a082015260c00161026a565b6006546104e1906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b039485168152928416602084015292169181019190915260600161026a565b60045461059e9060ff8082169161010081049091169061ffff620100008204811691600160201b8104821691600160301b8204811691600160401b8104821691600160501b8204811691600160601b8104821691600160701b8204811691600160801b8104821691600160901b8204169063ffffffff600160a01b820416906001600160401b03600160c01b909104168d565b604080519d15158e529b151560208e015261ffff9a8b169b8d019b909b5297891660608c015295881660808b015293871660a08a015291861660c0890152851660e08801528416610100870152831661012086015290911661014084015263ffffffff166101608301526001600160401b03166101808201526101a00161026a565b600c5461029b90600160a01b900460ff1681565b61039d7f000000000000000000000000000000000000000000000000000000000000000081565b61029b61066936600461484e565b60096020526000908152604090205460ff1681565b61026061068c36600461484e565b61137b565b6000546001600160a01b031661039d565b6102be6106b03660046148e8565b61154e565b6102be6106c3366004614903565b61158b565b61027b611828565b6102be6106de36600461491c565b611837565b61029b6106f136600461474a565b611894565b61039d7f000000000000000000000000000000000000000000000000000000000000000081565b61046d61072b366004614903565b60076020526000908152604090205460ff8082169161010081049091169061ffff620100008204811691600160201b8104909116906001600160581b03600160301b820416906001600160681b03600160881b9091041686565b6102be6107933660046148e8565b6118a1565b6102be6107a63660046148b5565b6118e9565b61039d737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6102be6107d4366004614903565b611972565b6102606107e736600461493f565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6102be610820366004614903565b6119c4565b6102be610833366004614969565b611a14565b600c5461039d906001600160a01b031681565b6102be61085936600461484e565b611bc8565b6102be61086c366004614903565b611c63565b61039d7f000000000000000000000000000000000000000000000000000000000000000081565b6060600180546108a7906149be565b80601f01602080910402602001604051908101604052809291908181526020018280546108d3906149be565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b6000610937338484611caf565b50600192915050565b6000546001600160a01b031633146109735760405162461bcd60e51b815260040161096a906149f8565b60405180910390fd5b805160005b818110156109b4576109a283828151811061099557610995614a2d565b6020026020010151611dd3565b806109ac81614a59565b915050610978565b505050565b6006546000906109e190600160401b90046001600160401b031667016345785d8a0000614a72565b905090565b6000546001600160a01b03163314610a105760405162461bcd60e51b815260040161096a906149f8565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166000908152600b602090815260408083203384529091528120548190610a63908490614a72565b1015610ac25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161096a565b610acd848484612109565b6001600160a01b0384166000908152600b6020908152604080832033808552925290912054610b08918691610b03908690614a72565b611caf565b5060019392505050565b6000546001600160a01b03163314610b3c5760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b0382163014801590610b6057506001600160a01b03821661dead14155b8015610b9e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b610ba757600080fd5b6001600160a01b0382166000818152600860209081526040808320815160808082018452915461ffff8082168352620100008083046001600160401b0390811685890152600160501b84041684870152600160901b9092046001600160681b03908116606080860191909152865160c08101885260055460ff8082161515835261010082048116838c01529581048516828a0152600160201b810490941691810191909152600160301b83046001600160581b031695810195909552600160881b9091041660a08401529585526009909352922054909216158015610c895750825b15610e7a57816000015161ffff16816060015161ffff1603610db557610caf8282612a55565b6001600160401b0316604080840182905282015161ffff16610cd084612b00565b610cda9190614a89565b610ce49190614aa8565b81608001818151610cf59190614ac0565b6001600160581b03908116909152825160058054602086015160408701516060880151608089015160a08a015161ffff1990951696151561ff0019169690961761010060ff909416939093029290921765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919092160217600160301b600160f01b031916600160301b9390941692909202600160881b600160f01b03191692909217600160881b6001600160681b039092169190910217905550610e52565b815161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152610e43908390612a55565b6001600160401b031660408301525b6001600160a01b0384166000908152600960205260409020805460ff19166001179055610fed565b6001600160a01b03841660009081526009602052604090205460ff168015610ea0575082155b15610fed5760a08101516001600160681b031660608084019190915281015161ffff9081168352604080840151908301516001600160401b039091169116610ee784612b00565b610ef19190614a89565b610efb9190614aa8565b81608001818151610f0c9190614ae8565b6001600160581b039081169091526001600160a01b038616600090815260096020908152604091829020805460ff1916905584516005805492870151938701516060880151608089015160a08a015161ffff1990961694151561ff0019169490941761010060ff909716969096029590951765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919095160293909317600160301b600160f01b031916600160301b9190941602600160881b600160f01b03191692909217600160881b6001600160681b0390931692909202919091179055505b6001600160a01b03841660008181526008602090815260409182902085518154878401518886015160608a015161ffff9094166001600160501b031990931692909217620100006001600160401b039283160217600160501b600160f81b031916600160501b9190921602600160901b600160f81b03191617600160901b6001600160681b0390921691909102179055905185151581527facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa910160405180910390a250505050565b6000306001600160a01b038316036110d85750506006546001600160401b031690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611129575050600654600160801b90046001600160401b031690565b6001600160a01b03821661dead14801561114c5750600c54600160a01b900460ff165b15611169575050600654600160401b90046001600160401b031690565b6001600160a01b03821660009081526009602052604090205460ff16156111b657506001600160a01b0316600090815260086020526040902054600160501b90046001600160401b031690565b6001600160a01b0382166000908152600860209081526040918290208251608081018452905461ffff8082168084526001600160401b03620100008404811695850195909552600160501b8304909416948301949094526001600160681b03600160901b9091041660608201526005549092600160201b9091041690036112b7576040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526112b0908290612a55565b9392505050565b805161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526112b0908290612a55565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161096a906149f8565b6113796000612b42565b565b6001600160a01b03811660009081526009602052604081205460ff16156113a157600080fd5b6001600160a01b0382166000908152600860209081526040918290208251608081018452905461ffff8082168084526001600160401b03620100008404811695850195909552600160501b8304909416948301949094526001600160681b03600160901b9091041660608201526005549092600160201b9091041690036114b357604081810151815160c08101835260055460ff80821615158352610100820416602083015262010000810461ffff90811694830194909452600160201b81049093166060820152600160301b83046001600160581b03166080820152600160881b9092046001600160681b031660a08301526001600160401b0316906114a9908390612a55565b6112b09190614a72565b604081810151825161ffff90811660009081526007602090815290849020845160c081018652905460ff8082161515835261010082041692820192909252620100008204831694810194909452600160201b81049091166060840152600160301b81046001600160581b03166080840152600160881b90046001600160681b031660a08301526001600160401b0316906114a9908390612a55565b6000546001600160a01b031633146115785760405162461bcd60e51b815260040161096a906149f8565b6004805460ff1916911515919091179055565b6000546001600160a01b031633146115b55760405162461bcd60e51b815260040161096a906149f8565b6103e881106115c357600080fd5b6040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b8104831660608301819052600160301b82046001600160581b03166080840152600160881b9091046001600160681b031660a0830152909190611640906001614b13565b61ffff160361164e57600080fd5b6060818101805161ffff908116600090815260076020908152604091829020865181548389018051868b0151895160808d015160a08e015161ffff1990961696151561ff0019169690961761010060ff948516021765ffffffff0000191662010000928b169290920261ffff60201b191691909117600160201b918a169190910217600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039093169290920291909117909255835160c08101855288511515815291511691810191909152918616908201529051909182019061174e906001614b13565b61ffff908116825260006020808401919091526001600160681b03604093840181905284516005805493870151958701516060880151608089015160a090990151909416600160881b02600160881b600160f01b03196001600160581b03909916600160301b0298909816600160301b600160f01b0319948716600160201b0261ffff60201b199290971662010000029190911665ffffffff00001960ff9098166101000261ff00199415159490941661ffff19909616959095179290921795909516929092179290921791909116179190911790555050565b6060600280546108a7906149be565b6000546001600160a01b031633146118615760405162461bcd60e51b815260040161096a906149f8565b6064821061186e57600080fd5b6005805461ffff191661010060ff949094169390930260ff191692909217901515179055565b6000610937338484612109565b6000546001600160a01b031633146118cb5760405162461bcd60e51b815260040161096a906149f8565b600c8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146119135760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461199c5760405162461bcd60e51b815260040161096a906149f8565b600480546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b6000546001600160a01b031633146119ee5760405162461bcd60e51b815260040161096a906149f8565b6004805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b815260040161096a906149f8565b60c8851115611a4c57600080fd5b60c8811115611a5a57600080fd5b8486611a66898b614aa8565b611a709190614aa8565b1115611a7b57600080fd5b8082611a878587614aa8565b611a919190614aa8565b1115611a9c57600080fd5b87600460000160046101000a81548161ffff021916908361ffff16021790555086600460000160066101000a81548161ffff021916908361ffff16021790555085600460000160086101000a81548161ffff021916908361ffff16021790555084600460000160026101000a81548161ffff021916908361ffff160217905550836004600001600c6101000a81548161ffff021916908361ffff160217905550826004600001600e6101000a81548161ffff021916908361ffff16021790555081600460000160106101000a81548161ffff021916908361ffff160217905550806004600001600a6101000a81548161ffff021916908361ffff160217905550611bbe30737a250d5630b4cf539739df2c5dacb4c659f2488d61010019611caf565b5050505050505050565b6000546001600160a01b03163314611bf25760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b038116611c575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096a565b611c6081612b42565b50565b6000546001600160a01b03163314611c8d5760405162461bcd60e51b815260040161096a906149f8565b6004805461ffff909216600160901b0261ffff60901b19909216919091179055565b6001600160a01b038316611d115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096a565b6001600160a01b038216611d725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096a565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000818152600860209081526040808320815160808082018452915461ffff8082168352620100008083046001600160401b0390811685890152600160501b84041684870152600160901b9092046001600160681b03908116606080860191909152865160c08101885260055460ff8082161515835261010082048116838c01529581048516828a0152600160201b810490941691810191909152600160301b83046001600160581b031695810195909552600160881b9091041660a0840152958552600990935292205490921680611ec55750806060015161ffff16826000015161ffff16145b15611ecf57505050565b815161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152611f5d908390612a55565b6001600160401b0316604080840182905282015161ffff16611f7e84612b00565b611f889190614a89565b611f929190614aa8565b81608001818151611fa39190614ae8565b6001600160581b039081169091526060808401805161ffff908116875260a0860180516001600160681b039081169489019485526001600160a01b039099166000908152600860209081526040918290208a518154838d01519c85015198518e16600160901b02600160901b600160f81b03196001600160401b039a8b16600160501b0216600160501b600160f81b03199a909e16620100009081026001600160501b03199093169389169390931791909117989098169b909b1796909617909555875160058054968a0151928a015195516080909a01519351909b16600160881b02600160881b600160f01b031993909716600160301b0292909216600160301b600160f01b0319988416600160201b0261ffff60201b19959094169099029390931665ffffffff00001960ff949094166101000261ff00199215159290921661ffff1995909516949094171791909116919091171792909216929092171790915550565b816001600160a01b0316836001600160a01b03160361212b576109b483611dd3565b8060000361213857600080fd5b6001600160a01b03831661219c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161096a565b6001600160a01b0382166121fe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161096a565b600080546001600160a01b0385811691161480159061222b57506000546001600160a01b03848116911614155b156128c957600654604080516101a08101825260045460ff808216151583526101008083049091161515602084015261ffff620100008304811694840194909452600160201b820484166060840152600160301b820484166080840152600160401b8204841660a0840152600160501b8204841660c0840152600160601b8204841660e0840152600160701b8204841690830152600160801b81048316610120830152600160901b810490921661014082015263ffffffff600160a01b830416610160820152600160c01b9091046001600160401b03908116610180830181905292169182117f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690871614801561236657506001600160a01b0387166000908152600a602052604090205460ff16155b801561238b57506001600160a01b0386166000908152600a602052604090205460ff16155b80156123945750805b80156123a2575060045460ff165b80156123b65750600454610100900460ff16155b1561241d576004805461ff0019166101001790556101808201516123db906014614b30565b6001600160401b0316831115612408576101808201516123fc906014614b30565b6001600160401b031692505b61241183612b92565b6004805461ff00191690555b6004546001600160a01b0388166000908152600a602052604090205460ff61010090920482161591168061246957506001600160a01b0387166000908152600a602052604090205460ff165b15612472575060005b80156128c457600080807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908b161480156124bf575060c086015161ffff1615155b1561258c576103e88660c0015161ffff168a6124db9190614a89565b6124e59190614b75565b92506103e886610100015161ffff168a6124ff9190614a89565b6125099190614b75565b97506103e88660e0015161ffff168a6125229190614a89565b61252c9190614b75565b91506103e886610120015161ffff168a6125469190614a89565b6125509190614b75565b90508215612587576125638b3085612cab565b811561257457612574308b84612cab565b8015612587576125873061dead83612cab565b612692565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b03161480156125d45750604086015161ffff1615155b15612692576103e8866040015161ffff168a6125f09190614a89565b6125fa9190614b75565b92506103e8866080015161ffff168a6126139190614a89565b61261d9190614b75565b97506103e8866060015161ffff168a6126369190614a89565b6126409190614b75565b91506103e88660a0015161ffff168a6126599190614a89565b6126639190614b75565b905082156126925761267f8b3061267a8587614a72565b612cab565b8015612692576126923061dead83612cab565b61269c838a614a72565b9850856101600151611c206126b19190614b89565b63ffffffff16421080156126f75750896001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b156128c0576040516307e300a760e31b81526000600482018190526001600160a01b038c8116602484015290917f000000000000000000000000000000000000000000000000000000000000000090911690633f18053890604401602060405180830381865afa15801561276f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127939190614ba8565b61279e90600a614a89565b60405163124e733f60e21b81526000600482018190526001600160a01b038e81166024840152929350917f00000000000000000000000000000000000000000000000000000000000000001690634939ccfc90604401602060405180830381865afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128359190614ba8565b905087610160015163ffffffff16421015801561285457506103e88110155b1561286757612864826005614a89565b91505b8a6128718d6110b5565b61287b9190614aa8565b82101561288757600080fd5b61014088015161289b9061ffff1682614a89565b88610160015163ffffffff166128b19190614a72565b4210156128bd57600080fd5b50505b5050505b505050505b6128d4848484612cab565b8015612a4f576040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526129529082612e59565b815160058054602085015160408601516060870151608088015160a09098015161ffff1990941695151561ff0019169590951761010060ff909316929092029190911765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919094160292909217600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039092169190910217909155600680549192508291600090612a2a9084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b50505050565b600080612a6184612b00565b905083604001516001600160401b0316600003612a7f576000612af8565b6040830151612a929061ffff1682614a89565b8360a001516001600160681b031685606001516001600160681b031686604001516001600160401b0316866040015161ffff1685612ad09190614a89565b612ada9190614aa8565b612ae49190614a89565b612aee9190614b75565b612af89190614a72565b949350505050565b600081604001516001600160401b031682602001516001600160401b031611612b2d578160200151612b33565b81604001515b6001600160401b031692915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc757612bc7614a2d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612c1b57612c1b614a2d565b6001600160a01b039283166020918202929092010152600c54604051635c11d79560e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d92635c11d79592612c7592879260009288929116904290600401614be1565b600060405180830381600087803b158015612c8f57600080fd5b505af1158015612ca3573d6000803e3d6000fd5b505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cf091815260200190565b60405180910390a36001600160a01b03831660009081526009602052604090205460ff168015612d3957506001600160a01b03821660009081526009602052604090205460ff16155b15612d49576109b4838383612f69565b6001600160a01b03831660009081526009602052604090205460ff16158015612d8a57506001600160a01b03821660009081526009602052604090205460ff165b15612db75761deac196001600160a01b03831601612dac576109b4838261341c565b6109b483838361391c565b6001600160a01b03831660009081526009602052604090205460ff16158015612df957506001600160a01b03821660009081526009602052604090205460ff16155b15612e09576109b4838383613dcf565b6001600160a01b03831660009081526009602052604090205460ff168015612e4957506001600160a01b03821660009081526009602052604090205460ff165b156109b4576109b4838383614464565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600060648460800151612e9e9190614c52565b6001600160581b03168310612ecc5760648460800151612ebe9190614c52565b6001600160581b0316612ece565b825b92508215612f615760008460a001516001600160681b031685608001516001600160581b0316612efe9190614a89565b90508385608001818151612f129190614ae8565b6001600160581b03908116909152608087015160009250612f34911683614b75565b9050806001600160681b0316600003612f4e576001612f50565b805b6001600160681b031660a087015250505b509192909150565b6001600160a01b03808316600090815260086020908152604091829020825160808082018552915461ffff80821683526001600160401b0362010000808404821685880152600160501b8404909116848801526001600160681b03600160901b9093048316606080860191909152875160c08101895260055460ff8082161515835261010082041698820198909852918704831697820197909752600160201b8604909116958101959095526001600160581b03600160301b85041692850192909252600160881b9092041660a083015291309086160361308b57600680548491906000906130629084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613149565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036130e95760068054849190601090613062908490600160801b90046001600160401b0316614bc1565b6001600160a01b03851660009081526008602052604090208054849190600a90613124908490600160501b90046001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b600080826060015161ffff16846000015161ffff16036131a957826040015161ffff1661317585612b00565b61317f9190614a89565b91508461318c8585612a55565b6131969190614aa8565b6001600160401b03166040850152613252565b835161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152613237908590612a55565b90506132438582614aa8565b6001600160401b031660408501525b60a08301516001600160681b031660608086019190915283015161ffff908116855260408401511661328385612b00565b61328d9190614a89565b6132979082614aa8565b905084828285608001516001600160581b03166132b49190614aa8565b6132be9190614a72565b6132c89190614aa8565b6001600160581b03908116608085019081526001600160a01b039790971660009081526008602090815260409182902087518154898401518a86015160609b8c015161ffff9485166001600160501b031990941693909317620100006001600160401b03938416810291909117600160501b600160f81b031916600160501b9390921692909202600160901b600160f81b03191617600160901b6001600160681b039384160217909355885160058054958b0151968b01519b8b01519d5160a0909b015161ffff1990961691151561ff0019169190911761010060ff909716969096029590951765ffffffff0000191699821690920261ffff60201b191698909817600160201b9a9098169990990296909617600160301b600160f01b031916600160301b9590921694909402600160881b600160f01b03191617600160881b949096169390930294909417905550505050565b6001600160a01b0382166000908152600860209081526040808320815160808082018452915461ffff80821683526001600160401b0362010000808404821685890152600160501b8404909116848701526001600160681b03600160901b9093048316606080860191909152865160c08101885260055460ff8082161515835261010082041699820199909952918804831696820196909652600160201b870482169581018690526001600160581b03600160301b88041694810194909452600160881b9095041660a083015280519094919391929116036135835783826040015161ffff1661350b85612b00565b6135159190614a89565b61351f9190614aa8565b826080018181516135309190614ac0565b6001600160581b0316905250836135478484612a55565b6135519190614a72565b6001600160401b031660408401819052608083018051613572908390614ac0565b6001600160581b031690525061362c565b825161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201528490613613908590612a55565b61361d9190614a72565b6001600160401b031660408401525b60006064836020015160ff16866136439190614a89565b61364d9190614b75565b835190915015613683576136618186614a72565b846020018181516136729190614c78565b6001600160401b03169052506136a2565b84846020018181516136959190614c78565b6001600160401b03169052505b6136ac8186614a72565b94506136b88583614aa8565b915080156136e5576136ca8382612e59565b955092506136d88582614a72565b6136e29083614aa8565b91505b83604001516001600160401b0316836040015161ffff1661370586612b00565b61370f9190614a89565b6137199190614aa8565b8360800181815161372a9190614ae8565b6001600160581b031690525060a08301516001600160681b03908116606080870191825285015161ffff90811687526001600160a01b0389166000908152600860208181526040928390208a518154928c0151948c01519651909716600160901b02600160901b600160f81b03196001600160401b03978816600160501b0216600160501b600160f81b031995881662010000026001600160501b03199094169890961697909717919091179290921692909217939093179092556006805485939192613801918591600160401b90910416614c78565b825461010092830a6001600160401b03818102199092169290911602179091558451600580546020808901516040808b015160608c015160808d015160a08e015161ffff1990971698151561ff0019169890981760ff9094169098029290921765ffffffff000019166201000061ffff9384160261ffff60201b191617600160201b929097169190910295909517600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039092169190910217905590518481526001600160a01b03891692507f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b1910160405180910390a2505050505050565b6001600160a01b03808416600090815260086020908152604091829020825160808082018552915461ffff80821683526001600160401b0362010000808404821685880152600160501b8404909116848801526001600160681b03600160901b9093048316606080860191909152875160c08101895260055460ff8082161515835261010082041698820198909852918704831697820197909752600160201b8604909116958101959095526001600160581b03600160301b85041692850192909252600160881b9092041660a0830152913090851603613a3e5760068054849190600090613a159084906001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613afc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603613a9c5760068054849190601090613a15908490600160801b90046001600160401b0316614c78565b6001600160a01b03841660009081526008602052604090208054849190600a90613ad7908490600160501b90046001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b600080826060015161ffff16846000015161ffff1603613b5c57826040015161ffff16613b2885612b00565b613b329190614a89565b915084613b3f8585612a55565b613b499190614a72565b6001600160401b03166040850152613c05565b835161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152613bea908590612a55565b9050613bf68582614a72565b6001600160401b031660408501525b60a08301516001600160681b031660608086019190915283015161ffff9081168552604084015116613c3685612b00565b613c409190614a89565b613c4a9082614aa8565b905084828285608001516001600160581b0316613c679190614aa8565b613c719190614a72565b613c7b9190614a72565b6001600160581b03908116608085019081526001600160a01b039890981660009081526008602090815260409182902087518154898401518a86015160609b8c015161ffff9485166001600160501b031990941693909317620100006001600160401b03938416810291909117600160501b600160f81b031916600160501b9390921692909202600160901b600160f81b03191617600160901b6001600160681b039384160217909355885160058054958b0151968b01519b8b01519e5160a0909b015161ffff1990961691151561ff0019169190911761010060ff909716969096029590951765ffffffff0000191699821690920261ffff60201b191698909817600160201b9b9098169a909a0296909617600160301b600160f01b031916600160301b9590921694909402600160881b600160f01b03191617600160881b949097169390930295909517905550505050565b6001600160a01b038084166000908152600860208181526040808420815160808082018452915461ffff80821683526001600160401b0362010000808404821685890152600160501b8085048316868901526001600160681b03600160901b9586900481166060808901919091529c8f168c52998952878b2088518089018a52905480861682528381048516828c015291820490931683890152939093048816818b0152855160c08101875260055460ff8082161515835261010082041698820198909852928704821695830195909552600160201b860481169882018990526001600160581b03600160301b87041693820193909352600160881b90940490941660a084015283519395919492938392839283921603613f3b5787856040015161ffff16613efd89612b00565b613f079190614a89565b613f119190614aa8565b935087613f1e8887612a55565b613f289190614a72565b6001600160401b03166040880152613fe8565b865161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201528890613fcb908990612a55565b613fd59190614a72565b6001600160401b03166040880181905291505b846060015161ffff16866000015161ffff160361404757846040015161ffff1661401187612b00565b61401b9190614a89565b9250876140288787612a55565b6140329190614aa8565b6001600160401b0316604087015250866140f4565b855161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a082015288906140d7908890612a55565b6140e19190614aa8565b6001600160401b03166040870181905290505b60a0850180516001600160681b039081166060808b0191909152915116878201528501805161ffff908116895290518116875260408601511661413687612b00565b6141409190614a89565b61414a9082614aa8565b9050846040015161ffff1661415e88612b00565b6141689190614a89565b6141729083614aa8565b91508284828488608001516001600160581b03166141909190614aa8565b61419a9190614aa8565b6141a49190614a72565b6141ae9190614a72565b85608001906001600160581b031690816001600160581b03168152505086600860008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160401b0302191690836001600160401b03160217905550604082015181600001600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160126101000a8154816001600160681b0302191690836001600160681b0316021790555090505085600860008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160401b0302191690836001600160401b03160217905550604082015181600001600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160126101000a8154816001600160681b0302191690836001600160681b0316021790555090505084600560008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a8154816001600160581b0302191690836001600160581b0316021790555060a08201518160000160116101000a8154816001600160681b0302191690836001600160681b0316021790555090505050505050505050505050565b306001600160a01b038416036144bb57600680548291906000906144929084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506145b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036145195760068054829190601090614492908490600160801b90046001600160401b0316614bc1565b61deac196001600160a01b038416016145515760068054829190600890614492908490600160401b90046001600160401b0316614bc1565b6001600160a01b03831660009081526008602052604090208054829190600a9061458c908490600160501b90046001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b306001600160a01b0383160361460857600680548291906000906145df9084906001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361466657600680548291906010906145df908490600160801b90046001600160401b0316614c78565b61deac196001600160a01b0383160161469e57600680548291906008906145df908490600160401b90046001600160401b0316614c78565b6001600160a01b03821660009081526008602052604090208054829190600a906145df908490600160501b90046001600160401b0316614c78565b600060208083528351808285015260005b81811015614706578581018301518582016040015282016146ea565b81811115614718576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461474557600080fd5b919050565b6000806040838503121561475d57600080fd5b6147668361472e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561479d57600080fd5b82356001600160401b03808211156147b457600080fd5b818501915085601f8301126147c857600080fd5b8135818111156147da576147da614774565b8060051b604051601f19603f830116810181811085821117156147ff576147ff614774565b60405291825284820192508381018501918883111561481d57600080fd5b938501935b82851015614842576148338561472e565b84529385019392850192614822565b98975050505050505050565b60006020828403121561486057600080fd5b6112b08261472e565b60008060006060848603121561487e57600080fd5b6148878461472e565b92506148956020850161472e565b9150604084013590509250925092565b8035801515811461474557600080fd5b600080604083850312156148c857600080fd5b6148d18361472e565b91506148df602084016148a5565b90509250929050565b6000602082840312156148fa57600080fd5b6112b0826148a5565b60006020828403121561491557600080fd5b5035919050565b6000806040838503121561492f57600080fd5b823591506148df602084016148a5565b6000806040838503121561495257600080fd5b61495b8361472e565b91506148df6020840161472e565b600080600080600080600080610100898b03121561498657600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600181811c908216806149d257607f821691505b6020821081036149f257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614a6b57614a6b614a43565b5060010190565b600082821015614a8457614a84614a43565b500390565b6000816000190483118215151615614aa357614aa3614a43565b500290565b60008219821115614abb57614abb614a43565b500190565b60006001600160581b0383811690831681811015614ae057614ae0614a43565b039392505050565b60006001600160581b03808316818516808303821115614b0a57614b0a614a43565b01949350505050565b600061ffff808316818516808303821115614b0a57614b0a614a43565b60006001600160401b0380831681851681830481118215151615614b5657614b56614a43565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082614b8457614b84614b5f565b500490565b600063ffffffff808316818516808303821115614b0a57614b0a614a43565b600060208284031215614bba57600080fd5b5051919050565b60006001600160401b0383811690831681811015614ae057614ae0614a43565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c315784516001600160a01b031683529383019391830191600101614c0c565b50506001600160a01b03969096166060850152505050608001529392505050565b60006001600160581b0380841680614c6c57614c6c614b5f565b92169190910492915050565b60006001600160401b03808316818516808303821115614b0a57614b0a614a4356fea2646970667358221220dcd092135f46733584e756366930597da29537dc7cbbf1278556e115dfd41ed464736f6c634300080f003300000000000000000000000027d5b0d8077811358b848d95b2ef231d2980958b000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d0466

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102535760003560e01c80638bf2581c11610146578063b1503c15116100c3578063e125f91111610087578063e125f91114610812578063e473b90714610825578063e82bef2914610838578063f2fde38b1461084b578063fb0aec8e1461085e578063ffc94f901461087157600080fd5b8063b1503c1514610785578063c024666814610798578063cf188ad0146107ab578063d257b34f146107c6578063dd62ed3e146107d957600080fd5b806395d89b411161010a57806395d89b41146106c8578063a4c5827c146106d0578063a9059cbb146106e3578063a98a7fc1146106f6578063ab657dee1461071d57600080fd5b80638bf2581c1461065b5780638bfea4391461067e5780638da5cb5b14610691578063924de9b7146106a2578063947e42cb146106b557600080fd5b80632ad4cab7116101d4578063771282f611610198578063771282f61461041b5780637c3d2eba146104b857806382595a051461050b5780638319f3131461062057806385af30c51461063457600080fd5b80632ad4cab7146103b5578063313ce567146103c8578063412738e0146103dd57806370a0823114610400578063715018a61461041357600080fd5b80631959a0021161021b5780631959a002146102c85780631d5459f7146103565780631f8624951461036957806323b872dd1461038157806327c8f8351461039457600080fd5b806301f59d161461025857806306fdde0314610273578063095ea7b314610288578063178d77b6146102ab57806318160ddd146102c0575b600080fd5b61026060c881565b6040519081526020015b60405180910390f35b61027b610898565b60405161026a91906146d9565b61029b61029636600461474a565b61092a565b604051901515815260200161026a565b6102be6102b936600461478a565b610940565b005b6102606109b9565b61031b6102d636600461484e565b60086020526000908152604090205461ffff8116906001600160401b03620100008204811691600160501b8104909116906001600160681b03600160901b9091041684565b6040805161ffff9590951685526001600160401b03938416602086015291909216908301526001600160681b0316606082015260800161026a565b6102be61036436600461484e565b6109e6565b600654600160401b90046001600160401b0316610260565b61029b61038f366004614869565b610a32565b61039d61dead81565b6040516001600160a01b03909116815260200161026a565b6102be6103c33660046148b5565b610b12565b60035460405160ff909116815260200161026a565b61029b6103eb36600461484e565b600a6020526000908152604090205460ff1681565b61026061040e36600461484e565b6110b5565b6102be611345565b60055461046d9060ff8082169161010081049091169061ffff620100008204811691600160201b8104909116906001600160581b03600160301b820416906001600160681b03600160881b9091041686565b60408051961515875260ff909516602087015261ffff93841694860194909452911660608401526001600160581b031660808301526001600160681b031660a082015260c00161026a565b6006546104e1906001600160401b0380821691600160401b8104821691600160801b9091041683565b604080516001600160401b039485168152928416602084015292169181019190915260600161026a565b60045461059e9060ff8082169161010081049091169061ffff620100008204811691600160201b8104821691600160301b8204811691600160401b8104821691600160501b8204811691600160601b8104821691600160701b8204811691600160801b8104821691600160901b8204169063ffffffff600160a01b820416906001600160401b03600160c01b909104168d565b604080519d15158e529b151560208e015261ffff9a8b169b8d019b909b5297891660608c015295881660808b015293871660a08a015291861660c0890152851660e08801528416610100870152831661012086015290911661014084015263ffffffff166101608301526001600160401b03166101808201526101a00161026a565b600c5461029b90600160a01b900460ff1681565b61039d7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b81565b61029b61066936600461484e565b60096020526000908152604090205460ff1681565b61026061068c36600461484e565b61137b565b6000546001600160a01b031661039d565b6102be6106b03660046148e8565b61154e565b6102be6106c3366004614903565b61158b565b61027b611828565b6102be6106de36600461491c565b611837565b61029b6106f136600461474a565b611894565b61039d7f000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d046681565b61046d61072b366004614903565b60076020526000908152604090205460ff8082169161010081049091169061ffff620100008204811691600160201b8104909116906001600160581b03600160301b820416906001600160681b03600160881b9091041686565b6102be6107933660046148e8565b6118a1565b6102be6107a63660046148b5565b6118e9565b61039d737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6102be6107d4366004614903565b611972565b6102606107e736600461493f565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6102be610820366004614903565b6119c4565b6102be610833366004614969565b611a14565b600c5461039d906001600160a01b031681565b6102be61085936600461484e565b611bc8565b6102be61086c366004614903565b611c63565b61039d7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6060600180546108a7906149be565b80601f01602080910402602001604051908101604052809291908181526020018280546108d3906149be565b80156109205780601f106108f557610100808354040283529160200191610920565b820191906000526020600020905b81548152906001019060200180831161090357829003601f168201915b5050505050905090565b6000610937338484611caf565b50600192915050565b6000546001600160a01b031633146109735760405162461bcd60e51b815260040161096a906149f8565b60405180910390fd5b805160005b818110156109b4576109a283828151811061099557610995614a2d565b6020026020010151611dd3565b806109ac81614a59565b915050610978565b505050565b6006546000906109e190600160401b90046001600160401b031667016345785d8a0000614a72565b905090565b6000546001600160a01b03163314610a105760405162461bcd60e51b815260040161096a906149f8565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166000908152600b602090815260408083203384529091528120548190610a63908490614a72565b1015610ac25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161096a565b610acd848484612109565b6001600160a01b0384166000908152600b6020908152604080832033808552925290912054610b08918691610b03908690614a72565b611caf565b5060019392505050565b6000546001600160a01b03163314610b3c5760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b0382163014801590610b6057506001600160a01b03821661dead14155b8015610b9e57507f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316826001600160a01b031614155b610ba757600080fd5b6001600160a01b0382166000818152600860209081526040808320815160808082018452915461ffff8082168352620100008083046001600160401b0390811685890152600160501b84041684870152600160901b9092046001600160681b03908116606080860191909152865160c08101885260055460ff8082161515835261010082048116838c01529581048516828a0152600160201b810490941691810191909152600160301b83046001600160581b031695810195909552600160881b9091041660a08401529585526009909352922054909216158015610c895750825b15610e7a57816000015161ffff16816060015161ffff1603610db557610caf8282612a55565b6001600160401b0316604080840182905282015161ffff16610cd084612b00565b610cda9190614a89565b610ce49190614aa8565b81608001818151610cf59190614ac0565b6001600160581b03908116909152825160058054602086015160408701516060880151608089015160a08a015161ffff1990951696151561ff0019169690961761010060ff909416939093029290921765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919092160217600160301b600160f01b031916600160301b9390941692909202600160881b600160f01b03191692909217600160881b6001600160681b039092169190910217905550610e52565b815161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152610e43908390612a55565b6001600160401b031660408301525b6001600160a01b0384166000908152600960205260409020805460ff19166001179055610fed565b6001600160a01b03841660009081526009602052604090205460ff168015610ea0575082155b15610fed5760a08101516001600160681b031660608084019190915281015161ffff9081168352604080840151908301516001600160401b039091169116610ee784612b00565b610ef19190614a89565b610efb9190614aa8565b81608001818151610f0c9190614ae8565b6001600160581b039081169091526001600160a01b038616600090815260096020908152604091829020805460ff1916905584516005805492870151938701516060880151608089015160a08a015161ffff1990961694151561ff0019169490941761010060ff909716969096029590951765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919095160293909317600160301b600160f01b031916600160301b9190941602600160881b600160f01b03191692909217600160881b6001600160681b0390931692909202919091179055505b6001600160a01b03841660008181526008602090815260409182902085518154878401518886015160608a015161ffff9094166001600160501b031990931692909217620100006001600160401b039283160217600160501b600160f81b031916600160501b9190921602600160901b600160f81b03191617600160901b6001600160681b0390921691909102179055905185151581527facf40045c9516ed93201cbb27e9656cc33f8636b026b0e20b4f6ddcfccf404aa910160405180910390a250505050565b6000306001600160a01b038316036110d85750506006546001600160401b031690565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316826001600160a01b031603611129575050600654600160801b90046001600160401b031690565b6001600160a01b03821661dead14801561114c5750600c54600160a01b900460ff165b15611169575050600654600160401b90046001600160401b031690565b6001600160a01b03821660009081526009602052604090205460ff16156111b657506001600160a01b0316600090815260086020526040902054600160501b90046001600160401b031690565b6001600160a01b0382166000908152600860209081526040918290208251608081018452905461ffff8082168084526001600160401b03620100008404811695850195909552600160501b8304909416948301949094526001600160681b03600160901b9091041660608201526005549092600160201b9091041690036112b7576040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526112b0908290612a55565b9392505050565b805161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526112b0908290612a55565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161096a906149f8565b6113796000612b42565b565b6001600160a01b03811660009081526009602052604081205460ff16156113a157600080fd5b6001600160a01b0382166000908152600860209081526040918290208251608081018452905461ffff8082168084526001600160401b03620100008404811695850195909552600160501b8304909416948301949094526001600160681b03600160901b9091041660608201526005549092600160201b9091041690036114b357604081810151815160c08101835260055460ff80821615158352610100820416602083015262010000810461ffff90811694830194909452600160201b81049093166060820152600160301b83046001600160581b03166080820152600160881b9092046001600160681b031660a08301526001600160401b0316906114a9908390612a55565b6112b09190614a72565b604081810151825161ffff90811660009081526007602090815290849020845160c081018652905460ff8082161515835261010082041692820192909252620100008204831694810194909452600160201b81049091166060840152600160301b81046001600160581b03166080840152600160881b90046001600160681b031660a08301526001600160401b0316906114a9908390612a55565b6000546001600160a01b031633146115785760405162461bcd60e51b815260040161096a906149f8565b6004805460ff1916911515919091179055565b6000546001600160a01b031633146115b55760405162461bcd60e51b815260040161096a906149f8565b6103e881106115c357600080fd5b6040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b8104831660608301819052600160301b82046001600160581b03166080840152600160881b9091046001600160681b031660a0830152909190611640906001614b13565b61ffff160361164e57600080fd5b6060818101805161ffff908116600090815260076020908152604091829020865181548389018051868b0151895160808d015160a08e015161ffff1990961696151561ff0019169690961761010060ff948516021765ffffffff0000191662010000928b169290920261ffff60201b191691909117600160201b918a169190910217600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039093169290920291909117909255835160c08101855288511515815291511691810191909152918616908201529051909182019061174e906001614b13565b61ffff908116825260006020808401919091526001600160681b03604093840181905284516005805493870151958701516060880151608089015160a090990151909416600160881b02600160881b600160f01b03196001600160581b03909916600160301b0298909816600160301b600160f01b0319948716600160201b0261ffff60201b199290971662010000029190911665ffffffff00001960ff9098166101000261ff00199415159490941661ffff19909616959095179290921795909516929092179290921791909116179190911790555050565b6060600280546108a7906149be565b6000546001600160a01b031633146118615760405162461bcd60e51b815260040161096a906149f8565b6064821061186e57600080fd5b6005805461ffff191661010060ff949094169390930260ff191692909217901515179055565b6000610937338484612109565b6000546001600160a01b031633146118cb5760405162461bcd60e51b815260040161096a906149f8565b600c8054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146119135760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000546001600160a01b0316331461199c5760405162461bcd60e51b815260040161096a906149f8565b600480546001600160401b03909216600160c01b026001600160c01b03909216919091179055565b6000546001600160a01b031633146119ee5760405162461bcd60e51b815260040161096a906149f8565b6004805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b815260040161096a906149f8565b60c8851115611a4c57600080fd5b60c8811115611a5a57600080fd5b8486611a66898b614aa8565b611a709190614aa8565b1115611a7b57600080fd5b8082611a878587614aa8565b611a919190614aa8565b1115611a9c57600080fd5b87600460000160046101000a81548161ffff021916908361ffff16021790555086600460000160066101000a81548161ffff021916908361ffff16021790555085600460000160086101000a81548161ffff021916908361ffff16021790555084600460000160026101000a81548161ffff021916908361ffff160217905550836004600001600c6101000a81548161ffff021916908361ffff160217905550826004600001600e6101000a81548161ffff021916908361ffff16021790555081600460000160106101000a81548161ffff021916908361ffff160217905550806004600001600a6101000a81548161ffff021916908361ffff160217905550611bbe30737a250d5630b4cf539739df2c5dacb4c659f2488d61010019611caf565b5050505050505050565b6000546001600160a01b03163314611bf25760405162461bcd60e51b815260040161096a906149f8565b6001600160a01b038116611c575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161096a565b611c6081612b42565b50565b6000546001600160a01b03163314611c8d5760405162461bcd60e51b815260040161096a906149f8565b6004805461ffff909216600160901b0261ffff60901b19909216919091179055565b6001600160a01b038316611d115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161096a565b6001600160a01b038216611d725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161096a565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0381166000818152600860209081526040808320815160808082018452915461ffff8082168352620100008083046001600160401b0390811685890152600160501b84041684870152600160901b9092046001600160681b03908116606080860191909152865160c08101885260055460ff8082161515835261010082048116838c01529581048516828a0152600160201b810490941691810191909152600160301b83046001600160581b031695810195909552600160881b9091041660a0840152958552600990935292205490921680611ec55750806060015161ffff16826000015161ffff16145b15611ecf57505050565b815161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152611f5d908390612a55565b6001600160401b0316604080840182905282015161ffff16611f7e84612b00565b611f889190614a89565b611f929190614aa8565b81608001818151611fa39190614ae8565b6001600160581b039081169091526060808401805161ffff908116875260a0860180516001600160681b039081169489019485526001600160a01b039099166000908152600860209081526040918290208a518154838d01519c85015198518e16600160901b02600160901b600160f81b03196001600160401b039a8b16600160501b0216600160501b600160f81b03199a909e16620100009081026001600160501b03199093169389169390931791909117989098169b909b1796909617909555875160058054968a0151928a015195516080909a01519351909b16600160881b02600160881b600160f01b031993909716600160301b0292909216600160301b600160f01b0319988416600160201b0261ffff60201b19959094169099029390931665ffffffff00001960ff949094166101000261ff00199215159290921661ffff1995909516949094171791909116919091171792909216929092171790915550565b816001600160a01b0316836001600160a01b03160361212b576109b483611dd3565b8060000361213857600080fd5b6001600160a01b03831661219c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161096a565b6001600160a01b0382166121fe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161096a565b600080546001600160a01b0385811691161480159061222b57506000546001600160a01b03848116911614155b156128c957600654604080516101a08101825260045460ff808216151583526101008083049091161515602084015261ffff620100008304811694840194909452600160201b820484166060840152600160301b820484166080840152600160401b8204841660a0840152600160501b8204841660c0840152600160601b8204841660e0840152600160701b8204841690830152600160801b81048316610120830152600160901b810490921661014082015263ffffffff600160a01b830416610160820152600160c01b9091046001600160401b03908116610180830181905292169182117f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0390811690871614801561236657506001600160a01b0387166000908152600a602052604090205460ff16155b801561238b57506001600160a01b0386166000908152600a602052604090205460ff16155b80156123945750805b80156123a2575060045460ff165b80156123b65750600454610100900460ff16155b1561241d576004805461ff0019166101001790556101808201516123db906014614b30565b6001600160401b0316831115612408576101808201516123fc906014614b30565b6001600160401b031692505b61241183612b92565b6004805461ff00191690555b6004546001600160a01b0388166000908152600a602052604090205460ff61010090920482161591168061246957506001600160a01b0387166000908152600a602052604090205460ff165b15612472575060005b80156128c457600080807f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b03908116908b161480156124bf575060c086015161ffff1615155b1561258c576103e88660c0015161ffff168a6124db9190614a89565b6124e59190614b75565b92506103e886610100015161ffff168a6124ff9190614a89565b6125099190614b75565b97506103e88660e0015161ffff168a6125229190614a89565b61252c9190614b75565b91506103e886610120015161ffff168a6125469190614a89565b6125509190614b75565b90508215612587576125638b3085612cab565b811561257457612574308b84612cab565b8015612587576125873061dead83612cab565b612692565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b03168b6001600160a01b03161480156125d45750604086015161ffff1615155b15612692576103e8866040015161ffff168a6125f09190614a89565b6125fa9190614b75565b92506103e8866080015161ffff168a6126139190614a89565b61261d9190614b75565b97506103e8866060015161ffff168a6126369190614a89565b6126409190614b75565b91506103e88660a0015161ffff168a6126599190614a89565b6126639190614b75565b905082156126925761267f8b3061267a8587614a72565b612cab565b8015612692576126923061dead83612cab565b61269c838a614a72565b9850856101600151611c206126b19190614b89565b63ffffffff16421080156126f75750896001600160a01b03167f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b031614155b156128c0576040516307e300a760e31b81526000600482018190526001600160a01b038c8116602484015290917f000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d046690911690633f18053890604401602060405180830381865afa15801561276f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127939190614ba8565b61279e90600a614a89565b60405163124e733f60e21b81526000600482018190526001600160a01b038e81166024840152929350917f000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d04661690634939ccfc90604401602060405180830381865afa158015612811573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128359190614ba8565b905087610160015163ffffffff16421015801561285457506103e88110155b1561286757612864826005614a89565b91505b8a6128718d6110b5565b61287b9190614aa8565b82101561288757600080fd5b61014088015161289b9061ffff1682614a89565b88610160015163ffffffff166128b19190614a72565b4210156128bd57600080fd5b50505b5050505b505050505b6128d4848484612cab565b8015612a4f576040805160c08101825260055460ff80821615158352610100820416602083015262010000810461ffff90811693830193909352600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201526129529082612e59565b815160058054602085015160408601516060870151608088015160a09098015161ffff1990941695151561ff0019169590951761010060ff909316929092029190911765ffffffff000019166201000061ffff9283160261ffff60201b191617600160201b919094160292909217600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039092169190910217909155600680549192508291600090612a2a9084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b50505050565b600080612a6184612b00565b905083604001516001600160401b0316600003612a7f576000612af8565b6040830151612a929061ffff1682614a89565b8360a001516001600160681b031685606001516001600160681b031686604001516001600160401b0316866040015161ffff1685612ad09190614a89565b612ada9190614aa8565b612ae49190614a89565b612aee9190614b75565b612af89190614a72565b949350505050565b600081604001516001600160401b031682602001516001600160401b031611612b2d578160200151612b33565b81604001515b6001600160401b031692915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bc757612bc7614a2d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110612c1b57612c1b614a2d565b6001600160a01b039283166020918202929092010152600c54604051635c11d79560e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d92635c11d79592612c7592879260009288929116904290600401614be1565b600060405180830381600087803b158015612c8f57600080fd5b505af1158015612ca3573d6000803e3d6000fd5b505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cf091815260200190565b60405180910390a36001600160a01b03831660009081526009602052604090205460ff168015612d3957506001600160a01b03821660009081526009602052604090205460ff16155b15612d49576109b4838383612f69565b6001600160a01b03831660009081526009602052604090205460ff16158015612d8a57506001600160a01b03821660009081526009602052604090205460ff165b15612db75761deac196001600160a01b03831601612dac576109b4838261341c565b6109b483838361391c565b6001600160a01b03831660009081526009602052604090205460ff16158015612df957506001600160a01b03821660009081526009602052604090205460ff16155b15612e09576109b4838383613dcf565b6001600160a01b03831660009081526009602052604090205460ff168015612e4957506001600160a01b03821660009081526009602052604090205460ff165b156109b4576109b4838383614464565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600060648460800151612e9e9190614c52565b6001600160581b03168310612ecc5760648460800151612ebe9190614c52565b6001600160581b0316612ece565b825b92508215612f615760008460a001516001600160681b031685608001516001600160581b0316612efe9190614a89565b90508385608001818151612f129190614ae8565b6001600160581b03908116909152608087015160009250612f34911683614b75565b9050806001600160681b0316600003612f4e576001612f50565b805b6001600160681b031660a087015250505b509192909150565b6001600160a01b03808316600090815260086020908152604091829020825160808082018552915461ffff80821683526001600160401b0362010000808404821685880152600160501b8404909116848801526001600160681b03600160901b9093048316606080860191909152875160c08101895260055460ff8082161515835261010082041698820198909852918704831697820197909752600160201b8604909116958101959095526001600160581b03600160301b85041692850192909252600160881b9092041660a083015291309086160361308b57600680548491906000906130629084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613149565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316856001600160a01b0316036130e95760068054849190601090613062908490600160801b90046001600160401b0316614bc1565b6001600160a01b03851660009081526008602052604090208054849190600a90613124908490600160501b90046001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b600080826060015161ffff16846000015161ffff16036131a957826040015161ffff1661317585612b00565b61317f9190614a89565b91508461318c8585612a55565b6131969190614aa8565b6001600160401b03166040850152613252565b835161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152613237908590612a55565b90506132438582614aa8565b6001600160401b031660408501525b60a08301516001600160681b031660608086019190915283015161ffff908116855260408401511661328385612b00565b61328d9190614a89565b6132979082614aa8565b905084828285608001516001600160581b03166132b49190614aa8565b6132be9190614a72565b6132c89190614aa8565b6001600160581b03908116608085019081526001600160a01b039790971660009081526008602090815260409182902087518154898401518a86015160609b8c015161ffff9485166001600160501b031990941693909317620100006001600160401b03938416810291909117600160501b600160f81b031916600160501b9390921692909202600160901b600160f81b03191617600160901b6001600160681b039384160217909355885160058054958b0151968b01519b8b01519d5160a0909b015161ffff1990961691151561ff0019169190911761010060ff909716969096029590951765ffffffff0000191699821690920261ffff60201b191698909817600160201b9a9098169990990296909617600160301b600160f01b031916600160301b9590921694909402600160881b600160f01b03191617600160881b949096169390930294909417905550505050565b6001600160a01b0382166000908152600860209081526040808320815160808082018452915461ffff80821683526001600160401b0362010000808404821685890152600160501b8404909116848701526001600160681b03600160901b9093048316606080860191909152865160c08101885260055460ff8082161515835261010082041699820199909952918804831696820196909652600160201b870482169581018690526001600160581b03600160301b88041694810194909452600160881b9095041660a083015280519094919391929116036135835783826040015161ffff1661350b85612b00565b6135159190614a89565b61351f9190614aa8565b826080018181516135309190614ac0565b6001600160581b0316905250836135478484612a55565b6135519190614a72565b6001600160401b031660408401819052608083018051613572908390614ac0565b6001600160581b031690525061362c565b825161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201528490613613908590612a55565b61361d9190614a72565b6001600160401b031660408401525b60006064836020015160ff16866136439190614a89565b61364d9190614b75565b835190915015613683576136618186614a72565b846020018181516136729190614c78565b6001600160401b03169052506136a2565b84846020018181516136959190614c78565b6001600160401b03169052505b6136ac8186614a72565b94506136b88583614aa8565b915080156136e5576136ca8382612e59565b955092506136d88582614a72565b6136e29083614aa8565b91505b83604001516001600160401b0316836040015161ffff1661370586612b00565b61370f9190614a89565b6137199190614aa8565b8360800181815161372a9190614ae8565b6001600160581b031690525060a08301516001600160681b03908116606080870191825285015161ffff90811687526001600160a01b0389166000908152600860208181526040928390208a518154928c0151948c01519651909716600160901b02600160901b600160f81b03196001600160401b03978816600160501b0216600160501b600160f81b031995881662010000026001600160501b03199094169890961697909717919091179290921692909217939093179092556006805485939192613801918591600160401b90910416614c78565b825461010092830a6001600160401b03818102199092169290911602179091558451600580546020808901516040808b015160608c015160808d015160a08e015161ffff1990971698151561ff0019169890981760ff9094169098029290921765ffffffff000019166201000061ffff9384160261ffff60201b191617600160201b929097169190910295909517600160301b600160f01b031916600160301b6001600160581b0390951694909402600160881b600160f01b03191693909317600160881b6001600160681b039092169190910217905590518481526001600160a01b03891692507f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b1910160405180910390a2505050505050565b6001600160a01b03808416600090815260086020908152604091829020825160808082018552915461ffff80821683526001600160401b0362010000808404821685880152600160501b8404909116848801526001600160681b03600160901b9093048316606080860191909152875160c08101895260055460ff8082161515835261010082041698820198909852918704831697820197909752600160201b8604909116958101959095526001600160581b03600160301b85041692850192909252600160881b9092041660a0830152913090851603613a3e5760068054849190600090613a159084906001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550613afc565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316846001600160a01b031603613a9c5760068054849190601090613a15908490600160801b90046001600160401b0316614c78565b6001600160a01b03841660009081526008602052604090208054849190600a90613ad7908490600160501b90046001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b600080826060015161ffff16846000015161ffff1603613b5c57826040015161ffff16613b2885612b00565b613b329190614a89565b915084613b3f8585612a55565b613b499190614a72565b6001600160401b03166040850152613c05565b835161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a0820152613bea908590612a55565b9050613bf68582614a72565b6001600160401b031660408501525b60a08301516001600160681b031660608086019190915283015161ffff9081168552604084015116613c3685612b00565b613c409190614a89565b613c4a9082614aa8565b905084828285608001516001600160581b0316613c679190614aa8565b613c719190614a72565b613c7b9190614a72565b6001600160581b03908116608085019081526001600160a01b039890981660009081526008602090815260409182902087518154898401518a86015160609b8c015161ffff9485166001600160501b031990941693909317620100006001600160401b03938416810291909117600160501b600160f81b031916600160501b9390921692909202600160901b600160f81b03191617600160901b6001600160681b039384160217909355885160058054958b0151968b01519b8b01519e5160a0909b015161ffff1990961691151561ff0019169190911761010060ff909716969096029590951765ffffffff0000191699821690920261ffff60201b191698909817600160201b9b9098169a909a0296909617600160301b600160f01b031916600160301b9590921694909402600160881b600160f01b03191617600160881b949097169390930295909517905550505050565b6001600160a01b038084166000908152600860208181526040808420815160808082018452915461ffff80821683526001600160401b0362010000808404821685890152600160501b8085048316868901526001600160681b03600160901b9586900481166060808901919091529c8f168c52998952878b2088518089018a52905480861682528381048516828c015291820490931683890152939093048816818b0152855160c08101875260055460ff8082161515835261010082041698820198909852928704821695830195909552600160201b860481169882018990526001600160581b03600160301b87041693820193909352600160881b90940490941660a084015283519395919492938392839283921603613f3b5787856040015161ffff16613efd89612b00565b613f079190614a89565b613f119190614aa8565b935087613f1e8887612a55565b613f289190614a72565b6001600160401b03166040880152613fe8565b865161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a08201528890613fcb908990612a55565b613fd59190614a72565b6001600160401b03166040880181905291505b846060015161ffff16866000015161ffff160361404757846040015161ffff1661401187612b00565b61401b9190614a89565b9250876140288787612a55565b6140329190614aa8565b6001600160401b0316604087015250866140f4565b855161ffff908116600090815260076020908152604091829020825160c081018452905460ff8082161515835261010082041692820192909252620100008204841692810192909252600160201b81049092166060820152600160301b82046001600160581b03166080820152600160881b9091046001600160681b031660a082015288906140d7908890612a55565b6140e19190614aa8565b6001600160401b03166040870181905290505b60a0850180516001600160681b039081166060808b0191909152915116878201528501805161ffff908116895290518116875260408601511661413687612b00565b6141409190614a89565b61414a9082614aa8565b9050846040015161ffff1661415e88612b00565b6141689190614a89565b6141729083614aa8565b91508284828488608001516001600160581b03166141909190614aa8565b61419a9190614aa8565b6141a49190614a72565b6141ae9190614a72565b85608001906001600160581b031690816001600160581b03168152505086600860008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160401b0302191690836001600160401b03160217905550604082015181600001600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160126101000a8154816001600160681b0302191690836001600160681b0316021790555090505085600860008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160401b0302191690836001600160401b03160217905550604082015181600001600a6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160000160126101000a8154816001600160681b0302191690836001600160681b0316021790555090505084600560008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a8154816001600160581b0302191690836001600160581b0316021790555060a08201518160000160116101000a8154816001600160681b0302191690836001600160681b0316021790555090505050505050505050505050565b306001600160a01b038416036144bb57600680548291906000906144929084906001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506145b1565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316836001600160a01b0316036145195760068054829190601090614492908490600160801b90046001600160401b0316614bc1565b61deac196001600160a01b038416016145515760068054829190600890614492908490600160401b90046001600160401b0316614bc1565b6001600160a01b03831660009081526008602052604090208054829190600a9061458c908490600160501b90046001600160401b0316614bc1565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b306001600160a01b0383160361460857600680548291906000906145df9084906001600160401b0316614c78565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550505050565b7f0000000000000000000000001fa875249c7d34ec0697737850aecb383dd4e02b6001600160a01b0316826001600160a01b03160361466657600680548291906010906145df908490600160801b90046001600160401b0316614c78565b61deac196001600160a01b0383160161469e57600680548291906008906145df908490600160401b90046001600160401b0316614c78565b6001600160a01b03821660009081526008602052604090208054829190600a906145df908490600160501b90046001600160401b0316614c78565b600060208083528351808285015260005b81811015614706578581018301518582016040015282016146ea565b81811115614718576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461474557600080fd5b919050565b6000806040838503121561475d57600080fd5b6147668361472e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561479d57600080fd5b82356001600160401b03808211156147b457600080fd5b818501915085601f8301126147c857600080fd5b8135818111156147da576147da614774565b8060051b604051601f19603f830116810181811085821117156147ff576147ff614774565b60405291825284820192508381018501918883111561481d57600080fd5b938501935b82851015614842576148338561472e565b84529385019392850192614822565b98975050505050505050565b60006020828403121561486057600080fd5b6112b08261472e565b60008060006060848603121561487e57600080fd5b6148878461472e565b92506148956020850161472e565b9150604084013590509250925092565b8035801515811461474557600080fd5b600080604083850312156148c857600080fd5b6148d18361472e565b91506148df602084016148a5565b90509250929050565b6000602082840312156148fa57600080fd5b6112b0826148a5565b60006020828403121561491557600080fd5b5035919050565b6000806040838503121561492f57600080fd5b823591506148df602084016148a5565b6000806040838503121561495257600080fd5b61495b8361472e565b91506148df6020840161472e565b600080600080600080600080610100898b03121561498657600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600181811c908216806149d257607f821691505b6020821081036149f257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614a6b57614a6b614a43565b5060010190565b600082821015614a8457614a84614a43565b500390565b6000816000190483118215151615614aa357614aa3614a43565b500290565b60008219821115614abb57614abb614a43565b500190565b60006001600160581b0383811690831681811015614ae057614ae0614a43565b039392505050565b60006001600160581b03808316818516808303821115614b0a57614b0a614a43565b01949350505050565b600061ffff808316818516808303821115614b0a57614b0a614a43565b60006001600160401b0380831681851681830481118215151615614b5657614b56614a43565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600082614b8457614b84614b5f565b500490565b600063ffffffff808316818516808303821115614b0a57614b0a614a43565b600060208284031215614bba57600080fd5b5051919050565b60006001600160401b0383811690831681811015614ae057614ae0614a43565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614c315784516001600160a01b031683529383019391830191600101614c0c565b50506001600160a01b03969096166060850152505050608001529392505050565b60006001600160581b0380841680614c6c57614c6c614b5f565b92169190910492915050565b60006001600160401b03808316818516808303821115614b0a57614b0a614a4356fea2646970667358221220dcd092135f46733584e756366930597da29537dc7cbbf1278556e115dfd41ed464736f6c634300080f0033

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

00000000000000000000000027d5b0d8077811358b848d95b2ef231d2980958b000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d0466

-----Decoded View---------------
Arg [0] : _fundAddress (address): 0x27D5b0D8077811358B848d95b2eF231d2980958B
Arg [1] : _pairedToken (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _spiralChef (address): 0xE9422393f9843E62BD28E84CF9ac61D2B63D0466

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000027d5b0d8077811358b848d95b2ef231d2980958b
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 000000000000000000000000e9422393f9843e62bd28e84cf9ac61d2b63d0466


Deployed Bytecode Sourcemap

7575:23875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8697:36;;8730:3;8697:36;;;;;160:25:1;;;148:2;133:18;8697:36:0;;;;;;;;10675:83;;;:::i;:::-;;;;;;;:::i;12201:161::-;;;;;;:::i;:::-;;:::i;:::-;;;1400:14:1;;1393:22;1375:41;;1363:2;1348:18;12201:161:0;1235:187:1;15913:207:0;;;;;;:::i;:::-;;:::i;:::-;;10952:139;;;:::i;8917:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8917:44:0;;;;;;-1:-1:-1;;;8917:44:0;;;;;;-1:-1:-1;;;;;;;;8917:44:0;;;;;;;;;;3333:6:1;3321:19;;;;3303:38;;-1:-1:-1;;;;;3414:15:1;;;3409:2;3394:18;;3387:43;3466:15;;;;3446:18;;;3439:43;-1:-1:-1;;;;;3518:41:1;3513:2;3498:18;;3491:69;3290:3;3275:19;8917:44:0;3078:488:1;15494:113:0;;;;;;:::i;:::-;;:::i;11099:102::-;11169:12;:24;-1:-1:-1;;;11169:24:0;;-1:-1:-1;;;;;11169:24:0;11099:102;;12370:373;;;;;;:::i;:::-;;:::i;9430:53::-;;9476:6;9430:53;;;;;-1:-1:-1;;;;;4068:32:1;;;4050:51;;4038:2;4023:18;9430:53:0;3904:203:1;14167:1319:0;;;;;;:::i;:::-;;:::i;10861:83::-;10927:9;;10861:83;;10927:9;;;;4678:36:1;;4666:2;4651:18;10861:83:0;4536:184:1;9022:44:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11209:658;;;;;;:::i;:::-;;:::i;2766:103::-;;;:::i;8783:31::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8783:31:0;;;;;;-1:-1:-1;;;;;;;;8783:31:0;;;;-1:-1:-1;;;;;;;;8783:31:0;;;;;;;;;;5021:14:1;;5014:22;4996:41;;5085:4;5073:17;;;5068:2;5053:18;;5046:45;5110:6;5152:15;;;5132:18;;;5125:43;;;;5204:15;;5199:2;5184:18;;5177:43;-1:-1:-1;;;;;5257:37:1;5251:3;5236:19;;5229:66;-1:-1:-1;;;;;5332:41:1;5326:3;5311:19;;5304:70;4983:3;4968:19;8783:31:0;4725:655:1;8821:32:0;;;;;-1:-1:-1;;;;;8821:32:0;;;;-1:-1:-1;;;8821:32:0;;;;;-1:-1:-1;;;8821:32:0;;;;;;;;;;-1:-1:-1;;;;;5636:15:1;;;5618:34;;5688:15;;;5683:2;5668:18;;5661:43;5740:15;;5720:18;;;5713:43;;;;5569:2;5554:18;8821:32:0;5385:377:1;8740:36:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;;-1:-1:-1;;;8740:36:0;;;;-1:-1:-1;;;;;;;;8740:36:0;;;;;;;;;;6343:14:1;;6336:22;6318:41;;6402:14;;6395:22;6390:2;6375:18;;6368:50;6437:6;6479:15;;;6459:18;;;6452:43;;;;6531:15;;;6526:2;6511:18;;6504:43;2941:18;;;6597:3;6582:19;;2929:31;2941:18;;;6652:3;6637:19;;2929:31;2941:18;;;6707:3;6692:19;;2929:31;2941:18;;6762:3;6747:19;;2929:31;2941:18;;6817:3;6802:19;;2929:31;2941:18;;6872:3;6857:19;;2929:31;2941:18;;;6928:3;6913:19;;2929:31;5843:10;5832:22;6984:3;6969:19;;5820:35;-1:-1:-1;;;;;3036:30:1;7040:3;7025:19;;3024:43;6305:3;6290:19;8740:36:0;5866:1185:1;9490:27:0;;;;;-1:-1:-1;;;9490:27:0;;;;;;9347:33;;;;;8968:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13094:451;;;;;;:::i;:::-;;:::i;2115:87::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;2115:87;;13857:117;;;;;;:::i;:::-;;:::i;16347:439::-;;;;;;:::i;:::-;;:::i;10766:87::-;;;:::i;16128:211::-;;;;;;:::i;:::-;;:::i;11875:167::-;;;;;;:::i;:::-;;:::i;9151:39::-;;;;;8862:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8862:48:0;;;;;;-1:-1:-1;;;;;;;;8862:48:0;;;;-1:-1:-1;;;;;;;;8862:48:0;;;;;;17698:95;;;;;;:::i;:::-;;:::i;13982:177::-;;;;;;:::i;:::-;;:::i;9197:110::-;;9264:42;9197:110;;13615:146;;;;;;:::i;:::-;;:::i;12050:143::-;;;;;;:::i;:::-;-1:-1:-1;;;;;12158:18:0;;;12131:7;12158:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12050:143;15615:151;;;;;;:::i;:::-;;:::i;16794:896::-;;;;;;:::i;:::-;;:::i;9314:26::-;;;;;-1:-1:-1;;;;;9314:26:0;;;3024:201;;;;;;:::i;:::-;;:::i;15774:131::-;;;;;;:::i;:::-;;:::i;9387:36::-;;;;;10675:83;10712:13;10745:5;10738:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10675:83;:::o;12201:161::-;12276:4;12293:39;868:10;12316:7;12325:6;12293:8;:39::i;:::-;-1:-1:-1;12350:4:0;12201:161;;;;:::o;15913:207::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;;;;;;;;;16007:11;;15990:14:::1;16029:84;16053:6;16049:1;:10;16029:84;;;16081:20;16093:4;16098:1;16093:7;;;;;;;;:::i;:::-;;;;;;;16081:11;:20::i;:::-;16061:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16029:84;;;;15979:141;15913:207:::0;:::o;10952:139::-;11059:12;:24;11005:7;;11032:51;;-1:-1:-1;;;11059:24:0;;-1:-1:-1;;;;;11059:24:0;8677:13;11032:51;:::i;:::-;11025:58;;10952:139;:::o;15494:113::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;15573:11:::1;:26:::0;;-1:-1:-1;;;;;;15573:26:0::1;-1:-1:-1::0;;;;;15573:26:0;;;::::1;::::0;;;::::1;::::0;;15494:113::o;12370:373::-;-1:-1:-1;;;;;12493:19:0;;12468:4;12493:19;;;:11;:19;;;;;;;;868:10;12493:33;;;;;;;;12468:4;;12493:40;;12527:6;;12493:40;:::i;:::-;:45;;12485:98;;;;-1:-1:-1;;;12485:98:0;;10553:2:1;12485:98:0;;;10535:21:1;10592:2;10572:18;;;10565:30;10631:34;10611:18;;;10604:62;-1:-1:-1;;;10682:18:1;;;10675:38;10730:19;;12485:98:0;10351:404:1;12485:98:0;12594:36;12604:6;12612:9;12623:6;12594:9;:36::i;:::-;-1:-1:-1;;;;;12672:19:0;;;;;;:11;:19;;;;;;;;868:10;12672:33;;;;;;;;;12641:72;;12650:6;;12672:40;;12706:6;;12672:40;:::i;:::-;12641:8;:72::i;:::-;-1:-1:-1;12731:4:0;12370:373;;;;;:::o;14167:1319::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14263:24:0;::::1;14282:4;14263:24;::::0;::::1;::::0;:50:::1;;-1:-1:-1::0;;;;;;14291:22:0;::::1;9476:6;14291:22;;14263:50;:73;;;;;14328:8;-1:-1:-1::0;;;;;14317:19:0::1;:7;-1:-1:-1::0;;;;;14317:19:0::1;;;14263:73;14255:82;;;::::0;::::1;;-1:-1:-1::0;;;;;14378:17:0;::::1;14348:27;14378:17:::0;;;:8:::1;:17;::::0;;;;;;;14348:47;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;;::::1;-1:-1:-1::0;;;;;14348:47:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;14348:47:0;::::1;;::::0;;;;-1:-1:-1;;;14348:47:0;;::::1;-1:-1:-1::0;;;;;14348:47:0;;::::1;::::0;;;;;;;;14406:40;;::::1;::::0;::::1;::::0;;14433:13:::1;14406:40:::0;::::1;::::0;;::::1;;;::::0;;14348:47:::1;14406:40:::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;14406:40:0;::::1;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;14406:40:0;::::1;-1:-1:-1::0;;;;;14406:40:0::1;::::0;;;;;;;-1:-1:-1;;;14406:40:0;;::::1;;::::0;;;;14462:24;;;:15:::1;:24:::0;;;;;;14348:47;;14462:24:::1;14461:25;:37:::0;::::1;;;;14490:8;14461:37;14457:927;;;14537:11;:19;;;14519:37;;:6;:14;;;:37;;::::0;14515:448:::1;;14610:39;14629:11;14642:6;14610:18;:39::i;:::-;-1:-1:-1::0;;;;;14580:70:0::1;:20;::::0;;::::1;:70:::0;;;14721:14;::::1;::::0;14694:41:::1;;:26;14580:11:::0;14694:13:::1;:26::i;:::-;:41;;;;:::i;:::-;:62;;;;:::i;:::-;14669:6;:14;;:88;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14669:88:0;;::::1;::::0;;;14776:22;;:13:::1;:22:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;14776:22:0;;;;::::1;;-1:-1:-1::0;;14776:22:0;;;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;14776:22:0;;::::1;::::0;;::::1;;-1:-1:-1::0;;;;14776:22:0;;-1:-1:-1;;;14776:22:0;;;::::1;;;-1:-1:-1::0;;;;;;;;14776:22:0;-1:-1:-1;;;14776:22:0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;;;;14776:22:0;;;;;-1:-1:-1;;;;;;;;14776:22:0;;::::1;::::0;;;::::1;;::::0;;-1:-1:-1;14515:448:0::1;;;14925:19:::0;;14914:31:::1;::::0;;::::1;;::::0;;;:10:::1;:31;::::0;;;;;;;;14882:64;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;;::::0;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;14882:64:0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;14882:64:0;::::1;-1:-1:-1::0;;;;;14882:64:0::1;::::0;;;;-1:-1:-1;;;14882:64:0;;::::1;-1:-1:-1::0;;;;;14882:64:0::1;::::0;;;;::::1;::::0;14925:19;;14882:18:::1;:64::i;:::-;-1:-1:-1::0;;;;;14852:95:0::1;:20;::::0;::::1;:95:::0;14515:448:::1;-1:-1:-1::0;;;;;14977:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;14977:31:0::1;15004:4;14977:31;::::0;;14457:927:::1;;;-1:-1:-1::0;;;;;15039:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:37:::0;::::1;;;;15068:8;15067:9;15039:37;15035:349;;;15116:18;::::0;::::1;::::0;-1:-1:-1;;;;;15093:41:0::1;:20;::::0;;::::1;:41:::0;;;;15171:14;::::1;::::0;15149:36:::1;::::0;;::::1;::::0;;-1:-1:-1;15267:20:0;;::::1;::::0;15252:14;;::::1;::::0;-1:-1:-1;;;;;15225:62:0;;::::1;::::0;:41:::1;:26;15093:11:::0;15225:13:::1;:26::i;:::-;:41;;;;:::i;:::-;:62;;;;:::i;:::-;15200:6;:14;;:88;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15200:88:0;;::::1;::::0;;;-1:-1:-1;;;;;15303:24:0;::::1;15330:5;15303:24:::0;;;:15:::1;:24;::::0;;;;;;;;:32;;-1:-1:-1;;15303:32:0::1;::::0;;15350:22;;:13:::1;:22:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;15350:22:0;;;;::::1;;-1:-1:-1::0;;15350:22:0;;;;;15303:32:::1;;15350:22:::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15350:22:0;;::::1;::::0;;::::1;;-1:-1:-1::0;;;;15350:22:0;;-1:-1:-1;;;15350:22:0;;;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;;;;;15350:22:0;-1:-1:-1;;;15350:22:0;;;::::1;;-1:-1:-1::0;;;;;;;;15350:22:0;;;;;-1:-1:-1;;;;;;;;15350:22:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;15035:349:0::1;-1:-1:-1::0;;;;;15394:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;15394:31:0;;;;;;;;-1:-1:-1;;;;;15394:31:0;;::::1;;;-1:-1:-1::0;;;;;;;;15394:31:0;-1:-1:-1;;;15394:31:0;;;::::1;;-1:-1:-1::0;;;;;;;;15394:31:0;;-1:-1:-1;;;;;;;;15394:31:0;;::::1;::::0;;;::::1;;::::0;;15441:37;;1400:14:1;;1393:22;1375:41;;15441:37:0::1;::::0;1348:18:1;15441:37:0::1;;;;;;;14244:1242;;14167:1319:::0;;:::o;11209:658::-;11275:7;11318:4;-1:-1:-1;;;;;11299:24:0;;;11295:61;;-1:-1:-1;;11332:12:0;:24;-1:-1:-1;;;;;11332:24:0;;11209:658::o;11295:61::-;11382:8;-1:-1:-1;;;;;11371:19:0;:7;-1:-1:-1;;;;;11371:19:0;;11367:56;;-1:-1:-1;;11399:12:0;:24;-1:-1:-1;;;11399:24:0;;-1:-1:-1;;;;;11399:24:0;;11209:658::o;11367:56::-;-1:-1:-1;;;;;11438:22:0;;9476:6;11438:22;:34;;;;-1:-1:-1;11464:8:0;;-1:-1:-1;;;11464:8:0;;;;11438:34;11434:71;;;-1:-1:-1;;11481:12:0;:24;-1:-1:-1;;;11481:24:0;;-1:-1:-1;;;;;11481:24:0;;11209:658::o;11434:71::-;-1:-1:-1;;;;;11520:24:0;;;;;;:15;:24;;;;;;;;11516:63;;;-1:-1:-1;;;;;;11553:17:0;;;;;:8;:17;;;;;:26;-1:-1:-1;;;11553:26:0;;-1:-1:-1;;;;;11553:26:0;;11209:658::o;11516:63::-;-1:-1:-1;;;;;11620:17:0;;11590:27;11620:17;;;:8;:17;;;;;;;;;11590:47;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11590:47:0;;;;;;;;;;;;-1:-1:-1;;;11590:47:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;11590:47:0;;;;;;;;11675:13;:21;11590:47;;-1:-1:-1;;;11675:21:0;;;;11652:44;;11648:130;;11720:46;;;;;;;;11752:13;11720:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11720:46:0;;;;;;;;;-1:-1:-1;;;11720:46:0;;-1:-1:-1;;;;;11720:46:0;;;;;-1:-1:-1;;;11720:46:0;;;-1:-1:-1;;;;;11720:46:0;;;;;;;11739:11;;11720:18;:46::i;:::-;11713:53;11209:658;-1:-1:-1;;;11209:658:0:o;11648:130::-;11838:19;;11827:31;;;;;;;;:10;:31;;;;;;;;;11795:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11795:64:0;;;;;;;;;-1:-1:-1;;;11795:64:0;;-1:-1:-1;;;;;11795:64:0;;;;;-1:-1:-1;;;11795:64:0;;;-1:-1:-1;;;;;11795:64:0;;;;;;;11838:19;;11795:18;:64::i;2766:103::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;2831:30:::1;2858:1;2831:18;:30::i;:::-;2766:103::o:0;13094:451::-;-1:-1:-1;;;;;13186:24:0;;13157:7;13186:24;;;:15;:24;;;;;;;;13185:25;13177:34;;;;;;-1:-1:-1;;;;;13252:17:0;;13222:27;13252:17;;;:8;:17;;;;;;;;;13222:47;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13222:47:0;;;;;;;;;;;;-1:-1:-1;;;13222:47:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;13222:47:0;;;;;;;;13307:13;:21;13222:47;;-1:-1:-1;;;13307:21:0;;;;13284:44;;13280:153;;13401:20;;;;;13352:46;;;;;;;13384:13;13352:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13352:46:0;;;;;;;;;-1:-1:-1;;;13352:46:0;;-1:-1:-1;;;;;13352:46:0;;;;;-1:-1:-1;;;13352:46:0;;;-1:-1:-1;;;;;13352:46:0;;;;;-1:-1:-1;;;;;13352:69:0;;:46;;13401:20;;13352:18;:46::i;:::-;:69;;;;:::i;13280:153::-;13517:20;;;;;13493:19;;13482:31;;;;;;;;:10;:31;;;;;;;;13450:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13450:64:0;;;;;;;;;-1:-1:-1;;;13450:64:0;;-1:-1:-1;;;;;13450:64:0;;;;;-1:-1:-1;;;13450:64:0;;-1:-1:-1;;;;;13450:64:0;;;;;-1:-1:-1;;;;;13450:87:0;;:64;;13517:20;;13450:18;:64::i;13857:117::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;13928:16:::1;:38:::0;;-1:-1:-1;;13928:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13857:117::o;16347:439::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;16437:4:::1;16426:8;:15;16418:24;;;::::0;::::1;;16453:48;::::0;;::::1;::::0;::::1;::::0;;16488:13:::1;16453:48:::0;::::1;::::0;;::::1;;;::::0;;::::1;::::0;::::1;;;::::0;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;16453:48:0;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;;16453:48:0;::::1;-1:-1:-1::0;;;;;16453:48:0::1;::::0;;;;-1:-1:-1;;;16453:48:0;;::::1;-1:-1:-1::0;;;;;16453:48:0::1;::::0;;;;;;;16520:26:::1;::::0;16453:48;16520:26:::1;:::i;:::-;:40;;::::0;16512:49:::1;;;::::0;::::1;;16583:22;::::0;;::::1;::::0;;16572:34:::1;::::0;;::::1;;::::0;;;:10:::1;:34;::::0;;;;;;;;:51;;;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;16572:51:0;;;;::::1;;-1:-1:-1::0;;16572:51:0;;;;;::::1;;::::0;;::::1;;;-1:-1:-1::0;;16572:51:0;;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;16572:51:0;;;;;-1:-1:-1;;;16572:51:0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;;;;16572:51:0;-1:-1:-1;;;;;;;;16572:51:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;;;;16572:51:0;;;;;-1:-1:-1;;;;;;;;16572:51:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;16650:128;;::::1;::::0;::::1;::::0;;16661:22;;16650:128:::1;;::::0;;16685:22;;16650:128:::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;16734:22;;16650:128;;;;;16734:26:::1;::::0;-1:-1:-1;16734:26:0::1;:::i;:::-;16650:128;::::0;;::::1;::::0;;16763:1:::1;16650:128;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;16650:128:0;;;;;;;16634:144;;:13:::1;:144:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;16634:144:0::1;-1:-1:-1::0;;;;;;;;;;;;;16634:144:0;;::::1;-1:-1:-1::0;;;16634:144:0::1;::::0;;;;-1:-1:-1;;;;;;;;16634:144:0;;::::1;-1:-1:-1::0;;;16634:144:0::1;-1:-1:-1::0;;;;16634:144:0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;16634:144:0::1;::::0;;::::1;;;-1:-1:-1::0;;16634:144:0;::::1;;::::0;;;;-1:-1:-1;;16634:144:0;;;;;;;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;16347:439:0:o;10766:87::-;10805:13;10838:7;10831:14;;;;;:::i;16128:211::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;16234:3:::1;16223:8;:14;16214:24;;;::::0;::::1;;16249:13;:39:::0;;-1:-1:-1;;16299:32:0;16249:39:::1;;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;16299:32:0;;;;;;::::1;;;::::0;;16128:211::o;11875:167::-;11953:4;11970:42;868:10;11994:9;12005:6;11970:9;:42::i;17698:95::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;17765:8:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;17765:20:0::1;-1:-1:-1::0;;;;17765:20:0;;::::1;::::0;;;::::1;::::0;;17698:95::o;13982:177::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14069:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;14069:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;14117:34;;1375:41:1;;;14117:34:0::1;::::0;1348:18:1;14117:34:0::1;;;;;;;13982:177:::0;;:::o;13615:146::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;13698:16:::1;:55:::0;;-1:-1:-1;;;;;13698:55:0;;::::1;-1:-1:-1::0;;;13698:55:0::1;-1:-1:-1::0;;;;;13698:55:0;;::::1;::::0;;;::::1;::::0;;13615:146::o;15615:151::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;15699:16:::1;:59:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;15699:59:0::1;-1:-1:-1::0;;;;15699:59:0;;::::1;::::0;;;::::1;::::0;;15615:151::o;16794:896::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;8730:3:::1;16996:9;:19;;16987:29;;;::::0;::::1;;8730:3;17036:10;:20;;17027:30;;;::::0;::::1;;17108:9:::0;17096:8;17077:16:::1;17086:7:::0;17077:6;:16:::1;:::i;:::-;:27;;;;:::i;:::-;:40;;17068:50;;;::::0;::::1;;17172:10:::0;17159:9;17138:18:::1;17148:8:::0;17138:7;:18:::1;:::i;:::-;:30;;;;:::i;:::-;:44;;17129:54;;;::::0;::::1;;17226:6;17194:16;:22;;;:39;;;;;;;;;;;;;;;;;;17277:7;17244:16;:23;;;:41;;;;;;;;;;;;;;;;;;17330:8;17296:16;:24;;;:43;;;;;;;;;;;;;;;;;;17385:9;17350:16;:25;;;:45;;;;;;;;;;;;;;;;;;17439:7;17406:16;:23;;;:41;;;;;;;;;;;;;;;;;;17492:8;17458:16;:24;;;:43;;;;;;;;;;;;;;;;;;17547:9;17512:16;:25;;;:45;;;;;;;;;;;;;;;;;;17604:10;17568:16;:26;;;:47;;;;;;;;;;;;;;;;;;17626:56;17643:4;9264:42;17677:3;17671:10;17626:8;:56::i;:::-;16794:896:::0;;;;;;;;:::o;3024:201::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3113:22:0;::::1;3105:73;;;::::0;-1:-1:-1;;;3105:73:0;;11984:2:1;3105:73:0::1;::::0;::::1;11966:21:1::0;12023:2;12003:18;;;11996:30;12062:34;12042:18;;;12035:62;-1:-1:-1;;;12113:18:1;;;12106:36;12159:19;;3105:73:0::1;11782:402:1::0;3105:73:0::1;3189:28;3208:8;3189:18;:28::i;:::-;3024:201:::0;:::o;15774:131::-;2161:7;2188:6;-1:-1:-1;;;;;2188:6:0;868:10;2335:23;2327:68;;;;-1:-1:-1;;;2327:68:0;;;;;;;:::i;:::-;15848:16:::1;:49:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;15848:49:0::1;-1:-1:-1::0;;;;15848:49:0;;::::1;::::0;;;::::1;::::0;;15774:131::o;12751:335::-;-1:-1:-1;;;;;12844:19:0;;12836:68;;;;-1:-1:-1;;;12836:68:0;;12391:2:1;12836:68:0;;;12373:21:1;12430:2;12410:18;;;12403:30;12469:34;12449:18;;;12442:62;-1:-1:-1;;;12520:18:1;;;12513:34;12564:19;;12836:68:0;12189:400:1;12836:68:0;-1:-1:-1;;;;;12923:21:0;;12915:68;;;;-1:-1:-1;;;12915:68:0;;12796:2:1;12915:68:0;;;12778:21:1;12835:2;12815:18;;;12808:30;12874:34;12854:18;;;12847:62;-1:-1:-1;;;12925:18:1;;;12918:32;12967:19;;12915:68:0;12594:398:1;12915:68:0;-1:-1:-1;;;;;12994:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13046:32;;160:25:1;;;13046:32:0;;133:18:1;13046:32:0;;;;;;;12751:335;;;:::o;22094:608::-;-1:-1:-1;;;;;22175:14:0;;22149:23;22175:14;;;:8;:14;;;;;;;;22149:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22149:40:0;;;;;;;-1:-1:-1;;;22149:40:0;;;;;;;-1:-1:-1;;;22149:40:0;;;-1:-1:-1;;;;;22149:40:0;;;;;;;;;;;22200;;;;;;;22227:13;22200:40;;;;;;;;;22149;22200;;;;;;;;;;;;;;;;;-1:-1:-1;;;22200:40:0;;;;;;;;;;;;-1:-1:-1;;;22200:40:0;;-1:-1:-1;;;;;22200:40:0;;;;;;;;-1:-1:-1;;;22200:40:0;;;;;;;;22255:21;;;:15;:21;;;;;;22149:40;;22255:21;;:58;;;22299:6;:14;;;22280:33;;:7;:15;;;:33;;;22255:58;22251:97;;;22330:7;;22094:608;:::o;22251:97::-;22423:15;;22412:27;;;;;;;;:10;:27;;;;;;;;;22384:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22384:56:0;;;;;;;;;-1:-1:-1;;;22384:56:0;;-1:-1:-1;;;;;22384:56:0;;;;;-1:-1:-1;;;22384:56:0;;;-1:-1:-1;;;;;22384:56:0;;;;;;;22423:15;;22384:18;:56::i;:::-;-1:-1:-1;;;;;22358:83:0;:16;;;;:83;;;22500:14;;;22477:37;;:22;22358:7;22477:13;:22::i;:::-;:37;;;;:::i;:::-;:56;;;;:::i;:::-;22452:6;:14;;:82;;;;;;;:::i;:::-;-1:-1:-1;;;;;22452:82:0;;;;;;22564:14;;;;;;22546:32;;;;;;22608:18;;;;;-1:-1:-1;;;;;22589:37:0;;;:16;;;:37;;;-1:-1:-1;;;;;22637:14:0;;;22546:15;22637:14;;;:8;:14;;;;-1:-1:-1;22637:14:0;;;;:24;;;;;;;;;;;;;;;;-1:-1:-1;;;22637:24:0;-1:-1:-1;;;;;;;;;;;;;22637:24:0;;;-1:-1:-1;;;22637:24:0;;-1:-1:-1;;;;;;;;22637:24:0;;;;;;;;-1:-1:-1;;;;;;22637:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22672:22;;:13;:22;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22672:22:0;-1:-1:-1;;;;;;;;22672:22:0;;;;-1:-1:-1;;;22672:22:0;;;;;-1:-1:-1;;;;;;;;22672:22:0;;;-1:-1:-1;;;22672:22:0;-1:-1:-1;;;;22672:22:0;;;;;;;;;;;-1:-1:-1;;22672:22:0;;;;;22637:24;22672:22;-1:-1:-1;;22672:22:0;;;;;;;-1:-1:-1;;22672:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22094:608:0:o;17801:4285::-;17928:2;-1:-1:-1;;;;;17920:10:0;:4;-1:-1:-1;;;;;17920:10:0;;17916:81;;17947:17;17959:4;17947:11;:17::i;17916:81::-;18015:6;18025:1;18015:11;18007:20;;;;;;-1:-1:-1;;;;;18046:18:0;;18038:68;;;;-1:-1:-1;;;18038:68:0;;13199:2:1;18038:68:0;;;13181:21:1;13238:2;13218:18;;;13211:30;13277:34;13257:18;;;13250:62;-1:-1:-1;;;13328:18:1;;;13321:35;13373:19;;18038:68:0;12997:401:1;18038:68:0;-1:-1:-1;;;;;18125:16:0;;18117:64;;;;-1:-1:-1;;;18117:64:0;;13605:2:1;18117:64:0;;;13587:21:1;13644:2;13624:18;;;13617:30;13683:34;13663:18;;;13656:62;-1:-1:-1;;;13734:18:1;;;13727:33;13777:19;;18117:64:0;13403:399:1;18117:64:0;18194:27;2188:6;;-1:-1:-1;;;;;18236:15:0;;;2188:6;;18236:15;;;;:32;;-1:-1:-1;2161:7:0;2188:6;-1:-1:-1;;;;;18255:13:0;;;2188:6;;18255:13;;18236:32;18232:3583;;;18311:12;:24;18350:51;;;;;;;;18385:16;18350:51;;;;;;;;;18311:24;18350:51;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;;;;-1:-1:-1;;;18350:51:0;;;;;;;-1:-1:-1;;;18350:51:0;;;-1:-1:-1;;;;;18350:51:0;;;;;;;;;18311:24;;;18431:49;;18531:8;-1:-1:-1;;;;;18531:14:0;;;;;;;:54;;;;-1:-1:-1;;;;;;18567:18:0;;;;;;:12;:18;;;;;;;;18566:19;18531:54;:92;;;;-1:-1:-1;;;;;;18607:16:0;;;;;;:12;:16;;;;;;;;18606:17;18531:92;:120;;;;;18644:7;18531:120;:169;;;;-1:-1:-1;18672:16:0;:28;;;18531:169;:216;;;;-1:-1:-1;18722:16:0;:25;;;;;;18721:26;18531:216;18509:614;;;18782:16;:32;;-1:-1:-1;;18782:32:0;;;;;18873:31;;;;:36;;18907:2;18873:36;:::i;:::-;-1:-1:-1;;;;;18855:54:0;:15;:54;18851:157;;;18952:31;;;;:36;;18986:2;18952:36;:::i;:::-;-1:-1:-1;;;;;18934:54:0;;;18851:157;19028:25;19037:15;19028:8;:25::i;:::-;19074:16;:33;;-1:-1:-1;;19074:33:0;;;18509:614;19155:16;:25;-1:-1:-1;;;;;19199:18:0;;19139:12;19199:18;;;:12;:18;;;;;;19155:25;;;;;;;19154:26;;19199:18;;:38;;-1:-1:-1;;;;;;19221:16:0;;;;;;:12;:16;;;;;;;;19199:38;19195:94;;;-1:-1:-1;19268:5:0;19195:94;19309:7;19305:2499;;;19338:12;;;19479:8;-1:-1:-1;;;;;19473:14:0;;;;;;;:45;;;;-1:-1:-1;19491:22:0;;;;:27;;;;19473:45;19469:1646;;;19584:4;19561:12;:22;;;19554:29;;:6;:29;;;;:::i;:::-;:34;;;;:::i;:::-;19547:41;;19665:4;19644:12;:20;;;19637:27;;:6;:27;;;;:::i;:::-;:32;;;;:::i;:::-;19615:54;;19744:4;19724:12;:19;;;19717:26;;:6;:26;;;;:::i;:::-;:31;;;;:::i;:::-;19696:52;;19820:4;19798:12;:21;;;19791:28;;:6;:28;;;;:::i;:::-;:33;;;;:::i;:::-;19775:49;-1:-1:-1;19855:8:0;;19851:469;;19896:41;19911:4;19925;19932;19896:14;:41::i;:::-;19972:22;;19968:148;;20031:53;20054:4;20061:2;20065:18;20031:14;:53::i;:::-;20150:17;;20146:147;;20204:57;20227:4;9476:6;20247:13;20204:14;:57::i;:::-;19469:1646;;;20413:8;-1:-1:-1;;;;;20405:16:0;:4;-1:-1:-1;;;;;20405:16:0;;:46;;;;-1:-1:-1;20425:21:0;;;;:26;;;;20405:46;20401:714;;;20516:4;20494:12;:21;;;20487:28;;:6;:28;;;;:::i;:::-;:33;;;;:::i;:::-;20480:40;;20596:4;20576:12;:19;;;20569:26;;:6;:26;;;;:::i;:::-;:31;;;;:::i;:::-;20547:53;;20674:4;20655:12;:18;;;20648:25;;:6;:25;;;;:::i;:::-;:30;;;;:::i;:::-;20627:51;;20749:4;20728:12;:20;;;20721:27;;:6;:27;;;;:::i;:::-;:32;;;;:::i;:::-;20705:48;-1:-1:-1;20784:8:0;;20780:312;;20825:62;20840:4;20854;20861:25;20868:18;20861:4;:25;:::i;:::-;20825:14;:62::i;:::-;20922:17;;20918:147;;20976:57;20999:4;9476:6;21019:13;20976:14;:57::i;:::-;21137:14;21147:4;21137:14;;:::i;:::-;;;21198:12;:28;;;21229:4;21198:35;;;;:::i;:::-;21180:53;;:15;:53;:71;;;;;21249:2;-1:-1:-1;;;;;21237:14:0;:8;-1:-1:-1;;;;;21237:14:0;;;21180:71;21176:609;;;21297:28;;-1:-1:-1;;;21297:28:0;;21280:14;21297:28;;;14754:25:1;;;-1:-1:-1;;;;;14815:32:1;;;14795:18;;;14788:60;21280:14:0;;21297:10;:21;;;;;;14727:18:1;;21297:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;21326:2;21297:31;:::i;:::-;21371:33;;-1:-1:-1;;;21371:33:0;;21355:13;21371:33;;;14754:25:1;;;-1:-1:-1;;;;;14815:32:1;;;14795:18;;;14788:60;21280:48:0;;-1:-1:-1;21355:13:0;21371:10;:26;;;;14727:18:1;;21371:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21355:49;;21454:12;:28;;;21435:47;;:15;:47;;:64;;;;;21495:4;21486:5;:13;;21435:64;21431:146;;;21541:8;:6;21548:1;21541:8;:::i;:::-;21532:17;;21431:146;21638:6;21622:13;21632:2;21622:9;:13::i;:::-;:22;;;;:::i;:::-;21611:6;:34;;21603:43;;;;;;21737:23;;;;21731:29;;;;:5;:29;:::i;:::-;21700:12;:28;;;:60;;;;;;:::i;:::-;21681:15;:79;;21673:88;;;;;;21253:532;;21176:609;19318:2486;;;19305:2499;18270:3545;;;;18232:3583;21825:32;21840:4;21846:2;21850:6;21825:14;:32::i;:::-;21874:23;;21870:209;;21953:44;;;;;;;;21962:13;21953:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21953:44:0;;;;;;;;;-1:-1:-1;;;21953:44:0;;-1:-1:-1;;;;;21953:44:0;;;;;-1:-1:-1;;;21953:44:0;;;-1:-1:-1;;;;;21953:44:0;;;;;;;21977:19;21953:8;:44::i;:::-;21914:83;;21915:13;21914:83;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21914:83:0;;;;;;-1:-1:-1;;21914:83:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;21914:83:0;;;;;;;-1:-1:-1;;;;21914:83:0;;-1:-1:-1;;;21914:83:0;;;;;;;;;-1:-1:-1;;;;;;;;21914:83:0;-1:-1:-1;;;;;;;;21914:83:0;;;;;;;-1:-1:-1;;;;;;;;21914:83:0;;;;;-1:-1:-1;;;;;;;;21914:83:0;;;;;;;;;;;;22012:55;;21914:83;;-1:-1:-1;21914:83:0;;-1:-1:-1;;22012:55:0;;21914:83;;-1:-1:-1;;;;;22012:55:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;22012:55:0;;;;;-1:-1:-1;;;;;22012:55:0;;;;;;21870:209;17905:4181;17801:4285;;;:::o;30121:329::-;30226:7;30246:13;30262:26;30276:11;30262:13;:26::i;:::-;30246:42;;30306:11;:20;;;-1:-1:-1;;;;;30306:25:0;30330:1;30306:25;:136;;30441:1;30306:136;;;30424:14;;;;30418:20;;;;:5;:20;:::i;:::-;30399:6;:18;;;-1:-1:-1;;;;;30334:83:0;30378:11;:20;;;-1:-1:-1;;;;;30334:64:0;30356:11;:20;;;-1:-1:-1;;;;;30335:41:0;30341:6;:14;;;30335:20;;:5;:20;;;;:::i;:::-;:41;;;;:::i;:::-;30334:64;;;;:::i;:::-;:83;;;;:::i;:::-;:104;;;;:::i;:::-;30299:143;30121:329;-1:-1:-1;;;;30121:329:0:o;29921:192::-;29995:7;30042:11;:20;;;-1:-1:-1;;;;;30022:40:0;:11;:17;;;-1:-1:-1;;;;;30022:40:0;;:83;;30088:11;:17;;;30022:83;;;30065:11;:20;;;30022:83;-1:-1:-1;;;;;30015:90:0;;29921:192;-1:-1:-1;;29921:192:0:o;3385:191::-;3459:16;3478:6;;-1:-1:-1;;;;;3495:17:0;;;-1:-1:-1;;;;;;3495:17:0;;;;;;3528:40;;3478:6;;;;;;;3528:40;;3459:16;3528:40;3448:128;3385:191;:::o;31049:396::-;31141:16;;;31155:1;31141:16;;;;;;;;31117:21;;31141:16;;;;;;;;;;-1:-1:-1;31141:16:0;31117:40;;31186:4;31168;31173:1;31168:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31168:23:0;;;-1:-1:-1;;;;;31168:23:0;;;;;31212:11;31202:4;31207:1;31202:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31202:21:0;;;:7;;;;;;;;;:21;31385:11;;31244:193;;-1:-1:-1;;;31244:193:0;;9264:42;;31244:64;;:193;;31323:11;;31349:1;;31366:4;;31385:11;;;31411:15;;31244:193;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31096:349;31049:396;:::o;22710:730::-;22816:2;-1:-1:-1;;;;;22801:26:0;22810:4;-1:-1:-1;;;;;22801:26:0;;22820:6;22801:26;;;;160:25:1;;148:2;133:18;;14:177;22801:26:0;;;;;;;;-1:-1:-1;;;;;22844:21:0;;;;;;:15;:21;;;;;;;;:45;;;;-1:-1:-1;;;;;;22870:19:0;;;;;;:15;:19;;;;;;;;22869:20;22844:45;22840:593;;;22906:39;22928:4;22934:2;22938:6;22906:21;:39::i;22840:593::-;-1:-1:-1;;;;;22968:21:0;;;;;;:15;:21;;;;;;;;22967:22;:45;;;;-1:-1:-1;;;;;;22993:19:0;;;;;;:15;:19;;;;;;;;22967:45;22963:470;;;-1:-1:-1;;;;;;;23033:17:0;;;23029:151;;23071:29;23087:4;23093:6;23071:15;:29::i;23029:151::-;23141:37;23161:4;23167:2;23171:6;23141:19;:37::i;22963:470::-;-1:-1:-1;;;;;23202:21:0;;;;;;:15;:21;;;;;;;;23201:22;:46;;;;-1:-1:-1;;;;;;23228:19:0;;;;;;:15;:19;;;;;;;;23227:20;23201:46;23197:236;;;23264:35;23282:4;23288:2;23292:6;23264:17;:35::i;23197:236::-;-1:-1:-1;;;;;23321:21:0;;;;;;:15;:21;;;;;;;;:44;;;;-1:-1:-1;;;;;;23346:19:0;;;;;;:15;:19;;;;;;;;23321:44;23317:116;;;23382:39;23404:4;23410:2;23414:6;23382:21;:39::i;30458:582::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30559:7:0;30612:3;30597:6;:14;;;:18;;;;:::i;:::-;-1:-1:-1;;;;;30588:27:0;:6;:27;:57;;30642:3;30627:6;:14;;;:18;;;;:::i;:::-;-1:-1:-1;;;;;30588:57:0;;;;30618:6;30588:57;30579:66;-1:-1:-1;30660:11:0;;30656:343;;30688:22;30737:6;:18;;;-1:-1:-1;;;;;30713:42:0;30721:6;:14;;;-1:-1:-1;;;;;30713:23:0;:42;;;;:::i;:::-;30688:67;;30795:6;30770;:14;;:32;;;;;;;:::i;:::-;-1:-1:-1;;;;;30770:32:0;;;;;;30862:14;;;;30817:19;;-1:-1:-1;30847:29:0;;;:14;:29;:::i;:::-;30817:60;;30906:11;-1:-1:-1;;;;;30906:16:0;30921:1;30906:16;:34;;30939:1;30906:34;;;30925:11;30906:34;-1:-1:-1;;;;;30955:32:0;:18;;;:32;-1:-1:-1;;30656:343:0;-1:-1:-1;31017:6:0;;31025;;-1:-1:-1;30458:582:0:o;24864:1212::-;-1:-1:-1;;;;;24981:12:0;;;24957:21;24981:12;;;:8;:12;;;;;;;;;24957:36;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24957:36:0;;;;;;;;;;-1:-1:-1;;;24957:36:0;;;;;;;;;-1:-1:-1;;;;;;;;24957:36:0;;;;;;;;;;;;;25004:40;;;;;;;25031:13;25004:40;;;;;;;;;24957:36;25004:40;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25004:40:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;25004:40:0;;;;;;;;;;-1:-1:-1;;;25004:40:0;;;;;;;;24957:36;25075:4;25059:21;;;;25055:286;;25097:12;:42;;25132:6;;25097:12;:24;;:42;;25132:6;;-1:-1:-1;;;;;25097:42:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;25097:42:0;;;;;-1:-1:-1;;;;;25097:42:0;;;;;;25055:286;;;25178:8;-1:-1:-1;;;;;25170:16:0;:4;-1:-1:-1;;;;;25170:16:0;;25166:175;;25203:12;:42;;25238:6;;25203:12;:24;;:42;;25238:6;;-1:-1:-1;;;25203:42:0;;-1:-1:-1;;;;;25203:42:0;;:::i;25166:175::-;-1:-1:-1;;;;;25288:14:0;;;;;;:8;:14;;;;;:41;;25322:6;;25288:14;:23;;:41;;25322:6;;-1:-1:-1;;;25288:41:0;;-1:-1:-1;;;;;25288:41:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;25288:41:0;;;;;-1:-1:-1;;;;;25288:41:0;;;;;;25166:175;25352:18;25382;25432:6;:14;;;25415:31;;:5;:13;;;:31;;;25411:361;;25497:6;:14;;;25476:35;;:20;25490:5;25476:13;:20::i;:::-;:35;;;;:::i;:::-;25463:48;;25586:6;25550:33;25569:5;25576:6;25550:18;:33::i;:::-;:42;;;;:::i;:::-;-1:-1:-1;;;;;25526:67:0;:14;;;:67;25411:361;;;25686:13;;25675:25;;;;;;;;:10;:25;;;;;;;;;25649:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25649:52:0;;;;;;;;;-1:-1:-1;;;25649:52:0;;-1:-1:-1;;;;;25649:52:0;;;;;-1:-1:-1;;;25649:52:0;;;-1:-1:-1;;;;;25649:52:0;;;;;;;25686:13;;25649:18;:52::i;:::-;25635:66;-1:-1:-1;25740:19:0;25753:6;25635:66;25740:19;:::i;:::-;-1:-1:-1;;;;;25716:44:0;:14;;;:44;25411:361;25799:18;;;;-1:-1:-1;;;;;25782:35:0;:14;;;;:35;;;;25845:14;;;25829:30;;;;;;-1:-1:-1;25905:14:0;;;25884:35;:20;25782:5;25884:13;:20::i;:::-;:35;;;;:::i;:::-;25870:49;;;;:::i;:::-;;;25997:6;25984:10;25971;25954:6;:14;;;-1:-1:-1;;;;;25954:27:0;;;;;:::i;:::-;:40;;;;:::i;:::-;:49;;;;:::i;:::-;-1:-1:-1;;;;;25930:74:0;;;:14;;;:74;;;-1:-1:-1;;;;;26015:12:0;;;;;;;;:8;:12;;;;;;;;;:20;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26015:20:0;;;;;;;;-1:-1:-1;;;;;26015:20:0;;;;;;;;;-1:-1:-1;;;;;;;;26015:20:0;-1:-1:-1;;;26015:20:0;;;;;;;;-1:-1:-1;;;;;;;;26015:20:0;;-1:-1:-1;;;;;;;;26015:20:0;;;;;;;;26046:22;;:13;:22;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26046:22:0;;;;;;-1:-1:-1;;26046:22:0;;;;;26015:20;26046:22;;;;;;;;;;;;-1:-1:-1;;26046:22:0;;;;;;;-1:-1:-1;;;;26046:22:0;;;;;-1:-1:-1;;;26046:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;26046:22:0;-1:-1:-1;;;26046:22:0;;;;;;;;-1:-1:-1;;;;;;;;26046:22:0;;-1:-1:-1;;;26046:22:0;;;;;;;;;;;;;;-1:-1:-1;;;;24864:1212:0:o;23448:1408::-;-1:-1:-1;;;;;23549:14:0;;23523:23;23549:14;;;:8;:14;;;;;;;;23523:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23523:40:0;;;;;;;;;;-1:-1:-1;;;23523:40:0;;;;;;;;;-1:-1:-1;;;;;;;;23523:40:0;;;;;;;;;;;;;23574;;;;;;;23601:13;23574:40;;;;;;;;;23523;23574;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23574:40:0;;;;;;;;;;-1:-1:-1;;;;;;;;23574:40:0;;;;;;;;;;-1:-1:-1;;;23574:40:0;;;;;;;;23658:15;;23523:40;;23574;;23523:23;;23658:33;;;23654:407;;23773:6;23756;:14;;;23733:37;;:22;23747:7;23733:13;:22::i;:::-;:37;;;;:::i;:::-;:46;;;;:::i;:::-;23708:6;:14;;:72;;;;;;;:::i;:::-;-1:-1:-1;;;;;23708:72:0;;;-1:-1:-1;23859:6:0;23821:35;23840:7;23849:6;23821:18;:35::i;:::-;:44;;;;:::i;:::-;-1:-1:-1;;;;;23795:71:0;:16;;;:71;;;23881:14;;;:34;;;;23795:71;;23881:34;:::i;:::-;-1:-1:-1;;;;;23881:34:0;;;-1:-1:-1;23654:407:0;;;24022:15;;24011:27;;;;;;;;:10;:27;;;;;;;;;23983:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23983:56:0;;;;;;;;;-1:-1:-1;;;23983:56:0;;-1:-1:-1;;;;;23983:56:0;;;;;-1:-1:-1;;;23983:56:0;;;-1:-1:-1;;;;;23983:56:0;;;;;24042:6;;23983:56;;24022:15;;23983:18;:56::i;:::-;:65;;;;:::i;:::-;-1:-1:-1;;;;;23957:92:0;:16;;;:92;23654:407;24071:16;24114:3;24098:6;:14;;;24090:23;;:6;:23;;;;:::i;:::-;:27;;;;:::i;:::-;24132:14;;24071:46;;-1:-1:-1;24128:162:0;;;24187:17;24196:8;24187:6;:17;:::i;:::-;24163:7;:13;;:42;;;;;;;:::i;:::-;-1:-1:-1;;;;;24163:42:0;;;-1:-1:-1;24128:162:0;;;24271:6;24247:7;:13;;:31;;;;;;;:::i;:::-;-1:-1:-1;;;;;24247:31:0;;;-1:-1:-1;24128:162:0;24300:18;24310:8;24300:18;;:::i;:::-;;-1:-1:-1;24329:20:0;24300:18;24329:20;;:::i;:::-;;-1:-1:-1;24364:13:0;;24360:138;;24413:26;24422:6;24430:8;24413;:26::i;:::-;24394:45;-1:-1:-1;24394:45:0;-1:-1:-1;24468:17:0;24394:45;24468:8;:17;:::i;:::-;24454:31;;;;:::i;:::-;;;24360:138;24573:7;:16;;;-1:-1:-1;;;;;24533:56:0;24556:6;:14;;;24533:37;;:22;24547:7;24533:13;:22::i;:::-;:37;;;;:::i;:::-;:56;;;;:::i;:::-;24508:6;:14;;:82;;;;;;;:::i;:::-;-1:-1:-1;;;;;24508:82:0;;;-1:-1:-1;24620:18:0;;;;-1:-1:-1;;;;;24601:37:0;;;:16;;;;:37;;;24667:14;;;24649:32;;;;;;-1:-1:-1;;;;;24692:14:0;;24649:15;24692:14;;;:8;:14;;;;-1:-1:-1;24692:14:0;;;;:24;;;;;;;;;;;;;;;;;-1:-1:-1;;;24692:24:0;-1:-1:-1;;;;;;;;;;;;;24692:24:0;;;-1:-1:-1;;;24692:24:0;;-1:-1:-1;;;;;;;;24692:24:0;;;;;-1:-1:-1;;;;;;24692:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24727:12;:46;;24762:10;;24727:12;;:46;;24762:10;;-1:-1:-1;;;24727:46:0;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24727:46:0;;;;;;;;;;;;;;;;24784:22;;:13;:22;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24784:22:0;;;;;;-1:-1:-1;;24784:22:0;;;;;;;;;;;;;;;;-1:-1:-1;;24784:22:0;;;;;;;-1:-1:-1;;;;24784:22:0;;-1:-1:-1;;;24784:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;24784:22:0;-1:-1:-1;;;;;;;;24784:22:0;;;;;;;-1:-1:-1;;;;;;;;24784:22:0;;;;;-1:-1:-1;;;;;;;;24784:22:0;;;;;;;;;;24825:23;;160:25:1;;;-1:-1:-1;;;;;24825:23:0;;;-1:-1:-1;24825:23:0;;133:18:1;24825:23:0;;;;;;;23512:1344;;;;23448:1408;;:::o;26084:1245::-;-1:-1:-1;;;;;26201:14:0;;;26175:23;26201:14;;;:8;:14;;;;;;;;;26175:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26175:40:0;;;;;;;;;;-1:-1:-1;;;26175:40:0;;;;;;;;;-1:-1:-1;;;;;;;;26175:40:0;;;;;;;;;;;;;26226;;;;;;;26253:13;26226:40;;;;;;;;;26175;26226;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26226:40:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;26226:40:0;;;;;;;;;;-1:-1:-1;;;26226:40:0;;;;;;;;26175;26295:4;26281:19;;;;26277:280;;26317:12;:42;;26352:6;;26317:12;:24;;:42;;26352:6;;-1:-1:-1;;;;;26317:42:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;26317:42:0;;;;;-1:-1:-1;;;;;26317:42:0;;;;;;26277:280;;;26397:8;-1:-1:-1;;;;;26391:14:0;:2;-1:-1:-1;;;;;26391:14:0;;26387:170;;26422:12;:42;;26457:6;;26422:12;:24;;:42;;26457:6;;-1:-1:-1;;;26422:42:0;;-1:-1:-1;;;;;26422:42:0;;:::i;26387:170::-;-1:-1:-1;;;;;26506:12:0;;;;;;:8;:12;;;;;:39;;26538:6;;26506:12;:21;;:39;;26538:6;;-1:-1:-1;;;26506:39:0;;-1:-1:-1;;;;;26506:39:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;26506:39:0;;;;;-1:-1:-1;;;;;26506:39:0;;;;;;26387:170;26567:20;26599;26653:6;:14;;;26634:33;;:7;:15;;;:33;;;26630:380;;26722:6;:14;;;26699:37;;:22;26713:7;26699:13;:22::i;:::-;:37;;;;:::i;:::-;26684:52;;26815:6;26777:35;26796:7;26805:6;26777:18;:35::i;:::-;:44;;;;:::i;:::-;-1:-1:-1;;;;;26751:71:0;:16;;;:71;26630:380;;;26918:15;;26907:27;;;;;;;;:10;:27;;;;;;;;;26879:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26879:56:0;;;;;;;;;-1:-1:-1;;;26879:56:0;;-1:-1:-1;;;;;26879:56:0;;;;;-1:-1:-1;;;26879:56:0;;;-1:-1:-1;;;;;26879:56:0;;;;;;;26918:15;;26879:18;:56::i;:::-;26864:71;-1:-1:-1;26976:21:0;26991:6;26864:71;26976:21;:::i;:::-;-1:-1:-1;;;;;26950:48:0;:16;;;:48;26630:380;27039:18;;;;-1:-1:-1;;;;;27020:37:0;:16;;;;:37;;;;27086:14;;;27068:32;;;;;;-1:-1:-1;27150:14:0;;;27127:37;:22;27020:7;27127:13;:22::i;:::-;:37;;;;:::i;:::-;27111:53;;;;:::i;:::-;;;27246:6;27231:12;27216;27199:6;:14;;;-1:-1:-1;;;;;27199:29:0;;;;;:::i;:::-;:44;;;;:::i;:::-;:53;;;;:::i;:::-;-1:-1:-1;;;;;27175:78:0;;;:14;;;:78;;;-1:-1:-1;;;;;27264:14:0;;;;;;;;:8;:14;;;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27264:24:0;;;;;;;;-1:-1:-1;;;;;27264:24:0;;;;;;;;;-1:-1:-1;;;;;;;;27264:24:0;-1:-1:-1;;;27264:24:0;;;;;;;;-1:-1:-1;;;;;;;;27264:24:0;;-1:-1:-1;;;;;;;;27264:24:0;;;;;;;;27299:22;;:13;:22;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27299:22:0;;;;;;-1:-1:-1;;27299:22:0;;;;;27264:24;27299:22;;;;;;;;;;;;-1:-1:-1;;27299:22:0;;;;;;;-1:-1:-1;;;;27299:22:0;;;;;-1:-1:-1;;;27299:22:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;27299:22:0;-1:-1:-1;;;27299:22:0;;;;;;;;-1:-1:-1;;;;;;;;27299:22:0;;-1:-1:-1;;;27299:22:0;;;;;;;;;;;;;;-1:-1:-1;;;;26084:1245:0:o;27337:1675::-;-1:-1:-1;;;;;27452:14:0;;;27426:23;27452:14;;;:8;:14;;;;;;;;27426:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27426:40:0;;;;;;;;;;-1:-1:-1;;;27426:40:0;;;;;;;;;-1:-1:-1;;;;;;;;27426:40:0;;;;;;;;;;;;;;27501:12;;;;;;;;;;;27477:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27524:40;;;;;;;27551:13;27524:40;;;;;;;;;27426;27524;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27524:40:0;;;;;;;;;;-1:-1:-1;;;;;;;;27524:40:0;;;;;;;;;;-1:-1:-1;;;27524:40:0;;;;;;;;;;27701:15;;27426:40;;27477:36;;27524:40;;27426:23;;;;;;27701:33;;27697:392;;27806:6;27789;:14;;;27766:37;;:22;27780:7;27766:13;:22::i;:::-;:37;;;;:::i;:::-;:46;;;;:::i;:::-;27751:61;;27891:6;27853:35;27872:7;27881:6;27853:18;:35::i;:::-;:44;;;;:::i;:::-;-1:-1:-1;;;;;27827:71:0;:16;;;:71;27697:392;;;28004:15;;27993:27;;;;;;;;:10;:27;;;;;;;;;27965:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27965:56:0;;;;;;;;;-1:-1:-1;;;27965:56:0;;-1:-1:-1;;;;;27965:56:0;;;;;-1:-1:-1;;;27965:56:0;;;-1:-1:-1;;;;;27965:56:0;;;;;28024:6;;27965:56;;28004:15;;27965:18;:56::i;:::-;:65;;;;:::i;:::-;-1:-1:-1;;;;;27939:92:0;:16;;;:92;;;;-1:-1:-1;27697:392:0;28120:6;:14;;;28103:31;;:5;:13;;;:31;;;28099:399;;28185:6;:14;;;28164:35;;:20;28178:5;28164:13;:20::i;:::-;:35;;;;:::i;:::-;28151:48;;28274:6;28238:33;28257:5;28264:6;28238:18;:33::i;:::-;:42;;;;:::i;:::-;-1:-1:-1;;;;;28214:67:0;:14;;;:67;-1:-1:-1;28309:6:0;28099:399;;;28418:13;;28407:25;;;;;;;;:10;:25;;;;;;;;;28381:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28381:52:0;;;;;;;;;-1:-1:-1;;;28381:52:0;;-1:-1:-1;;;;;28381:52:0;;;;;-1:-1:-1;;;28381:52:0;;;-1:-1:-1;;;;;28381:52:0;;;;;28436:6;;28381:52;;28418:13;;28381:18;:52::i;:::-;:61;;;;:::i;:::-;-1:-1:-1;;;;;28357:86:0;:14;;;:86;;;;-1:-1:-1;28099:399:0;28527:18;;;;;-1:-1:-1;;;;;28508:37:0;;;:16;;;;:37;;;;28573:18;;28556:35;:14;;;:35;28620:14;;;;28602:32;;;;;;28661:14;;28645:30;;;;-1:-1:-1;28721:14:0;;;28700:35;:20;28556:5;28700:13;:20::i;:::-;:35;;;;:::i;:::-;28686:49;;;;:::i;:::-;;;28785:6;:14;;;28762:37;;:22;28776:7;28762:13;:22::i;:::-;:37;;;;:::i;:::-;28746:53;;;;:::i;:::-;;;28894:10;28879:12;28866:10;28851:12;28834:6;:14;;;-1:-1:-1;;;;;28834:29:0;;;;;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;:70;;;;:::i;:::-;28810:6;:14;;:95;-1:-1:-1;;;;;28810:95:0;;;-1:-1:-1;;;;;28810:95:0;;;;;28933:7;28916:8;:14;28925:4;-1:-1:-1;;;;;28916:14:0;-1:-1:-1;;;;;28916:14:0;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28916:24:0;;;;;-1:-1:-1;;;;;28916:24:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28916:24:0;;;;;-1:-1:-1;;;;;28916:24:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28916:24:0;;;;;-1:-1:-1;;;;;28916:24:0;;;;;;;;;28966:5;28951:8;:12;28960:2;-1:-1:-1;;;;;28951:12:0;-1:-1:-1;;;;;28951:12:0;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28951:20:0;;;;;-1:-1:-1;;;;;28951:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28951:20:0;;;;;-1:-1:-1;;;;;28951:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28951:20:0;;;;;-1:-1:-1;;;;;28951:20:0;;;;;;;;;28998:6;28982:13;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28982:22:0;;;;;-1:-1:-1;;;;;28982:22:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28982:22:0;;;;;-1:-1:-1;;;;;28982:22:0;;;;;;;;;27415:1597;;;;;;;27337:1675;;;:::o;29020:893::-;29133:4;-1:-1:-1;;;;;29117:21:0;;;29113:395;;29155:12;:42;;29190:6;;29155:12;:24;;:42;;29190:6;;-1:-1:-1;;;;;29155:42:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;29155:42:0;;;;;-1:-1:-1;;;;;29155:42:0;;;;;;29113:395;;;29236:8;-1:-1:-1;;;;;29228:16:0;:4;-1:-1:-1;;;;;29228:16:0;;29224:284;;29261:12;:42;;29296:6;;29261:12;:24;;:42;;29296:6;;-1:-1:-1;;;29261:42:0;;-1:-1:-1;;;;;29261:42:0;;:::i;29224:284::-;-1:-1:-1;;;;;;;29334:19:0;;;29330:178;;29370:12;:42;;29405:6;;29370:12;:24;;:42;;29405:6;;-1:-1:-1;;;29370:42:0;;-1:-1:-1;;;;;29370:42:0;;:::i;29330:178::-;-1:-1:-1;;;;;29455:14:0;;;;;;:8;:14;;;;;:41;;29489:6;;29455:14;:23;;:41;;29489:6;;-1:-1:-1;;;29455:41:0;;-1:-1:-1;;;;;29455:41:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;29455:41:0;;;;;-1:-1:-1;;;;;29455:41:0;;;;;;29330:178;29537:4;-1:-1:-1;;;;;29523:19:0;;;29519:387;;29559:12;:42;;29594:6;;29559:12;:24;;:42;;29594:6;;-1:-1:-1;;;;;29559:42:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;29559:42:0;;;;;-1:-1:-1;;;;;29559:42:0;;;;;;16029:84:::1;15979:141;15913:207:::0;:::o;29519:387::-;29639:8;-1:-1:-1;;;;;29633:14:0;:2;-1:-1:-1;;;;;29633:14:0;;29629:277;;29664:12;:42;;29699:6;;29664:12;:24;;:42;;29699:6;;-1:-1:-1;;;29664:42:0;;-1:-1:-1;;;;;29664:42:0;;:::i;29629:277::-;-1:-1:-1;;;;;;;29737:17:0;;;29733:173;;29771:12;:42;;29806:6;;29771:12;:24;;:42;;29806:6;;-1:-1:-1;;;29771:42:0;;-1:-1:-1;;;;;29771:42:0;;:::i;29733:173::-;-1:-1:-1;;;;;29855:12:0;;;;;;:8;:12;;;;;:39;;29887:6;;29855:12;:21;;:39;;29887:6;;-1:-1:-1;;;29855:39:0;;-1:-1:-1;;;;;29855:39:0;;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:173::-;866:20;;-1:-1:-1;;;;;915:31:1;;905:42;;895:70;;961:1;958;951:12;895:70;798:173;;;:::o;976:254::-;1044:6;1052;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;1220:2;1205:18;;;;1192:32;;-1:-1:-1;;;976:254:1:o;1427:127::-;1488:10;1483:3;1479:20;1476:1;1469:31;1519:4;1516:1;1509:15;1543:4;1540:1;1533:15;1559:1121;1643:6;1674:2;1717;1705:9;1696:7;1692:23;1688:32;1685:52;;;1733:1;1730;1723:12;1685:52;1773:9;1760:23;-1:-1:-1;;;;;1843:2:1;1835:6;1832:14;1829:34;;;1859:1;1856;1849:12;1829:34;1897:6;1886:9;1882:22;1872:32;;1942:7;1935:4;1931:2;1927:13;1923:27;1913:55;;1964:1;1961;1954:12;1913:55;2000:2;1987:16;2022:2;2018;2015:10;2012:36;;;2028:18;;:::i;:::-;2074:2;2071:1;2067:10;2106:2;2100:9;2169:2;2165:7;2160:2;2156;2152:11;2148:25;2140:6;2136:38;2224:6;2212:10;2209:22;2204:2;2192:10;2189:18;2186:46;2183:72;;;2235:18;;:::i;:::-;2271:2;2264:22;2321:18;;;2355:15;;;;-1:-1:-1;2397:11:1;;;2393:20;;;2425:19;;;2422:39;;;2457:1;2454;2447:12;2422:39;2481:11;;;;2501:148;2517:6;2512:3;2509:15;2501:148;;;2583:23;2602:3;2583:23;:::i;:::-;2571:36;;2534:12;;;;2627;;;;2501:148;;;2668:6;1559:1121;-1:-1:-1;;;;;;;;1559:1121:1:o;2685:186::-;2744:6;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;2836:29;2855:9;2836:29;:::i;3571:328::-;3648:6;3656;3664;3717:2;3705:9;3696:7;3692:23;3688:32;3685:52;;;3733:1;3730;3723:12;3685:52;3756:29;3775:9;3756:29;:::i;:::-;3746:39;;3804:38;3838:2;3827:9;3823:18;3804:38;:::i;:::-;3794:48;;3889:2;3878:9;3874:18;3861:32;3851:42;;3571:328;;;;;:::o;4112:160::-;4177:20;;4233:13;;4226:21;4216:32;;4206:60;;4262:1;4259;4252:12;4277:254;4342:6;4350;4403:2;4391:9;4382:7;4378:23;4374:32;4371:52;;;4419:1;4416;4409:12;4371:52;4442:29;4461:9;4442:29;:::i;:::-;4432:39;;4490:35;4521:2;4510:9;4506:18;4490:35;:::i;:::-;4480:45;;4277:254;;;;;:::o;7056:180::-;7112:6;7165:2;7153:9;7144:7;7140:23;7136:32;7133:52;;;7181:1;7178;7171:12;7133:52;7204:26;7220:9;7204:26;:::i;7241:180::-;7300:6;7353:2;7341:9;7332:7;7328:23;7324:32;7321:52;;;7369:1;7366;7359:12;7321:52;-1:-1:-1;7392:23:1;;7241:180;-1:-1:-1;7241:180:1:o;7426:248::-;7491:6;7499;7552:2;7540:9;7531:7;7527:23;7523:32;7520:52;;;7568:1;7565;7558:12;7520:52;7604:9;7591:23;7581:33;;7633:35;7664:2;7653:9;7649:18;7633:35;:::i;8140:260::-;8208:6;8216;8269:2;8257:9;8248:7;8244:23;8240:32;8237:52;;;8285:1;8282;8275:12;8237:52;8308:29;8327:9;8308:29;:::i;:::-;8298:39;;8356:38;8390:2;8379:9;8375:18;8356:38;:::i;8405:661::-;8527:6;8535;8543;8551;8559;8567;8575;8583;8636:3;8624:9;8615:7;8611:23;8607:33;8604:53;;;8653:1;8650;8643:12;8604:53;-1:-1:-1;;8676:23:1;;;8746:2;8731:18;;8718:32;;-1:-1:-1;8797:2:1;8782:18;;8769:32;;8848:2;8833:18;;8820:32;;-1:-1:-1;8899:3:1;8884:19;;8871:33;;-1:-1:-1;8951:3:1;8936:19;;8923:33;;-1:-1:-1;9003:3:1;8988:19;;8975:33;;-1:-1:-1;9055:3:1;9040:19;9027:33;;-1:-1:-1;8405:661:1;-1:-1:-1;8405:661:1:o;9071:380::-;9150:1;9146:12;;;;9193;;;9214:61;;9268:4;9260:6;9256:17;9246:27;;9214:61;9321:2;9313:6;9310:14;9290:18;9287:38;9284:161;;9367:10;9362:3;9358:20;9355:1;9348:31;9402:4;9399:1;9392:15;9430:4;9427:1;9420:15;9284:161;;9071:380;;;:::o;9456:356::-;9658:2;9640:21;;;9677:18;;;9670:30;9736:34;9731:2;9716:18;;9709:62;9803:2;9788:18;;9456:356::o;9817:127::-;9878:10;9873:3;9869:20;9866:1;9859:31;9909:4;9906:1;9899:15;9933:4;9930:1;9923:15;9949:127;10010:10;10005:3;10001:20;9998:1;9991:31;10041:4;10038:1;10031:15;10065:4;10062:1;10055:15;10081:135;10120:3;10141:17;;;10138:43;;10161:18;;:::i;:::-;-1:-1:-1;10208:1:1;10197:13;;10081:135::o;10221:125::-;10261:4;10289:1;10286;10283:8;10280:34;;;10294:18;;:::i;:::-;-1:-1:-1;10331:9:1;;10221:125::o;10760:168::-;10800:7;10866:1;10862;10858:6;10854:14;10851:1;10848:21;10843:1;10836:9;10829:17;10825:45;10822:71;;;10873:18;;:::i;:::-;-1:-1:-1;10913:9:1;;10760:168::o;10933:128::-;10973:3;11004:1;11000:6;10997:1;10994:13;10991:39;;;11010:18;;:::i;:::-;-1:-1:-1;11046:9:1;;10933:128::o;11066:235::-;11105:4;-1:-1:-1;;;;;11208:10:1;;;;11178;;11230:12;;;11227:38;;;11245:18;;:::i;:::-;11282:13;;11066:235;-1:-1:-1;;;11066:235:1:o;11306:242::-;11345:3;-1:-1:-1;;;;;11424:2:1;11421:1;11417:10;11454:2;11451:1;11447:10;11485:3;11481:2;11477:12;11472:3;11469:21;11466:47;;;11493:18;;:::i;:::-;11529:13;;11306:242;-1:-1:-1;;;;11306:242:1:o;11553:224::-;11592:3;11620:6;11653:2;11650:1;11646:10;11683:2;11680:1;11676:10;11714:3;11710:2;11706:12;11701:3;11698:21;11695:47;;;11722:18;;:::i;13807:270::-;13846:7;-1:-1:-1;;;;;13923:2:1;13920:1;13916:10;13953:2;13950:1;13946:10;14009:3;14005:2;14001:12;13996:3;13993:21;13986:3;13979:11;13972:19;13968:47;13965:73;;;14018:18;;:::i;:::-;14058:13;;13807:270;-1:-1:-1;;;;13807:270:1:o;14082:127::-;14143:10;14138:3;14134:20;14131:1;14124:31;14174:4;14171:1;14164:15;14198:4;14195:1;14188:15;14214:120;14254:1;14280;14270:35;;14285:18;;:::i;:::-;-1:-1:-1;14319:9:1;;14214:120::o;14339:228::-;14378:3;14406:10;14443:2;14440:1;14436:10;14473:2;14470:1;14466:10;14504:3;14500:2;14496:12;14491:3;14488:21;14485:47;;;14512:18;;:::i;14859:184::-;14929:6;14982:2;14970:9;14961:7;14957:23;14953:32;14950:52;;;14998:1;14995;14988:12;14950:52;-1:-1:-1;15021:16:1;;14859:184;-1:-1:-1;14859:184:1:o;15048:229::-;15087:4;-1:-1:-1;;;;;15184:10:1;;;;15154;;15206:12;;;15203:38;;;15221:18;;:::i;15282:980::-;15544:4;15592:3;15581:9;15577:19;15623:6;15612:9;15605:25;15649:2;15687:6;15682:2;15671:9;15667:18;15660:34;15730:3;15725:2;15714:9;15710:18;15703:31;15754:6;15789;15783:13;15820:6;15812;15805:22;15858:3;15847:9;15843:19;15836:26;;15897:2;15889:6;15885:15;15871:29;;15918:1;15928:195;15942:6;15939:1;15936:13;15928:195;;;16007:13;;-1:-1:-1;;;;;16003:39:1;15991:52;;16098:15;;;;16063:12;;;;16039:1;15957:9;15928:195;;;-1:-1:-1;;;;;;;16179:32:1;;;;16174:2;16159:18;;16152:60;-1:-1:-1;;;16243:3:1;16228:19;16221:35;16140:3;15282:980;-1:-1:-1;;;15282:980:1:o;16267:205::-;16306:1;-1:-1:-1;;;;;16383:2:1;16380:1;16376:10;16405:3;16395:37;;16412:18;;:::i;:::-;16450:10;;16446:20;;;;;16267:205;-1:-1:-1;;16267:205:1:o;16477:236::-;16516:3;-1:-1:-1;;;;;16589:2:1;16586:1;16582:10;16619:2;16616:1;16612:10;16650:3;16646:2;16642:12;16637:3;16634:21;16631:47;;;16658:18;;:::i

Swarm Source

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