ETH Price: $3,293.90 (-0.46%)

Token

Shaman King Inu (SKINU)
 

Overview

Max Total Supply

1,000,000,000,000,000 SKINU

Holders

207

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,857,612,813.300232402 SKINU

Value
$0.00
0xa45ee2a6c3ef087251f560f6a4b9120d8b24eae1
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:
ShamanKingInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-28
*/

/* 
    Shaman King Inu 
    
    Telegram: https://t.me/ShamanKing_Inu
    Twitter: https://twitter.com/Shamanking_Inu
    
    1 Quadrillion supply
    2% Dev tax
    4% marketing
    1% liquidity
    2% Reflection to Holders
    
*/

// SPDX-License-Identifier: MIT



pragma solidity ^0.8.9;

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

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

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 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;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

    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"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view 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;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract ShamanKingInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress;
        
    address payable public devAddress;
        
    address payable public liquidityAddress;
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e15 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Shaman King Inu";
    string private constant _symbol = "SKINU";
    uint8 private constant _decimals = 9;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _marketingFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 2;
    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 7;

    uint256 public _sellTaxFee = 2;
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 7;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly; // mapping to track addresses that buy within the first 2 blocks pay a 3x tax for 24 hours to sell
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _marketingTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 500 * 1 gwei; // do not allow over 500 gwei for launch
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

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

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);
    
    event UpdatedLiquidityAddress(address liquidity);
    
    event OwnerForcedSwapBack(uint256 timestamp);
    
    event BoughtEarly(address indexed sniper);
    
    event RemovedSniper(address indexed notsnipersupposedly);

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

    constructor() payable {
        _rOwned[_msgSender()] = _rTotal / 1000 * 405;
        _rOwned[address(this)] = _rTotal / 1000 * 595;
        
        maxTransactionAmount = _tTotal * 6 / 1000; // 0.6% maxTransactionAmountTxn
        minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05% swap tokens amount
        
        marketingAddress = payable(0x2592b59Cca96F56c17f30bb0fA5d535697d7Ef94); // Marketing Address
        
        devAddress = payable(0x30164A89D34b780a3BC521ba85f9355Cc1C6b9a9); // Dev Address
        
        liquidityAddress = payable(owner()); // Liquidity Address (switches to dead address once launch happens)
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        emit Transfer(address(0), _msgSender(), _tTotal * 405 / 1000);
        emit Transfer(address(0), address(this), _tTotal * 595 / 1000);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // once enabled, can never be turned off
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp + 72 hours;
    }
    
    function launch(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 amount = amounts[i];
            _transfer(msg.sender, wallet, amount);
        }
        enableTrading();
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        return true;
    }
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 200);
        gasPriceLimit = gas * 1 gwei;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
        
        
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){
                
                if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock){
                    boughtEarly[to] = true;
                    emit BoughtEarly(to);
                }
                
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
        
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_marketingTokensToSwap);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee;
                buyOrSellSwitch = SELL;
                // higher tax if bought in the same block as trading active for 72 hours (sniper protect)
                if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _taxFee = _taxFee * 5;
                    _liquidityFee = _liquidityFee * 5;
                }
            // Normal transfers do not get taxed
            } else {
                require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over.  DM a Mod.");
                removeAllFee();
                buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
            }
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap;
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);
        
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        
        uint256 ethForDev= ethForMarketing * 2 / 7; // 2/7 gos to dev
        ethForMarketing -= ethForDev;
        
        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        (success,) = address(devAddress).call{value: ethForDev}("");
        
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        
        // send leftover ETH to the marketing wallet so it doesn't get stuck on the contract.
        if(address(this).balance > 1e17){
            (success,) = address(marketingAddress).call{value: address(this).balance}("");
        }
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= _tTotal / 100, "Can only swap back if more than 1% of tokens stuck on contract");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
     function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee <= 10, "Must keep buy taxes below 10%");
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee <= 20, "Must keep sell taxes below 20%");
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee);
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a805461ffff19166101011790556200002b69d3c21bcecceda1000000600019620003c4565b6200003990600019620003f1565b600e55601054601155601354601455600260168190556001601781905560076018819055601992909255601a819055601b919091556000601c8190556023805460ff191690921790915564746a5288006024556028805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103e8600e54620000eb91906200040b565b620000f99061019562000422565b33600090815260066020526040902055600e546200011b906103e8906200040b565b620001299061025362000422565b306000908152600660208190526040909120919091556103e8906200015a9069d3c21bcecceda10000009062000422565b6200016691906200040b565b6021556127106200018369d3c21bcecceda1000000600562000422565b6200018f91906200040b565b602655600380546001600160a01b0319908116732592b59cca96f56c17f30bb0fa5d535697d7ef9417909155600480549091167330164a89d34b780a3bc521ba85f9355cc1c6b9a9179055620001ed6000546001600160a01b031690565b600580546001600160a01b0319166001600160a01b039283161781556000805483168152600b6020526040808220805460ff1990811660019081179092553084528284208054821683179055600354861684528284208054821683179055935485168352908220805490931617909155546200026c9116600162000324565b6200027930600162000324565b6200028861dead600162000324565b3360006000805160206200469f8339815191526103e8620002b669d3c21bcecceda100000061019562000422565b620002c291906200040b565b60405190815260200160405180910390a33060006000805160206200469f8339815191526103e86200030169d3c21bcecceda100000061025362000422565b6200030d91906200040b565b60405190815260200160405180910390a362000444565b6000546001600160a01b03163314620003835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b634e487b7160e01b600052601260045260246000fd5b600082620003d657620003d6620003ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620004065762000406620003db565b500390565b6000826200041d576200041d620003ae565b500490565b60008160001904831182151516156200043f576200043f620003db565b500290565b61424b80620004546000396000f3fe6080604052600436106103c75760003560e01c806370a08231116101f2578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b85578063efcc52de14610b9b578063f2fde38b14610bb1578063f5648a4f14610bd157600080fd5b8063dc44b6a014610af4578063dd62ed3e14610b0a578063e884f26014610b50578063ea2f0b3714610b6557600080fd5b8063c5d24189116100dc578063c5d2418914610a98578063c860795214610aae578063c876d0b914610ac4578063c8c8ebe414610ade57600080fd5b8063a9059cbb14610a07578063b62496f514610a27578063bbc0c74214610a57578063c49b9a8014610a7857600080fd5b806388f82020116101855780639a7a23d6116101545780639a7a23d614610992578063a073d37f146109b2578063a457c2d7146109c7578063a5ece941146109e757600080fd5b806388f82020146108ed5780638da5cb5b14610926578063906e9dd01461094457806395d89b411461096457600080fd5b80638366e79a116101c15780638366e79a14610867578063837917581461088757806385ecfd28146108a757806388790a68146108d757600080fd5b806370a08231146107fd578063715018a61461081d578063751039fc146108325780637571336a1461084757600080fd5b80633685d419116102e25780634a74bb02116102755780635342acb4116102445780635342acb41461077c578063557ed1ba146107b55780635bb988c9146107c8578063602bc62b146107e857600080fd5b80634a74bb021461070657806351f205e41461072757806352390c021461073c578063525fa81f1461075c57600080fd5b8063437823ec116102b1578063437823ec146106875780634549b039146106a757806349bd5a5e146106c75780634a62bb65146106e757600080fd5b80633685d4191461061157806339509351146106315780633ad10ef6146106515780634047ea3e1461067157600080fd5b80631fc851bd1161035a57806325519cf21161032957806325519cf2146105955780632d838119146105b5578063313ce567146105d55780633221c93f146105f157600080fd5b80631fc851bd14610533578063200a692d1461054957806323b872dd1461055f57806324171f321461057f57600080fd5b806313114a9d1161039657806313114a9d1461049f5780631694505e146104be57806318160ddd146104f65780631d865c301461051357600080fd5b806306fdde03146103d3578063092316021461041d578063095ea7b31461043f57806310d5de531461046f57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b5060408051808201909152600f81526e5368616d616e204b696e6720496e7560881b60208201525b6040516104149190613c49565b60405180910390f35b34801561042957600080fd5b5061043d610438366004613c9e565b610be6565b005b34801561044b57600080fd5b5061045f61045a366004613ccf565b610c3b565b6040519015158152602001610414565b34801561047b57600080fd5b5061045f61048a366004613cfb565b60226020526000908152604090205460ff1681565b3480156104ab57600080fd5b50600f545b604051908152602001610414565b3480156104ca57600080fd5b506027546104de906001600160a01b031681565b6040516001600160a01b039091168152602001610414565b34801561050257600080fd5b5069d3c21bcecceda10000006104b0565b34801561051f57600080fd5b5061043d61052e366004613d18565b610c52565b34801561053f57600080fd5b506104b0601e5481565b34801561055557600080fd5b506104b060195481565b34801561056b57600080fd5b5061045f61057a366004613d44565b610d37565b34801561058b57600080fd5b506104b060205481565b3480156105a157600080fd5b5061043d6105b0366004613d18565b610da0565b3480156105c157600080fd5b506104b06105d0366004613c9e565b610e7c565b3480156105e157600080fd5b5060405160098152602001610414565b3480156105fd57600080fd5b506005546104de906001600160a01b031681565b34801561061d57600080fd5b5061043d61062c366004613cfb565b610f00565b34801561063d57600080fd5b5061045f61064c366004613ccf565b6110b7565b34801561065d57600080fd5b506004546104de906001600160a01b031681565b34801561067d57600080fd5b506104b0601f5481565b34801561069357600080fd5b5061043d6106a2366004613cfb565b6110ed565b3480156106b357600080fd5b506104b06106c2366004613d93565b611172565b3480156106d357600080fd5b506028546104de906001600160a01b031681565b3480156106f357600080fd5b50600a5461045f90610100900460ff1681565b34801561071257600080fd5b5060285461045f90600160a81b900460ff1681565b34801561073357600080fd5b5061043d611207565b34801561074857600080fd5b5061043d610757366004613cfb565b611300565b34801561076857600080fd5b5061043d610777366004613cfb565b6114ee565b34801561078857600080fd5b5061045f610797366004613cfb565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107c157600080fd5b50426104b0565b3480156107d457600080fd5b5061043d6107e3366004613cfb565b6115e4565b3480156107f457600080fd5b506002546104b0565b34801561080957600080fd5b506104b0610818366004613cfb565b611657565b34801561082957600080fd5b5061043d6116b6565b34801561083e57600080fd5b5061045f61172a565b34801561085357600080fd5b5061043d610862366004613dc3565b611770565b34801561087357600080fd5b5061045f610882366004613df1565b6117c5565b34801561089357600080fd5b5061045f6108a2366004613ef5565b6119eb565b3480156108b357600080fd5b5061045f6108c2366004613cfb565b601d6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104b0601a5481565b3480156108f957600080fd5b5061045f610908366004613cfb565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561093257600080fd5b506000546001600160a01b03166104de565b34801561095057600080fd5b5061043d61095f366004613cfb565b611dd9565b34801561097057600080fd5b50604080518082019091526005815264534b494e5560d81b6020820152610407565b34801561099e57600080fd5b5061043d6109ad366004613dc3565b611ee5565b3480156109be57600080fd5b506026546104b0565b3480156109d357600080fd5b5061045f6109e2366004613ccf565b611f9d565b3480156109f357600080fd5b506003546104de906001600160a01b031681565b348015610a1357600080fd5b5061045f610a22366004613ccf565b611fec565b348015610a3357600080fd5b5061045f610a42366004613cfb565b60256020526000908152604090205460ff1681565b348015610a6357600080fd5b5060285461045f90600160b01b900460ff1681565b348015610a8457600080fd5b5061043d610a93366004613fb7565b611ff9565b348015610aa457600080fd5b506104b060185481565b348015610aba57600080fd5b506104b0601b5481565b348015610ad057600080fd5b50600a5461045f9060ff1681565b348015610aea57600080fd5b506104b060215481565b348015610b0057600080fd5b506104b060175481565b348015610b1657600080fd5b506104b0610b25366004613df1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b5c57600080fd5b5061045f612070565b348015610b7157600080fd5b5061043d610b80366004613cfb565b6120ab565b348015610b9157600080fd5b506104b0601c5481565b348015610ba757600080fd5b506104b060165481565b348015610bbd57600080fd5b5061043d610bcc366004613cfb565b612126565b348015610bdd57600080fd5b5061043d612210565b6000546001600160a01b03163314610c195760405162461bcd60e51b8152600401610c1090613fd4565b60405180910390fd5b60c8811015610c2757600080fd5b610c3581633b9aca0061401f565b60245550565b6000610c483384846122f5565b5060015b92915050565b6000546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610c1090613fd4565b6019839055601a829055601b819055601481610c98848661403e565b610ca2919061403e565b1115610cf05760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610c10565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d44848484612419565b610d968433610d91856040518060600160405280602881526020016141c9602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612d11565b6122f5565b5060019392505050565b6000546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610c1090613fd4565b601683905560178290556018819055600a81610de6848661403e565b610df0919061403e565b1115610e3e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c10565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d2a565b6000600e54821115610ee35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c10565b6000610eed612d4b565b9050610ef98382612d6e565b9392505050565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000908152600c602052604090205460ff16610f925760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c10565b60005b600d548110156110b357816001600160a01b0316600d8281548110610fbc57610fbc614056565b6000918252602090912001546001600160a01b031614156110a157600d8054610fe79060019061406c565b81548110610ff757610ff7614056565b600091825260209091200154600d80546001600160a01b03909216918390811061102357611023614056565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061107b5761107b614083565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110ab81614099565b915050610f95565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c48918590610d919086612db0565b6000546001600160a01b031633146111175760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156111ce5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c10565b816111ed5760006111de84612e0f565b50939550610c4c945050505050565b60006111f884612e0f565b50929550610c4c945050505050565b6000546001600160a01b031633146112315760405162461bcd60e51b8152600401610c1090613fd4565b600061123c30611657565b9050611253606469d3c21bcecceda10000006140b4565b8110156112c85760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610c10565b6112d0612e5e565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611167565b6000546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000908152600c602052604090205460ff16156113935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c10565b600d546032906113a490600161403e565b111561142e5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c10565b6001600160a01b03811660009081526006602052604090205415611488576001600160a01b03811660009081526006602052604090205461146e90610e7c565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b03811661157c5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c10565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611167565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff161561169457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c4c90610e7c565b6000546001600160a01b031633146116e05760405162461bcd60e51b8152600401610c1090613fd4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146117555760405162461bcd60e51b8152600401610c1090613fd4565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b031633146117f05760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0383166118465760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c10565b6001600160a01b03831630141561189f5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156118e157600080fd5b505afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191991906140d6565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561196757600080fd5b505af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f91906140ef565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600080546001600160a01b03163314611a165760405162461bcd60e51b8152600401610c1090613fd4565b602854600160b01b900460ff1615611a845760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c10565b60c8835110611af45760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c10565b60005b8351811015611b5c576000848281518110611b1457611b14614056565b602002602001015190506000848381518110611b3257611b32614056565b60200260200101519050611b47338383612419565b50508080611b5490614099565b915050611af7565b50611b656130b1565b737a250d5630b4cf539739df2c5dacb4c659f2488d611b85816001611770565b602780546001600160a01b0319166001600160a01b038316908117909155611bb990309069d3c21bcecceda10000006122f5565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a919061410c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7257600080fd5b505afa158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa919061410c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2a919061410c565b602880546001600160a01b0319166001600160a01b03929092169182179055611d54906001611770565b602854611d6b906001600160a01b03166001613106565b60004711611dc75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c10565b610d96611dd330611657565b47613161565b6000546001600160a01b03163314611e035760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b038116611e675760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c10565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611167565b6000546001600160a01b03163314611f0f5760405162461bcd60e51b8152600401610c1090613fd4565b6028546001600160a01b0383811691161415611f935760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c10565b6110b38282613106565b6000610c483384610d91856040518060600160405280602581526020016141f1602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612d11565b6000610c48338484612419565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610c1090613fd4565b60288054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116790831515815260200190565b600080546001600160a01b0316331461209b5760405162461bcd60e51b8152600401610c1090613fd4565b50600a805460ff19169055600190565b6000546001600160a01b031633146120d55760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611167565b6000546001600160a01b031633146121505760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166121b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461223a5760405162461bcd60e51b8152600401610c1090613fd4565b602854600160b01b900460ff16156122a85760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610c10565b604051600090339047908381818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50505050565b6001600160a01b0383166123575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c10565b6001600160a01b0382166123b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c10565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661247d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c10565b6001600160a01b0382166124df5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c10565b600081116125415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c10565b602854600160b01b900460ff166125dd576001600160a01b0383166000908152600b602052604090205460ff168061259157506001600160a01b0382166000908152600b602052604090205460ff165b6125dd5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c10565b600a54610100900460ff16156129eb576000546001600160a01b0384811691161480159061261957506000546001600160a01b03838116911614155b801561262d57506001600160a01b03821615155b801561264457506001600160a01b03821661dead14155b801561265a5750602854600160a01b900460ff16155b156129eb576000546001600160a01b0384811691161480159061268b57506028546001600160a01b03838116911614155b80156126985750601c5443145b156126e7576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561271157506001600160a01b03831660009081526025602052604090205460ff165b15612768576024543a11156127685760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c10565b600a5460ff1615612879576000546001600160a01b0383811691161480159061279f57506027546001600160a01b03838116911614155b80156127b957506028546001600160a01b03838116911614155b15612879576001600160a01b038216600090815260096020526040902054431161285d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c10565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff1680156128ba57506001600160a01b03821660009081526022602052604090205460ff16155b156129345760215481111561292f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c10565b6129eb565b6001600160a01b03821660009081526025602052604090205460ff16801561297557506001600160a01b03831660009081526022602052604090205460ff16155b156129eb576021548111156129eb5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c10565b6000612a04602054601f54612db090919063ffffffff16565b90506000612a1130611657565b60265460285491925082101590600160a01b900460ff16158015612a3e5750602854600160a81b900460ff165b8015612a5f5750602854600090612a5d906001600160a01b0316611657565b115b8015612a6b5750600083115b8015612a9057506001600160a01b0385166000908152600b602052604090205460ff16155b8015612ab557506001600160a01b0386166000908152600b602052604090205460ff16155b8015612ad957506001600160a01b03851660009081526025602052604090205460ff165b8015612ae25750805b15612aef57612aef612e5e565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612b3157506001600160a01b0386166000908152600b602052604090205460ff165b15612b43575060036015556000612cfc565b6001600160a01b03871660009081526025602052604090205460ff1615612b8f57612b6c613224565b601654601055601854601754612b82919061403e565b6013556001601555612cfc565b6001600160a01b03861660009081526025602052604090205460ff1615612c2c57612bb8613224565b601954601055601b54601a54612bce919061403e565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612bff575042601e54115b15612c2757601054612c1290600561401f565b601055601354612c2390600561401f565b6013555b612cfc565b6001600160a01b0387166000908152601d602052604090205460ff161580612c56575042601e5411155b612cee5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610c10565b612cf6613224565b60036015555b612d0887878784613252565b50505050505050565b60008184841115612d355760405162461bcd60e51b8152600401610c109190613c49565b506000612d42848661406c565b95945050505050565b6000806000612d58613377565b9092509050612d678282612d6e565b9250505090565b6000610ef983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613517565b600080612dbd838561403e565b905083811015610ef95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c10565b6000806000806000806000806000612e268a613545565b9250925092506000806000612e448d8686612e3f612d4b565b613587565b919f909e50909c50959a5093985091965092945050505050565b6028805460ff60a01b1916600160a01b1790556000612e7c30611657565b90506000602054601f54612e90919061403e565b90506000612eaa6002601f54612d6e90919063ffffffff16565b90506000612eb884836135d7565b905047612ec482613619565b6000612ed047836135d7565b90506000612ef386612eed6020548561378290919063ffffffff16565b90612d6e565b90506000612f0183836135d7565b905060006007612f1284600261401f565b612f1c91906140b4565b9050612f28818461406c565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d8060008114612f85576040519150601f19603f3d011682016040523d82523d6000602084013e612f8a565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612fda576040519150601f19603f3d011682016040523d82523d6000602084013e612fdf565b606091505b505080915050612fef8884613161565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613098576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461308d576040519150601f19603f3d011682016040523d82523d6000602084013e613092565b606091505b50909150505b50506028805460ff60a01b191690555050505050505050565b6000546001600160a01b031633146130db5760405162461bcd60e51b8152600401610c1090613fd4565b6028805461ffff60a81b191661010160a81b17905543601c55613101426203f48061403e565b601e55565b6001600160a01b038216600090815260256020908152604080832080548515801560ff19928316811790935560229094529190932080549091169092179091556131535761315382611300565b806110b3576110b382610f00565b6027546131799030906001600160a01b0316846122f5565b60275460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156131e457600080fd5b505af11580156131f8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061321d9190614129565b5050505050565b6010541580156132345750601354155b1561323b57565b601080546011556013805460145560009182905555565b8061325f5761325f613224565b6001600160a01b0384166000908152600c602052604090205460ff1680156132a057506001600160a01b0383166000908152600c602052604090205460ff16155b156132b5576132b0848484613801565b613361565b6001600160a01b0384166000908152600c602052604090205460ff161580156132f657506001600160a01b0383166000908152600c602052604090205460ff165b15613306576132b0848484613927565b6001600160a01b0384166000908152600c602052604090205460ff16801561334657506001600160a01b0383166000908152600c602052604090205460ff165b15613356576132b08484846139d0565b613361848484613a43565b806122ef576122ef601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d548110156134d8578260066000600d84815481106133ae576133ae614056565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061341957508160076000600d84815481106133f2576133f2614056565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613436575050600e549369d3c21bcecceda10000009350915050565b61347c60066000600d848154811061345057613450614056565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906135d7565b92506134c460076000600d848154811061349857613498614056565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906135d7565b9150806134d081614099565b91505061338c565b50600e546134f09069d3c21bcecceda1000000612d6e565b82101561350e575050600e549269d3c21bcecceda100000092509050565b90939092509050565b600081836135385760405162461bcd60e51b8152600401610c109190613c49565b506000612d4284866140b4565b60008060008061355485613a87565b9050600061356186613aa3565b905060006135798261357389866135d7565b906135d7565b979296509094509092505050565b60008080806135968886613782565b905060006135a48887613782565b905060006135b28888613782565b905060006135c48261357386866135d7565b939b939a50919850919650505050505050565b6000610ef983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d11565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364e5761364e614056565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156136a257600080fd5b505afa1580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da919061410c565b816001815181106136ed576136ed614056565b6001600160a01b03928316602091820292909201015260275461371391309116846122f5565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac9479061374c908590600090869030904290600401614157565b600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b505050505050565b60008261379157506000610c4c565b600061379d838561401f565b9050826137aa85836140b4565b14610ef95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c10565b60008060008060008061381387612e0f565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061384590886135d7565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461387490876135d7565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546138a39086612db0565b6001600160a01b0389166000908152600660205260409020556138c581613abf565b6138cf8483613c25565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161391491815260200190565b60405180910390a3505050505050505050565b60008060008060008061393987612e0f565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061396b90876135d7565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546139a19084612db0565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546138a39086612db0565b6000806000806000806139e287612e0f565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613a1490886135d7565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461396b90876135d7565b600080600080600080613a5587612e0f565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061387490876135d7565b6000610c4c6064612eed6010548561378290919063ffffffff16565b6000610c4c6064612eed6013548561378290919063ffffffff16565b60016015541415613b3057601354601754613ada908361401f565b613ae491906140b4565b601f6000828254613af5919061403e565b9091555050601354601854613b0a908361401f565b613b1491906140b4565b60206000828254613b25919061403e565b90915550613b9c9050565b60026015541415613b9c57601354601a54613b4b908361401f565b613b5591906140b4565b601f6000828254613b66919061403e565b9091555050601354601b54613b7b908361401f565b613b8591906140b4565b60206000828254613b96919061403e565b90915550505b6000613ba6612d4b565b90506000613bb48383613782565b30600090815260066020526040902054909150613bd19082612db0565b30600090815260066020908152604080832093909355600c9052205460ff1615613c205730600090815260076020526040902054613c0f9084612db0565b306000908152600760205260409020555b505050565b600e54613c3290836135d7565b600e55600f54613c429082612db0565b600f555050565b600060208083528351808285015260005b81811015613c7657858101830151858201604001528201613c5a565b81811115613c88576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613cb057600080fd5b5035919050565b6001600160a01b0381168114613ccc57600080fd5b50565b60008060408385031215613ce257600080fd5b8235613ced81613cb7565b946020939093013593505050565b600060208284031215613d0d57600080fd5b8135610ef981613cb7565b600080600060608486031215613d2d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613d5957600080fd5b8335613d6481613cb7565b92506020840135613d7481613cb7565b929592945050506040919091013590565b8015158114613ccc57600080fd5b60008060408385031215613da657600080fd5b823591506020830135613db881613d85565b809150509250929050565b60008060408385031215613dd657600080fd5b8235613de181613cb7565b91506020830135613db881613d85565b60008060408385031215613e0457600080fd5b8235613e0f81613cb7565b91506020830135613db881613cb7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e5e57613e5e613e1f565b604052919050565b600067ffffffffffffffff821115613e8057613e80613e1f565b5060051b60200190565b600082601f830112613e9b57600080fd5b81356020613eb0613eab83613e66565b613e35565b82815260059290921b84018101918181019086841115613ecf57600080fd5b8286015b84811015613eea5780358352918301918301613ed3565b509695505050505050565b60008060408385031215613f0857600080fd5b823567ffffffffffffffff80821115613f2057600080fd5b818501915085601f830112613f3457600080fd5b81356020613f44613eab83613e66565b82815260059290921b84018101918181019089841115613f6357600080fd5b948201945b83861015613f8a578535613f7b81613cb7565b82529482019490820190613f68565b96505086013592505080821115613fa057600080fd5b50613fad85828601613e8a565b9150509250929050565b600060208284031215613fc957600080fd5b8135610ef981613d85565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561403957614039614009565b500290565b6000821982111561405157614051614009565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561407e5761407e614009565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156140ad576140ad614009565b5060010190565b6000826140d157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156140e857600080fd5b5051919050565b60006020828403121561410157600080fd5b8151610ef981613d85565b60006020828403121561411e57600080fd5b8151610ef981613cb7565b60008060006060848603121561413e57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156141a75784516001600160a01b031683529383019391830191600101614182565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ee158952ca48687520b544d4ae12d3ec2b09761ecf47d892b5a448d8d6efd47364736f6c63430008090033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806370a08231116101f2578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b85578063efcc52de14610b9b578063f2fde38b14610bb1578063f5648a4f14610bd157600080fd5b8063dc44b6a014610af4578063dd62ed3e14610b0a578063e884f26014610b50578063ea2f0b3714610b6557600080fd5b8063c5d24189116100dc578063c5d2418914610a98578063c860795214610aae578063c876d0b914610ac4578063c8c8ebe414610ade57600080fd5b8063a9059cbb14610a07578063b62496f514610a27578063bbc0c74214610a57578063c49b9a8014610a7857600080fd5b806388f82020116101855780639a7a23d6116101545780639a7a23d614610992578063a073d37f146109b2578063a457c2d7146109c7578063a5ece941146109e757600080fd5b806388f82020146108ed5780638da5cb5b14610926578063906e9dd01461094457806395d89b411461096457600080fd5b80638366e79a116101c15780638366e79a14610867578063837917581461088757806385ecfd28146108a757806388790a68146108d757600080fd5b806370a08231146107fd578063715018a61461081d578063751039fc146108325780637571336a1461084757600080fd5b80633685d419116102e25780634a74bb02116102755780635342acb4116102445780635342acb41461077c578063557ed1ba146107b55780635bb988c9146107c8578063602bc62b146107e857600080fd5b80634a74bb021461070657806351f205e41461072757806352390c021461073c578063525fa81f1461075c57600080fd5b8063437823ec116102b1578063437823ec146106875780634549b039146106a757806349bd5a5e146106c75780634a62bb65146106e757600080fd5b80633685d4191461061157806339509351146106315780633ad10ef6146106515780634047ea3e1461067157600080fd5b80631fc851bd1161035a57806325519cf21161032957806325519cf2146105955780632d838119146105b5578063313ce567146105d55780633221c93f146105f157600080fd5b80631fc851bd14610533578063200a692d1461054957806323b872dd1461055f57806324171f321461057f57600080fd5b806313114a9d1161039657806313114a9d1461049f5780631694505e146104be57806318160ddd146104f65780631d865c301461051357600080fd5b806306fdde03146103d3578063092316021461041d578063095ea7b31461043f57806310d5de531461046f57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b5060408051808201909152600f81526e5368616d616e204b696e6720496e7560881b60208201525b6040516104149190613c49565b60405180910390f35b34801561042957600080fd5b5061043d610438366004613c9e565b610be6565b005b34801561044b57600080fd5b5061045f61045a366004613ccf565b610c3b565b6040519015158152602001610414565b34801561047b57600080fd5b5061045f61048a366004613cfb565b60226020526000908152604090205460ff1681565b3480156104ab57600080fd5b50600f545b604051908152602001610414565b3480156104ca57600080fd5b506027546104de906001600160a01b031681565b6040516001600160a01b039091168152602001610414565b34801561050257600080fd5b5069d3c21bcecceda10000006104b0565b34801561051f57600080fd5b5061043d61052e366004613d18565b610c52565b34801561053f57600080fd5b506104b0601e5481565b34801561055557600080fd5b506104b060195481565b34801561056b57600080fd5b5061045f61057a366004613d44565b610d37565b34801561058b57600080fd5b506104b060205481565b3480156105a157600080fd5b5061043d6105b0366004613d18565b610da0565b3480156105c157600080fd5b506104b06105d0366004613c9e565b610e7c565b3480156105e157600080fd5b5060405160098152602001610414565b3480156105fd57600080fd5b506005546104de906001600160a01b031681565b34801561061d57600080fd5b5061043d61062c366004613cfb565b610f00565b34801561063d57600080fd5b5061045f61064c366004613ccf565b6110b7565b34801561065d57600080fd5b506004546104de906001600160a01b031681565b34801561067d57600080fd5b506104b0601f5481565b34801561069357600080fd5b5061043d6106a2366004613cfb565b6110ed565b3480156106b357600080fd5b506104b06106c2366004613d93565b611172565b3480156106d357600080fd5b506028546104de906001600160a01b031681565b3480156106f357600080fd5b50600a5461045f90610100900460ff1681565b34801561071257600080fd5b5060285461045f90600160a81b900460ff1681565b34801561073357600080fd5b5061043d611207565b34801561074857600080fd5b5061043d610757366004613cfb565b611300565b34801561076857600080fd5b5061043d610777366004613cfb565b6114ee565b34801561078857600080fd5b5061045f610797366004613cfb565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107c157600080fd5b50426104b0565b3480156107d457600080fd5b5061043d6107e3366004613cfb565b6115e4565b3480156107f457600080fd5b506002546104b0565b34801561080957600080fd5b506104b0610818366004613cfb565b611657565b34801561082957600080fd5b5061043d6116b6565b34801561083e57600080fd5b5061045f61172a565b34801561085357600080fd5b5061043d610862366004613dc3565b611770565b34801561087357600080fd5b5061045f610882366004613df1565b6117c5565b34801561089357600080fd5b5061045f6108a2366004613ef5565b6119eb565b3480156108b357600080fd5b5061045f6108c2366004613cfb565b601d6020526000908152604090205460ff1681565b3480156108e357600080fd5b506104b0601a5481565b3480156108f957600080fd5b5061045f610908366004613cfb565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561093257600080fd5b506000546001600160a01b03166104de565b34801561095057600080fd5b5061043d61095f366004613cfb565b611dd9565b34801561097057600080fd5b50604080518082019091526005815264534b494e5560d81b6020820152610407565b34801561099e57600080fd5b5061043d6109ad366004613dc3565b611ee5565b3480156109be57600080fd5b506026546104b0565b3480156109d357600080fd5b5061045f6109e2366004613ccf565b611f9d565b3480156109f357600080fd5b506003546104de906001600160a01b031681565b348015610a1357600080fd5b5061045f610a22366004613ccf565b611fec565b348015610a3357600080fd5b5061045f610a42366004613cfb565b60256020526000908152604090205460ff1681565b348015610a6357600080fd5b5060285461045f90600160b01b900460ff1681565b348015610a8457600080fd5b5061043d610a93366004613fb7565b611ff9565b348015610aa457600080fd5b506104b060185481565b348015610aba57600080fd5b506104b0601b5481565b348015610ad057600080fd5b50600a5461045f9060ff1681565b348015610aea57600080fd5b506104b060215481565b348015610b0057600080fd5b506104b060175481565b348015610b1657600080fd5b506104b0610b25366004613df1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b5c57600080fd5b5061045f612070565b348015610b7157600080fd5b5061043d610b80366004613cfb565b6120ab565b348015610b9157600080fd5b506104b0601c5481565b348015610ba757600080fd5b506104b060165481565b348015610bbd57600080fd5b5061043d610bcc366004613cfb565b612126565b348015610bdd57600080fd5b5061043d612210565b6000546001600160a01b03163314610c195760405162461bcd60e51b8152600401610c1090613fd4565b60405180910390fd5b60c8811015610c2757600080fd5b610c3581633b9aca0061401f565b60245550565b6000610c483384846122f5565b5060015b92915050565b6000546001600160a01b03163314610c7c5760405162461bcd60e51b8152600401610c1090613fd4565b6019839055601a829055601b819055601481610c98848661403e565b610ca2919061403e565b1115610cf05760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610c10565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d44848484612419565b610d968433610d91856040518060600160405280602881526020016141c9602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612d11565b6122f5565b5060019392505050565b6000546001600160a01b03163314610dca5760405162461bcd60e51b8152600401610c1090613fd4565b601683905560178290556018819055600a81610de6848661403e565b610df0919061403e565b1115610e3e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c10565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d2a565b6000600e54821115610ee35760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c10565b6000610eed612d4b565b9050610ef98382612d6e565b9392505050565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000908152600c602052604090205460ff16610f925760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c10565b60005b600d548110156110b357816001600160a01b0316600d8281548110610fbc57610fbc614056565b6000918252602090912001546001600160a01b031614156110a157600d8054610fe79060019061406c565b81548110610ff757610ff7614056565b600091825260209091200154600d80546001600160a01b03909216918390811061102357611023614056565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061107b5761107b614083565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110ab81614099565b915050610f95565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c48918590610d919086612db0565b6000546001600160a01b031633146111175760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156111ce5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c10565b816111ed5760006111de84612e0f565b50939550610c4c945050505050565b60006111f884612e0f565b50929550610c4c945050505050565b6000546001600160a01b031633146112315760405162461bcd60e51b8152600401610c1090613fd4565b600061123c30611657565b9050611253606469d3c21bcecceda10000006140b4565b8110156112c85760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610c10565b6112d0612e5e565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611167565b6000546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000908152600c602052604090205460ff16156113935760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c10565b600d546032906113a490600161403e565b111561142e5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c10565b6001600160a01b03811660009081526006602052604090205415611488576001600160a01b03811660009081526006602052604090205461146e90610e7c565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146115185760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b03811661157c5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c10565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611167565b6000546001600160a01b0316331461160e5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff161561169457506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c4c90610e7c565b6000546001600160a01b031633146116e05760405162461bcd60e51b8152600401610c1090613fd4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146117555760405162461bcd60e51b8152600401610c1090613fd4565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b0316331461179a5760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b031633146117f05760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0383166118465760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c10565b6001600160a01b03831630141561189f5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c10565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156118e157600080fd5b505afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191991906140d6565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561196757600080fd5b505af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f91906140ef565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600080546001600160a01b03163314611a165760405162461bcd60e51b8152600401610c1090613fd4565b602854600160b01b900460ff1615611a845760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c10565b60c8835110611af45760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c10565b60005b8351811015611b5c576000848281518110611b1457611b14614056565b602002602001015190506000848381518110611b3257611b32614056565b60200260200101519050611b47338383612419565b50508080611b5490614099565b915050611af7565b50611b656130b1565b737a250d5630b4cf539739df2c5dacb4c659f2488d611b85816001611770565b602780546001600160a01b0319166001600160a01b038316908117909155611bb990309069d3c21bcecceda10000006122f5565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2a919061410c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7257600080fd5b505afa158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa919061410c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2a919061410c565b602880546001600160a01b0319166001600160a01b03929092169182179055611d54906001611770565b602854611d6b906001600160a01b03166001613106565b60004711611dc75760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c10565b610d96611dd330611657565b47613161565b6000546001600160a01b03163314611e035760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b038116611e675760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c10565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611167565b6000546001600160a01b03163314611f0f5760405162461bcd60e51b8152600401610c1090613fd4565b6028546001600160a01b0383811691161415611f935760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c10565b6110b38282613106565b6000610c483384610d91856040518060600160405280602581526020016141f1602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612d11565b6000610c48338484612419565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610c1090613fd4565b60288054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061116790831515815260200190565b600080546001600160a01b0316331461209b5760405162461bcd60e51b8152600401610c1090613fd4565b50600a805460ff19169055600190565b6000546001600160a01b031633146120d55760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611167565b6000546001600160a01b031633146121505760405162461bcd60e51b8152600401610c1090613fd4565b6001600160a01b0381166121b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461223a5760405162461bcd60e51b8152600401610c1090613fd4565b602854600160b01b900460ff16156122a85760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610c10565b604051600090339047908381818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50505050565b6001600160a01b0383166123575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c10565b6001600160a01b0382166123b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c10565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661247d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c10565b6001600160a01b0382166124df5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c10565b600081116125415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c10565b602854600160b01b900460ff166125dd576001600160a01b0383166000908152600b602052604090205460ff168061259157506001600160a01b0382166000908152600b602052604090205460ff165b6125dd5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c10565b600a54610100900460ff16156129eb576000546001600160a01b0384811691161480159061261957506000546001600160a01b03838116911614155b801561262d57506001600160a01b03821615155b801561264457506001600160a01b03821661dead14155b801561265a5750602854600160a01b900460ff16155b156129eb576000546001600160a01b0384811691161480159061268b57506028546001600160a01b03838116911614155b80156126985750601c5443145b156126e7576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff16801561271157506001600160a01b03831660009081526025602052604090205460ff165b15612768576024543a11156127685760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c10565b600a5460ff1615612879576000546001600160a01b0383811691161480159061279f57506027546001600160a01b03838116911614155b80156127b957506028546001600160a01b03838116911614155b15612879576001600160a01b038216600090815260096020526040902054431161285d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c10565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff1680156128ba57506001600160a01b03821660009081526022602052604090205460ff16155b156129345760215481111561292f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c10565b6129eb565b6001600160a01b03821660009081526025602052604090205460ff16801561297557506001600160a01b03831660009081526022602052604090205460ff16155b156129eb576021548111156129eb5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c10565b6000612a04602054601f54612db090919063ffffffff16565b90506000612a1130611657565b60265460285491925082101590600160a01b900460ff16158015612a3e5750602854600160a81b900460ff165b8015612a5f5750602854600090612a5d906001600160a01b0316611657565b115b8015612a6b5750600083115b8015612a9057506001600160a01b0385166000908152600b602052604090205460ff16155b8015612ab557506001600160a01b0386166000908152600b602052604090205460ff16155b8015612ad957506001600160a01b03851660009081526025602052604090205460ff165b8015612ae25750805b15612aef57612aef612e5e565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612b3157506001600160a01b0386166000908152600b602052604090205460ff165b15612b43575060036015556000612cfc565b6001600160a01b03871660009081526025602052604090205460ff1615612b8f57612b6c613224565b601654601055601854601754612b82919061403e565b6013556001601555612cfc565b6001600160a01b03861660009081526025602052604090205460ff1615612c2c57612bb8613224565b601954601055601b54601a54612bce919061403e565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612bff575042601e54115b15612c2757601054612c1290600561401f565b601055601354612c2390600561401f565b6013555b612cfc565b6001600160a01b0387166000908152601d602052604090205460ff161580612c56575042601e5411155b612cee5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610c10565b612cf6613224565b60036015555b612d0887878784613252565b50505050505050565b60008184841115612d355760405162461bcd60e51b8152600401610c109190613c49565b506000612d42848661406c565b95945050505050565b6000806000612d58613377565b9092509050612d678282612d6e565b9250505090565b6000610ef983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613517565b600080612dbd838561403e565b905083811015610ef95760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c10565b6000806000806000806000806000612e268a613545565b9250925092506000806000612e448d8686612e3f612d4b565b613587565b919f909e50909c50959a5093985091965092945050505050565b6028805460ff60a01b1916600160a01b1790556000612e7c30611657565b90506000602054601f54612e90919061403e565b90506000612eaa6002601f54612d6e90919063ffffffff16565b90506000612eb884836135d7565b905047612ec482613619565b6000612ed047836135d7565b90506000612ef386612eed6020548561378290919063ffffffff16565b90612d6e565b90506000612f0183836135d7565b905060006007612f1284600261401f565b612f1c91906140b4565b9050612f28818461406c565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d8060008114612f85576040519150601f19603f3d011682016040523d82523d6000602084013e612f8a565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612fda576040519150601f19603f3d011682016040523d82523d6000602084013e612fdf565b606091505b505080915050612fef8884613161565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613098576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461308d576040519150601f19603f3d011682016040523d82523d6000602084013e613092565b606091505b50909150505b50506028805460ff60a01b191690555050505050505050565b6000546001600160a01b031633146130db5760405162461bcd60e51b8152600401610c1090613fd4565b6028805461ffff60a81b191661010160a81b17905543601c55613101426203f48061403e565b601e55565b6001600160a01b038216600090815260256020908152604080832080548515801560ff19928316811790935560229094529190932080549091169092179091556131535761315382611300565b806110b3576110b382610f00565b6027546131799030906001600160a01b0316846122f5565b60275460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b1580156131e457600080fd5b505af11580156131f8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061321d9190614129565b5050505050565b6010541580156132345750601354155b1561323b57565b601080546011556013805460145560009182905555565b8061325f5761325f613224565b6001600160a01b0384166000908152600c602052604090205460ff1680156132a057506001600160a01b0383166000908152600c602052604090205460ff16155b156132b5576132b0848484613801565b613361565b6001600160a01b0384166000908152600c602052604090205460ff161580156132f657506001600160a01b0383166000908152600c602052604090205460ff165b15613306576132b0848484613927565b6001600160a01b0384166000908152600c602052604090205460ff16801561334657506001600160a01b0383166000908152600c602052604090205460ff165b15613356576132b08484846139d0565b613361848484613a43565b806122ef576122ef601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d548110156134d8578260066000600d84815481106133ae576133ae614056565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061341957508160076000600d84815481106133f2576133f2614056565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613436575050600e549369d3c21bcecceda10000009350915050565b61347c60066000600d848154811061345057613450614056565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906135d7565b92506134c460076000600d848154811061349857613498614056565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906135d7565b9150806134d081614099565b91505061338c565b50600e546134f09069d3c21bcecceda1000000612d6e565b82101561350e575050600e549269d3c21bcecceda100000092509050565b90939092509050565b600081836135385760405162461bcd60e51b8152600401610c109190613c49565b506000612d4284866140b4565b60008060008061355485613a87565b9050600061356186613aa3565b905060006135798261357389866135d7565b906135d7565b979296509094509092505050565b60008080806135968886613782565b905060006135a48887613782565b905060006135b28888613782565b905060006135c48261357386866135d7565b939b939a50919850919650505050505050565b6000610ef983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d11565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061364e5761364e614056565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156136a257600080fd5b505afa1580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da919061410c565b816001815181106136ed576136ed614056565b6001600160a01b03928316602091820292909201015260275461371391309116846122f5565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac9479061374c908590600090869030904290600401614157565b600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b505050505050565b60008261379157506000610c4c565b600061379d838561401f565b9050826137aa85836140b4565b14610ef95760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c10565b60008060008060008061381387612e0f565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061384590886135d7565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461387490876135d7565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546138a39086612db0565b6001600160a01b0389166000908152600660205260409020556138c581613abf565b6138cf8483613c25565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161391491815260200190565b60405180910390a3505050505050505050565b60008060008060008061393987612e0f565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061396b90876135d7565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546139a19084612db0565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546138a39086612db0565b6000806000806000806139e287612e0f565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613a1490886135d7565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461396b90876135d7565b600080600080600080613a5587612e0f565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061387490876135d7565b6000610c4c6064612eed6010548561378290919063ffffffff16565b6000610c4c6064612eed6013548561378290919063ffffffff16565b60016015541415613b3057601354601754613ada908361401f565b613ae491906140b4565b601f6000828254613af5919061403e565b9091555050601354601854613b0a908361401f565b613b1491906140b4565b60206000828254613b25919061403e565b90915550613b9c9050565b60026015541415613b9c57601354601a54613b4b908361401f565b613b5591906140b4565b601f6000828254613b66919061403e565b9091555050601354601b54613b7b908361401f565b613b8591906140b4565b60206000828254613b96919061403e565b90915550505b6000613ba6612d4b565b90506000613bb48383613782565b30600090815260066020526040902054909150613bd19082612db0565b30600090815260066020908152604080832093909355600c9052205460ff1615613c205730600090815260076020526040902054613c0f9084612db0565b306000908152600760205260409020555b505050565b600e54613c3290836135d7565b600e55600f54613c429082612db0565b600f555050565b600060208083528351808285015260005b81811015613c7657858101830151858201604001528201613c5a565b81811115613c88576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613cb057600080fd5b5035919050565b6001600160a01b0381168114613ccc57600080fd5b50565b60008060408385031215613ce257600080fd5b8235613ced81613cb7565b946020939093013593505050565b600060208284031215613d0d57600080fd5b8135610ef981613cb7565b600080600060608486031215613d2d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613d5957600080fd5b8335613d6481613cb7565b92506020840135613d7481613cb7565b929592945050506040919091013590565b8015158114613ccc57600080fd5b60008060408385031215613da657600080fd5b823591506020830135613db881613d85565b809150509250929050565b60008060408385031215613dd657600080fd5b8235613de181613cb7565b91506020830135613db881613d85565b60008060408385031215613e0457600080fd5b8235613e0f81613cb7565b91506020830135613db881613cb7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e5e57613e5e613e1f565b604052919050565b600067ffffffffffffffff821115613e8057613e80613e1f565b5060051b60200190565b600082601f830112613e9b57600080fd5b81356020613eb0613eab83613e66565b613e35565b82815260059290921b84018101918181019086841115613ecf57600080fd5b8286015b84811015613eea5780358352918301918301613ed3565b509695505050505050565b60008060408385031215613f0857600080fd5b823567ffffffffffffffff80821115613f2057600080fd5b818501915085601f830112613f3457600080fd5b81356020613f44613eab83613e66565b82815260059290921b84018101918181019089841115613f6357600080fd5b948201945b83861015613f8a578535613f7b81613cb7565b82529482019490820190613f68565b96505086013592505080821115613fa057600080fd5b50613fad85828601613e8a565b9150509250929050565b600060208284031215613fc957600080fd5b8135610ef981613d85565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561403957614039614009565b500290565b6000821982111561405157614051614009565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561407e5761407e614009565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156140ad576140ad614009565b5060010190565b6000826140d157634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156140e857600080fd5b5051919050565b60006020828403121561410157600080fd5b8151610ef981613d85565b60006020828403121561411e57600080fd5b8151610ef981613cb7565b60008060006060848603121561413e57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156141a75784516001600160a01b031683529383019391830191600101614182565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ee158952ca48687520b544d4ae12d3ec2b09761ecf47d892b5a448d8d6efd47364736f6c63430008090033

