ETH Price: $3,187.17 (+3.70%)

Token

F.U.T. (FUT)
 

Overview

Max Total Supply

1,000,000,000 FUT

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
vagab0nd.eth
Balance
17,491,975.298865815795647669 FUT

Value
$0.00
0x92a9a2db96c8128b2111705137d29f90755cbcbd
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:
FUT

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-17
*/

// SPDX-License-Identifier: Unlicensed

/*

                                        U̼͍͕T͉͙̞I̪͇͓L̻͍͍I͖̙̞Z̪̝͓E̪͜
                                        T̼̠͎H̟͖̟I̼̟̘S̪̼̻

*/

pragma solidity 0.8.15;

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address internal _owner;
    address private _previousOwner;
    uint256 public _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


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


        //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock.");
        require(block.timestamp > _lockTime , "Contract is locked.");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero addy");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero addy");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero addy");
        require(spender != address(0), "ERC20: approve to the zero addy");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract ERC20Burnable is Context, ERC20 {
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract FUT is ERC20Burnable, Ownable {
    using SafeMath for uint256;
    uint256 constant _initial_supply = 1 * (10**9) * (10**18); // 1 billion tokens, 18 decimals

    uint256 public tokensBurned;
    address payable public _markettingWallet;
    address payable public _buybackWallet;
    uint256 public maxWalletSize = _initial_supply.mul(2).div(100); // 2% of totalsupply
    uint256 public maxTransactionSize = _initial_supply.mul(2).div(100); // 2% of totalsupply
    uint256 public swapThreshold = _initial_supply.mul(2).div(1000); // .02% of totalsupply

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 liquidityLockTime = 0;

    mapping(address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isExcludedFromMaxTransaction;
    mapping(address => bool) public _isExcludedFromMaxWallet;

    enum FeeType {
        None,
        Buy,
        Sell
    }

    struct BuyFee {
        uint16 liquidity;
        uint16 dev;
        uint16 buyback;
    }

    struct SellFee {
        uint16 liquidity;
        uint16 dev;
        uint16 buyback;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    uint256 constant FEE_DENOM = 1000; // smallest fee unit is 0.1%

    event excludedFromFee(address account);
    event excludedFromMaxTransaction(address account);
    event excludedFromMaxWallet(address account);

    event includedInFee(address account);
    event includedInMaxTransaction(address account);
    event includedInMaxWallet(address account);

    event developmentWalletUpdated(address developmentWallet);
    event buybackWalletUpdated(address buybackWallet);
    event liquidityRemoved(uint256 amountToken, uint256 amountETH);

    event swapThresholdUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event MaxWalletSizeUpdated(uint256 maxWalletSize);
    event MaxTransactionSizeUpdated(uint256 maxTransactionSize);

    event LiquidityLockTimeUpdated(uint256 lockTime);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20("F.U.T.", "FUT") {
        // set fees to max
        setSellFee(5, 15, 5);
        setBuyFee(5, 10, 5);

        _markettingWallet = payable(msg.sender);
        _buybackWallet = payable(msg.sender);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        _mint(msg.sender, _initial_supply.mul(50).div(100)); // for liquidity pool
        _mint(0x000000000000000000000000000000000000dEaD, _initial_supply.mul(50).div(100)); // burned to dEaD

        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromMaxTransaction[msg.sender] = true;
        _isExcludedFromMaxWallet[msg.sender] = true;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromMaxTransaction[address(this)] = true;
        _isExcludedFromMaxWallet[address(this)] = true;

        _isExcludedFromFee[_markettingWallet] = true;
        _isExcludedFromMaxTransaction[_markettingWallet] = true;
        _isExcludedFromMaxWallet[_markettingWallet] = true;

        _isExcludedFromFee[_buybackWallet] = true;
        _isExcludedFromMaxTransaction[_buybackWallet] = true;
        _isExcludedFromMaxWallet[_buybackWallet] = true;
    }

    receive() external payable {}

    // public functions
    function transfer(address to, uint256 amount)
        public
        override
        returns (bool)
    {
        address _owner = _msgSender();
        (bool takeFee, FeeType feeType) = checkFeeRequired(_owner, to);

        checkTransferAllowed(_owner, to, amount, takeFee);

        if (takeFee) {
            //check for swapAndLiquify available
            uint256 contractBalance = balanceOf(address(this));
            if (
                contractBalance >= swapThreshold &&
                !inSwapAndLiquify &&
                swapAndLiquifyEnabled &&
                _owner != uniswapV2Pair
            ) {
                //perform swapAndLiquify
                swapAndLiquify(swapThreshold);
            }

            uint256 fee = calculateFee(amount, feeType);
            _transfer(_owner, address(this), fee);
            _transfer(_owner, to, amount - fee);
        } else {
            _transfer(_owner, to, amount);
        }
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        address spender = _msgSender();

        (bool takeFee, FeeType feeType) = checkFeeRequired(from, to);
        checkTransferAllowed(from, to, amount, takeFee);

        _spendAllowance(from, spender, amount);

        if (takeFee) {
            //check for swapAndLiquify available
            uint256 contractBalance = balanceOf(address(this));
            if (
                contractBalance >= swapThreshold &&
                !inSwapAndLiquify &&
                swapAndLiquifyEnabled &&
                from != uniswapV2Pair
            ) {
                //perform swapAndLiquify
                swapAndLiquify(swapThreshold);
            }

            uint256 fee = calculateFee(amount, feeType);
            _transfer(from, address(this), fee);
            _transfer(from, to, amount - fee);
        } else {
            _transfer(from, to, amount);
        }

        return true;
    }

    function burn(uint256 amount) public override {
        _burn(_msgSender(), amount);
        tokensBurned += amount;
    }

    function burnFrom(address account, uint256 amount) public override {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
        tokensBurned += amount;
    }

    function liquidityLockedUntil() external view returns (uint256) {
        return liquidityLockTime;
    }

    // internal functions

    function checkTransferAllowed(
        address from,
        address to,
        uint256 amount,
        bool takeFee
    ) internal view {
        if (to != uniswapV2Pair) {
            require(
                balanceOf(to) + amount < maxWalletSize ||
                    _isExcludedFromMaxWallet[to],
                "Exceeds receivers maximum wallet size"
            );
        }
        if (takeFee) {
            require(
                amount <= maxTransactionSize ||
                    (_isExcludedFromMaxTransaction[from] ||
                        _isExcludedFromMaxTransaction[to]),
                "Transaction larger than allowed"
            );
        }
    }

    function checkFeeRequired(address from, address to)
        internal
        view
        returns (bool, FeeType)
    {
        if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
            return (true, FeeType.Buy);
        } else if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
            return (true, FeeType.Sell);
        } else {
            return (false, FeeType.None);
        }
    }

    function calculateFee(uint256 amount, FeeType feeType)
        internal
        view
        returns (uint256 fee)
    {
        uint256 feePercentage = 0;
        if (feeType == FeeType.Buy) {
            feePercentage =
                buyFee.liquidity +
                buyFee.dev +
                buyFee.buyback;
        } else if (feeType == FeeType.Sell) {
            feePercentage =
                sellFee.liquidity +
                sellFee.dev +
                sellFee.buyback;
        }
        fee = (amount * feePercentage) / FEE_DENOM;
        return fee;
    }

    function swapAndLiquify(uint256 tokens) internal lockTheSwap {
        // split tokens by buy fee ratio
        uint256 feeDenominator = 
            buyFee.liquidity +
            buyFee.dev +
            buyFee.buyback;

        uint256 liquidityFee = (tokens * buyFee.liquidity) / feeDenominator;

        // sell tokens minus half of liquidity cut for eth
        swapTokensForEth(tokens - (liquidityFee / 2));

        // split resulting eth balance of contract by ratio, giving liquidity half weight
        uint256 contractEth = address(this).balance;

        uint256 ethDenominator = 
            (buyFee.liquidity / 2) +
            buyFee.dev +
            buyFee.buyback;

        uint256 liquidityEth = (contractEth * (buyFee.liquidity / 2)) /
            ethDenominator;
        uint256 buybackEth = (contractEth * buyFee.buyback) / ethDenominator;

        // provide liquidity with eth portion and remaining tokens

        if (liquidityEth > 0) {
            // Add liquidity to uniswap
            addLiquidity(liquidityFee / 2, liquidityEth);
        }

        _buybackWallet.transfer(buybackEth);

        // send all remaining eth to marketting wallet (in case of rounding)
        _markettingWallet.transfer(address(this).balance); 

        emit SwapAndLiquify(tokens, contractEth, liquidityFee / 2);
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    // admin functions
    function setMarkettingWallet(address marketting) external onlyOwner {
        require(marketting != address(0), "Development wallet cannot be 0x0");
        _markettingWallet = payable(marketting);
    }

    function setBuybackWallet(address buyback) external onlyOwner {
        require(buyback != address(0), "Buyback wallet cannot be 0x0");
        _buybackWallet = payable(buyback);
        emit buybackWalletUpdated(_buybackWallet);
    }

    function setSellFee(
        uint16 liquidity,
        uint16 dev,
        uint16 buyback
    ) public onlyOwner {
        require(
            liquidity + dev + buyback < FEE_DENOM,
            "invalid fee structure"
        );

        sellFee.liquidity = liquidity;
        sellFee.dev = dev;
        sellFee.buyback = buyback;
    }

    function setBuyFee(
        uint16 liquidity,
        uint16 dev,
        uint16 buyback
    ) public onlyOwner {
        require(
            liquidity + dev + buyback < FEE_DENOM,
            "invalid fee structure"
        );

        buyFee.liquidity = liquidity;
        buyFee.dev = dev;
        buyFee.buyback = buyback;
    }

    function setSwapThreshold(uint256 newSwapThreshold) external onlyOwner {
        swapThreshold = newSwapThreshold;
        emit swapThresholdUpdated(newSwapThreshold);
    }

    function setMaxTransactionSize(uint256 maxTxSize) external onlyOwner {
        maxTransactionSize = maxTxSize;
        emit MaxTransactionSizeUpdated(maxTransactionSize);
    }

    function setMaxWalletSize(uint256 maxWallet) external onlyOwner {
        maxWalletSize = maxWallet;
        emit MaxWalletSizeUpdated(maxWalletSize);
    }

    function excludeFromFee(address account) external onlyOwner {
        require(
            !_isExcludedFromFee[account],
            "Account is already excluded from fee"
        );
        _isExcludedFromFee[account] = true;

        emit excludedFromFee(account);
    }

    function excludeFromMaxTransaction(address account) external onlyOwner {
        require(
            !_isExcludedFromMaxTransaction[account],
            "Account is already excluded from max transaction"
        );
        _isExcludedFromMaxTransaction[account] = true;

        emit excludedFromMaxTransaction(account);
    }

    function excludeFromMaxWallet(address account) external onlyOwner {
        require(
            !_isExcludedFromMaxWallet[account],
            "Account is already excluded from max wallet"
        );
        _isExcludedFromMaxWallet[account] = true;

        emit excludedFromMaxWallet(account);
    }

    function includeInFee(address account) external onlyOwner {
        require(
            _isExcludedFromFee[account],
            "Account is already included in fee"
        );
        _isExcludedFromFee[account] = false;

        emit includedInFee(account);
    }

    function includeInMaxTransaction(address account) external onlyOwner {
        require(
            _isExcludedFromMaxTransaction[account],
            "Account is already included in max transaction"
        );
        _isExcludedFromMaxTransaction[account] = false;

        emit includedInMaxTransaction(account);
    }

    function includeInMaxWallet(address account) external onlyOwner {
        require(
            _isExcludedFromMaxWallet[account],
            "Account is already included in max wallet"
        );
        _isExcludedFromMaxWallet[account] = false;

        emit includedInMaxWallet(account);
    }

    function updateLiquidityLock(uint256 lockTime) external onlyOwner {
        require(
            block.timestamp > liquidityLockTime,
            "New liquidity lock time must be after the current lock time"
        );
        liquidityLockTime = lockTime;
        emit LiquidityLockTimeUpdated(lockTime);
    }

    // wrapper for Uniswap removeLiquidity, can only be called if not locked
    function removeLiquidityETH(
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external onlyOwner {
        require(
            block.timestamp > liquidityLockTime,
            "Liquidity removal is locked"
        );

        (uint256 amountToken, uint256 amountETH) = uniswapV2Router
            .removeLiquidityETH(
                address(this),
                liquidity,
                amountTokenMin,
                amountETHMin,
                to,
                deadline
            );
        emit liquidityRemoved(amountToken, amountETH);
    }

    function toggleSwapAndLiquifyEnabled() external onlyOwner {
        swapAndLiquifyEnabled = !swapAndLiquifyEnabled;
        emit SwapAndLiquifyEnabledUpdated(swapAndLiquifyEnabled);
    }

    function adminSwapAndLiquify(uint256 swapBalance) external onlyOwner {
        swapAndLiquify(swapBalance);
    }

    // Recovery functions

    function rescueEth() external payable onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueTokens(address _stuckToken, uint256 _amount) external onlyOwner
    {
        IERC20(_stuckToken).transfer(msg.sender, _amount);
    }

    function rescueBurn(uint256 _amount) external onlyOwner {
        _transfer(address(this), msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"LiquidityLockTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionSize","type":"uint256"}],"name":"MaxTransactionSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"MaxWalletSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buybackWallet","type":"address"}],"name":"buybackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"developmentWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"excludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"excludedFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"excludedFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"includedInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"includedInMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"includedInMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"liquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"swapThresholdUpdated","type":"event"},{"inputs":[],"name":"_buybackWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_markettingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapBalance","type":"uint256"}],"name":"adminSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityLockedUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","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":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_stuckToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyback","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketting","type":"address"}],"name":"setMarkettingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxSize","type":"uint256"}],"name":"setMaxTransactionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"buyback","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"updateLiquidityLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526200004560646200003160026b033b2e3c9fd0803ce80000006200049760201b62001f2e1790919060201c565b6200052e60201b62001fb71790919060201c565b600b556200007560646200003160026b033b2e3c9fd0803ce80000006200049760201b62001f2e1790919060201c565b600c55620000a66103e86200003160026b033b2e3c9fd0803ce80000006200049760201b62001f2e1790919060201c565b600d55600e805461ff0019166101001790556000600f55348015620000ca57600080fd5b506040518060400160405280600681526020016523172a972a1760d11b8152506040518060400160405280600381526020016211955560ea1b815250816003908162000117919062000932565b50600462000126828262000932565b50620001329150503390565b600580546001600160a01b0319166001600160a01b039290921691821790556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36200018b6005600f8162000578565b6200019a6005600a8162000670565b60098054336001600160a01b03199182168117909255600a805490911690911790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa15801562000210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002369190620009fe565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa9190620009fe565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031e9190620009fe565b6001600160a01b0390811660a05281166080526200036733620003616064620000316b033b2e3c9fd0803ce8000000603262000497602090811b62001f2e17901c565b62000768565b6200039b61dead6200036160646200003160326b033b2e3c9fd0803ce80000006200049760201b62001f2e1790919060201c565b503360009081526010602081815260408084208054600160ff1991821681179092556011808552838720805483168417905560128086528488208054841685179055308852868652848820805484168517905581865284882080548416851790558086528488208054841685179055600980546001600160a01b039081168a52888852868a208054861687179055815481168a52838852868a2080548616871790559054811689528187528589208054851686179055600a805482168a52978752858920805485168617905587548116895291865284882080548416851790559554168652939092529092208054909116909117905562000b20565b600082600003620004ab5750600062000528565b6000620004b9838562000a3f565b905082620004c8858362000a61565b14620005255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200052583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200084d60201b60201c565b6005546001600160a01b03163314620005c35760405162461bcd60e51b8152602060048201819052602482015260008051602062003d2c83398151915260448201526064016200051c565b6103e881620005d3848662000a84565b620005df919062000a84565b61ffff1610620006325760405162461bcd60e51b815260206004820152601560248201527f696e76616c69642066656520737472756374757265000000000000000000000060448201526064016200051c565b6014805461ffff94851663ffffffff199091161762010000938516939093029290921761ffff60201b19166401000000009190931602919091179055565b6005546001600160a01b03163314620006bb5760405162461bcd60e51b8152602060048201819052602482015260008051602062003d2c83398151915260448201526064016200051c565b6103e881620006cb848662000a84565b620006d7919062000a84565b61ffff16106200072a5760405162461bcd60e51b815260206004820152601560248201527f696e76616c69642066656520737472756374757265000000000000000000000060448201526064016200051c565b6013805461ffff94851663ffffffff199091161762010000938516939093029290921761ffff60201b19166401000000009190931602919091179055565b6001600160a01b038216620007c05760405162461bcd60e51b815260206004820152601c60248201527f45524332303a206d696e7420746f20746865207a65726f20616464790000000060448201526064016200051c565b8060026000828254620007d4919062000aad565b90915550506001600160a01b038216600090815260208190526040812080548392906200080390849062000aad565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008183620008715760405162461bcd60e51b81526004016200051c919062000ac8565b50600062000880848662000a61565b95945050505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008b957607f821691505b602082108103620008da57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200088957600081815260208120601f850160051c81016020861015620009095750805b601f850160051c820191505b818110156200092a5782815560010162000915565b505050505050565b81516001600160401b038111156200094e576200094e6200088e565b62000966816200095f8454620008a4565b84620008e0565b602080601f8311600181146200099e5760008415620009855750858301515b600019600386901b1c1916600185901b1785556200092a565b600085815260208120601f198616915b82811015620009cf57888601518255948401946001909101908401620009ae565b5085821015620009ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a1157600080fd5b81516001600160a01b03811681146200052557600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a5c5762000a5c62000a29565b500290565b60008262000a7f57634e487b7160e01b600052601260045260246000fd5b500490565b600061ffff80831681851680830382111562000aa45762000aa462000a29565b01949350505050565b6000821982111562000ac35762000ac362000a29565b500190565b600060208083528351808285015260005b8181101562000af75785810183015185820160400152820162000ad9565b8181111562000b0a576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05161319962000b936000396000818161061101528181610c8501528181611895015281816121150152818161217f01526121f80152600081816103e701528181611d4201528181612a7601528181612b2f01528181612b6b01528181612be50152612c2101526131996000f3fe6080604052600436106103395760003560e01c806379af25a6116101ab578063acfaec0d116100f7578063e7873b5811610095578063eb62b5341161006f578063eb62b53414610a15578063ee1fae3c14610a2a578063eee1c12b14610a4a578063f2fde38b14610a6a57600080fd5b8063e7873b58146109bf578063ea1644d5146109d5578063ea2f0b37146109f557600080fd5b8063ce31a06b116100d1578063ce31a06b14610921578063d1d7d7ef14610929578063dd46706414610959578063dd62ed3e1461097957600080fd5b8063acfaec0d146108c1578063bc3e0739146108e1578063c9a2ed171461090157600080fd5b806395d89b4111610164578063a457c2d71161013e578063a457c2d71461084c578063a69df4b51461086c578063a9059cbb14610881578063a9e59da3146108a157600080fd5b806395d89b41146107f75780639d0014b11461080c5780639f27b6571461082c57600080fd5b806379af25a61461074d57806379cc6790146107635780637cf140241461078357806388ea6d7e146107a35780638da5cb5b146107c35780638f3fa860146107e157600080fd5b8063395093511161028557806357376198116102235780636adf6818116101fd5780636adf6818146106b257806370a08231146106d2578063715018a614610708578063768dc7101461071d57600080fd5b80635737619814610652578063576d2414146106725780635b700d911461069257600080fd5b8063437823ec1161025f578063437823ec146105af57806347062402146105cf57806349bd5a5e146105ff5780634a74bb021461063357600080fd5b8063395093511461054f5780633f33e9091461056f57806342966c681461058f57600080fd5b80631d0adc07116102f25780632b14ca56116102cc5780632b14ca561461048e5780632e222fa2146104e3578063313ce5671461050357806332a710b91461051f57600080fd5b80631d0adc071461043657806323b872dd1461045857806328b13b611461047857600080fd5b80630445b6671461034557806306fdde031461036e578063095ea7b31461039057806314669b8b146103c05780631694505e146103d557806318160ddd1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b50610383610a8a565b6040516103659190612cad565b34801561039c57600080fd5b506103b06103ab366004612d17565b610b1c565b6040519015158152602001610365565b3480156103cc57600080fd5b50600f5461035b565b3480156103e157600080fd5b506104097f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610365565b34801561042d57600080fd5b5060025461035b565b34801561044257600080fd5b50610456610451366004612d43565b610b36565b005b34801561046457600080fd5b506103b0610473366004612d60565b610c14565b34801561048457600080fd5b5061035b600c5481565b34801561049a57600080fd5b506014546104be9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610365565b3480156104ef57600080fd5b506104566104fe366004612db8565b610d16565b34801561050f57600080fd5b5060405160128152602001610365565b34801561052b57600080fd5b506103b061053a366004612d43565b60116020526000908152604090205460ff1681565b34801561055b57600080fd5b506103b061056a366004612d17565b610ddf565b34801561057b57600080fd5b5061045661058a366004612d43565b610e1e565b34801561059b57600080fd5b506104566105aa366004612dfb565b610f13565b3480156105bb57600080fd5b506104566105ca366004612d43565b610f37565b3480156105db57600080fd5b506013546104be9061ffff80821691620100008104821691600160201b9091041683565b34801561060b57600080fd5b506104097f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b50600e546103b090610100900460ff1681565b34801561065e57600080fd5b5061045661066d366004612d17565b61102a565b34801561067e57600080fd5b5061045661068d366004612dfb565b6110ca565b34801561069e57600080fd5b506104566106ad366004612d43565b6111a0565b3480156106be57600080fd5b506104566106cd366004612d43565b61129b565b3480156106de57600080fd5b5061035b6106ed366004612d43565b6001600160a01b031660009081526020819052604090205490565b34801561071457600080fd5b50610456611395565b34801561072957600080fd5b506103b0610738366004612d43565b60106020526000908152604090205460ff1681565b34801561075957600080fd5b5061035b60075481565b34801561076f57600080fd5b5061045661077e366004612d17565b6113f7565b34801561078f57600080fd5b5061045661079e366004612d43565b611427565b3480156107af57600080fd5b506104566107be366004612db8565b611527565b3480156107cf57600080fd5b506005546001600160a01b0316610409565b3480156107ed57600080fd5b5061035b600b5481565b34801561080357600080fd5b506103836115f0565b34801561081857600080fd5b50610456610827366004612dfb565b6115ff565b34801561083857600080fd5b50610456610847366004612dfb565b61165e565b34801561085857600080fd5b506103b0610867366004612d17565b611694565b34801561087857600080fd5b50610456611731565b34801561088d57600080fd5b506103b061089c366004612d17565b61182f565b3480156108ad57600080fd5b506104566108bc366004612dfb565b611920565b3480156108cd57600080fd5b506104566108dc366004612d43565b61197f565b3480156108ed57600080fd5b50600a54610409906001600160a01b031681565b34801561090d57600080fd5b50600954610409906001600160a01b031681565b610456611a21565b34801561093557600080fd5b506103b0610944366004612d43565b60126020526000908152604090205460ff1681565b34801561096557600080fd5b50610456610974366004612dfb565b611a77565b34801561098557600080fd5b5061035b610994366004612e14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109cb57600080fd5b5061035b60085481565b3480156109e157600080fd5b506104566109f0366004612dfb565b611ae9565b348015610a0157600080fd5b50610456610a10366004612d43565b611b48565b348015610a2157600080fd5b50610456611c36565b348015610a3657600080fd5b50610456610a45366004612e4d565b611cc2565b348015610a5657600080fd5b50610456610a65366004612dfb565b611e20565b348015610a7657600080fd5b50610456610a85366004612d43565b611e55565b606060038054610a9990612e96565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590612e96565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b5050505050905090565b600033610b2a818585611ff9565b60019150505b92915050565b6005546001600160a01b03163314610b695760405162461bcd60e51b8152600401610b6090612ed0565b60405180910390fd5b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152601c60248201527f4275796261636b2077616c6c65742063616e6e6f7420626520307830000000006044820152606401610b60565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f18394055aecb36f3c545d0980ebf59504a93b9cbd03d149c1ff28d5573e25ec5906020015b60405180910390a150565b6000338180610c238787612110565b91509150610c33878787856121f6565b610c3e87848761237d565b8115610cfe5730600090815260208190526040902054600d548110801590610c695750600e5460ff16155b8015610c7c5750600e54610100900460ff165b8015610cba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031614155b15610cca57610cca600d54612409565b6000610cd68784612618565b9050610ce38930836126d8565b610cf78989610cf2848b612f1b565b6126d8565b5050610d09565b610d098787876126d8565b5060019695505050505050565b6005546001600160a01b03163314610d405760405162461bcd60e51b8152600401610b6090612ed0565b6103e881610d4e8486612f32565b610d589190612f32565b61ffff1610610da15760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206665652073747275637475726560581b6044820152606401610b60565b6014805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610b2a9082908690610e19908790612f58565b611ff9565b6005546001600160a01b03163314610e485760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526012602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d604482015268185e081dd85b1b195d60ba1b6064820152608401610b60565b6001600160a01b038116600081815260126020908152604091829020805460ff1916905590519182527f0146ecf0f3e959e006d0380e7d8a829b041286e7cdb8fe2c017a9374ac9ba9bc9101610c09565b610f1d338261289a565b8060086000828254610f2f9190612f58565b909155505050565b6005546001600160a01b03163314610f615760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526010602052604090205460ff1615610fd65760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d6044820152632066656560e01b6064820152608401610b60565b6001600160a01b038116600081815260106020908152604091829020805460ff1916600117905590519182527f85ecafd7b8cfcceb72ea6978547a39f89631bf423eea19a63ce8d3881ec51e039101610c09565b6005546001600160a01b031633146110545760405162461bcd60e51b8152600401610b6090612ed0565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190612f70565b505050565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610b6090612ed0565b600f54421161116b5760405162461bcd60e51b815260206004820152603b60248201527f4e6577206c6971756964697479206c6f636b2074696d65206d7573742062652060448201527f6166746572207468652063757272656e74206c6f636b2074696d6500000000006064820152608401610b60565b600f8190556040518181527f71e05a7562da8b8e418a7169f15237ae67eb8811d1f3ffb1235f35837fd7926a90602001610c09565b6005546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526012602052604090205460ff16156112475760405162461bcd60e51b815260206004820152602b60248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201526a081b585e081dd85b1b195d60aa1b6064820152608401610b60565b6001600160a01b038116600081815260126020908152604091829020805460ff1916600117905590519182527f7d99f9a4158245b2d0ffb50768db33ed6d5e4146f7e27db2b1c87133148b907a9101610c09565b6005546001600160a01b031633146112c55760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526011602052604090205460ff166113445760405162461bcd60e51b815260206004820152602e60248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d60448201526d30bc103a3930b739b0b1ba34b7b760911b6064820152608401610b60565b6001600160a01b038116600081815260116020908152604091829020805460ff1916905590519182527f628f9fc26f194733f0575c94bd0ac205c2c61093f83b9ed913762ca6a5142efd9101610c09565b6005546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610b6090612ed0565b6005546040516000916001600160a01b031690600080516020613144833981519152908390a3600580546001600160a01b0319169055565b61140282338361237d565b61140c828261289a565b806008600082825461141e9190612f58565b90915550505050565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526011602052604090205460ff16156114d35760405162461bcd60e51b815260206004820152603060248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201526f1036b0bc103a3930b739b0b1ba34b7b760811b6064820152608401610b60565b6001600160a01b038116600081815260116020908152604091829020805460ff1916600117905590519182527f926ada6c4eef2af9b9880421dcf6e88d1a21f645e07a0b0c219347090ff95bb59101610c09565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610b6090612ed0565b6103e88161155f8486612f32565b6115699190612f32565b61ffff16106115b25760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206665652073747275637475726560581b6044820152606401610b60565b6013805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b606060048054610a9990612e96565b6005546001600160a01b031633146116295760405162461bcd60e51b8152600401610b6090612ed0565b600d8190556040518181527f674515d9dd103f6dd90c092a960b3a3905ecfc07da656d2ede6512afbffa091990602001610c09565b6005546001600160a01b031633146116885760405162461bcd60e51b8152600401610b6090612ed0565b61169181612409565b50565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156117195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b60565b6117268286868403611ff9565b506001949350505050565b6006546001600160a01b031633146117975760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610b60565b60075442116117de5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610b60565b6006546005546040516001600160a01b03928316929091169060008051602061314483398151915290600090a3600654600580546001600160a01b0319166001600160a01b03909216919091179055565b600033818061183e8387612110565b9150915061184e838787856121f6565b81156119095730600090815260208190526040902054600d5481108015906118795750600e5460ff16155b801561188c5750600e54610100900460ff165b80156118ca57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b156118da576118da600d54612409565b60006118e68784612618565b90506118f38530836126d8565b6119028589610cf2848b612f1b565b5050611914565b6119148387876126d8565b50600195945050505050565b6005546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610b6090612ed0565b600c8190556040518181527fabeac71da1b5e23c49ce9f7f04cf66b34293f56665d9a80a2e66a1851c2bbe1c90602001610c09565b6005546001600160a01b031633146119a95760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b0381166119ff5760405162461bcd60e51b815260206004820181905260248201527f446576656c6f706d656e742077616c6c65742063616e6e6f74206265203078306044820152606401610b60565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610b6090612ed0565b60405133904780156108fc02916000818181858888f19350505050158015611691573d6000803e3d6000fd5b6005546001600160a01b03163314611aa15760405162461bcd60e51b8152600401610b6090612ed0565b60058054600680546001600160a01b03199081166001600160a01b0384161790915516905560078190556040516000908190600080516020613144833981519152908290a350565b6005546001600160a01b03163314611b135760405162461bcd60e51b8152600401610b6090612ed0565b600b8190556040518181527ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd90602001610c09565b6005546001600160a01b03163314611b725760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526010602052604090205460ff16611be55760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2066604482015261656560f01b6064820152608401610b60565b6001600160a01b038116600081815260106020908152604091829020805460ff1916905590519182527f711fdef8f2d84ec32e12306df0559e86006affdb2b1be5484928b6810406048f9101610c09565b6005546001600160a01b03163314611c605760405162461bcd60e51b8152600401610b6090612ed0565b600e805460ff610100808304821615810261ff001990931692909217928390556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15993611cb89390049091161515815260200190565b60405180910390a1565b6005546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610b6090612ed0565b600f544211611d3d5760405162461bcd60e51b815260206004820152601b60248201527f4c69717569646974792072656d6f76616c206973206c6f636b656400000000006044820152606401610b60565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302751cec3089898989896040518763ffffffff1660e01b8152600401611d9696959493929190612f92565b60408051808303816000875af1158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190612fcd565b60408051838152602081018390529294509092507f06e61ce293536045b3c3e50f6afa3f3275782981dc5d17bb8a2c03a92c4bfd8f910160405180910390a150505050505050565b6005546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610b6090612ed0565b6116913033836126d8565b6005546001600160a01b03163314611e7f5760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b038116611ee45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b60565b6005546040516001600160a01b0380841692169060008051602061314483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611f4057506000610b30565b6000611f4c8385612ff1565b905082611f598583613026565b14611fb05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b60565b9392505050565b6000611fb083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129e8565b6001600160a01b0383166120595760405162461bcd60e51b815260206004820152602160248201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152607960f81b6064820152608401610b60565b6001600160a01b0382166120af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a20617070726f766520746f20746865207a65726f2061646479006044820152606401610b60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561216d57506001600160a01b03831660009081526010602052604090205460ff16155b1561217d575060019050806121ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156121d757506001600160a01b03841660009081526010602052604090205460ff16155b156121e857506001905060026121ef565b5060009050805b9250929050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146122da57600b5482612252856001600160a01b031660009081526020819052604090205490565b61225c9190612f58565b108061228057506001600160a01b03831660009081526012602052604090205460ff165b6122da5760405162461bcd60e51b815260206004820152602560248201527f4578636565647320726563656976657273206d6178696d756d2077616c6c65746044820152642073697a6560d81b6064820152608401610b60565b801561237757600c548211158061232b57506001600160a01b03841660009081526011602052604090205460ff168061232b57506001600160a01b03831660009081526011602052604090205460ff165b6123775760405162461bcd60e51b815260206004820152601f60248201527f5472616e73616374696f6e206c6172676572207468616e20616c6c6f776564006044820152606401610b60565b50505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461237757818110156123fc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b60565b6123778484848403611ff9565b600e805460ff1916600117905560135460009061ffff600160201b820481169161243c9162010000820481169116612f32565b6124469190612f32565b60135461ffff91821692506000918391612461911685612ff1565b61246b9190613026565b905061248a61247b600283613026565b6124859085612f1b565b612a1f565b601354479060009061ffff600160201b82048116916201000081048216916124b5916002911661303a565b6124bf9190612f32565b6124c99190612f32565b60135461ffff918216925060009183916124e6916002911661303a565b6124f49061ffff1685612ff1565b6124fe9190613026565b601354909150600090839061251e90600160201b900461ffff1686612ff1565b6125289190613026565b905081156125445761254461253e600287613026565b83612bdf565b600a546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561257e573d6000803e3d6000fd5b506009546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156125b8573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187856125e7600289613026565b6040805193845260208401929092529082015260600160405180910390a15050600e805460ff191690555050505050565b600080600183600281111561262f5761262f61305b565b0361266c5760135461ffff600160201b82048116916126579162010000820481169116612f32565b6126619190612f32565b61ffff1690506126b9565b60028360028111156126805761268061305b565b036126b95760145461ffff600160201b82048116916126a89162010000820481169116612f32565b6126b29190612f32565b61ffff1690505b6103e86126c68286612ff1565b6126d09190613026565b949350505050565b6001600160a01b03831661273c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b60565b6001600160a01b0382166127925760405162461bcd60e51b815260206004820181905260248201527f45524332303a207472616e7366657220746f20746865207a65726f20616464796044820152606401610b60565b6001600160a01b0383166000908152602081905260409020548181101561280a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b60565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612841908490612f58565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161288d91815260200190565b60405180910390a3612377565b6001600160a01b0382166128fa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b60565b6001600160a01b0382166000908152602081905260409020548181101561296e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b60565b6001600160a01b038316600090815260208190526040812083830390556002805484929061299d908490612f1b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60008183612a095760405162461bcd60e51b8152600401610b609190612cad565b506000612a168486613026565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a5457612a54613071565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af69190613087565b81600181518110612b0957612b09613071565b60200260200101906001600160a01b031690816001600160a01b031681525050612b54307f000000000000000000000000000000000000000000000000000000000000000084611ff9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612ba99085906000908690309042906004016130a4565b600060405180830381600087803b158015612bc357600080fd5b505af1158015612bd7573d6000803e3d6000fd5b505050505050565b612c0a307f000000000000000000000000000000000000000000000000000000000000000084611ff9565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f305d719908390612c639030908790600090819084904290600401612f92565b60606040518083038185885af1158015612c81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ca69190613115565b5050505050565b600060208083528351808285015260005b81811015612cda57858101830151858201604001528201612cbe565b81811115612cec576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461169157600080fd5b60008060408385031215612d2a57600080fd5b8235612d3581612d02565b946020939093013593505050565b600060208284031215612d5557600080fd5b8135611fb081612d02565b600080600060608486031215612d7557600080fd5b8335612d8081612d02565b92506020840135612d9081612d02565b929592945050506040919091013590565b803561ffff81168114612db357600080fd5b919050565b600080600060608486031215612dcd57600080fd5b612dd684612da1565b9250612de460208501612da1565b9150612df260408501612da1565b90509250925092565b600060208284031215612e0d57600080fd5b5035919050565b60008060408385031215612e2757600080fd5b8235612e3281612d02565b91506020830135612e4281612d02565b809150509250929050565b600080600080600060a08688031215612e6557600080fd5b8535945060208601359350604086013592506060860135612e8581612d02565b949793965091946080013592915050565b600181811c90821680612eaa57607f821691505b602082108103612eca57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015612f2d57612f2d612f05565b500390565b600061ffff808316818516808303821115612f4f57612f4f612f05565b01949350505050565b60008219821115612f6b57612f6b612f05565b500190565b600060208284031215612f8257600080fd5b81518015158114611fb057600080fd5b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215612fe057600080fd5b505080516020909101519092909150565b600081600019048311821515161561300b5761300b612f05565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261303557613035613010565b500490565b600061ffff8084168061304f5761304f613010565b92169190910492915050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561309957600080fd5b8151611fb081612d02565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130f45784516001600160a01b0316835293830193918301916001016130cf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561312a57600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220489c03d5706a86ea1d7d77f9acd1b7b26a9803060cc21c2f4acf0077a89c752964736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c806379af25a6116101ab578063acfaec0d116100f7578063e7873b5811610095578063eb62b5341161006f578063eb62b53414610a15578063ee1fae3c14610a2a578063eee1c12b14610a4a578063f2fde38b14610a6a57600080fd5b8063e7873b58146109bf578063ea1644d5146109d5578063ea2f0b37146109f557600080fd5b8063ce31a06b116100d1578063ce31a06b14610921578063d1d7d7ef14610929578063dd46706414610959578063dd62ed3e1461097957600080fd5b8063acfaec0d146108c1578063bc3e0739146108e1578063c9a2ed171461090157600080fd5b806395d89b4111610164578063a457c2d71161013e578063a457c2d71461084c578063a69df4b51461086c578063a9059cbb14610881578063a9e59da3146108a157600080fd5b806395d89b41146107f75780639d0014b11461080c5780639f27b6571461082c57600080fd5b806379af25a61461074d57806379cc6790146107635780637cf140241461078357806388ea6d7e146107a35780638da5cb5b146107c35780638f3fa860146107e157600080fd5b8063395093511161028557806357376198116102235780636adf6818116101fd5780636adf6818146106b257806370a08231146106d2578063715018a614610708578063768dc7101461071d57600080fd5b80635737619814610652578063576d2414146106725780635b700d911461069257600080fd5b8063437823ec1161025f578063437823ec146105af57806347062402146105cf57806349bd5a5e146105ff5780634a74bb021461063357600080fd5b8063395093511461054f5780633f33e9091461056f57806342966c681461058f57600080fd5b80631d0adc07116102f25780632b14ca56116102cc5780632b14ca561461048e5780632e222fa2146104e3578063313ce5671461050357806332a710b91461051f57600080fd5b80631d0adc071461043657806323b872dd1461045857806328b13b611461047857600080fd5b80630445b6671461034557806306fdde031461036e578063095ea7b31461039057806314669b8b146103c05780631694505e146103d557806318160ddd1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b50610383610a8a565b6040516103659190612cad565b34801561039c57600080fd5b506103b06103ab366004612d17565b610b1c565b6040519015158152602001610365565b3480156103cc57600080fd5b50600f5461035b565b3480156103e157600080fd5b506104097f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610365565b34801561042d57600080fd5b5060025461035b565b34801561044257600080fd5b50610456610451366004612d43565b610b36565b005b34801561046457600080fd5b506103b0610473366004612d60565b610c14565b34801561048457600080fd5b5061035b600c5481565b34801561049a57600080fd5b506014546104be9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610365565b3480156104ef57600080fd5b506104566104fe366004612db8565b610d16565b34801561050f57600080fd5b5060405160128152602001610365565b34801561052b57600080fd5b506103b061053a366004612d43565b60116020526000908152604090205460ff1681565b34801561055b57600080fd5b506103b061056a366004612d17565b610ddf565b34801561057b57600080fd5b5061045661058a366004612d43565b610e1e565b34801561059b57600080fd5b506104566105aa366004612dfb565b610f13565b3480156105bb57600080fd5b506104566105ca366004612d43565b610f37565b3480156105db57600080fd5b506013546104be9061ffff80821691620100008104821691600160201b9091041683565b34801561060b57600080fd5b506104097f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb81565b34801561063f57600080fd5b50600e546103b090610100900460ff1681565b34801561065e57600080fd5b5061045661066d366004612d17565b61102a565b34801561067e57600080fd5b5061045661068d366004612dfb565b6110ca565b34801561069e57600080fd5b506104566106ad366004612d43565b6111a0565b3480156106be57600080fd5b506104566106cd366004612d43565b61129b565b3480156106de57600080fd5b5061035b6106ed366004612d43565b6001600160a01b031660009081526020819052604090205490565b34801561071457600080fd5b50610456611395565b34801561072957600080fd5b506103b0610738366004612d43565b60106020526000908152604090205460ff1681565b34801561075957600080fd5b5061035b60075481565b34801561076f57600080fd5b5061045661077e366004612d17565b6113f7565b34801561078f57600080fd5b5061045661079e366004612d43565b611427565b3480156107af57600080fd5b506104566107be366004612db8565b611527565b3480156107cf57600080fd5b506005546001600160a01b0316610409565b3480156107ed57600080fd5b5061035b600b5481565b34801561080357600080fd5b506103836115f0565b34801561081857600080fd5b50610456610827366004612dfb565b6115ff565b34801561083857600080fd5b50610456610847366004612dfb565b61165e565b34801561085857600080fd5b506103b0610867366004612d17565b611694565b34801561087857600080fd5b50610456611731565b34801561088d57600080fd5b506103b061089c366004612d17565b61182f565b3480156108ad57600080fd5b506104566108bc366004612dfb565b611920565b3480156108cd57600080fd5b506104566108dc366004612d43565b61197f565b3480156108ed57600080fd5b50600a54610409906001600160a01b031681565b34801561090d57600080fd5b50600954610409906001600160a01b031681565b610456611a21565b34801561093557600080fd5b506103b0610944366004612d43565b60126020526000908152604090205460ff1681565b34801561096557600080fd5b50610456610974366004612dfb565b611a77565b34801561098557600080fd5b5061035b610994366004612e14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109cb57600080fd5b5061035b60085481565b3480156109e157600080fd5b506104566109f0366004612dfb565b611ae9565b348015610a0157600080fd5b50610456610a10366004612d43565b611b48565b348015610a2157600080fd5b50610456611c36565b348015610a3657600080fd5b50610456610a45366004612e4d565b611cc2565b348015610a5657600080fd5b50610456610a65366004612dfb565b611e20565b348015610a7657600080fd5b50610456610a85366004612d43565b611e55565b606060038054610a9990612e96565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590612e96565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b5050505050905090565b600033610b2a818585611ff9565b60019150505b92915050565b6005546001600160a01b03163314610b695760405162461bcd60e51b8152600401610b6090612ed0565b60405180910390fd5b6001600160a01b038116610bbf5760405162461bcd60e51b815260206004820152601c60248201527f4275796261636b2077616c6c65742063616e6e6f7420626520307830000000006044820152606401610b60565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f18394055aecb36f3c545d0980ebf59504a93b9cbd03d149c1ff28d5573e25ec5906020015b60405180910390a150565b6000338180610c238787612110565b91509150610c33878787856121f6565b610c3e87848761237d565b8115610cfe5730600090815260208190526040902054600d548110801590610c695750600e5460ff16155b8015610c7c5750600e54610100900460ff165b8015610cba57507f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb6001600160a01b0316886001600160a01b031614155b15610cca57610cca600d54612409565b6000610cd68784612618565b9050610ce38930836126d8565b610cf78989610cf2848b612f1b565b6126d8565b5050610d09565b610d098787876126d8565b5060019695505050505050565b6005546001600160a01b03163314610d405760405162461bcd60e51b8152600401610b6090612ed0565b6103e881610d4e8486612f32565b610d589190612f32565b61ffff1610610da15760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206665652073747275637475726560581b6044820152606401610b60565b6014805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610b2a9082908690610e19908790612f58565b611ff9565b6005546001600160a01b03163314610e485760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526012602052604090205460ff16610ec25760405162461bcd60e51b815260206004820152602960248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d604482015268185e081dd85b1b195d60ba1b6064820152608401610b60565b6001600160a01b038116600081815260126020908152604091829020805460ff1916905590519182527f0146ecf0f3e959e006d0380e7d8a829b041286e7cdb8fe2c017a9374ac9ba9bc9101610c09565b610f1d338261289a565b8060086000828254610f2f9190612f58565b909155505050565b6005546001600160a01b03163314610f615760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526010602052604090205460ff1615610fd65760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d6044820152632066656560e01b6064820152608401610b60565b6001600160a01b038116600081815260106020908152604091829020805460ff1916600117905590519182527f85ecafd7b8cfcceb72ea6978547a39f89631bf423eea19a63ce8d3881ec51e039101610c09565b6005546001600160a01b031633146110545760405162461bcd60e51b8152600401610b6090612ed0565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190612f70565b505050565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610b6090612ed0565b600f54421161116b5760405162461bcd60e51b815260206004820152603b60248201527f4e6577206c6971756964697479206c6f636b2074696d65206d7573742062652060448201527f6166746572207468652063757272656e74206c6f636b2074696d6500000000006064820152608401610b60565b600f8190556040518181527f71e05a7562da8b8e418a7169f15237ae67eb8811d1f3ffb1235f35837fd7926a90602001610c09565b6005546001600160a01b031633146111ca5760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526012602052604090205460ff16156112475760405162461bcd60e51b815260206004820152602b60248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201526a081b585e081dd85b1b195d60aa1b6064820152608401610b60565b6001600160a01b038116600081815260126020908152604091829020805460ff1916600117905590519182527f7d99f9a4158245b2d0ffb50768db33ed6d5e4146f7e27db2b1c87133148b907a9101610c09565b6005546001600160a01b031633146112c55760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526011602052604090205460ff166113445760405162461bcd60e51b815260206004820152602e60248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206d60448201526d30bc103a3930b739b0b1ba34b7b760911b6064820152608401610b60565b6001600160a01b038116600081815260116020908152604091829020805460ff1916905590519182527f628f9fc26f194733f0575c94bd0ac205c2c61093f83b9ed913762ca6a5142efd9101610c09565b6005546001600160a01b031633146113bf5760405162461bcd60e51b8152600401610b6090612ed0565b6005546040516000916001600160a01b031690600080516020613144833981519152908390a3600580546001600160a01b0319169055565b61140282338361237d565b61140c828261289a565b806008600082825461141e9190612f58565b90915550505050565b6005546001600160a01b031633146114515760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526011602052604090205460ff16156114d35760405162461bcd60e51b815260206004820152603060248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60448201526f1036b0bc103a3930b739b0b1ba34b7b760811b6064820152608401610b60565b6001600160a01b038116600081815260116020908152604091829020805460ff1916600117905590519182527f926ada6c4eef2af9b9880421dcf6e88d1a21f645e07a0b0c219347090ff95bb59101610c09565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610b6090612ed0565b6103e88161155f8486612f32565b6115699190612f32565b61ffff16106115b25760405162461bcd60e51b8152602060048201526015602482015274696e76616c6964206665652073747275637475726560581b6044820152606401610b60565b6013805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b606060048054610a9990612e96565b6005546001600160a01b031633146116295760405162461bcd60e51b8152600401610b6090612ed0565b600d8190556040518181527f674515d9dd103f6dd90c092a960b3a3905ecfc07da656d2ede6512afbffa091990602001610c09565b6005546001600160a01b031633146116885760405162461bcd60e51b8152600401610b6090612ed0565b61169181612409565b50565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156117195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b60565b6117268286868403611ff9565b506001949350505050565b6006546001600160a01b031633146117975760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610b60565b60075442116117de5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610b60565b6006546005546040516001600160a01b03928316929091169060008051602061314483398151915290600090a3600654600580546001600160a01b0319166001600160a01b03909216919091179055565b600033818061183e8387612110565b9150915061184e838787856121f6565b81156119095730600090815260208190526040902054600d5481108015906118795750600e5460ff16155b801561188c5750600e54610100900460ff165b80156118ca57507f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb6001600160a01b0316846001600160a01b031614155b156118da576118da600d54612409565b60006118e68784612618565b90506118f38530836126d8565b6119028589610cf2848b612f1b565b5050611914565b6119148387876126d8565b50600195945050505050565b6005546001600160a01b0316331461194a5760405162461bcd60e51b8152600401610b6090612ed0565b600c8190556040518181527fabeac71da1b5e23c49ce9f7f04cf66b34293f56665d9a80a2e66a1851c2bbe1c90602001610c09565b6005546001600160a01b031633146119a95760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b0381166119ff5760405162461bcd60e51b815260206004820181905260248201527f446576656c6f706d656e742077616c6c65742063616e6e6f74206265203078306044820152606401610b60565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611a4b5760405162461bcd60e51b8152600401610b6090612ed0565b60405133904780156108fc02916000818181858888f19350505050158015611691573d6000803e3d6000fd5b6005546001600160a01b03163314611aa15760405162461bcd60e51b8152600401610b6090612ed0565b60058054600680546001600160a01b03199081166001600160a01b0384161790915516905560078190556040516000908190600080516020613144833981519152908290a350565b6005546001600160a01b03163314611b135760405162461bcd60e51b8152600401610b6090612ed0565b600b8190556040518181527ffb1fe1002b7550e87616e67793dbb7d3f437a79c2688c372c66dc170dbcb0efd90602001610c09565b6005546001600160a01b03163314611b725760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b03811660009081526010602052604090205460ff16611be55760405162461bcd60e51b815260206004820152602260248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e2066604482015261656560f01b6064820152608401610b60565b6001600160a01b038116600081815260106020908152604091829020805460ff1916905590519182527f711fdef8f2d84ec32e12306df0559e86006affdb2b1be5484928b6810406048f9101610c09565b6005546001600160a01b03163314611c605760405162461bcd60e51b8152600401610b6090612ed0565b600e805460ff610100808304821615810261ff001990931692909217928390556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15993611cb89390049091161515815260200190565b60405180910390a1565b6005546001600160a01b03163314611cec5760405162461bcd60e51b8152600401610b6090612ed0565b600f544211611d3d5760405162461bcd60e51b815260206004820152601b60248201527f4c69717569646974792072656d6f76616c206973206c6f636b656400000000006044820152606401610b60565b6000807f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03166302751cec3089898989896040518763ffffffff1660e01b8152600401611d9696959493929190612f92565b60408051808303816000875af1158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190612fcd565b60408051838152602081018390529294509092507f06e61ce293536045b3c3e50f6afa3f3275782981dc5d17bb8a2c03a92c4bfd8f910160405180910390a150505050505050565b6005546001600160a01b03163314611e4a5760405162461bcd60e51b8152600401610b6090612ed0565b6116913033836126d8565b6005546001600160a01b03163314611e7f5760405162461bcd60e51b8152600401610b6090612ed0565b6001600160a01b038116611ee45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b60565b6005546040516001600160a01b0380841692169060008051602061314483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003611f4057506000610b30565b6000611f4c8385612ff1565b905082611f598583613026565b14611fb05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b60565b9392505050565b6000611fb083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129e8565b6001600160a01b0383166120595760405162461bcd60e51b815260206004820152602160248201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152607960f81b6064820152608401610b60565b6001600160a01b0382166120af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a20617070726f766520746f20746865207a65726f2061646479006044820152606401610b60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000807f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb6001600160a01b0316846001600160a01b031614801561216d57506001600160a01b03831660009081526010602052604090205460ff16155b1561217d575060019050806121ef565b7f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb6001600160a01b0316836001600160a01b03161480156121d757506001600160a01b03841660009081526010602052604090205460ff16155b156121e857506001905060026121ef565b5060009050805b9250929050565b7f00000000000000000000000053129d371fbdd0222f5949fa893e9b88f62fd4eb6001600160a01b0316836001600160a01b0316146122da57600b5482612252856001600160a01b031660009081526020819052604090205490565b61225c9190612f58565b108061228057506001600160a01b03831660009081526012602052604090205460ff165b6122da5760405162461bcd60e51b815260206004820152602560248201527f4578636565647320726563656976657273206d6178696d756d2077616c6c65746044820152642073697a6560d81b6064820152608401610b60565b801561237757600c548211158061232b57506001600160a01b03841660009081526011602052604090205460ff168061232b57506001600160a01b03831660009081526011602052604090205460ff165b6123775760405162461bcd60e51b815260206004820152601f60248201527f5472616e73616374696f6e206c6172676572207468616e20616c6c6f776564006044820152606401610b60565b50505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461237757818110156123fc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b60565b6123778484848403611ff9565b600e805460ff1916600117905560135460009061ffff600160201b820481169161243c9162010000820481169116612f32565b6124469190612f32565b60135461ffff91821692506000918391612461911685612ff1565b61246b9190613026565b905061248a61247b600283613026565b6124859085612f1b565b612a1f565b601354479060009061ffff600160201b82048116916201000081048216916124b5916002911661303a565b6124bf9190612f32565b6124c99190612f32565b60135461ffff918216925060009183916124e6916002911661303a565b6124f49061ffff1685612ff1565b6124fe9190613026565b601354909150600090839061251e90600160201b900461ffff1686612ff1565b6125289190613026565b905081156125445761254461253e600287613026565b83612bdf565b600a546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561257e573d6000803e3d6000fd5b506009546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156125b8573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56187856125e7600289613026565b6040805193845260208401929092529082015260600160405180910390a15050600e805460ff191690555050505050565b600080600183600281111561262f5761262f61305b565b0361266c5760135461ffff600160201b82048116916126579162010000820481169116612f32565b6126619190612f32565b61ffff1690506126b9565b60028360028111156126805761268061305b565b036126b95760145461ffff600160201b82048116916126a89162010000820481169116612f32565b6126b29190612f32565b61ffff1690505b6103e86126c68286612ff1565b6126d09190613026565b949350505050565b6001600160a01b03831661273c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b60565b6001600160a01b0382166127925760405162461bcd60e51b815260206004820181905260248201527f45524332303a207472616e7366657220746f20746865207a65726f20616464796044820152606401610b60565b6001600160a01b0383166000908152602081905260409020548181101561280a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b60565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612841908490612f58565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161288d91815260200190565b60405180910390a3612377565b6001600160a01b0382166128fa5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b60565b6001600160a01b0382166000908152602081905260409020548181101561296e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b60565b6001600160a01b038316600090815260208190526040812083830390556002805484929061299d908490612f1b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60008183612a095760405162461bcd60e51b8152600401610b609190612cad565b506000612a168486613026565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a5457612a54613071565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af69190613087565b81600181518110612b0957612b09613071565b60200260200101906001600160a01b031690816001600160a01b031681525050612b54307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ff9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612ba99085906000908690309042906004016130a4565b600060405180830381600087803b158015612bc357600080fd5b505af1158015612bd7573d6000803e3d6000fd5b505050505050565b612c0a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ff9565b60405163f305d71960e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d719908390612c639030908790600090819084904290600401612f92565b60606040518083038185885af1158015612c81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ca69190613115565b5050505050565b600060208083528351808285015260005b81811015612cda57858101830151858201604001528201612cbe565b81811115612cec576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461169157600080fd5b60008060408385031215612d2a57600080fd5b8235612d3581612d02565b946020939093013593505050565b600060208284031215612d5557600080fd5b8135611fb081612d02565b600080600060608486031215612d7557600080fd5b8335612d8081612d02565b92506020840135612d9081612d02565b929592945050506040919091013590565b803561ffff81168114612db357600080fd5b919050565b600080600060608486031215612dcd57600080fd5b612dd684612da1565b9250612de460208501612da1565b9150612df260408501612da1565b90509250925092565b600060208284031215612e0d57600080fd5b5035919050565b60008060408385031215612e2757600080fd5b8235612e3281612d02565b91506020830135612e4281612d02565b809150509250929050565b600080600080600060a08688031215612e6557600080fd5b8535945060208601359350604086013592506060860135612e8581612d02565b949793965091946080013592915050565b600181811c90821680612eaa57607f821691505b602082108103612eca57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015612f2d57612f2d612f05565b500390565b600061ffff808316818516808303821115612f4f57612f4f612f05565b01949350505050565b60008219821115612f6b57612f6b612f05565b500190565b600060208284031215612f8257600080fd5b81518015158114611fb057600080fd5b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060408385031215612fe057600080fd5b505080516020909101519092909150565b600081600019048311821515161561300b5761300b612f05565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261303557613035613010565b500490565b600061ffff8084168061304f5761304f613010565b92169190910492915050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561309957600080fd5b8151611fb081612d02565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130f45784516001600160a01b0316835293830193918301916001016130cf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561312a57600080fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220489c03d5706a86ea1d7d77f9acd1b7b26a9803060cc21c2f4acf0077a89c752964736f6c634300080f0033

Deployed Bytecode Sourcemap

21607:16301:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22095:63;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;22095:63:0;;;;;;;;16394:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17312:201::-;;;;;;;;;;-1:-1:-1;17312:201:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;17312:201:0;1254:187:1;28060:107:0;;;;;;;;;;-1:-1:-1;28142:17:0;;28060:107;;22190:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;22190:51:0;1446:230:1;16709:108:0;;;;;;;;;;-1:-1:-1;16797:12:0;;16709:108;;32684:239;;;;;;;;;;-1:-1:-1;32684:239:0;;;;;:::i;:::-;;:::i;:::-;;26647:1066;;;;;;;;;;-1:-1:-1;26647:1066:0;;;;;:::i;:::-;;:::i;22000:67::-;;;;;;;;;;;;;;;;22906:22;;;;;;;;;;-1:-1:-1;22906:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;22906:22:0;;;;;;;;;;2600:6:1;2633:15;;;2615:34;;2685:15;;;2680:2;2665:18;;2658:43;2737:15;;2717:18;;;2710:43;;;;2578:2;2563:18;22906:22:0;2394:365:1;32931:350:0;;;;;;;;;;-1:-1:-1;32931:350:0;;;;;:::i;:::-;;:::i;16610:93::-;;;;;;;;;;-1:-1:-1;16610:93:0;;16693:2;3403:36:1;;3391:2;3376:18;16610:93:0;3261:184:1;22467:61:0;;;;;;;;;;-1:-1:-1;22467:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17820:240;;;;;;;;;;-1:-1:-1;17820:240:0;;;;;:::i;:::-;;:::i;35752:305::-;;;;;;;;;;-1:-1:-1;35752:305:0;;;;;:::i;:::-;;:::i;27721:125::-;;;;;;;;;;-1:-1:-1;27721:125:0;;;;;:::i;:::-;;:::i;34181:280::-;;;;;;;;;;-1:-1:-1;34181:280:0;;;;;:::i;:::-;;:::i;22879:20::-;;;;;;;;;;-1:-1:-1;22879:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;22879:20:0;;;;;;22248:38;;;;;;;;;;;;;;;22323:40;;;;;;;;;;-1:-1:-1;22323:40:0;;;;;;;;;;;37625:152;;;;;;;;;;-1:-1:-1;37625:152:0;;;;;:::i;:::-;;:::i;36065:318::-;;;;;;;;;;-1:-1:-1;36065:318:0;;;;;:::i;:::-;;:::i;34813:311::-;;;;;;;;;;-1:-1:-1;34813:311:0;;;;;:::i;:::-;;:::i;35414:330::-;;;;;;;;;;-1:-1:-1;35414:330:0;;;;;:::i;:::-;;:::i;16823:127::-;;;;;;;;;;-1:-1:-1;16823:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16924:18:0;16897:7;16924:18;;;;;;;;;;;;16823:127;6819:148;;;;;;;;;;;;;:::i;22410:50::-;;;;;;;;;;-1:-1:-1;22410:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6342:24;;;;;;;;;;;;;;;;27854:198;;;;;;;;;;-1:-1:-1;27854:198:0;;;;;:::i;:::-;;:::i;34469:336::-;;;;;;;;;;-1:-1:-1;34469:336:0;;;;;:::i;:::-;;:::i;33289:346::-;;;;;;;;;;-1:-1:-1;33289:346:0;;;;;:::i;:::-;;:::i;6588:87::-;;;;;;;;;;-1:-1:-1;6661:6:0;;-1:-1:-1;;;;;6661:6:0;6588:87;;21910:62;;;;;;;;;;;;;;;;16500:104;;;;;;;;;;;;;:::i;33643:176::-;;;;;;;;;;-1:-1:-1;33643:176:0;;;;;:::i;:::-;;:::i;37347:115::-;;;;;;;;;;-1:-1:-1;37347:115:0;;;;;:::i;:::-;;:::i;18066:436::-;;;;;;;;;;-1:-1:-1;18066:436:0;;;;;:::i;:::-;;:::i;7587:294::-;;;;;;;;;;;;;:::i;25635:1004::-;;;;;;;;;;-1:-1:-1;25635:1004:0;;;;;:::i;:::-;;:::i;33827:179::-;;;;;;;;;;-1:-1:-1;33827:179:0;;;;;:::i;:::-;;:::i;32470:206::-;;;;;;;;;;-1:-1:-1;32470:206:0;;;;;:::i;:::-;;:::i;21866:37::-;;;;;;;;;;-1:-1:-1;21866:37:0;;;;-1:-1:-1;;;;;21866:37:0;;;21819:40;;;;;;;;;;-1:-1:-1;21819:40:0;;;;-1:-1:-1;;;;;21819:40:0;;;37499:118;;;:::i;22535:56::-;;;;;;;;;;-1:-1:-1;22535:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7303:208;;;;;;;;;;-1:-1:-1;7303:208:0;;;;;:::i;:::-;;:::i;17155:151::-;;;;;;;;;;-1:-1:-1;17155:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;17271:18:0;;;17244:7;17271:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17155:151;21785:27;;;;;;;;;;;;;;;;34014:159;;;;;;;;;;-1:-1:-1;34014:159:0;;;;;:::i;:::-;;:::i;35132:274::-;;;;;;;;;;-1:-1:-1;35132:274:0;;;;;:::i;:::-;;:::i;37149:190::-;;;;;;;;;;;;;:::i;36469:672::-;;;;;;;;;;-1:-1:-1;36469:672:0;;;;;:::i;:::-;;:::i;37785:120::-;;;;;;;;;;-1:-1:-1;37785:120:0;;;;;:::i;:::-;;:::i;6977:244::-;;;;;;;;;;-1:-1:-1;6977:244:0;;;;;:::i;:::-;;:::i;16394:100::-;16448:13;16481:5;16474:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:100;:::o;17312:201::-;17395:4;2626:10;17451:32;2626:10;17467:7;17476:6;17451:8;:32::i;:::-;17501:4;17494:11;;;17312:201;;;;;:::o;32684:239::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;32765:21:0;::::1;32757:62;;;::::0;-1:-1:-1;;;32757:62:0;;5934:2:1;32757:62:0::1;::::0;::::1;5916:21:1::0;5973:2;5953:18;;;5946:30;6012;5992:18;;;5985:58;6060:18;;32757:62:0::1;5732:352:1::0;32757:62:0::1;32830:14;:33:::0;;-1:-1:-1;;;;;;32830:33:0::1;-1:-1:-1::0;;;;;32830:33:0;::::1;::::0;;::::1;::::0;;;32879:36:::1;::::0;1619:51:1;;;32879:36:0::1;::::0;1607:2:1;1592:18;32879:36:0::1;;;;;;;;32684:239:::0;:::o;26647:1066::-;26770:4;2626:10;26770:4;;26864:26;26881:4;26887:2;26864:16;:26::i;:::-;26830:60;;;;26901:47;26922:4;26928:2;26932:6;26940:7;26901:20;:47::i;:::-;26961:38;26977:4;26983:7;26992:6;26961:15;:38::i;:::-;27016:7;27012:670;;;27134:4;27090:23;16924:18;;;;;;;;;;;27196:13;;27177:32;;;;;:70;;-1:-1:-1;27231:16:0;;;;27230:17;27177:70;:112;;;;-1:-1:-1;27268:21:0;;;;;;;27177:112;:154;;;;;27318:13;-1:-1:-1;;;;;27310:21:0;:4;-1:-1:-1;;;;;27310:21:0;;;27177:154;27155:298;;;27408:29;27423:13;;27408:14;:29::i;:::-;27469:11;27483:29;27496:6;27504:7;27483:12;:29::i;:::-;27469:43;;27527:35;27537:4;27551;27558:3;27527:9;:35::i;:::-;27577:33;27587:4;27593:2;27597:12;27606:3;27597:6;:12;:::i;:::-;27577:9;:33::i;:::-;27025:597;;27012:670;;;27643:27;27653:4;27659:2;27663:6;27643:9;:27::i;:::-;-1:-1:-1;27701:4:0;;26647:1066;-1:-1:-1;;;;;;26647:1066:0:o;32931:350::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;22966:4:::1;33099:7:::0;33081:15:::1;33093:3:::0;33081:9;:15:::1;:::i;:::-;:25;;;;:::i;:::-;:37;;;33059:108;;;::::0;-1:-1:-1;;;33059:108:0;;6998:2:1;33059:108:0::1;::::0;::::1;6980:21:1::0;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:51;7117:18;;33059:108:0::1;6796:345:1::0;33059:108:0::1;33180:7;:29:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;33220:17:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;33248:25:0::1;-1:-1:-1::0;;;33248:25:0;;;::::1;;::::0;;;::::1;::::0;;32931:350::o;17820:240::-;2626:10;17908:4;17989:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;17989:27:0;;;;;;;;;;17908:4;;2626:10;17964:66;;2626:10;;17989:27;;:40;;18019:10;;17989:40;:::i;:::-;17964:8;:66::i;35752:305::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35849:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;35827:124;;;::::0;-1:-1:-1;;;35827:124:0;;7481:2:1;35827:124:0::1;::::0;::::1;7463:21:1::0;7520:2;7500:18;;;7493:30;7559:34;7539:18;;;7532:62;-1:-1:-1;;;7610:18:1;;;7603:39;7659:19;;35827:124:0::1;7279:405:1::0;35827:124:0::1;-1:-1:-1::0;;;;;35962:33:0;::::1;35998:5;35962:33:::0;;;:24:::1;:33;::::0;;;;;;;;:41;;-1:-1:-1;;35962:41:0::1;::::0;;36021:28;;1619:51:1;;;36021:28:0::1;::::0;1592:18:1;36021:28:0::1;1446:230:1::0;27721:125:0;27778:27;2626:10;27798:6;27778:5;:27::i;:::-;27832:6;27816:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;27721:125:0:o;34181:280::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34275:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;34274:28;34252:114;;;::::0;-1:-1:-1;;;34252:114:0;;7891:2:1;34252:114:0::1;::::0;::::1;7873:21:1::0;7930:2;7910:18;;;7903:30;7969:34;7949:18;;;7942:62;-1:-1:-1;;;8020:18:1;;;8013:34;8064:19;;34252:114:0::1;7689:400:1::0;34252:114:0::1;-1:-1:-1::0;;;;;34377:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;34377:34:0::1;34407:4;34377:34;::::0;;34429:24;;1619:51:1;;;34429:24:0::1;::::0;1592:18:1;34429:24:0::1;1446:230:1::0;37625:152:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;37720:49:::1;::::0;-1:-1:-1;;;37720:49:0;;37749:10:::1;37720:49;::::0;::::1;8268:51:1::0;8335:18;;;8328:34;;;-1:-1:-1;;;;;37720:28:0;::::1;::::0;::::1;::::0;8241:18:1;;37720:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37625:152:::0;;:::o;36065:318::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;36182:17:::1;;36164:15;:35;36142:144;;;::::0;-1:-1:-1;;;36142:144:0;;8857:2:1;36142:144:0::1;::::0;::::1;8839:21:1::0;8896:2;8876:18;;;8869:30;8935:34;8915:18;;;8908:62;9006:29;8986:18;;;8979:57;9053:19;;36142:144:0::1;8655:423:1::0;36142:144:0::1;36297:17;:28:::0;;;36341:34:::1;::::0;160:25:1;;;36341:34:0::1;::::0;148:2:1;133:18;36341:34:0::1;14:177:1::0;34813:311:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34913:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;34912:34;34890:127;;;::::0;-1:-1:-1;;;34890:127:0;;9285:2:1;34890:127:0::1;::::0;::::1;9267:21:1::0;9324:2;9304:18;;;9297:30;9363:34;9343:18;;;9336:62;-1:-1:-1;;;9414:18:1;;;9407:41;9465:19;;34890:127:0::1;9083:407:1::0;34890:127:0::1;-1:-1:-1::0;;;;;35028:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:40;;-1:-1:-1;;35028:40:0::1;35064:4;35028:40;::::0;;35086:30;;1619:51:1;;;35086:30:0::1;::::0;1592:18:1;35086:30:0::1;1446:230:1::0;35414:330:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35516:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;35494:134;;;::::0;-1:-1:-1;;;35494:134:0;;9697:2:1;35494:134:0::1;::::0;::::1;9679:21:1::0;9736:2;9716:18;;;9709:30;9775:34;9755:18;;;9748:62;-1:-1:-1;;;9826:18:1;;;9819:44;9880:19;;35494:134:0::1;9495:410:1::0;35494:134:0::1;-1:-1:-1::0;;;;;35639:38:0;::::1;35680:5;35639:38:::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;35639:46:0::1;::::0;;35703:33;;1619:51:1;;;35703:33:0::1;::::0;1592:18:1;35703:33:0::1;1446:230:1::0;6819:148:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;6910:6:::1;::::0;6889:40:::1;::::0;6926:1:::1;::::0;-1:-1:-1;;;;;6910:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;6889:40:0;6926:1;;6889:40:::1;6940:6;:19:::0;;-1:-1:-1;;;;;;6940:19:0::1;::::0;;6819:148::o;27854:198::-;27932:46;27948:7;2626:10;27971:6;27932:15;:46::i;:::-;27989:22;27995:7;28004:6;27989:5;:22::i;:::-;28038:6;28022:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;27854:198:0:o;34469:336::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34574:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;34573:39;34551:137;;;::::0;-1:-1:-1;;;34551:137:0;;10112:2:1;34551:137:0::1;::::0;::::1;10094:21:1::0;10151:2;10131:18;;;10124:30;10190:34;10170:18;;;10163:62;-1:-1:-1;;;10241:18:1;;;10234:46;10297:19;;34551:137:0::1;9910:412:1::0;34551:137:0::1;-1:-1:-1::0;;;;;34699:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:45;;-1:-1:-1;;34699:45:0::1;34740:4;34699:45;::::0;;34762:35;;1619:51:1;;;34762:35:0::1;::::0;1592:18:1;34762:35:0::1;1446:230:1::0;33289:346:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;22966:4:::1;33456:7:::0;33438:15:::1;33450:3:::0;33438:9;:15:::1;:::i;:::-;:25;;;;:::i;:::-;:37;;;33416:108;;;::::0;-1:-1:-1;;;33416:108:0;;6998:2:1;33416:108:0::1;::::0;::::1;6980:21:1::0;7037:2;7017:18;;;7010:30;-1:-1:-1;;;7056:18:1;;;7049:51;7117:18;;33416:108:0::1;6796:345:1::0;33416:108:0::1;33537:6;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;33576:16:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;33603:24:0::1;-1:-1:-1::0;;;33603:24:0;;;::::1;;::::0;;;::::1;::::0;;33289:346::o;16500:104::-;16556:13;16589:7;16582:14;;;;;:::i;33643:176::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;33725:13:::1;:32:::0;;;33773:38:::1;::::0;160:25:1;;;33773:38:0::1;::::0;148:2:1;133:18;33773:38:0::1;14:177:1::0;37347:115:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;37427:27:::1;37442:11;37427:14;:27::i;:::-;37347:115:::0;:::o;18066:436::-;2626:10;18159:4;18242:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18242:27:0;;;;;;;;;;18159:4;;2626:10;18288:35;;;;18280:85;;;;-1:-1:-1;;;18280:85:0;;10529:2:1;18280:85:0;;;10511:21:1;10568:2;10548:18;;;10541:30;10607:34;10587:18;;;10580:62;-1:-1:-1;;;10658:18:1;;;10651:35;10703:19;;18280:85:0;10327:401:1;18280:85:0;18401:60;18410:5;18417:7;18445:15;18426:16;:34;18401:8;:60::i;:::-;-1:-1:-1;18490:4:0;;18066:436;-1:-1:-1;;;;18066:436:0:o;7587:294::-;7639:14;;-1:-1:-1;;;;;7639:14:0;7657:10;7639:28;7631:77;;;;-1:-1:-1;;;7631:77:0;;10935:2:1;7631:77:0;;;10917:21:1;10974:2;10954:18;;;10947:30;11013:34;10993:18;;;10986:62;-1:-1:-1;;;11064:18:1;;;11057:34;11108:19;;7631:77:0;10733:400:1;7631:77:0;7745:9;;7727:15;:27;7719:60;;;;-1:-1:-1;;;7719:60:0;;11340:2:1;7719:60:0;;;11322:21:1;11379:2;11359:18;;;11352:30;-1:-1:-1;;;11398:18:1;;;11391:49;11457:18;;7719:60:0;11138:343:1;7719:60:0;7824:14;;7816:6;;7795:44;;-1:-1:-1;;;;;7824:14:0;;;;7816:6;;;;-1:-1:-1;;;;;;;;;;;7795:44:0;7824:14;;7795:44;7859:14;;7850:6;:23;;-1:-1:-1;;;;;;7850:23:0;-1:-1:-1;;;;;7859:14:0;;;7850:23;;;;;;7587:294::o;25635:1004::-;25733:4;2626:10;25733:4;;25829:28;2626:10;25854:2;25829:16;:28::i;:::-;25795:62;;;;25870:49;25891:6;25899:2;25903:6;25911:7;25870:20;:49::i;:::-;25936:7;25932:678;;;26054:4;26010:23;16924:18;;;;;;;;;;;26116:13;;26097:32;;;;;:70;;-1:-1:-1;26151:16:0;;;;26150:17;26097:70;:112;;;;-1:-1:-1;26188:21:0;;;;;;;26097:112;:156;;;;;26240:13;-1:-1:-1;;;;;26230:23:0;:6;-1:-1:-1;;;;;26230:23:0;;;26097:156;26075:300;;;26330:29;26345:13;;26330:14;:29::i;:::-;26391:11;26405:29;26418:6;26426:7;26405:12;:29::i;:::-;26391:43;;26449:37;26459:6;26475:4;26482:3;26449:9;:37::i;:::-;26501:35;26511:6;26519:2;26523:12;26532:3;26523:6;:12;:::i;26501:35::-;25945:603;;25932:678;;;26569:29;26579:6;26587:2;26591:6;26569:9;:29::i;:::-;-1:-1:-1;26627:4:0;;25635:1004;-1:-1:-1;;;;;25635:1004:0:o;33827:179::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;33907:18:::1;:30:::0;;;33953:45:::1;::::0;160:25:1;;;33953:45:0::1;::::0;148:2:1;133:18;33953:45:0::1;14:177:1::0;32470:206:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32557:24:0;::::1;32549:69;;;::::0;-1:-1:-1;;;32549:69:0;;11688:2:1;32549:69:0::1;::::0;::::1;11670:21:1::0;;;11707:18;;;11700:30;11766:34;11746:18;;;11739:62;11818:18;;32549:69:0::1;11486:356:1::0;32549:69:0::1;32629:17;:39:::0;;-1:-1:-1;;;;;;32629:39:0::1;-1:-1:-1::0;;;;;32629:39:0;;;::::1;::::0;;;::::1;::::0;;32470:206::o;37499:118::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;37558:51:::1;::::0;37566:10:::1;::::0;37587:21:::1;37558:51:::0;::::1;;;::::0;::::1;::::0;;;37587:21;37566:10;37558:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;7303:208:::0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;7384:6:::1;::::0;;7367:14:::1;:23:::0;;-1:-1:-1;;;;;;7367:23:0;;::::1;-1:-1:-1::0;;;;;7384:6:0;::::1;7367:23;::::0;;;7401:19:::1;::::0;;7431:9:::1;:16:::0;;;7463:40:::1;::::0;7384:6:::1;::::0;;;-1:-1:-1;;;;;;;;;;;7463:40:0;7384:6;;7463:40:::1;7303:208:::0;:::o;34014:159::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;34089:13:::1;:25:::0;;;34130:35:::1;::::0;160:25:1;;;34130:35:0::1;::::0;148:2:1;133:18;34130:35:0::1;14:177:1::0;35132:274:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35223:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;35201:111;;;::::0;-1:-1:-1;;;35201:111:0;;12049:2:1;35201:111:0::1;::::0;::::1;12031:21:1::0;12088:2;12068:18;;;12061:30;12127:34;12107:18;;;12100:62;-1:-1:-1;;;12178:18:1;;;12171:32;12220:19;;35201:111:0::1;11847:398:1::0;35201:111:0::1;-1:-1:-1::0;;;;;35323:27:0;::::1;35353:5;35323:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;35323:35:0::1;::::0;;35376:22;;1619:51:1;;;35376:22:0::1;::::0;1592:18:1;35376:22:0::1;1446:230:1::0;37149:190:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;37243:21:::1;::::0;;::::1;;::::0;;::::1;::::0;::::1;37242:22;37218:46:::0;::::1;-1:-1:-1::0;;37218:46:0;;::::1;::::0;;;::::1;::::0;;;;37280:51:::1;::::0;::::1;::::0;::::1;::::0;37309:21;::::1;::::0;;::::1;1419:14:1::0;1412:22;1394:41;;1382:2;1367:18;;1254:187;37280:51:0::1;;;;;;;;37149:190::o:0;36469:672::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;36714:17:::1;;36696:15;:35;36674:112;;;::::0;-1:-1:-1;;;36674:112:0;;12452:2:1;36674:112:0::1;::::0;::::1;12434:21:1::0;12491:2;12471:18;;;12464:30;12530:29;12510:18;;;12503:57;12577:18;;36674:112:0::1;12250:351:1::0;36674:112:0::1;36800:19;36821:17:::0;36842:15:::1;-1:-1:-1::0;;;;;36842:48:0::1;;36917:4;36941:9;36969:14;37002:12;37033:2;37054:8;36842:235;;;;;;;;;;;;;;;;;;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37093:40;::::0;;13626:25:1;;;13682:2;13667:18;;13660:34;;;36799:278:0;;-1:-1:-1;36799:278:0;;-1:-1:-1;37093:40:0::1;::::0;13599:18:1;37093:40:0::1;;;;;;;36663:478;;36469:672:::0;;;;;:::o;37785:120::-;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;37852:45:::1;37870:4;37877:10;37889:7;37852:9;:45::i;6977:244::-:0;6661:6;;-1:-1:-1;;;;;6661:6:0;2626:10;6727:23;6719:68;;;;-1:-1:-1;;;6719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7066:22:0;::::1;7058:73;;;::::0;-1:-1:-1;;;7058:73:0;;13907:2:1;7058:73:0::1;::::0;::::1;13889:21:1::0;13946:2;13926:18;;;13919:30;13985:34;13965:18;;;13958:62;-1:-1:-1;;;14036:18:1;;;14029:36;14082:19;;7058:73:0::1;13705:402:1::0;7058:73:0::1;7168:6;::::0;7147:38:::1;::::0;-1:-1:-1;;;;;7147:38:0;;::::1;::::0;7168:6:::1;::::0;-1:-1:-1;;;;;;;;;;;7147:38:0;7168:6:::1;::::0;7147:38:::1;7196:6;:17:::0;;-1:-1:-1;;;;;;7196:17:0::1;-1:-1:-1::0;;;;;7196:17:0;;;::::1;::::0;;;::::1;::::0;;6977:244::o;1532:246::-;1590:7;1614:1;1619;1614:6;1610:47;;-1:-1:-1;1644:1:0;1637:8;;1610:47;1667:9;1679:5;1683:1;1679;:5;:::i;:::-;1667:17;-1:-1:-1;1712:1:0;1703:5;1707:1;1667:17;1703:5;:::i;:::-;:10;1695:56;;;;-1:-1:-1;;;1695:56:0;;14744:2:1;1695:56:0;;;14726:21:1;14783:2;14763:18;;;14756:30;14822:34;14802:18;;;14795:62;-1:-1:-1;;;14873:18:1;;;14866:31;14914:19;;1695:56:0;14542:397:1;1695:56:0;1769:1;1532:246;-1:-1:-1;;;1532:246:0:o;1784:132::-;1842:7;1869:39;1873:1;1876;1869:39;;;;;;;;;;;;;;;;;:3;:39::i;20181:374::-;-1:-1:-1;;;;;20317:19:0;;20309:65;;;;-1:-1:-1;;;20309:65:0;;15146:2:1;20309:65:0;;;15128:21:1;15185:2;15165:18;;;15158:30;15224:34;15204:18;;;15197:62;-1:-1:-1;;;15275:18:1;;;15268:31;15316:19;;20309:65:0;14944:397:1;20309:65:0;-1:-1:-1;;;;;20393:21:0;;20385:65;;;;-1:-1:-1;;;20385:65:0;;15548:2:1;20385:65:0;;;15530:21:1;15587:2;15567:18;;;15560:30;15626:33;15606:18;;;15599:61;15677:18;;20385:65:0;15346:355:1;20385:65:0;-1:-1:-1;;;;;20463:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20515:32;;160:25:1;;;20515:32:0;;133:18:1;20515:32:0;;;;;;;20181:374;;;:::o;28910:422::-;29012:4;29018:7;29055:13;-1:-1:-1;;;;;29047:21:0;:4;-1:-1:-1;;;;;29047:21:0;;:48;;;;-1:-1:-1;;;;;;29073:22:0;;;;;;:18;:22;;;;;;;;29072:23;29047:48;29043:282;;;-1:-1:-1;29120:4:0;;-1:-1:-1;29120:4:0;29112:26;;29043:282;29166:13;-1:-1:-1;;;;;29160:19:0;:2;-1:-1:-1;;;;;29160:19:0;;:48;;;;-1:-1:-1;;;;;;29184:24:0;;;;;;:18;:24;;;;;;;;29183:25;29160:48;29156:169;;;-1:-1:-1;29233:4:0;;-1:-1:-1;29239:12:0;29225:27;;29156:169;-1:-1:-1;29293:5:0;;-1:-1:-1;29293:5:0;29156:169;28910:422;;;;;:::o;28204:698::-;28368:13;-1:-1:-1;;;;;28362:19:0;:2;-1:-1:-1;;;;;28362:19:0;;28358:242;;28449:13;;28440:6;28424:13;28434:2;-1:-1:-1;;;;;16924:18:0;16897:7;16924:18;;;;;;;;;;;;16823:127;28424:13;:22;;;;:::i;:::-;:38;:91;;;-1:-1:-1;;;;;;28487:28:0;;;;;;:24;:28;;;;;;;;28424:91;28398:190;;;;-1:-1:-1;;;28398:190:0;;15908:2:1;28398:190:0;;;15890:21:1;15947:2;15927:18;;;15920:30;15986:34;15966:18;;;15959:62;-1:-1:-1;;;16037:18:1;;;16030:35;16082:19;;28398:190:0;15706:401:1;28398:190:0;28614:7;28610:285;;;28674:18;;28664:6;:28;;:152;;;-1:-1:-1;;;;;;28718:35:0;;;;;;:29;:35;;;;;;;;;:97;;-1:-1:-1;;;;;;28782:33:0;;;;;;:29;:33;;;;;;;;28718:97;28638:245;;;;-1:-1:-1;;;28638:245:0;;16314:2:1;28638:245:0;;;16296:21:1;16353:2;16333:18;;;16326:30;16392:33;16372:18;;;16365:61;16443:18;;28638:245:0;16112:355:1;28638:245:0;28204:698;;;;:::o;20561:453::-;-1:-1:-1;;;;;17271:18:0;;;20696:24;17271:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;20763:37:0;;20759:248;;20845:6;20825:16;:26;;20817:68;;;;-1:-1:-1;;;20817:68:0;;16674:2:1;20817:68:0;;;16656:21:1;16713:2;16693:18;;;16686:30;16752:31;16732:18;;;16725:59;16801:18;;20817:68:0;16472:353:1;20817:68:0;20929:51;20938:5;20945:7;20973:6;20954:16;:25;20929:8;:51::i;29945:1367::-;23969:16;:23;;-1:-1:-1;;23969:23:0;23988:4;23969:23;;;30156:6:::1;:14:::0;23969:16;;30156:14:::1;-1:-1:-1::0;;;30156:14:0;::::1;::::0;::::1;::::0;30098:42:::1;::::0;30130:10;;::::1;::::0;::::1;::::0;30098:16:::1;:42;:::i;:::-;:72;;;;:::i;:::-;30216:6;:16:::0;30059:111:::1;::::0;;::::1;::::0;-1:-1:-1;30183:20:0::1;::::0;30059:111;;30207:25:::1;::::0;30216:16:::1;30207:6:::0;:25:::1;:::i;:::-;30206:44;;;;:::i;:::-;30183:67:::0;-1:-1:-1;30323:45:0::1;30350:16;30365:1;30183:67:::0;30350:16:::1;:::i;:::-;30340:27;::::0;:6;:27:::1;:::i;:::-;30323:16;:45::i;:::-;30631:6;:14:::0;30494:21:::1;::::0;30472:19:::1;::::0;30631:14:::1;-1:-1:-1::0;;;30631:14:0;::::1;::::0;::::1;::::0;30605:10;;::::1;::::0;::::1;::::0;30568:20:::1;::::0;30605:10:::1;::::0;30568:16:::1;:20;:::i;:::-;30567:48;;;;:::i;:::-;:78;;;;:::i;:::-;30697:6;:16:::0;30528:117:::1;::::0;;::::1;::::0;-1:-1:-1;30658:20:0::1;::::0;30528:117;;30697:20:::1;::::0;30716:1:::1;::::0;30697:16:::1;:20;:::i;:::-;30682:36;::::0;::::1;;:11:::0;:36:::1;:::i;:::-;30681:68;;;;:::i;:::-;30796:6;:14:::0;30658:91;;-1:-1:-1;30760:18:0::1;::::0;30814:14;;30782:28:::1;::::0;-1:-1:-1;;;30796:14:0;::::1;;;30782:11:::0;:28:::1;:::i;:::-;30781:47;;;;:::i;:::-;30760:68:::0;-1:-1:-1;30915:16:0;;30911:134:::1;;30989:44;31002:16;31017:1;31002:12:::0;:16:::1;:::i;:::-;31020:12;30989;:44::i;:::-;31057:14;::::0;:35:::1;::::0;-1:-1:-1;;;;;31057:14:0;;::::1;::::0;:35;::::1;;;::::0;31081:10;;31057:14:::1;:35:::0;:14;:35;31081:10;31057:14;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31183:17:0::1;::::0;:49:::1;::::0;-1:-1:-1;;;;;31183:17:0;;::::1;::::0;31210:21:::1;31183:49:::0;::::1;;;::::0;:17:::1;:49:::0;:17;:49;31210:21;31183:17;:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31251:53:0::1;31266:6:::0;31274:11;31287:16:::1;31302:1;31287:12:::0;:16:::1;:::i;:::-;31251:53;::::0;;17224:25:1;;;17280:2;17265:18;;17258:34;;;;17308:18;;;17301:34;17212:2;17197:18;31251:53:0::1;;;;;;;-1:-1:-1::0;;24015:16:0;:24;;-1:-1:-1;;24015:24:0;;;-1:-1:-1;;;;;29945:1367:0:o;29340:597::-;29445:11;;29525;29514:7;:22;;;;;;;;:::i;:::-;;29510:346;;29652:6;:14;;-1:-1:-1;;;29652:14:0;;;;;29586:46;;29622:10;;;;;;29586:16;:46;:::i;:::-;:80;;;;:::i;:::-;29553:113;;;;29510:346;;;29699:12;29688:7;:23;;;;;;;;:::i;:::-;;29684:172;;29829:7;:15;;-1:-1:-1;;;29829:15:0;;;;;29761:48;;29798:11;;;;;;29761:17;:48;:::i;:::-;:83;;;;:::i;:::-;29728:116;;;;29684:172;22966:4;29873:22;29882:13;29873:6;:22;:::i;:::-;29872:36;;;;:::i;:::-;29866:42;29340:597;-1:-1:-1;;;;29340:597:0:o;18508:668::-;-1:-1:-1;;;;;18639:18:0;;18631:68;;;;-1:-1:-1;;;18631:68:0;;17680:2:1;18631:68:0;;;17662:21:1;17719:2;17699:18;;;17692:30;17758:34;17738:18;;;17731:62;-1:-1:-1;;;17809:18:1;;;17802:35;17854:19;;18631:68:0;17478:401:1;18631:68:0;-1:-1:-1;;;;;18718:16:0;;18710:61;;;;-1:-1:-1;;;18710:61:0;;18086:2:1;18710:61:0;;;18068:21:1;;;18105:18;;;18098:30;18164:34;18144:18;;;18137:62;18216:18;;18710:61:0;17884:356:1;18710:61:0;-1:-1:-1;;;;;18857:15:0;;18835:19;18857:15;;;;;;;;;;;18891:21;;;;18883:72;;;;-1:-1:-1;;;18883:72:0;;18447:2:1;18883:72:0;;;18429:21:1;18486:2;18466:18;;;18459:30;18525:34;18505:18;;;18498:62;-1:-1:-1;;;18576:18:1;;;18569:36;18622:19;;18883:72:0;18245:402:1;18883:72:0;-1:-1:-1;;;;;18991:15:0;;;:9;:15;;;;;;;;;;;19009:20;;;18991:38;;19051:13;;;;;;;;:23;;19023:6;;18991:9;19051:23;;19023:6;;19051:23;:::i;:::-;;;;;;;;19107:2;-1:-1:-1;;;;;19092:26:0;19101:4;-1:-1:-1;;;;;19092:26:0;;19111:6;19092:26;;;;160:25:1;;148:2;133:18;;14:177;19092:26:0;;;;;;;;19131:37;37625:152;19584:591;-1:-1:-1;;;;;19668:21:0;;19660:67;;;;-1:-1:-1;;;19660:67:0;;18854:2:1;19660:67:0;;;18836:21:1;18893:2;18873:18;;;18866:30;18932:34;18912:18;;;18905:62;-1:-1:-1;;;18983:18:1;;;18976:31;19024:19;;19660:67:0;18652:397:1;19660:67:0;-1:-1:-1;;;;;19827:18:0;;19802:22;19827:18;;;;;;;;;;;19864:24;;;;19856:71;;;;-1:-1:-1;;;19856:71:0;;19256:2:1;19856:71:0;;;19238:21:1;19295:2;19275:18;;;19268:30;19334:34;19314:18;;;19307:62;-1:-1:-1;;;19385:18:1;;;19378:32;19427:19;;19856:71:0;19054:398:1;19856:71:0;-1:-1:-1;;;;;19963:18:0;;:9;:18;;;;;;;;;;19984:23;;;19963:44;;20029:12;:22;;20001:6;;19963:9;20029:22;;20001:6;;20029:22;:::i;:::-;;;;-1:-1:-1;;20069:37:0;;160:25:1;;;20095:1:0;;-1:-1:-1;;;;;20069:37:0;;;;;148:2:1;133:18;20069:37:0;;;;;;;37720:49:::1;37625:152:::0;;:::o;1922:276::-;2008:7;2043:12;2036:5;2028:28;;;;-1:-1:-1;;;2028:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2067:9:0;2079:5;2083:1;2079;:5;:::i;:::-;2067:17;1922:276;-1:-1:-1;;;;;1922:276:0:o;31320:590::-;31471:16;;;31485:1;31471:16;;;;;;;;31447:21;;31471:16;;;;;;;;;;-1:-1:-1;31471:16:0;31447:40;;31516:4;31498;31503:1;31498:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31498:23:0;;;-1:-1:-1;;;;;31498:23:0;;;;;31542:15;-1:-1:-1;;;;;31542:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31532:4;31537:1;31532:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31532:32:0;;;-1:-1:-1;;;;;31532:32:0;;;;;31577:62;31594:4;31609:15;31627:11;31577:8;:62::i;:::-;31678:224;;-1:-1:-1;;;31678:224:0;;-1:-1:-1;;;;;31678:15:0;:66;;;;:224;;31759:11;;31785:1;;31829:4;;31856;;31876:15;;31678:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31376:534;31320:590;:::o;31918:520::-;32067:62;32084:4;32099:15;32117:11;32067:8;:62::i;:::-;32172:258;;-1:-1:-1;;;32172:258:0;;-1:-1:-1;;;;;32172:15:0;:31;;;;32211:9;;32172:258;;32244:4;;32264:11;;32290:1;;;;32244:4;;32404:15;;32172:258;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31918:520;;:::o;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:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1681:247::-;1740:6;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;1848:9;1835:23;1867:31;1892:5;1867:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2764:159::-;2831:20;;2891:6;2880:18;;2870:29;;2860:57;;2913:1;2910;2903:12;2860:57;2764:159;;;:::o;2928:328::-;3002:6;3010;3018;3071:2;3059:9;3050:7;3046:23;3042:32;3039:52;;;3087:1;3084;3077:12;3039:52;3110:28;3128:9;3110:28;:::i;:::-;3100:38;;3157:37;3190:2;3179:9;3175:18;3157:37;:::i;:::-;3147:47;;3213:37;3246:2;3235:9;3231:18;3213:37;:::i;:::-;3203:47;;2928:328;;;;;:::o;3450:180::-;3509:6;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;-1:-1:-1;3601:23:1;;3450:180;-1:-1:-1;3450:180:1:o;4067:388::-;4135:6;4143;4196:2;4184:9;4175:7;4171:23;4167:32;4164:52;;;4212:1;4209;4202:12;4164:52;4251:9;4238:23;4270:31;4295:5;4270:31;:::i;:::-;4320:5;-1:-1:-1;4377:2:1;4362:18;;4349:32;4390:33;4349:32;4390:33;:::i;:::-;4442:7;4432:17;;;4067:388;;;;;:::o;4460:521::-;4555:6;4563;4571;4579;4587;4640:3;4628:9;4619:7;4615:23;4611:33;4608:53;;;4657:1;4654;4647:12;4608:53;4693:9;4680:23;4670:33;;4750:2;4739:9;4735:18;4722:32;4712:42;;4801:2;4790:9;4786:18;4773:32;4763:42;;4855:2;4844:9;4840:18;4827:32;4868:31;4893:5;4868:31;:::i;:::-;4460:521;;;;-1:-1:-1;4460:521:1;;4970:3;4955:19;4942:33;;4460:521;-1:-1:-1;;4460:521:1:o;4986:380::-;5065:1;5061:12;;;;5108;;;5129:61;;5183:4;5175:6;5171:17;5161:27;;5129:61;5236:2;5228:6;5225:14;5205:18;5202:38;5199:161;;5282:10;5277:3;5273:20;5270:1;5263:31;5317:4;5314:1;5307:15;5345:4;5342:1;5335:15;5199:161;;4986:380;;;:::o;5371:356::-;5573:2;5555:21;;;5592:18;;;5585:30;5651:34;5646:2;5631:18;;5624:62;5718:2;5703:18;;5371:356::o;6305:127::-;6366:10;6361:3;6357:20;6354:1;6347:31;6397:4;6394:1;6387:15;6421:4;6418:1;6411:15;6437:125;6477:4;6505:1;6502;6499:8;6496:34;;;6510:18;;:::i;:::-;-1:-1:-1;6547:9:1;;6437:125::o;6567:224::-;6606:3;6634:6;6667:2;6664:1;6660:10;6697:2;6694:1;6690:10;6728:3;6724:2;6720:12;6715:3;6712:21;6709:47;;;6736:18;;:::i;:::-;6772:13;;6567:224;-1:-1:-1;;;;6567:224:1:o;7146:128::-;7186:3;7217:1;7213:6;7210:1;7207:13;7204:39;;;7223:18;;:::i;:::-;-1:-1:-1;7259:9:1;;7146:128::o;8373:277::-;8440:6;8493:2;8481:9;8472:7;8468:23;8464:32;8461:52;;;8509:1;8506;8499:12;8461:52;8541:9;8535:16;8594:5;8587:13;8580:21;8573:5;8570:32;8560:60;;8616:1;8613;8606:12;12606:591;-1:-1:-1;;;;;12949:15:1;;;12931:34;;12996:2;12981:18;;12974:34;;;;13039:2;13024:18;;13017:34;;;;13082:2;13067:18;;13060:34;;;;13131:15;;;13125:3;13110:19;;13103:44;12911:3;13163:19;;13156:35;;;;12880:3;12865:19;;12606:591::o;13202:245::-;13281:6;13289;13342:2;13330:9;13321:7;13317:23;13313:32;13310:52;;;13358:1;13355;13348:12;13310:52;-1:-1:-1;;13381:16:1;;13437:2;13422:18;;;13416:25;13381:16;;13416:25;;-1:-1:-1;13202:245:1:o;14112:168::-;14152:7;14218:1;14214;14210:6;14206:14;14203:1;14200:21;14195:1;14188:9;14181:17;14177:45;14174:71;;;14225:18;;:::i;:::-;-1:-1:-1;14265:9:1;;14112:168::o;14285:127::-;14346:10;14341:3;14337:20;14334:1;14327:31;14377:4;14374:1;14367:15;14401:4;14398:1;14391:15;14417:120;14457:1;14483;14473:35;;14488:18;;:::i;:::-;-1:-1:-1;14522:9:1;;14417:120::o;16830:187::-;16869:1;16895:6;16928:2;16925:1;16921:10;16950:3;16940:37;;16957:18;;:::i;:::-;16995:10;;16991:20;;;;;16830:187;-1:-1:-1;;16830:187:1:o;17346:127::-;17407:10;17402:3;17398:20;17395:1;17388:31;17438:4;17435:1;17428:15;17462:4;17459:1;17452:15;19589:127;19650:10;19645:3;19641:20;19638:1;19631:31;19681:4;19678:1;19671:15;19705:4;19702:1;19695:15;19721:251;19791:6;19844:2;19832:9;19823:7;19819:23;19815:32;19812:52;;;19860:1;19857;19850:12;19812:52;19892:9;19886:16;19911:31;19936:5;19911:31;:::i;19977:980::-;20239:4;20287:3;20276:9;20272:19;20318:6;20307:9;20300:25;20344:2;20382:6;20377:2;20366:9;20362:18;20355:34;20425:3;20420:2;20409:9;20405:18;20398:31;20449:6;20484;20478:13;20515:6;20507;20500:22;20553:3;20542:9;20538:19;20531:26;;20592:2;20584:6;20580:15;20566:29;;20613:1;20623:195;20637:6;20634:1;20631:13;20623:195;;;20702:13;;-1:-1:-1;;;;;20698:39:1;20686:52;;20793:15;;;;20758:12;;;;20734:1;20652:9;20623:195;;;-1:-1:-1;;;;;;;20874:32:1;;;;20869:2;20854:18;;20847:60;-1:-1:-1;;;20938:3:1;20923:19;20916:35;20835:3;19977:980;-1:-1:-1;;;19977:980:1:o;21574:306::-;21662:6;21670;21678;21731:2;21719:9;21710:7;21706:23;21702:32;21699:52;;;21747:1;21744;21737:12;21699:52;21776:9;21770:16;21760:26;;21826:2;21815:9;21811:18;21805:25;21795:35;;21870:2;21859:9;21855:18;21849:25;21839:35;;21574:306;;;;;:::o

Swarm Source

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