Deployed Bytecode Sourcemap

16762:32209:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22452:85;;;;;;;;;;-1:-1:-1;22524:5:0;;;;;;;;;;;;-1:-1:-1;;;22524:5:0;;;;22452:85;;;;;;;:::i;:::-;;;;;;;;28024:135;;;;;;;;;;-1:-1:-1;28024:135:0;;;;;:::i;:::-;;:::i;:::-;;23449:193;;;;;;;;;;-1:-1:-1;23449:193:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;23449:193:0;1257:187:1;19256:64:0;;;;;;;;;;-1:-1:-1;19256:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24988:89;;;;;;;;;;-1:-1:-1;25059:10:0;;24988:89;;;1847:25:1;;;1835:2;1820:18;24988:89:0;1701:177:1;19736:41:0;;;;;;;;;;-1:-1:-1;19736:41:0;;;;-1:-1:-1;;;;;19736:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;19736:41:0;1883:230:1;22735:97:0;;;;;;;;;;-1:-1:-1;17730:14:0;22735:97;;46684:456;;;;;;;;;;-1:-1:-1;46684:456:0;;;;;:::i;:::-;;:::i;19011:33::-;;;;;;;;;;;;;;;;18656:30;;;;;;;;;;;;;;;;23650:448;;;;;;;;;;-1:-1:-1;23650:448:0;;;;;:::i;:::-;;:::i;19164:37::-;;;;;;;;;;;;;;;;46238:438;;;;;;;;;;-1:-1:-1;46238:438:0;;;;;:::i;:::-;;:::i;28656:322::-;;;;;;;;;;-1:-1:-1;28656:322:0;;;;;:::i;:::-;;:::i;22642:85::-;;;;;;;;;;-1:-1:-1;22642:85:0;;17981:1;3042:36:1;;3030:2;3015:18;22642:85:0;2900:184:1;16993:39:0;;;;;;;;;;-1:-1:-1;16993:39:0;;;;-1:-1:-1;;;;;16993:39:0;;;29453:471;;;;;;;;;;-1:-1:-1;29453:471:0;;;;;:::i;:::-;;:::i;24106:302::-;;;;;;;;;;-1:-1:-1;24106:302:0;;;;;:::i;:::-;;:::i;16943:33::-;;;;;;;;;;-1:-1:-1;16943:33:0;;;;-1:-1:-1;;;;;16943:33:0;;;19120:37;;;;;;;;;;;;;;;;45921:152;;;;;;;;;;-1:-1:-1;45921:152:0;;;;;:::i;:::-;;:::i;28167:481::-;;;;;;;;;;-1:-1:-1;28167:481:0;;;;;:::i;:::-;;:::i;19784:28::-;;;;;;;;;;-1:-1:-1;19784:28:0;;;;-1:-1:-1;;;;;19784:28:0;;;17453:33;;;;;;;;;;-1:-1:-1;17453:33:0;;;;;;;;;;;19849:41;;;;;;;;;;-1:-1:-1;19849:41:0;;;;-1:-1:-1;;;19849:41:0;;;;;;36684:304;;;;;;;;;;;;;:::i;28986:459::-;;;;;;;;;;-1:-1:-1;28986:459:0;;;;;:::i;:::-;;:::i;47560:341::-;;;;;;;;;;-1:-1:-1;47560:341:0;;;;;:::i;:::-;;:::i;45626:126::-;;;;;;;;;;-1:-1:-1;45626:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45717:27:0;45693:4;45717:27;;;:18;:27;;;;;;;;;45626:126;7464:90;;;;;;;;;;-1:-1:-1;7531:15:0;7464:90;;45765:148;;;;;;;;;;-1:-1:-1;45765:148:0;;;;;:::i;:::-;;:::i;7366:90::-;;;;;;;;;;-1:-1:-1;7439:9:0;;7366:90;;22840:198;;;;;;;;;;-1:-1:-1;22840:198:0;;;;;:::i;:::-;;:::i;6921:148::-;;;;;;;;;;;;;:::i;25149:192::-;;;;;;;;;;;;;:::i;25530:144::-;;;;;;;;;;-1:-1:-1;25530:144:0;;;;;:::i;:::-;;:::i;48183:488::-;;;;;;;;;;-1:-1:-1;48183:488:0;;;;;:::i;:::-;;:::i;25968:1371::-;;;;;;;;;;-1:-1:-1;25968:1371:0;;;;;:::i;:::-;;:::i;18862:43::-;;;;;;;;;;-1:-1:-1;18862:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18693:36;;;;;;;;;;;;;;;;24826:154;;;;;;;;;;-1:-1:-1;24826:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24952:20:0;24923:4;24952:20;;;:11;:20;;;;;;;;;24826:154;6707:79;;;;;;;;;;-1:-1:-1;6745:7:0;6772:6;-1:-1:-1;;;;;6772:6:0;6707:79;;47150:398;;;;;;;;;;-1:-1:-1;47150:398:0;;;;;:::i;:::-;;:::i;22545:89::-;;;;;;;;;;-1:-1:-1;22619:7:0;;;;;;;;;;;;-1:-1:-1;;;22619:7:0;;;;22545:89;;27485:244;;;;;;;;;;-1:-1:-1;27485:244:0;;;;;:::i;:::-;;:::i;27351:122::-;;;;;;;;;;-1:-1:-1;27442:23:0;;27351:122;;24416:402;;;;;;;;;;-1:-1:-1;24416:402:0;;;;;:::i;:::-;;:::i;16887:39::-;;;;;;;;;;-1:-1:-1;16887:39:0;;;;-1:-1:-1;;;;;16887:39:0;;;23046:201;;;;;;;;;;-1:-1:-1;23046:201:0;;;;;:::i;:::-;;:::i;19621:58::-;;;;;;;;;;-1:-1:-1;19621:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19897:33;;;;;;;;;;-1:-1:-1;19897:33:0;;;;-1:-1:-1;;;19897:33:0;;;;;;47909:171;;;;;;;;;;-1:-1:-1;47909:171:0;;;;;:::i;:::-;;:::i;18612:35::-;;;;;;;;;;;;;;;;18736:36;;;;;;;;;;;;;;;;17407:39;;;;;;;;;;-1:-1:-1;17407:39:0;;;;;;;;19214:35;;;;;;;;;;;;;;;;18570;;;;;;;;;;;;;;;;23255:186;;;;;;;;;;-1:-1:-1;23255:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23406:18:0;;;23374:7;23406:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23255:186;25384:134;;;;;;;;;;;;;:::i;46081:149::-;;;;;;;;;;-1:-1:-1;46081:149:0;;;;;:::i;:::-;;:::i;18785:37::-;;;;;;;;;;;;;;;;18534:29;;;;;;;;;;;;;;;;7077:281;;;;;;;;;;-1:-1:-1;7077:281:0;;;;;:::i;:::-;;:::i;48727:241::-;;;;;;;;;;;;;:::i;28024:135::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;;;;;;;;;28108:3:::1;28101;:10;;28093:19;;;::::0;::::1;;28139:12;:3:::0;28145:6:::1;28139:12;:::i;:::-;28123:13;:28:::0;-1:-1:-1;28024:135:0:o;23449:193::-;23551:4;23573:39;446:10;23596:7;23605:6;23573:8;:39::i;:::-;-1:-1:-1;23630:4:0;23449:193;;;;;:::o;46684:456::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;46829:11:::1;:24:::0;;;46864:17:::1;:36:::0;;;46911:17:::1;:36:::0;;;47021:2:::1;46931:16:::0;46966:31:::1;46884:16:::0;46843:10;46966:31:::1;:::i;:::-;:51;;;;:::i;:::-;:57;;46958:100;;;::::0;-1:-1:-1;;;46958:100:0;;8472:2:1;46958:100:0::1;::::0;::::1;8454:21:1::0;8511:2;8491:18;;;8484:30;8550:32;8530:18;;;8523:60;8600:18;;46958:100:0::1;8270:354:1::0;46958:100:0::1;47074:58;::::0;;8831:25:1;;;8887:2;8872:18;;8865:34;;;8915:18;;;8908:34;;;47074:58:0::1;::::0;8819:2:1;8804:18;47074:58:0::1;;;;;;;;46684:456:::0;;;:::o;23650:448::-;23784:4;23801:36;23811:6;23819:9;23830:6;23801:9;:36::i;:::-;23848:220;23871:6;446:10;23919:138;23975:6;23919:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23919:19:0;;;;;;:11;:19;;;;;;;;446:10;23919:33;;;;;;;;;;:37;:138::i;:::-;23848:8;:220::i;:::-;-1:-1:-1;24086:4:0;23650:448;;;;;:::o;46238:438::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;46379:10:::1;:22:::0;;;46412:16:::1;:34:::0;;;46457:16:::1;:34:::0;;;46562:2:::1;46476:15:::0;46510:29:::1;46431:15:::0;46392:9;46510:29:::1;:::i;:::-;:48;;;;:::i;:::-;:54;;46502:96;;;::::0;-1:-1:-1;;;46502:96:0;;9155:2:1;46502:96:0::1;::::0;::::1;9137:21:1::0;9194:2;9174:18;;;9167:30;9233:31;9213:18;;;9206:59;9282:18;;46502:96:0::1;8953:353:1::0;46502:96:0::1;46614:54;::::0;;8831:25:1;;;8887:2;8872:18;;8865:34;;;8915:18;;;8908:34;;;46614:54:0::1;::::0;8819:2:1;8804:18;46614:54:0::1;8629:319:1::0;28656:322:0;28750:7;28808;;28797;:18;;28775:110;;;;-1:-1:-1;;;28775:110:0;;9513:2:1;28775:110:0;;;9495:21:1;9552:2;9532:18;;;9525:30;9591:34;9571:18;;;9564:62;-1:-1:-1;;;9642:18:1;;;9635:40;9692:19;;28775:110:0;9311:406:1;28775:110:0;28896:19;28918:10;:8;:10::i;:::-;28896:32;-1:-1:-1;28946:24:0;:7;28896:32;28946:11;:24::i;:::-;28939:31;28656:322;-1:-1:-1;;;28656:322:0:o;29453:471::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29531:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29523:56;;;::::0;-1:-1:-1;;;29523:56:0;;9924:2:1;29523:56:0::1;::::0;::::1;9906:21:1::0;9963:2;9943:18;;;9936:30;10002:25;9982:18;;;9975:53;10045:18;;29523:56:0::1;9722:347:1::0;29523:56:0::1;29595:9;29590:327;29614:9;:16:::0;29610:20;::::1;29590:327;;;29672:7;-1:-1:-1::0;;;;;29656:23:0::1;:9;29666:1;29656:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29656:12:0::1;:23;29652:254;;;29715:9;29725:16:::0;;:20:::1;::::0;29744:1:::1;::::0;29725:20:::1;:::i;:::-;29715:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29700:9:::1;:12:::0;;-1:-1:-1;;;;;29715:31:0;;::::1;::::0;29710:1;;29700:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29700:46:0::1;-1:-1:-1::0;;;;;29700:46:0;;::::1;;::::0;;29765:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29804:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29804:28:0::1;::::0;;29851:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29851:15:0;;;;;-1:-1:-1;;;;;;29851:15:0::1;::::0;;;;;29590:327:::1;29453:471:::0;:::o;29652:254::-:1;29632:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29590:327;;;;29453:471:::0;:::o;24106:302::-;446:10;24223:4;24317:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24317:34:0;;;;;;;;;;24223:4;;24245:133;;24295:7;;24317:50;;24356:10;24317:38;:50::i;45921:152::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45992:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;45992:34:0::1;46022:4;45992:34;::::0;;46042:23;;2056:51:1;;;46042:23:0::1;::::0;2029:18:1;46042:23:0::1;;;;;;;;45921:152:::0;:::o;28167:481::-;28287:7;17730:14;28320:7;:18;;28312:62;;;;-1:-1:-1;;;28312:62:0;;10810:2:1;28312:62:0;;;10792:21:1;10849:2;10829:18;;;10822:30;10888:33;10868:18;;;10861:61;10939:18;;28312:62:0;10608:355:1;28312:62:0;28390:17;28385:256;;28425:15;28454:19;28465:7;28454:10;:19::i;:::-;-1:-1:-1;28424:49:0;;-1:-1:-1;28488:14:0;;-1:-1:-1;;;;;28488:14:0;28385:256;28538:23;28573:19;28584:7;28573:10;:19::i;:::-;-1:-1:-1;28535:57:0;;-1:-1:-1;28607:22:0;;-1:-1:-1;;;;;28607:22:0;36684:304;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;36739:23:::1;36765:24;36783:4;36765:9;:24::i;:::-;36739:50:::0;-1:-1:-1;36827:13:0::1;36837:3;17730:14;36827:13;:::i;:::-;36808:15;:32;;36800:107;;;::::0;-1:-1:-1;;;36800:107:0;;11392:2:1;36800:107:0::1;::::0;::::1;11374:21:1::0;11431:2;11411:18;;;11404:30;11470:34;11450:18;;;11443:62;11541:32;11521:18;;;11514:60;11591:19;;36800:107:0::1;11190:426:1::0;36800:107:0::1;36918:10;:8;:10::i;:::-;36944:36;::::0;36964:15:::1;1847:25:1::0;;36944:36:0::1;::::0;1835:2:1;1820:18;36944:36:0::1;1701:177:1::0;28986:459:0;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29067:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29066:21;29058:61;;;::::0;-1:-1:-1;;;29058:61:0;;11823:2:1;29058:61:0::1;::::0;::::1;11805:21:1::0;11862:2;11842:18;;;11835:30;11901:29;11881:18;;;11874:57;11948:18;;29058:61:0::1;11621:351:1::0;29058:61:0::1;29138:9;:16:::0;29162:2:::1;::::0;29138:20:::1;::::0;29157:1:::1;29138:20;:::i;:::-;:26;;29130:116;;;::::0;-1:-1:-1;;;29130:116:0;;12179:2:1;29130:116:0::1;::::0;::::1;12161:21:1::0;12218:2;12198:18;;;12191:30;12257:34;12237:18;;;12230:62;12328:34;12308:18;;;12301:62;-1:-1:-1;;;12379:19:1;;;12372:44;12433:19;;29130:116:0::1;11977:481:1::0;29130:116:0::1;-1:-1:-1::0;;;;;29261:16:0;::::1;29280:1;29261:16:::0;;;:7:::1;:16;::::0;;;;;:20;29257:109:::1;;-1:-1:-1::0;;;;;29337:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29317:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29298:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29257:109:::1;-1:-1:-1::0;;;;;29376:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29376:27:0::1;29399:4;29376:27:::0;;::::1;::::0;;;29414:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29414:23:0::1;::::0;;::::1;::::0;;28986:459::o;47560:341::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47652:31:0;::::1;47644:81;;;::::0;-1:-1:-1;;;47644:81:0;;12665:2:1;47644:81:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:35;12839:19;;47644:81:0::1;12463:401:1::0;47644:81:0::1;47736:16;:45:::0;;-1:-1:-1;;;;;;47736:45:0::1;-1:-1:-1::0;;;;;47736:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;47792:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;47792:43:0::1;-1:-1:-1::0;47792:43:0::1;::::0;;47851:42;;2056:51:1;;;47851:42:0::1;::::0;2029:18:1;47851:42:0::1;1883:230:1::0;45765:148:0;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45839:20:0;::::1;45862:5;45839:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;45839:28:0::1;::::0;;45883:22;::::1;::::0;45862:5;45883:22:::1;45765:148:::0;:::o;22840:198::-;-1:-1:-1;;;;;22930:20:0;;22906:7;22930:20;;;:11;:20;;;;;;;;22926:49;;;-1:-1:-1;;;;;;22959:16:0;;;;;:7;:16;;;;;;;22840:198::o;22926:49::-;-1:-1:-1;;;;;23013:16:0;;;;;;:7;:16;;;;;;22993:37;;:19;:37::i;6921:148::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;7028:1:::1;7012:6:::0;;6991:40:::1;::::0;-1:-1:-1;;;;;7012:6:0;;::::1;::::0;6991:40:::1;::::0;7028:1;;6991:40:::1;7059:1;7042:19:::0;;-1:-1:-1;;;;;;7042:19:0::1;::::0;;6921:148::o;25149:192::-;25201:4;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;25217:14:0::1;:22:::0;;25250:14:::1;:22:::0;;-1:-1:-1;;25250:22:0::1;::::0;;-1:-1:-1;;25283:28:0;;;25217:14:::1;25149:192:::0;:::o;25530:144::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25620:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25620:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25530:144::o;48183:488::-;48297:10;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48333:20:0;::::1;48325:59;;;::::0;-1:-1:-1;;;48325:59:0;;13071:2:1;48325:59:0::1;::::0;::::1;13053:21:1::0;13110:2;13090:18;;;13083:30;13149:28;13129:18;;;13122:56;13195:18;;48325:59:0::1;12869:350:1::0;48325:59:0::1;-1:-1:-1::0;;;;;48403:23:0;::::1;48421:4;48403:23;;48395:64;;;::::0;-1:-1:-1;;;48395:64:0;;13426:2:1;48395:64:0::1;::::0;::::1;13408:21:1::0;13465:2;13445:18;;;13438:30;13504;13484:18;;;13477:58;13552:18;;48395:64:0::1;13224:352:1::0;48395:64:0::1;48497:39;::::0;-1:-1:-1;;;48497:39:0;;48530:4:::1;48497:39;::::0;::::1;2056:51:1::0;48470:24:0::1;::::0;-1:-1:-1;;;;;48497:24:0;::::1;::::0;::::1;::::0;2029:18:1;;48497:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48555:46;::::0;-1:-1:-1;;;48555:46:0;;-1:-1:-1;;;;;13962:32:1;;;48555:46:0::1;::::0;::::1;13944:51:1::0;14011:18;;;14004:34;;;48470:66:0;;-1:-1:-1;48555:23:0;;::::1;::::0;::::1;::::0;13917:18:1;;48555:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48617;::::0;;-1:-1:-1;;;;;13962:32:1;;13944:51;;14026:2;14011:18;;14004:34;;;48547:54:0;;-1:-1:-1;48617:46:0::1;::::0;13917:18:1;48617:46:0::1;;;;;;;48314:357;48183:488:::0;;;;:::o;25968:1371::-;26071:4;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;26096:13:::1;::::0;-1:-1:-1;;;26096:13:0;::::1;;;26095:14;26087:70;;;::::0;-1:-1:-1;;;26087:70:0;;14501:2:1;26087:70:0::1;::::0;::::1;14483:21:1::0;14540:2;14520:18;;;14513:30;14579:34;14559:18;;;14552:62;-1:-1:-1;;;14630:18:1;;;14623:41;14681:19;;26087:70:0::1;14299:407:1::0;26087:70:0::1;26200:3;26176:14;:21;:27;26168:94;;;::::0;-1:-1:-1;;;26168:94:0;;14913:2:1;26168:94:0::1;::::0;::::1;14895:21:1::0;14952:2;14932:18;;;14925:30;14991:34;14971:18;;;14964:62;-1:-1:-1;;;15042:18:1;;;15035:52;15104:19;;26168:94:0::1;14711:418:1::0;26168:94:0::1;26375:9;26371:205;26394:14;:21;26390:1;:25;26371:205;;;26436:14;26453;26468:1;26453:17;;;;;;;;:::i;:::-;;;;;;;26436:34;;26485:14;26502:7;26510:1;26502:10;;;;;;;;:::i;:::-;;;;;;;26485:27;;26527:37;26537:10;26549:6;26557;26527:9;:37::i;:::-;26421:155;;26417:3;;;;;:::i;:::-;;;;26371:205;;;;26586:15;:13;:15::i;:::-;26669:42;26723:58;26669:42:::0;26776:4:::1;26723:25;:58::i;:::-;26792:15;:34:::0;;-1:-1:-1;;;;;;26792:34:0::1;-1:-1:-1::0;;;;;26792:34:0;::::1;::::0;;::::1;::::0;;;26837:58:::1;::::0;26854:4:::1;::::0;17730:14:::1;26837:8;:58::i;:::-;26940:16;-1:-1:-1::0;;;;;26940:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26922:56:0::1;;26987:4;26994:16;-1:-1:-1::0;;;;;26994:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26922:96;::::0;-1:-1:-1;;;;;;26922:96:0::1;::::0;;;;;;-1:-1:-1;;;;;15620:15:1;;;26922:96:0::1;::::0;::::1;15602:34:1::0;15672:15;;15652:18;;;15645:43;15537:18;;26922:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26906:13;:112:::0;;-1:-1:-1;;;;;;26906:112:0::1;-1:-1:-1::0;;;;;26906:112:0;;;::::1;::::0;;::::1;::::0;;27029:55:::1;::::0;-1:-1:-1;27029:25:0::1;:55::i;:::-;27132:13;::::0;27095:58:::1;::::0;-1:-1:-1;;;;;27132:13:0::1;::::0;27095:28:::1;:58::i;:::-;27196:1;27172:21;:25;27164:73;;;::::0;-1:-1:-1;;;27164:73:0;;15901:2:1;27164:73:0::1;::::0;::::1;15883:21:1::0;15940:2;15920:18;;;15913:30;15979:34;15959:18;;;15952:62;-1:-1:-1;;;16030:18:1;;;16023:33;16073:19;;27164:73:0::1;15699:399:1::0;27164:73:0::1;27248:61;27261:24;27279:4;27261:9;:24::i;:::-;27287:21;27248:12;:61::i;47150:398::-:0;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47244:31:0;::::1;47236:81;;;::::0;-1:-1:-1;;;47236:81:0;;16305:2:1;47236:81:0::1;::::0;::::1;16287:21:1::0;16344:2;16324:18;;;16317:30;16383:34;16363:18;;;16356:62;-1:-1:-1;;;16434:18:1;;;16427:35;16479:19;;47236:81:0::1;16103:401:1::0;47236:81:0::1;47347:16;::::0;;-1:-1:-1;;;;;47347:16:0;;::::1;47367:5;47328:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;47328:44:0;;::::1;::::0;;;47383:45;;-1:-1:-1;;;;;;47383:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;47439:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;47439:43:0::1;::::0;;;47498:42;2056:51:1;;;47498:42:0::1;::::0;2029:18:1;47498:42:0::1;1883:230:1::0;27485:244:0;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;27592:13:::1;::::0;-1:-1:-1;;;;;27584:21:0;;::::1;27592:13:::0;::::1;27584:21;;27576:91;;;::::0;-1:-1:-1;;;27576:91:0;;16711:2:1;27576:91:0::1;::::0;::::1;16693:21:1::0;16750:2;16730:18;;;16723:30;16789:34;16769:18;;;16762:62;16860:27;16840:18;;;16833:55;16905:19;;27576:91:0::1;16509:421:1::0;27576:91:0::1;27680:41;27709:4;27715:5;27680:28;:41::i;24416:402::-:0;24538:4;24560:228;446:10;24610:7;24632:145;24689:15;24632:145;;;;;;;;;;;;;;;;;446:10;24632:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24632:34:0;;;;;;;;;;;;:38;:145::i;23046:201::-;23153:4;23175:42;446:10;23199:9;23210:6;23175:9;:42::i;47909:171::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;47986:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;47986:32:0::1;-1:-1:-1::0;;;;47986:32:0;;::::1;;::::0;;48034:38:::1;::::0;::::1;::::0;::::1;::::0;48010:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;25384:134:0;25444:4;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;25460:20:0::1;:28:::0;;-1:-1:-1;;25460:28:0::1;::::0;;;25384:134;:::o;46081:149::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46150:27:0;::::1;46180:5;46150:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;46150:35:0::1;::::0;;46201:21;;2056:51:1;;;46201:21:0::1;::::0;2029:18:1;46201:21:0::1;1883:230:1::0;7077:281:0;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7180:22:0;::::1;7158:110;;;::::0;-1:-1:-1;;;7158:110:0;;17137:2:1;7158:110:0::1;::::0;::::1;17119:21:1::0;17176:2;17156:18;;;17149:30;17215:34;17195:18;;;17188:62;-1:-1:-1;;;17266:18:1;;;17259:36;17312:19;;7158:110:0::1;16935:402:1::0;7158:110:0::1;7305:6;::::0;;7284:38:::1;::::0;-1:-1:-1;;;;;7284:38:0;;::::1;::::0;7305:6;::::1;::::0;7284:38:::1;::::0;::::1;7333:6;:17:::0;;-1:-1:-1;;;;;;7333:17:0::1;-1:-1:-1::0;;;;;7333:17:0;;;::::1;::::0;;;::::1;::::0;;7077:281::o;48727:241::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;48794:13:::1;::::0;-1:-1:-1;;;48794:13:0;::::1;;;48793:14;48785:70;;;::::0;-1:-1:-1;;;48785:70:0;;17544:2:1;48785:70:0::1;::::0;::::1;17526:21:1::0;17583:2;17563:18;;;17556:30;17622:34;17602:18;;;17595:62;-1:-1:-1;;;17673:18:1;;;17666:41;17724:19;;48785:70:0::1;17342:407:1::0;48785:70:0::1;48902:58;::::0;48866:12:::1;::::0;48910:10:::1;::::0;48934:21:::1;::::0;48866:12;48902:58;48866:12;48902:58;48934:21;48910:10;48902:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;48727:241:0:o;29933:371::-;-1:-1:-1;;;;;30060:19:0;;30052:68;;;;-1:-1:-1;;;30052:68:0;;18166:2:1;30052:68:0;;;18148:21:1;18205:2;18185:18;;;18178:30;18244:34;18224:18;;;18217:62;-1:-1:-1;;;18295:18:1;;;18288:34;18339:19;;30052:68:0;17964:400:1;30052:68:0;-1:-1:-1;;;;;30139:21:0;;30131:68;;;;-1:-1:-1;;;30131:68:0;;18571:2:1;30131:68:0;;;18553:21:1;18610:2;18590:18;;;18583:30;18649:34;18629:18;;;18622:62;-1:-1:-1;;;18700:18:1;;;18693:32;18742:19;;30131:68:0;18369:398:1;30131:68:0;-1:-1:-1;;;;;30212:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30264:32;;1847:25:1;;;30264:32:0;;1820:18:1;30264:32:0;;;;;;;29933:371;;;:::o;30312:4721::-;-1:-1:-1;;;;;30434:18:0;;30426:68;;;;-1:-1:-1;;;30426:68:0;;18974:2:1;30426:68:0;;;18956:21:1;19013:2;18993:18;;;18986:30;19052:34;19032:18;;;19025:62;-1:-1:-1;;;19103:18:1;;;19096:35;19148:19;;30426:68:0;18772:401:1;30426:68:0;-1:-1:-1;;;;;30513:16:0;;30505:64;;;;-1:-1:-1;;;30505:64:0;;19380:2:1;30505:64:0;;;19362:21:1;19419:2;19399:18;;;19392:30;19458:34;19438:18;;;19431:62;-1:-1:-1;;;19509:18:1;;;19502:33;19552:19;;30505:64:0;19178:399:1;30505:64:0;30597:1;30588:6;:10;30580:64;;;;-1:-1:-1;;;30580:64:0;;19784:2:1;30580:64:0;;;19766:21:1;19823:2;19803:18;;;19796:30;19862:34;19842:18;;;19835:62;-1:-1:-1;;;19913:18:1;;;19906:39;19962:19;;30580:64:0;19582:405:1;30580:64:0;30669:13;;-1:-1:-1;;;30669:13:0;;;;30665:134;;-1:-1:-1;;;;;30706:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;30734:22:0;;;;;;:18;:22;;;;;;;;30706:50;30698:89;;;;-1:-1:-1;;;30698:89:0;;20194:2:1;30698:89:0;;;20176:21:1;20233:2;20213:18;;;20206:30;20272:28;20252:18;;;20245:56;20318:18;;30698:89:0;19992:350:1;30698:89:0;30842:14;;;;;;;30839:1896;;;6745:7;6772:6;-1:-1:-1;;;;;30894:15:0;;;6772:6;;30894:15;;;;:49;;-1:-1:-1;6745:7:0;6772:6;-1:-1:-1;;;;;30930:13:0;;;6772:6;;30930:13;;30894:49;:86;;;;-1:-1:-1;;;;;;30964:16:0;;;;30894:86;:128;;;;-1:-1:-1;;;;;;31001:21:0;;31015:6;31001:21;;30894:128;:166;;;;-1:-1:-1;31044:16:0;;-1:-1:-1;;;31044:16:0;;;;31043:17;30894:166;30872:1852;;;6745:7;6772:6;-1:-1:-1;;;;;31115:15:0;;;6772:6;;31115:15;;;;:38;;-1:-1:-1;31140:13:0;;-1:-1:-1;;;;;31134:19:0;;;31140:13;;31134:19;;31115:38;:76;;;;;31173:18;;31157:12;:34;31115:76;31112:188;;;-1:-1:-1;;;;;31215:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;31215:22:0;31233:4;31215:22;;;31265:15;;;31215;31265;31112:188;31413:14;;;;:49;;;;-1:-1:-1;;;;;;31431:31:0;;;;;;:25;:31;;;;;;;;31413:49;31409:163;;;31510:13;;31495:11;:28;;31487:65;;;;-1:-1:-1;;;31487:65:0;;20549:2:1;31487:65:0;;;20531:21:1;20588:2;20568:18;;;20561:30;20627:26;20607:18;;;20600:54;20671:18;;31487:65:0;20347:348:1;31487:65:0;31746:20;;;;31742:409;;;6745:7;6772:6;-1:-1:-1;;;;;31794:13:0;;;6772:6;;31794:13;;;;:47;;-1:-1:-1;31825:15:0;;-1:-1:-1;;;;;31811:30:0;;;31825:15;;31811:30;;31794:47;:79;;;;-1:-1:-1;31859:13:0;;-1:-1:-1;;;;;31845:28:0;;;31859:13;;31845:28;;31794:79;31790:342;;;-1:-1:-1;;;;;31909:32:0;;;;;;:28;:32;;;;;;31944:12;-1:-1:-1;31901:133:0;;;;-1:-1:-1;;;31901:133:0;;20902:2:1;31901:133:0;;;20884:21:1;20941:2;20921:18;;;20914:30;20980:34;20960:18;;;20953:62;21051:34;21031:18;;;21024:62;-1:-1:-1;;;21102:19:1;;;21095:40;21152:19;;31901:133:0;20700:477:1;31901:133:0;-1:-1:-1;;;;;32061:32:0;;;;;;:28;:32;;;;;32096:12;32061:47;;31790:342;-1:-1:-1;;;;;32219:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;32255:35:0;;;;;;:31;:35;;;;;;;;32254:36;32219:71;32215:494;;;32337:20;;32327:6;:30;;32319:96;;;;-1:-1:-1;;;32319:96:0;;21384:2:1;32319:96:0;;;21366:21:1;21423:2;21403:18;;;21396:30;21462:34;21442:18;;;21435:62;-1:-1:-1;;;21513:18:1;;;21506:51;21574:19;;32319:96:0;21182:417:1;32319:96:0;32215:494;;;-1:-1:-1;;;;;32492:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;32526:37:0;;;;;;:31;:37;;;;;;;;32525:38;32492:71;32488:221;;;32610:20;;32600:6;:30;;32592:97;;;;-1:-1:-1;;;32592:97:0;;21806:2:1;32592:97:0;;;21788:21:1;21845:2;21825:18;;;21818:30;21884:34;21864:18;;;21857:62;-1:-1:-1;;;21935:18:1;;;21928:52;21997:19;;32592:97:0;21604:418:1;32592:97:0;32775:25;32803:50;32830:22;;32803;;:26;;:50;;;;:::i;:::-;32775:78;;32864:28;32895:24;32913:4;32895:9;:24::i;:::-;32985:23;;33069:16;;32864:55;;-1:-1:-1;32961:47:0;;;;-1:-1:-1;;;33069:16:0;;;;33068:17;:55;;;;-1:-1:-1;33102:21:0;;-1:-1:-1;;;33102:21:0;;;;33068:55;:100;;;;-1:-1:-1;33150:13:0;;33167:1;;33140:24;;-1:-1:-1;;;;;33150:13:0;33140:9;:24::i;:::-;:28;33068:100;:138;;;;;33205:1;33185:17;:21;33068:138;:178;;;;-1:-1:-1;;;;;;33224:22:0;;;;;;:18;:22;;;;;;;;33223:23;33068:178;:220;;;;-1:-1:-1;;;;;;33264:24:0;;;;;;:18;:24;;;;;;;;33263:25;33068:220;:266;;;;-1:-1:-1;;;;;;33305:29:0;;;;;;:25;:29;;;;;;;;33068:266;:306;;;;;33351:23;33068:306;33050:373;;;33401:10;:8;:10::i;:::-;-1:-1:-1;;;;;33556:24:0;;33435:12;33556:24;;;:18;:24;;;;;;33450:4;;33556:24;;;:50;;-1:-1:-1;;;;;;33584:22:0;;;;;;:18;:22;;;;;;;;33556:50;33552:1402;;;-1:-1:-1;18486:1:0;33653:15;:26;33633:5;33552:1402;;;-1:-1:-1;;;;;33767:31:0;;;;;;:25;:31;;;;;;;;33763:1180;;;33819:14;:12;:14::i;:::-;33862:10;;33852:7;:20;33926:16;;33907;;:35;;33926:16;33907:35;:::i;:::-;33891:13;:51;18402:1;33961:15;:21;33763:1180;;;-1:-1:-1;;;;;34043:29:0;;;;;;:25;:29;;;;;;;;34039:904;;;34093:14;:12;:14::i;:::-;34136:11;;34126:7;:21;34202:17;;34182;;:37;;34202:17;34182:37;:::i;:::-;34166:13;:53;18442:1;34238:15;:22;-1:-1:-1;;;;;34389:17:0;;-1:-1:-1;34389:17:0;;;:11;:17;;;;;;;;:57;;;;;34431:15;34410:18;;:36;34389:57;34386:181;;;34480:7;;:11;;34490:1;34480:11;:::i;:::-;34470:7;:21;34530:13;;:17;;34546:1;34530:17;:::i;:::-;34514:13;:33;34386:181;34039:904;;;-1:-1:-1;;;;;34666:17:0;;;;;;:11;:17;;;;;;;;34665:18;;:59;;;34709:15;34687:18;;:37;;34665:59;34657:161;;;;-1:-1:-1;;;34657:161:0;;22229:2:1;34657:161:0;;;22211:21:1;22268:2;22248:18;;;22241:30;22307:34;22287:18;;;22280:62;22378:34;22358:18;;;22351:62;22450:27;22429:19;;;22422:56;22495:19;;34657:161:0;22027:493:1;34657:161:0;34837:14;:12;:14::i;:::-;18486:1;34870:15;:26;34039:904;34974:41;34989:4;34995:2;34999:6;35007:7;34974:14;:41::i;:::-;30415:4618;;;;30312:4721;;;:::o;1872:226::-;1992:7;2028:12;2020:6;;;;2012:29;;;;-1:-1:-1;;;2012:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2052:9:0;2064:5;2068:1;2064;:5;:::i;:::-;2052:17;1872:226;-1:-1:-1;;;;;1872:226:0:o;43343:164::-;43385:7;43406:15;43423;43442:19;:17;:19::i;:::-;43405:56;;-1:-1:-1;43405:56:0;-1:-1:-1;43479:20:0;43405:56;;43479:11;:20::i;:::-;43472:27;;;;43343:164;:::o;2364:132::-;2422:7;2449:39;2453:1;2456;2449:39;;;;;;;;;;;;;;;;;:3;:39::i;1539:181::-;1597:7;;1629:5;1633:1;1629;:5;:::i;:::-;1617:17;;1658:1;1653;:6;;1645:46;;;;-1:-1:-1;;;1645:46:0;;22727:2:1;1645:46:0;;;22709:21:1;22766:2;22746:18;;;22739:30;22805:29;22785:18;;;22778:57;22852:18;;1645:46:0;22525:351:1;41611:742:0;41711:7;41733;41755;41777;41799;41821;41871:23;41909:12;41936:18;41968:20;41980:7;41968:11;:20::i;:::-;41856:132;;;;;;42000:15;42017:23;42042:12;42058:113;42084:7;42106:4;42125:10;42150;:8;:10::i;:::-;42058:11;:113::i;:::-;41999:172;;;;-1:-1:-1;41999:172:0;;-1:-1:-1;42275:15:0;;-1:-1:-1;42305:4:0;;-1:-1:-1;42324:10:0;;-1:-1:-1;41611:742:0;;-1:-1:-1;;;;;41611:742:0:o;35041:1573::-;21157:16;:23;;-1:-1:-1;;;;21157:23:0;-1:-1:-1;;;21157:23:0;;;;35118:24:::1;35136:4;35118:9;:24::i;:::-;35092:50;;35153:25;35206:22;;35181;;:47;;;;:::i;:::-;35153:75;;35298:26;35327:29;35354:1;35327:22;;:26;;:29;;;;:::i;:::-;35298:58:::0;-1:-1:-1;35367:26:0::1;35396:39;:15:::0;35298:58;35396:19:::1;:39::i;:::-;35367:68:::0;-1:-1:-1;35484:21:0::1;35518:36;35367:68:::0;35518:16:::1;:36::i;:::-;35576:18;35597:44;:21;35623:17:::0;35597:25:::1;:44::i;:::-;35576:65;;35662:23;35688:61;35731:17;35688:38;35703:22;;35688:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;35662:87:::0;-1:-1:-1;35770:23:0::1;35796:31;:10:::0;35662:87;35796:14:::1;:31::i;:::-;35770:57:::0;-1:-1:-1;35848:17:0::1;35889:1;35867:19;:15:::0;35885:1:::1;35867:19;:::i;:::-;:23;;;;:::i;:::-;35848:42:::0;-1:-1:-1;35919:28:0::1;35848:42:::0;35919:28;::::1;:::i;:::-;35993:1;35968:22;:26:::0;;;36005:22:::1;:26:::0;;;36078:16:::1;::::0;36070:58:::1;::::0;35919:28;;-1:-1:-1;35993:1:0;;-1:-1:-1;;;;;36078:16:0;;::::1;::::0;35919:28;;35993:1;36070:58;35993:1;36070:58;35919:28;36078:16;36070:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36160:10:0::1;::::0;36152:46:::1;::::0;36052:76;;-1:-1:-1;;;;;;36160:10:0::1;::::0;36184:9;;36152:46:::1;::::0;;;36184:9;36160:10;36152:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36139:59;;;;;36219:49;36232:18;36252:15;36219:12;:49::i;:::-;36284:71;::::0;;8831:25:1;;;8887:2;8872:18;;8865:34;;;8915:18;;;8908:34;;;36284:71:0::1;::::0;8819:2:1;8804:18;36284:71:0::1;;;;;;;36498:4;36474:21;:28;36471:136;;;36539:16;::::0;36531:64:::1;::::0;-1:-1:-1;;;;;36539:16:0;;::::1;::::0;36569:21:::1;::::0;36531:64:::1;::::0;;;36569:21;36539:16;36531:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36518:77:0;;-1:-1:-1;;36471:136:0::1;-1:-1:-1::0;;21203:16:0;:24;;-1:-1:-1;;;;21203:24:0;;;-1:-1:-1;;;;;;;;35041:1573:0:o;25732:224::-;6834:6;;-1:-1:-1;;;;;6834:6:0;446:10;6834:22;6826:67;;;;-1:-1:-1;;;6826:67:0;;;;;;;:::i;:::-;25787:13:::1;:20:::0;;-1:-1:-1;;;;25818:28:0;-1:-1:-1;;;25818:28:0;;;25878:12:::1;25857:18;:33:::0;25922:26:::1;:15;25940:8;25922:26;:::i;:::-;25901:18;:47:::0;25732:224::o;27737:275::-;-1:-1:-1;;;;;27820:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;27820:39:0;;;;;;;;27870:31;:37;;;;;;;:45;;;;;;;;;;;27926:35;;27936:23;27954:4;27936:17;:23::i;:::-;27975:5;27971:34;;27982:21;27998:4;27982:15;:21::i;37511:423::-;37624:15;;37592:62;;37609:4;;-1:-1:-1;;;;;37624:15:0;37642:11;37592:8;:62::i;:::-;37665:15;;37869:16;;37665:261;;-1:-1:-1;;;37665:261:0;;37737:4;37665:261;;;23230:34:1;23280:18;;;23273:34;;;37665:15:0;23323:18:1;;;23316:34;;;23366:18;;;23359:34;-1:-1:-1;;;;;37869:16:0;;;23409:19:1;;;23402:44;37900:15:0;23462:19:1;;;23455:35;37665:15:0;;;:31;;37704:9;;23164:19:1;;37665:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37511:423;;:::o;45250:235::-;45297:7;;:12;:34;;;;-1:-1:-1;45313:13:0;;:18;45297:34;45293:47;;;45250:235::o;45293:47::-;45370:7;;;45352:15;:25;45412:13;;;45388:21;:37;-1:-1:-1;45438:11:0;;;;45460:17;45250:235::o;37942:708::-;38098:7;38093:28;;38107:14;:12;:14::i;:::-;-1:-1:-1;;;;;38138:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38162:22:0;;;;;;:11;:22;;;;;;;;38161:23;38138:46;38134:467;;;38201:48;38223:6;38231:9;38242:6;38201:21;:48::i;:::-;38134:467;;;-1:-1:-1;;;;;38272:19:0;;;;;;:11;:19;;;;;;;;38271:20;:46;;;;-1:-1:-1;;;;;;38295:22:0;;;;;;:11;:22;;;;;;;;38271:46;38267:334;;;38334:46;38354:6;38362:9;38373:6;38334:19;:46::i;38267:334::-;-1:-1:-1;;;;;38402:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38425:22:0;;;;;;:11;:22;;;;;;;;38402:45;38398:203;;;38464:48;38486:6;38494:9;38505:6;38464:21;:48::i;38398:203::-;38545:44;38563:6;38571:9;38582:6;38545:17;:44::i;:::-;38618:7;38613:29;;38627:15;45547;;45537:7;:25;45589:21;;45573:13;:37;45493:125;43515:605;43613:7;;43566;;;;17730:14;43566:7;43667:338;43691:9;:16;43687:20;;43667:338;;;43775:7;43751;:21;43759:9;43769:1;43759:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43759:12:0;43751:21;;;;;;;;;;;;;:31;;:83;;;43827:7;43803;:21;43811:9;43821:1;43811:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43811:12:0;43803:21;;;;;;;;;;;;;:31;43751:83;43729:146;;;-1:-1:-1;;43858:7:0;;;17730:14;;-1:-1:-1;43515:605:0;-1:-1:-1;;43515:605:0:o;43729:146::-;43900:34;43912:7;:21;43920:9;43930:1;43920:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43920:12:0;43912:21;;;;;;;;;;;;;43900:7;;:11;:34::i;:::-;43890:44;;43959:34;43971:7;:21;43979:9;43989:1;43979:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43979:12:0;43971:21;;;;;;;;;;;;;43959:7;;:11;:34::i;:::-;43949:44;-1:-1:-1;43709:3:0;;;;:::i;:::-;;;;43667:338;;;-1:-1:-1;44029:7:0;;:20;;17730:14;44029:11;:20::i;:::-;44019:7;:30;44015:61;;;-1:-1:-1;;44059:7:0;;;17730:14;;-1:-1:-1;43515:605:0;-1:-1:-1;43515:605:0:o;44015:61::-;44095:7;;44104;;-1:-1:-1;43515:605:0;-1:-1:-1;43515:605:0:o;2504:312::-;2624:7;2659:12;2652:5;2644:28;;;;-1:-1:-1;;;2644:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2683:9:0;2695:5;2699:1;2695;:5;:::i;42361:412::-;42462:7;42484;42506;42541:12;42556:24;42572:7;42556:15;:24::i;:::-;42541:39;;42591:18;42612:30;42634:7;42612:21;:30::i;:::-;42591:51;-1:-1:-1;42653:23:0;42679:33;42591:51;42679:17;:7;42691:4;42679:11;:17::i;:::-;:21;;:33::i;:::-;42653:59;42748:4;;-1:-1:-1;42754:10:0;;-1:-1:-1;42361:412:0;;-1:-1:-1;;;42361:412:0:o;42781:554::-;42980:7;;;;43077:24;:7;43089:11;43077;:24::i;:::-;43059:42;-1:-1:-1;43112:12:0;43127:21;:4;43136:11;43127:8;:21::i;:::-;43112:36;-1:-1:-1;43159:18:0;43180:27;:10;43195:11;43180:14;:27::i;:::-;43159:48;-1:-1:-1;43218:23:0;43244:33;43159:48;43244:17;:7;43256:4;43244:11;:17::i;:33::-;43296:7;;;;-1:-1:-1;43322:4:0;;-1:-1:-1;42781:554:0;;-1:-1:-1;;;;;;;42781:554:0:o;1728:136::-;1786:7;1813:43;1817:1;1820;1813:43;;;;;;;;;;;;;;;;;:3;:43::i;37000:499::-;37090:16;;;37104:1;37090:16;;;;;;;;37066:21;;37090:16;;;;;;;;;;-1:-1:-1;37090:16:0;37066:40;;37135:4;37117;37122:1;37117:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37117:23:0;;;:7;;;;;;;;;;:23;;;;37161:15;;:22;;;-1:-1:-1;;;37161:22:0;;;;:15;;;;;:20;;:22;;;;;37117:7;;37161:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37151:4;37156:1;37151:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37151:32:0;;;:7;;;;;;;;;:32;37226:15;;37194:62;;37211:4;;37226:15;37244:11;37194:8;:62::i;:::-;37267:15;;:224;;-1:-1:-1;;;37267:224:0;;-1:-1:-1;;;;;37267:15:0;;;;:66;;:224;;37348:11;;37267:15;;37418:4;;37445;;37465:15;;37267:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37055:444;37000:499;:::o;2106:250::-;2164:7;2188:6;2184:47;;-1:-1:-1;2218:1:0;2211:8;;2184:47;2243:9;2255:5;2259:1;2255;:5;:::i;:::-;2243:17;-1:-1:-1;2288:1:0;2279:5;2283:1;2243:17;2279:5;:::i;:::-;:10;2271:56;;;;-1:-1:-1;;;2271:56:0;;24999:2:1;2271:56:0;;;24981:21:1;25038:2;25018:18;;;25011:30;25077:34;25057:18;;;25050:62;-1:-1:-1;;;25128:18:1;;;25121:31;25169:19;;2271:56:0;24797:397:1;39997:686:0;40148:15;40178:23;40216:12;40243:23;40281:12;40308:18;40340:19;40351:7;40340:10;:19::i;:::-;-1:-1:-1;;;;;40388:15:0;;;;;;:7;:15;;;;;;40133:226;;-1:-1:-1;40133:226:0;;-1:-1:-1;40133:226:0;;-1:-1:-1;40133:226:0;-1:-1:-1;40133:226:0;-1:-1:-1;40133:226:0;-1:-1:-1;40388:28:0;;40408:7;40388:19;:28::i;:::-;-1:-1:-1;;;;;40370:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40445:7;:15;;;;:28;;40465:7;40445:19;:28::i;:::-;-1:-1:-1;;;;;40427:15:0;;;;;;;:7;:15;;;;;;:46;;;;40505:18;;;;;;;:39;;40528:15;40505:22;:39::i;:::-;-1:-1:-1;;;;;40484:18:0;;;;;;:7;:18;;;;;:60;40555:26;40570:10;40555:14;:26::i;:::-;40592:23;40604:4;40610;40592:11;:23::i;:::-;40648:9;-1:-1:-1;;;;;40631:44:0;40640:6;-1:-1:-1;;;;;40631:44:0;;40659:15;40631:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;40631:44:0;;;;;;;;40122:561;;;;;;39997:686;;;:::o;39291:698::-;39440:15;39470:23;39508:12;39535:23;39573:12;39600:18;39632:19;39643:7;39632:10;:19::i;:::-;-1:-1:-1;;;;;39680:15:0;;;;;;:7;:15;;;;;;39425:226;;-1:-1:-1;39425:226:0;;-1:-1:-1;39425:226:0;;-1:-1:-1;39425:226:0;-1:-1:-1;39425:226:0;-1:-1:-1;39425:226:0;-1:-1:-1;39680:28:0;;39425:226;39680:19;:28::i;:::-;-1:-1:-1;;;;;39662:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39740:18;;;;;:7;:18;;;;;:39;;39763:15;39740:22;:39::i;:::-;-1:-1:-1;;;;;39719:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39811:7;:18;;;;:39;;39834:15;39811:22;:39::i;40691:757::-;40842:15;40872:23;40910:12;40937:23;40975:12;41002:18;41034:19;41045:7;41034:10;:19::i;:::-;-1:-1:-1;;;;;41082:15:0;;;;;;:7;:15;;;;;;40827:226;;-1:-1:-1;40827:226:0;;-1:-1:-1;40827:226:0;;-1:-1:-1;40827:226:0;-1:-1:-1;40827:226:0;-1:-1:-1;40827:226:0;-1:-1:-1;41082:28:0;;41102:7;41082:19;:28::i;:::-;-1:-1:-1;;;;;41064:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41139:7;:15;;;;:28;;41159:7;41139:19;:28::i;38658:625::-;38805:15;38835:23;38873:12;38900:23;38938:12;38965:18;38997:19;39008:7;38997:10;:19::i;:::-;-1:-1:-1;;;;;39045:15:0;;;;;;:7;:15;;;;;;38790:226;;-1:-1:-1;38790:226:0;;-1:-1:-1;38790:226:0;;-1:-1:-1;38790:226:0;-1:-1:-1;38790:226:0;-1:-1:-1;38790:226:0;-1:-1:-1;39045:28:0;;38790:226;39045:19;:28::i;44930:130::-;44994:7;45021:31;45046:5;45021:20;45033:7;;45021;:11;;:20;;;;:::i;45068:174::-;45165:7;45197:37;45228:5;45197:26;45209:13;;45197:7;:11;;:26;;;;:::i;44128:794::-;18402:1;44194:15;;:22;44191:429;;;44290:13;;44271:16;;44258:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44232:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;44376:13:0;;44357:16;;44344:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44318:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;44191:429:0;;-1:-1:-1;44191:429:0;;18442:1;44410:15;;:23;44407:213;;;44508:13;;44488:17;;44475:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44449:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44595:13:0;;44575:17;;44562:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44536:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44407:213:0;44630:19;44652:10;:8;:10::i;:::-;44630:32;-1:-1:-1;44673:18:0;44694:27;:10;44630:32;44694:14;:27::i;:::-;44773:4;44757:22;;;;:7;:22;;;;;;44673:48;;-1:-1:-1;44757:38:0;;44673:48;44757:26;:38::i;:::-;44748:4;44732:22;;;;:7;:22;;;;;;;;:63;;;;44810:11;:26;;;;;;44806:108;;;44892:4;44876:22;;;;:7;:22;;;;;;:38;;44903:10;44876:26;:38::i;:::-;44867:4;44851:22;;;;:7;:22;;;;;:63;44806:108;44180:742;;44128:794;:::o;41456:147::-;41534:7;;:17;;41546:4;41534:11;:17::i;:::-;41524:7;:27;41575:10;;:20;;41590:4;41575:14;:20::i;:::-;41562:10;:33;-1:-1:-1;;41456:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:315::-;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2118:316::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;-1:-1:-1;;2303:23:1;;;2373:2;2358:18;;2345:32;;-1:-1:-1;2424:2:1;2409:18;;;2396:32;;2118:316;-1:-1:-1;2118:316:1:o;2439:456::-;2516:6;2524;2532;2585:2;2573:9;2564:7;2560:23;2556:32;2553:52;;;2601:1;2598;2591:12;2553:52;2640:9;2627:23;2659:31;2684:5;2659:31;:::i;:::-;2709:5;-1:-1:-1;2766:2:1;2751:18;;2738:32;2779:33;2738:32;2779:33;:::i;:::-;2439:456;;2831:7;;-1:-1:-1;;;2885:2:1;2870:18;;;;2857:32;;2439:456::o;3313:118::-;3399:5;3392:13;3385:21;3378:5;3375:32;3365:60;;3421:1;3418;3411:12;3436:309;3501:6;3509;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3614:9;3601:23;3591:33;;3674:2;3663:9;3659:18;3646:32;3687:28;3709:5;3687:28;:::i;:::-;3734:5;3724:15;;;3436:309;;;;;:::o;3958:382::-;4023:6;4031;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4139:9;4126:23;4158:31;4183:5;4158:31;:::i;:::-;4208:5;-1:-1:-1;4265:2:1;4250:18;;4237:32;4278:30;4237:32;4278:30;:::i;4345:388::-;4413:6;4421;4474:2;4462:9;4453:7;4449:23;4445:32;4442:52;;;4490:1;4487;4480:12;4442:52;4529:9;4516:23;4548:31;4573:5;4548:31;:::i;:::-;4598:5;-1:-1:-1;4655:2:1;4640:18;;4627:32;4668:33;4627:32;4668:33;:::i;4738:127::-;4799:10;4794:3;4790:20;4787:1;4780:31;4830:4;4827:1;4820:15;4854:4;4851:1;4844:15;4870:275;4941:2;4935:9;5006:2;4987:13;;-1:-1:-1;;4983:27:1;4971:40;;5041:18;5026:34;;5062:22;;;5023:62;5020:88;;;5088:18;;:::i;:::-;5124:2;5117:22;4870:275;;-1:-1:-1;4870:275:1:o;5150:183::-;5210:4;5243:18;5235:6;5232:30;5229:56;;;5265:18;;:::i;:::-;-1:-1:-1;5310:1:1;5306:14;5322:4;5302:25;;5150:183::o;5338:662::-;5392:5;5445:3;5438:4;5430:6;5426:17;5422:27;5412:55;;5463:1;5460;5453:12;5412:55;5499:6;5486:20;5525:4;5549:60;5565:43;5605:2;5565:43;:::i;:::-;5549:60;:::i;:::-;5643:15;;;5729:1;5725:10;;;;5713:23;;5709:32;;;5674:12;;;;5753:15;;;5750:35;;;5781:1;5778;5771:12;5750:35;5817:2;5809:6;5805:15;5829:142;5845:6;5840:3;5837:15;5829:142;;;5911:17;;5899:30;;5949:12;;;;5862;;5829:142;;;-1:-1:-1;5989:5:1;5338:662;-1:-1:-1;;;;;;5338:662:1:o;6005:1215::-;6123:6;6131;6184:2;6172:9;6163:7;6159:23;6155:32;6152:52;;;6200:1;6197;6190:12;6152:52;6240:9;6227:23;6269:18;6310:2;6302:6;6299:14;6296:34;;;6326:1;6323;6316:12;6296:34;6364:6;6353:9;6349:22;6339:32;;6409:7;6402:4;6398:2;6394:13;6390:27;6380:55;;6431:1;6428;6421:12;6380:55;6467:2;6454:16;6489:4;6513:60;6529:43;6569:2;6529:43;:::i;6513:60::-;6607:15;;;6689:1;6685:10;;;;6677:19;;6673:28;;;6638:12;;;;6713:19;;;6710:39;;;6745:1;6742;6735:12;6710:39;6769:11;;;;6789:217;6805:6;6800:3;6797:15;6789:217;;;6885:3;6872:17;6902:31;6927:5;6902:31;:::i;:::-;6946:18;;6822:12;;;;6984;;;;6789:217;;;7025:5;-1:-1:-1;;7068:18:1;;7055:32;;-1:-1:-1;;7099:16:1;;;7096:36;;;7128:1;7125;7118:12;7096:36;;7151:63;7206:7;7195:8;7184:9;7180:24;7151:63;:::i;:::-;7141:73;;;6005:1215;;;;;:::o;7225:241::-;7281:6;7334:2;7322:9;7313:7;7309:23;7305:32;7302:52;;;7350:1;7347;7340:12;7302:52;7389:9;7376:23;7408:28;7430:5;7408:28;:::i;7471:356::-;7673:2;7655:21;;;7692:18;;;7685:30;7751:34;7746:2;7731:18;;7724:62;7818:2;7803:18;;7471:356::o;7832:127::-;7893:10;7888:3;7884:20;7881:1;7874:31;7924:4;7921:1;7914:15;7948:4;7945:1;7938:15;7964:168;8004:7;8070:1;8066;8062:6;8058:14;8055:1;8052:21;8047:1;8040:9;8033:17;8029:45;8026:71;;;8077:18;;:::i;:::-;-1:-1:-1;8117:9:1;;7964:168::o;8137:128::-;8177:3;8208:1;8204:6;8201:1;8198:13;8195:39;;;8214:18;;:::i;:::-;-1:-1:-1;8250:9:1;;8137:128::o;10074:127::-;10135:10;10130:3;10126:20;10123:1;10116:31;10166:4;10163:1;10156:15;10190:4;10187:1;10180:15;10206:125;10246:4;10274:1;10271;10268:8;10265:34;;;10279:18;;:::i;:::-;-1:-1:-1;10316:9:1;;10206:125::o;10336:127::-;10397:10;10392:3;10388:20;10385:1;10378:31;10428:4;10425:1;10418:15;10452:4;10449:1;10442:15;10468:135;10507:3;-1:-1:-1;;10528:17:1;;10525:43;;;10548:18;;:::i;:::-;-1:-1:-1;10595:1:1;10584:13;;10468:135::o;10968:217::-;11008:1;11034;11024:132;;11078:10;11073:3;11069:20;11066:1;11059:31;11113:4;11110:1;11103:15;11141:4;11138:1;11131:15;11024:132;-1:-1:-1;11170:9:1;;10968:217::o;13581:184::-;13651:6;13704:2;13692:9;13683:7;13679:23;13675:32;13672:52;;;13720:1;13717;13710:12;13672:52;-1:-1:-1;13743:16:1;;13581:184;-1:-1:-1;13581:184:1:o;14049:245::-;14116:6;14169:2;14157:9;14148:7;14144:23;14140:32;14137:52;;;14185:1;14182;14175:12;14137:52;14217:9;14211:16;14236:28;14258:5;14236:28;:::i;15134:251::-;15204:6;15257:2;15245:9;15236:7;15232:23;15228:32;15225:52;;;15273:1;15270;15263:12;15225:52;15305:9;15299:16;15324:31;15349:5;15324:31;:::i;23501:306::-;23589:6;23597;23605;23658:2;23646:9;23637:7;23633:23;23629:32;23626:52;;;23674:1;23671;23664:12;23626:52;23703:9;23697:16;23687:26;;23753:2;23742:9;23738:18;23732:25;23722:35;;23797:2;23786:9;23782:18;23776:25;23766:35;;23501:306;;;;;:::o;23812:980::-;24074:4;24122:3;24111:9;24107:19;24153:6;24142:9;24135:25;24179:2;24217:6;24212:2;24201:9;24197:18;24190:34;24260:3;24255:2;24244:9;24240:18;24233:31;24284:6;24319;24313:13;24350:6;24342;24335:22;24388:3;24377:9;24373:19;24366:26;;24427:2;24419:6;24415:15;24401:29;;24448:1;24458:195;24472:6;24469:1;24466:13;24458:195;;;24537:13;;-1:-1:-1;;;;;24533:39:1;24521:52;;24628:15;;;;24593:12;;;;24569:1;24487:9;24458:195;;;-1:-1:-1;;;;;;;24709:32:1;;;;24704:2;24689:18;;24682:60;-1:-1:-1;;;24773:3:1;24758:19;24751:35;24670:3;23812:980;-1:-1:-1;;;23812:980:1:o

Swarm Source

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