ETH Price: $3,122.23 (-0.73%)

Token

PandaSnipers (PANSI)
 

Overview

Max Total Supply

1,000,000,000,000,000 PANSI

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,468,040,885,738.114416953 PANSI

Value
$0.00
0xee0abadb56faffa5ba30bcbe513549d557da4563
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:
PandaSnipers

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 2022-03-07
*/

/* 
    
    
    ██████╗░  ░█████╗░  ███╗░░██╗  ░██████╗  ██╗
    ██╔══██╗  ██╔══██╗  ████╗░██║  ██╔════╝  ██║
    ██████╔╝  ███████║  ██╔██╗██║  ╚█████╗░  ██║
    ██╔═══╝░  ██╔══██║  ██║╚████║  ░╚═══██╗  ██║
    ██║░░░░░  ██║░░██║  ██║░╚███║  ██████╔╝  ██║
    ╚═╝░░░░░  ╚═╝░░╚═╝  ╚═╝░░╚══╝  ╚═════╝░  ╚═╝
    
    Telegram: https://t.me/PandaSnipers
    
    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 PandaSnipers 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;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; 
    
    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 = "PandaSnipers";
    string private constant _symbol = "PANSI";
    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;
    
    mapping(address => bool) public boughtEarly; 
    
    uint256 public earlyBuyPenaltyEnd; 
    
    
    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 * 1 / 100; // 1% maxTransactionAmountTxn
        minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05% swap tokens amount
        
        marketingAddress = payable(0xE4Bff80b814268cA1AD2EcC4Aa93772aA1B577DE); // Marketing Address
        
        devAddress = payable(0xd1CAbA3EA6907b7458BC96FB21756182Dad5C3CB); // 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() external onlyOwner returns (bool){
        require(!tradingActive, "Trading is already active, cannot relaunch.");
       
        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;
                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 goes 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;
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        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":[],"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"}]

6080604052600a805461ffff19166101011790556200002b69d3c21bcecceda1000000600019620003bc565b6200003990600019620003e9565b600e55601054601155601354601455600260168190556001601781905560076018819055601992909255601a819055601b919091556000601c8190556023805460ff191690921790915564746a5288006024556028805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103e8600e54620000eb919062000403565b620000f9906101956200041a565b33600090815260066020526040902055600e546200011b906103e89062000403565b62000129906102536200041a565b3060009081526006602052604090205560646200015269d3c21bcecceda100000060016200041a565b6200015e919062000403565b6021556127106200017b69d3c21bcecceda100000060056200041a565b62000187919062000403565b602655600380546001600160a01b031990811673e4bff80b814268ca1ad2ecc4aa93772aa1b577de179091556004805490911673d1caba3ea6907b7458bc96fb21756182dad5c3cb179055620001e56000546001600160a01b031690565b600580546001600160a01b0319166001600160a01b039283161781556000805483168152600b6020526040808220805460ff19908116600190811790925530845282842080548216831790556003548616845282842080548216831790559354851683529082208054909316179091555462000264911660016200031c565b620002713060016200031c565b6200028061dead60016200031c565b336000600080516020620043528339815191526103e8620002ae69d3c21bcecceda10000006101956200041a565b620002ba919062000403565b60405190815260200160405180910390a3306000600080516020620043528339815191526103e8620002f969d3c21bcecceda10000006102536200041a565b62000305919062000403565b60405190815260200160405180910390a36200043c565b6000546001600160a01b031633146200037b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b634e487b7160e01b600052601260045260246000fd5b600082620003ce57620003ce620003a6565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620003fe57620003fe620003d3565b500390565b600082620004155762000415620003a6565b500490565b6000816000190483118215151615620004375762000437620003d3565b500290565b613f06806200044c6000396000f3fe6080604052600436106103c75760003560e01c8063602bc62b116101f2578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b73578063efcc52de14610b89578063f2fde38b14610b9f578063f5648a4f14610bbf57600080fd5b8063dc44b6a014610ae2578063dd62ed3e14610af8578063e884f26014610b3e578063ea2f0b3714610b5357600080fd5b8063c5d24189116100dc578063c5d2418914610a86578063c860795214610a9c578063c876d0b914610ab2578063c8c8ebe414610acc57600080fd5b8063a9059cbb146109f5578063b62496f514610a15578063bbc0c74214610a45578063c49b9a8014610a6657600080fd5b806388f82020116101855780639a7a23d6116101545780639a7a23d614610980578063a073d37f146109a0578063a457c2d7146109b5578063a5ece941146109d557600080fd5b806388f82020146108db5780638da5cb5b14610914578063906e9dd01461093257806395d89b411461095257600080fd5b80637571336a116101c15780637571336a146108555780638366e79a1461087557806385ecfd281461089557806388790a68146108c557600080fd5b8063602bc62b146107f657806370a082311461080b578063715018a61461082b578063751039fc1461084057600080fd5b80633221c93f116102e25780634a62bb6511610275578063525fa81f11610244578063525fa81f1461076a5780635342acb41461078a578063557ed1ba146107c35780635bb988c9146107d657600080fd5b80634a62bb65146106f55780634a74bb021461071457806351f205e41461073557806352390c021461074a57600080fd5b80634047ea3e116102b15780634047ea3e1461067f578063437823ec146106955780634549b039146106b557806349bd5a5e146106d557600080fd5b80633221c93f146105ff5780633685d4191461061f578063395093511461063f5780633ad10ef61461065f57600080fd5b80631d865c301161035a57806324171f321161032957806324171f321461058d57806325519cf2146105a35780632d838119146105c3578063313ce567146105e357600080fd5b80631d865c30146105215780631fc851bd14610541578063200a692d1461055757806323b872dd1461056d57600080fd5b806310d5de531161039657806310d5de531461047d57806313114a9d146104ad5780631694505e146104cc57806318160ddd1461050457600080fd5b806301339c21146103d357806306fdde03146103fd578063092316021461043b578063095ea7b31461045d57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610bd4565b60405190151581526020015b60405180910390f35b34801561040957600080fd5b5060408051808201909152600c81526b50616e6461536e697065727360a01b60208201525b6040516103f49190613a9c565b34801561044757600080fd5b5061045b610456366004613af1565b610efa565b005b34801561046957600080fd5b506103e8610478366004613b22565b610f46565b34801561048957600080fd5b506103e8610498366004613b4e565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b50600f545b6040519081526020016103f4565b3480156104d857600080fd5b506027546104ec906001600160a01b031681565b6040516001600160a01b0390911681526020016103f4565b34801561051057600080fd5b5069d3c21bcecceda10000006104be565b34801561052d57600080fd5b5061045b61053c366004613b6b565b610f5d565b34801561054d57600080fd5b506104be601e5481565b34801561056357600080fd5b506104be60195481565b34801561057957600080fd5b506103e8610588366004613b97565b610fdd565b34801561059957600080fd5b506104be60205481565b3480156105af57600080fd5b5061045b6105be366004613b6b565b611046565b3480156105cf57600080fd5b506104be6105de366004613af1565b6110bd565b3480156105ef57600080fd5b50604051600981526020016103f4565b34801561060b57600080fd5b506005546104ec906001600160a01b031681565b34801561062b57600080fd5b5061045b61063a366004613b4e565b611141565b34801561064b57600080fd5b506103e861065a366004613b22565b6112f8565b34801561066b57600080fd5b506004546104ec906001600160a01b031681565b34801561068b57600080fd5b506104be601f5481565b3480156106a157600080fd5b5061045b6106b0366004613b4e565b61132e565b3480156106c157600080fd5b506104be6106d0366004613be6565b6113b3565b3480156106e157600080fd5b506028546104ec906001600160a01b031681565b34801561070157600080fd5b50600a546103e890610100900460ff1681565b34801561072057600080fd5b506028546103e890600160a81b900460ff1681565b34801561074157600080fd5b5061045b611448565b34801561075657600080fd5b5061045b610765366004613b4e565b611541565b34801561077657600080fd5b5061045b610785366004613b4e565b61172f565b34801561079657600080fd5b506103e86107a5366004613b4e565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107cf57600080fd5b50426104be565b3480156107e257600080fd5b5061045b6107f1366004613b4e565b611825565b34801561080257600080fd5b506002546104be565b34801561081757600080fd5b506104be610826366004613b4e565b611898565b34801561083757600080fd5b5061045b6118f7565b34801561084c57600080fd5b506103e861196b565b34801561086157600080fd5b5061045b610870366004613c16565b6119b1565b34801561088157600080fd5b506103e8610890366004613c44565b611a06565b3480156108a157600080fd5b506103e86108b0366004613b4e565b601d6020526000908152604090205460ff1681565b3480156108d157600080fd5b506104be601a5481565b3480156108e757600080fd5b506103e86108f6366004613b4e565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561092057600080fd5b506000546001600160a01b03166104ec565b34801561093e57600080fd5b5061045b61094d366004613b4e565b611c2c565b34801561095e57600080fd5b5060408051808201909152600581526450414e534960d81b602082015261042e565b34801561098c57600080fd5b5061045b61099b366004613c16565b611d38565b3480156109ac57600080fd5b506026546104be565b3480156109c157600080fd5b506103e86109d0366004613b22565b611df0565b3480156109e157600080fd5b506003546104ec906001600160a01b031681565b348015610a0157600080fd5b506103e8610a10366004613b22565b611e3f565b348015610a2157600080fd5b506103e8610a30366004613b4e565b60256020526000908152604090205460ff1681565b348015610a5157600080fd5b506028546103e890600160b01b900460ff1681565b348015610a7257600080fd5b5061045b610a81366004613c72565b611e4c565b348015610a9257600080fd5b506104be60185481565b348015610aa857600080fd5b506104be601b5481565b348015610abe57600080fd5b50600a546103e89060ff1681565b348015610ad857600080fd5b506104be60215481565b348015610aee57600080fd5b506104be60175481565b348015610b0457600080fd5b506104be610b13366004613c44565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b4a57600080fd5b506103e8611ec3565b348015610b5f57600080fd5b5061045b610b6e366004613b4e565b611efe565b348015610b7f57600080fd5b506104be601c5481565b348015610b9557600080fd5b506104be60165481565b348015610bab57600080fd5b5061045b610bba366004613b4e565b611f79565b348015610bcb57600080fd5b5061045b612063565b600080546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90613c8f565b60405180910390fd5b602854600160b01b900460ff1615610c765760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bff565b610c7e612148565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c9e8160016119b1565b602780546001600160a01b0319166001600160a01b038316908117909155610cd290309069d3c21bcecceda100000061219d565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190613cc4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b505afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613cc4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e0b57600080fd5b505af1158015610e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e439190613cc4565b602880546001600160a01b0319166001600160a01b03929092169182179055610e6d9060016119b1565b602854610e84906001600160a01b031660016122c1565b60004711610ee05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bff565b610ef2610eec30611898565b4761231c565b600191505090565b6000546001600160a01b03163314610f245760405162461bcd60e51b8152600401610bff90613c8f565b60c8811015610f3257600080fd5b610f4081633b9aca00613cf7565b60245550565b6000610f5333848461219d565b5060015b92915050565b6000546001600160a01b03163314610f875760405162461bcd60e51b8152600401610bff90613c8f565b6019839055601a829055601b81905560408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610fea8484846123df565b61103c843361103785604051806060016040528060288152602001613e84602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612cd7565b61219d565b5060019392505050565b6000546001600160a01b031633146110705760405162461bcd60e51b8152600401610bff90613c8f565b60168390556017829055601881905560408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610fd0565b6000600e548211156111245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bff565b600061112e612d11565b905061113a8382612d34565b9392505050565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000908152600c602052604090205460ff166111d35760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bff565b60005b600d548110156112f457816001600160a01b0316600d82815481106111fd576111fd613d16565b6000918252602090912001546001600160a01b031614156112e257600d805461122890600190613d2c565b8154811061123857611238613d16565b600091825260209091200154600d80546001600160a01b03909216918390811061126457611264613d16565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d8054806112bc576112bc613d43565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112ec81613d59565b9150506111d6565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610f539185906110379086612d76565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda100000083111561140f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bff565b8161142e57600061141f84612dd5565b50939550610f57945050505050565b600061143984612dd5565b50929550610f57945050505050565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610bff90613c8f565b600061147d30611898565b9050611494606469d3c21bcecceda1000000613d74565b8110156115095760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610bff565b611511612e24565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016113a8565b6000546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000908152600c602052604090205460ff16156115d45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bff565b600d546032906115e5906001613d96565b111561166f5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610bff565b6001600160a01b038116600090815260066020526040902054156116c9576001600160a01b0381166000908152600660205260409020546116af906110bd565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146117595760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166117bd5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bff565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016113a8565b6000546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff16156118d557506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610f57906110bd565b6000546001600160a01b031633146119215760405162461bcd60e51b8152600401610bff90613c8f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146119965760405162461bcd60e51b8152600401610bff90613c8f565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146119db5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611a315760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b038316611a875760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bff565b6001600160a01b038316301415611ae05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bff565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611b2257600080fd5b505afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190613dae565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ba857600080fd5b505af1158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190613dc7565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611c565760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b038116611cba5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bff565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016113a8565b6000546001600160a01b03163314611d625760405162461bcd60e51b8152600401610bff90613c8f565b6028546001600160a01b0383811691161415611de65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bff565b6112f482826122c1565b6000610f53338461103785604051806060016040528060258152602001613eac602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612cd7565b6000610f533384846123df565b6000546001600160a01b03163314611e765760405162461bcd60e51b8152600401610bff90613c8f565b60288054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113a890831515815260200190565b600080546001600160a01b03163314611eee5760405162461bcd60e51b8152600401610bff90613c8f565b50600a805460ff19169055600190565b6000546001600160a01b03163314611f285760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016113a8565b6000546001600160a01b03163314611fa35760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166120085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461208d5760405162461bcd60e51b8152600401610bff90613c8f565b602854600160b01b900460ff16156120fb5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610bff565b604051600090339047908381818185875af1925050503d806000811461213d576040519150601f19603f3d011682016040523d82523d6000602084013e612142565b606091505b50505050565b6000546001600160a01b031633146121725760405162461bcd60e51b8152600401610bff90613c8f565b6028805461ffff60a81b191661010160a81b17905543601c55612198426203f480613d96565b601e55565b6001600160a01b0383166121ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b0382166122605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260256020908152604080832080548515801560ff199283168117909355602290945291909320805490911690921790915561230e5761230e82611541565b806112f4576112f482611141565b6027546123349030906001600160a01b03168461219d565b60275460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123d89190613de4565b5050505050565b6001600160a01b0383166124435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bff565b6001600160a01b0382166124a55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bff565b600081116125075760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bff565b602854600160b01b900460ff166125a3576001600160a01b0383166000908152600b602052604090205460ff168061255757506001600160a01b0382166000908152600b602052604090205460ff165b6125a35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610bff565b600a54610100900460ff16156129b1576000546001600160a01b038481169116148015906125df57506000546001600160a01b03838116911614155b80156125f357506001600160a01b03821615155b801561260a57506001600160a01b03821661dead14155b80156126205750602854600160a01b900460ff16155b156129b1576000546001600160a01b0384811691161480159061265157506028546001600160a01b03838116911614155b801561265e5750601c5443145b156126ad576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff1680156126d757506001600160a01b03831660009081526025602052604090205460ff165b1561272e576024543a111561272e5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610bff565b600a5460ff161561283f576000546001600160a01b0383811691161480159061276557506027546001600160a01b03838116911614155b801561277f57506028546001600160a01b03838116911614155b1561283f576001600160a01b03821660009081526009602052604090205443116128235760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bff565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561288057506001600160a01b03821660009081526022602052604090205460ff16155b156128fa576021548111156128f55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bff565b6129b1565b6001600160a01b03821660009081526025602052604090205460ff16801561293b57506001600160a01b03831660009081526022602052604090205460ff16155b156129b1576021548111156129b15760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bff565b60006129ca602054601f54612d7690919063ffffffff16565b905060006129d730611898565b60265460285491925082101590600160a01b900460ff16158015612a045750602854600160a81b900460ff165b8015612a255750602854600090612a23906001600160a01b0316611898565b115b8015612a315750600083115b8015612a5657506001600160a01b0385166000908152600b602052604090205460ff16155b8015612a7b57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612a9f57506001600160a01b03851660009081526025602052604090205460ff165b8015612aa85750805b15612ab557612ab5612e24565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612af757506001600160a01b0386166000908152600b602052604090205460ff165b15612b09575060036015556000612cc2565b6001600160a01b03871660009081526025602052604090205460ff1615612b5557612b32613077565b601654601055601854601754612b489190613d96565b6013556001601555612cc2565b6001600160a01b03861660009081526025602052604090205460ff1615612bf257612b7e613077565b601954601055601b54601a54612b949190613d96565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612bc5575042601e54115b15612bed57601054612bd8906005613cf7565b601055601354612be9906005613cf7565b6013555b612cc2565b6001600160a01b0387166000908152601d602052604090205460ff161580612c1c575042601e5411155b612cb45760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610bff565b612cbc613077565b60036015555b612cce878787846130a5565b50505050505050565b60008184841115612cfb5760405162461bcd60e51b8152600401610bff9190613a9c565b506000612d088486613d2c565b95945050505050565b6000806000612d1e6131ca565b9092509050612d2d8282612d34565b9250505090565b600061113a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061336a565b600080612d838385613d96565b90508381101561113a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bff565b6000806000806000806000806000612dec8a613398565b9250925092506000806000612e0a8d8686612e05612d11565b6133da565b919f909e50909c50959a5093985091965092945050505050565b6028805460ff60a01b1916600160a01b1790556000612e4230611898565b90506000602054601f54612e569190613d96565b90506000612e706002601f54612d3490919063ffffffff16565b90506000612e7e848361342a565b905047612e8a8261346c565b6000612e96478361342a565b90506000612eb986612eb3602054856135d590919063ffffffff16565b90612d34565b90506000612ec7838361342a565b905060006007612ed8846002613cf7565b612ee29190613d74565b9050612eee8184613d2c565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d8060008114612f4b576040519150601f19603f3d011682016040523d82523d6000602084013e612f50565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b505080915050612fb5888461231c565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a000047111561305e576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613053576040519150601f19603f3d011682016040523d82523d6000602084013e613058565b606091505b50909150505b50506028805460ff60a01b191690555050505050505050565b6010541580156130875750601354155b1561308e57565b601080546011556013805460145560009182905555565b806130b2576130b2613077565b6001600160a01b0384166000908152600c602052604090205460ff1680156130f357506001600160a01b0383166000908152600c602052604090205460ff16155b1561310857613103848484613654565b6131b4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561314957506001600160a01b0383166000908152600c602052604090205460ff165b156131595761310384848461377a565b6001600160a01b0384166000908152600c602052604090205460ff16801561319957506001600160a01b0383166000908152600c602052604090205460ff165b156131a957613103848484613823565b6131b4848484613896565b8061214257612142601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d5481101561332b578260066000600d848154811061320157613201613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061326c57508160076000600d848154811061324557613245613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613289575050600e549369d3c21bcecceda10000009350915050565b6132cf60066000600d84815481106132a3576132a3613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061342a565b925061331760076000600d84815481106132eb576132eb613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061342a565b91508061332381613d59565b9150506131df565b50600e546133439069d3c21bcecceda1000000612d34565b821015613361575050600e549269d3c21bcecceda100000092509050565b90939092509050565b6000818361338b5760405162461bcd60e51b8152600401610bff9190613a9c565b506000612d088486613d74565b6000806000806133a7856138da565b905060006133b4866138f6565b905060006133cc826133c6898661342a565b9061342a565b979296509094509092505050565b60008080806133e988866135d5565b905060006133f788876135d5565b9050600061340588886135d5565b90506000613417826133c6868661342a565b939b939a50919850919650505050505050565b600061113a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cd7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134a1576134a1613d16565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156134f557600080fd5b505afa158015613509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352d9190613cc4565b8160018151811061354057613540613d16565b6001600160a01b039283166020918202929092010152602754613566913091168461219d565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac9479061359f908590600090869030904290600401613e12565b600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b505050505050565b6000826135e457506000610f57565b60006135f08385613cf7565b9050826135fd8583613d74565b1461113a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bff565b60008060008060008061366687612dd5565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613698908861342a565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546136c7908761342a565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136f69086612d76565b6001600160a01b03891660009081526006602052604090205561371881613912565b6137228483613a78565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161376791815260200190565b60405180910390a3505050505050505050565b60008060008060008061378c87612dd5565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506137be908761342a565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546137f49084612d76565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136f69086612d76565b60008060008060008061383587612dd5565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613867908861342a565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546137be908761342a565b6000806000806000806138a887612dd5565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136c7908761342a565b6000610f576064612eb3601054856135d590919063ffffffff16565b6000610f576064612eb3601354856135d590919063ffffffff16565b600160155414156139835760135460175461392d9083613cf7565b6139379190613d74565b601f60008282546139489190613d96565b909155505060135460185461395d9083613cf7565b6139679190613d74565b602060008282546139789190613d96565b909155506139ef9050565b600260155414156139ef57601354601a5461399e9083613cf7565b6139a89190613d74565b601f60008282546139b99190613d96565b9091555050601354601b546139ce9083613cf7565b6139d89190613d74565b602060008282546139e99190613d96565b90915550505b60006139f9612d11565b90506000613a0783836135d5565b30600090815260066020526040902054909150613a249082612d76565b30600090815260066020908152604080832093909355600c9052205460ff1615613a735730600090815260076020526040902054613a629084612d76565b306000908152600760205260409020555b505050565b600e54613a85908361342a565b600e55600f54613a959082612d76565b600f555050565b600060208083528351808285015260005b81811015613ac957858101830151858201604001528201613aad565b81811115613adb576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613b0357600080fd5b5035919050565b6001600160a01b0381168114613b1f57600080fd5b50565b60008060408385031215613b3557600080fd5b8235613b4081613b0a565b946020939093013593505050565b600060208284031215613b6057600080fd5b813561113a81613b0a565b600080600060608486031215613b8057600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613bac57600080fd5b8335613bb781613b0a565b92506020840135613bc781613b0a565b929592945050506040919091013590565b8015158114613b1f57600080fd5b60008060408385031215613bf957600080fd5b823591506020830135613c0b81613bd8565b809150509250929050565b60008060408385031215613c2957600080fd5b8235613c3481613b0a565b91506020830135613c0b81613bd8565b60008060408385031215613c5757600080fd5b8235613c6281613b0a565b91506020830135613c0b81613b0a565b600060208284031215613c8457600080fd5b813561113a81613bd8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613cd657600080fd5b815161113a81613b0a565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d1157613d11613ce1565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613d3e57613d3e613ce1565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613d6d57613d6d613ce1565b5060010190565b600082613d9157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613da957613da9613ce1565b500190565b600060208284031215613dc057600080fd5b5051919050565b600060208284031215613dd957600080fd5b815161113a81613bd8565b600080600060608486031215613df957600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e625784516001600160a01b031683529383019391830191600101613e3d565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029420c3b4fd036a5d0550cd7650db724239aa5a6fa9b229b4640412308e5ce6264736f6c63430008090033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063602bc62b116101f2578063a9059cbb1161010d578063dc44b6a0116100a0578063ee40166e1161006f578063ee40166e14610b73578063efcc52de14610b89578063f2fde38b14610b9f578063f5648a4f14610bbf57600080fd5b8063dc44b6a014610ae2578063dd62ed3e14610af8578063e884f26014610b3e578063ea2f0b3714610b5357600080fd5b8063c5d24189116100dc578063c5d2418914610a86578063c860795214610a9c578063c876d0b914610ab2578063c8c8ebe414610acc57600080fd5b8063a9059cbb146109f5578063b62496f514610a15578063bbc0c74214610a45578063c49b9a8014610a6657600080fd5b806388f82020116101855780639a7a23d6116101545780639a7a23d614610980578063a073d37f146109a0578063a457c2d7146109b5578063a5ece941146109d557600080fd5b806388f82020146108db5780638da5cb5b14610914578063906e9dd01461093257806395d89b411461095257600080fd5b80637571336a116101c15780637571336a146108555780638366e79a1461087557806385ecfd281461089557806388790a68146108c557600080fd5b8063602bc62b146107f657806370a082311461080b578063715018a61461082b578063751039fc1461084057600080fd5b80633221c93f116102e25780634a62bb6511610275578063525fa81f11610244578063525fa81f1461076a5780635342acb41461078a578063557ed1ba146107c35780635bb988c9146107d657600080fd5b80634a62bb65146106f55780634a74bb021461071457806351f205e41461073557806352390c021461074a57600080fd5b80634047ea3e116102b15780634047ea3e1461067f578063437823ec146106955780634549b039146106b557806349bd5a5e146106d557600080fd5b80633221c93f146105ff5780633685d4191461061f578063395093511461063f5780633ad10ef61461065f57600080fd5b80631d865c301161035a57806324171f321161032957806324171f321461058d57806325519cf2146105a35780632d838119146105c3578063313ce567146105e357600080fd5b80631d865c30146105215780631fc851bd14610541578063200a692d1461055757806323b872dd1461056d57600080fd5b806310d5de531161039657806310d5de531461047d57806313114a9d146104ad5780631694505e146104cc57806318160ddd1461050457600080fd5b806301339c21146103d357806306fdde03146103fd578063092316021461043b578063095ea7b31461045d57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610bd4565b60405190151581526020015b60405180910390f35b34801561040957600080fd5b5060408051808201909152600c81526b50616e6461536e697065727360a01b60208201525b6040516103f49190613a9c565b34801561044757600080fd5b5061045b610456366004613af1565b610efa565b005b34801561046957600080fd5b506103e8610478366004613b22565b610f46565b34801561048957600080fd5b506103e8610498366004613b4e565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b50600f545b6040519081526020016103f4565b3480156104d857600080fd5b506027546104ec906001600160a01b031681565b6040516001600160a01b0390911681526020016103f4565b34801561051057600080fd5b5069d3c21bcecceda10000006104be565b34801561052d57600080fd5b5061045b61053c366004613b6b565b610f5d565b34801561054d57600080fd5b506104be601e5481565b34801561056357600080fd5b506104be60195481565b34801561057957600080fd5b506103e8610588366004613b97565b610fdd565b34801561059957600080fd5b506104be60205481565b3480156105af57600080fd5b5061045b6105be366004613b6b565b611046565b3480156105cf57600080fd5b506104be6105de366004613af1565b6110bd565b3480156105ef57600080fd5b50604051600981526020016103f4565b34801561060b57600080fd5b506005546104ec906001600160a01b031681565b34801561062b57600080fd5b5061045b61063a366004613b4e565b611141565b34801561064b57600080fd5b506103e861065a366004613b22565b6112f8565b34801561066b57600080fd5b506004546104ec906001600160a01b031681565b34801561068b57600080fd5b506104be601f5481565b3480156106a157600080fd5b5061045b6106b0366004613b4e565b61132e565b3480156106c157600080fd5b506104be6106d0366004613be6565b6113b3565b3480156106e157600080fd5b506028546104ec906001600160a01b031681565b34801561070157600080fd5b50600a546103e890610100900460ff1681565b34801561072057600080fd5b506028546103e890600160a81b900460ff1681565b34801561074157600080fd5b5061045b611448565b34801561075657600080fd5b5061045b610765366004613b4e565b611541565b34801561077657600080fd5b5061045b610785366004613b4e565b61172f565b34801561079657600080fd5b506103e86107a5366004613b4e565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107cf57600080fd5b50426104be565b3480156107e257600080fd5b5061045b6107f1366004613b4e565b611825565b34801561080257600080fd5b506002546104be565b34801561081757600080fd5b506104be610826366004613b4e565b611898565b34801561083757600080fd5b5061045b6118f7565b34801561084c57600080fd5b506103e861196b565b34801561086157600080fd5b5061045b610870366004613c16565b6119b1565b34801561088157600080fd5b506103e8610890366004613c44565b611a06565b3480156108a157600080fd5b506103e86108b0366004613b4e565b601d6020526000908152604090205460ff1681565b3480156108d157600080fd5b506104be601a5481565b3480156108e757600080fd5b506103e86108f6366004613b4e565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561092057600080fd5b506000546001600160a01b03166104ec565b34801561093e57600080fd5b5061045b61094d366004613b4e565b611c2c565b34801561095e57600080fd5b5060408051808201909152600581526450414e534960d81b602082015261042e565b34801561098c57600080fd5b5061045b61099b366004613c16565b611d38565b3480156109ac57600080fd5b506026546104be565b3480156109c157600080fd5b506103e86109d0366004613b22565b611df0565b3480156109e157600080fd5b506003546104ec906001600160a01b031681565b348015610a0157600080fd5b506103e8610a10366004613b22565b611e3f565b348015610a2157600080fd5b506103e8610a30366004613b4e565b60256020526000908152604090205460ff1681565b348015610a5157600080fd5b506028546103e890600160b01b900460ff1681565b348015610a7257600080fd5b5061045b610a81366004613c72565b611e4c565b348015610a9257600080fd5b506104be60185481565b348015610aa857600080fd5b506104be601b5481565b348015610abe57600080fd5b50600a546103e89060ff1681565b348015610ad857600080fd5b506104be60215481565b348015610aee57600080fd5b506104be60175481565b348015610b0457600080fd5b506104be610b13366004613c44565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610b4a57600080fd5b506103e8611ec3565b348015610b5f57600080fd5b5061045b610b6e366004613b4e565b611efe565b348015610b7f57600080fd5b506104be601c5481565b348015610b9557600080fd5b506104be60165481565b348015610bab57600080fd5b5061045b610bba366004613b4e565b611f79565b348015610bcb57600080fd5b5061045b612063565b600080546001600160a01b03163314610c085760405162461bcd60e51b8152600401610bff90613c8f565b60405180910390fd5b602854600160b01b900460ff1615610c765760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bff565b610c7e612148565b737a250d5630b4cf539739df2c5dacb4c659f2488d610c9e8160016119b1565b602780546001600160a01b0319166001600160a01b038316908117909155610cd290309069d3c21bcecceda100000061219d565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d439190613cc4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8b57600080fd5b505afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613cc4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e0b57600080fd5b505af1158015610e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e439190613cc4565b602880546001600160a01b0319166001600160a01b03929092169182179055610e6d9060016119b1565b602854610e84906001600160a01b031660016122c1565b60004711610ee05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bff565b610ef2610eec30611898565b4761231c565b600191505090565b6000546001600160a01b03163314610f245760405162461bcd60e51b8152600401610bff90613c8f565b60c8811015610f3257600080fd5b610f4081633b9aca00613cf7565b60245550565b6000610f5333848461219d565b5060015b92915050565b6000546001600160a01b03163314610f875760405162461bcd60e51b8152600401610bff90613c8f565b6019839055601a829055601b81905560408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610fea8484846123df565b61103c843361103785604051806060016040528060288152602001613e84602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612cd7565b61219d565b5060019392505050565b6000546001600160a01b031633146110705760405162461bcd60e51b8152600401610bff90613c8f565b60168390556017829055601881905560408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610fd0565b6000600e548211156111245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bff565b600061112e612d11565b905061113a8382612d34565b9392505050565b6000546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000908152600c602052604090205460ff166111d35760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bff565b60005b600d548110156112f457816001600160a01b0316600d82815481106111fd576111fd613d16565b6000918252602090912001546001600160a01b031614156112e257600d805461122890600190613d2c565b8154811061123857611238613d16565b600091825260209091200154600d80546001600160a01b03909216918390811061126457611264613d16565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d8054806112bc576112bc613d43565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112ec81613d59565b9150506111d6565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610f539185906110379086612d76565b6000546001600160a01b031633146113585760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda100000083111561140f5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bff565b8161142e57600061141f84612dd5565b50939550610f57945050505050565b600061143984612dd5565b50929550610f57945050505050565b6000546001600160a01b031633146114725760405162461bcd60e51b8152600401610bff90613c8f565b600061147d30611898565b9050611494606469d3c21bcecceda1000000613d74565b8110156115095760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610bff565b611511612e24565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020016113a8565b6000546001600160a01b0316331461156b5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000908152600c602052604090205460ff16156115d45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bff565b600d546032906115e5906001613d96565b111561166f5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610bff565b6001600160a01b038116600090815260066020526040902054156116c9576001600160a01b0381166000908152600660205260409020546116af906110bd565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146117595760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166117bd5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bff565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016113a8565b6000546001600160a01b0316331461184f5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff16156118d557506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610f57906110bd565b6000546001600160a01b031633146119215760405162461bcd60e51b8152600401610bff90613c8f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146119965760405162461bcd60e51b8152600401610bff90613c8f565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146119db5760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611a315760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b038316611a875760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bff565b6001600160a01b038316301415611ae05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bff565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611b2257600080fd5b505afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a9190613dae565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ba857600080fd5b505af1158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190613dc7565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611c565760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b038116611cba5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610bff565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016113a8565b6000546001600160a01b03163314611d625760405162461bcd60e51b8152600401610bff90613c8f565b6028546001600160a01b0383811691161415611de65760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bff565b6112f482826122c1565b6000610f53338461103785604051806060016040528060258152602001613eac602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612cd7565b6000610f533384846123df565b6000546001600160a01b03163314611e765760405162461bcd60e51b8152600401610bff90613c8f565b60288054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906113a890831515815260200190565b600080546001600160a01b03163314611eee5760405162461bcd60e51b8152600401610bff90613c8f565b50600a805460ff19169055600190565b6000546001600160a01b03163314611f285760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016113a8565b6000546001600160a01b03163314611fa35760405162461bcd60e51b8152600401610bff90613c8f565b6001600160a01b0381166120085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bff565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461208d5760405162461bcd60e51b8152600401610bff90613c8f565b602854600160b01b900460ff16156120fb5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610bff565b604051600090339047908381818185875af1925050503d806000811461213d576040519150601f19603f3d011682016040523d82523d6000602084013e612142565b606091505b50505050565b6000546001600160a01b031633146121725760405162461bcd60e51b8152600401610bff90613c8f565b6028805461ffff60a81b191661010160a81b17905543601c55612198426203f480613d96565b601e55565b6001600160a01b0383166121ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bff565b6001600160a01b0382166122605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bff565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260256020908152604080832080548515801560ff199283168117909355602290945291909320805490911690921790915561230e5761230e82611541565b806112f4576112f482611141565b6027546123349030906001600160a01b03168461219d565b60275460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123d89190613de4565b5050505050565b6001600160a01b0383166124435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bff565b6001600160a01b0382166124a55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bff565b600081116125075760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bff565b602854600160b01b900460ff166125a3576001600160a01b0383166000908152600b602052604090205460ff168061255757506001600160a01b0382166000908152600b602052604090205460ff165b6125a35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610bff565b600a54610100900460ff16156129b1576000546001600160a01b038481169116148015906125df57506000546001600160a01b03838116911614155b80156125f357506001600160a01b03821615155b801561260a57506001600160a01b03821661dead14155b80156126205750602854600160a01b900460ff16155b156129b1576000546001600160a01b0384811691161480159061265157506028546001600160a01b03838116911614155b801561265e5750601c5443145b156126ad576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff1680156126d757506001600160a01b03831660009081526025602052604090205460ff165b1561272e576024543a111561272e5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610bff565b600a5460ff161561283f576000546001600160a01b0383811691161480159061276557506027546001600160a01b03838116911614155b801561277f57506028546001600160a01b03838116911614155b1561283f576001600160a01b03821660009081526009602052604090205443116128235760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610bff565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561288057506001600160a01b03821660009081526022602052604090205460ff16155b156128fa576021548111156128f55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610bff565b6129b1565b6001600160a01b03821660009081526025602052604090205460ff16801561293b57506001600160a01b03831660009081526022602052604090205460ff16155b156129b1576021548111156129b15760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610bff565b60006129ca602054601f54612d7690919063ffffffff16565b905060006129d730611898565b60265460285491925082101590600160a01b900460ff16158015612a045750602854600160a81b900460ff165b8015612a255750602854600090612a23906001600160a01b0316611898565b115b8015612a315750600083115b8015612a5657506001600160a01b0385166000908152600b602052604090205460ff16155b8015612a7b57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612a9f57506001600160a01b03851660009081526025602052604090205460ff165b8015612aa85750805b15612ab557612ab5612e24565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612af757506001600160a01b0386166000908152600b602052604090205460ff165b15612b09575060036015556000612cc2565b6001600160a01b03871660009081526025602052604090205460ff1615612b5557612b32613077565b601654601055601854601754612b489190613d96565b6013556001601555612cc2565b6001600160a01b03861660009081526025602052604090205460ff1615612bf257612b7e613077565b601954601055601b54601a54612b949190613d96565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612bc5575042601e54115b15612bed57601054612bd8906005613cf7565b601055601354612be9906005613cf7565b6013555b612cc2565b6001600160a01b0387166000908152601d602052604090205460ff161580612c1c575042601e5411155b612cb45760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610bff565b612cbc613077565b60036015555b612cce878787846130a5565b50505050505050565b60008184841115612cfb5760405162461bcd60e51b8152600401610bff9190613a9c565b506000612d088486613d2c565b95945050505050565b6000806000612d1e6131ca565b9092509050612d2d8282612d34565b9250505090565b600061113a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061336a565b600080612d838385613d96565b90508381101561113a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bff565b6000806000806000806000806000612dec8a613398565b9250925092506000806000612e0a8d8686612e05612d11565b6133da565b919f909e50909c50959a5093985091965092945050505050565b6028805460ff60a01b1916600160a01b1790556000612e4230611898565b90506000602054601f54612e569190613d96565b90506000612e706002601f54612d3490919063ffffffff16565b90506000612e7e848361342a565b905047612e8a8261346c565b6000612e96478361342a565b90506000612eb986612eb3602054856135d590919063ffffffff16565b90612d34565b90506000612ec7838361342a565b905060006007612ed8846002613cf7565b612ee29190613d74565b9050612eee8184613d2c565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d8060008114612f4b576040519150601f19603f3d011682016040523d82523d6000602084013e612f50565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b505080915050612fb5888461231c565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a000047111561305e576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613053576040519150601f19603f3d011682016040523d82523d6000602084013e613058565b606091505b50909150505b50506028805460ff60a01b191690555050505050505050565b6010541580156130875750601354155b1561308e57565b601080546011556013805460145560009182905555565b806130b2576130b2613077565b6001600160a01b0384166000908152600c602052604090205460ff1680156130f357506001600160a01b0383166000908152600c602052604090205460ff16155b1561310857613103848484613654565b6131b4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561314957506001600160a01b0383166000908152600c602052604090205460ff165b156131595761310384848461377a565b6001600160a01b0384166000908152600c602052604090205460ff16801561319957506001600160a01b0383166000908152600c602052604090205460ff165b156131a957613103848484613823565b6131b4848484613896565b8061214257612142601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d5481101561332b578260066000600d848154811061320157613201613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061326c57508160076000600d848154811061324557613245613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613289575050600e549369d3c21bcecceda10000009350915050565b6132cf60066000600d84815481106132a3576132a3613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061342a565b925061331760076000600d84815481106132eb576132eb613d16565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061342a565b91508061332381613d59565b9150506131df565b50600e546133439069d3c21bcecceda1000000612d34565b821015613361575050600e549269d3c21bcecceda100000092509050565b90939092509050565b6000818361338b5760405162461bcd60e51b8152600401610bff9190613a9c565b506000612d088486613d74565b6000806000806133a7856138da565b905060006133b4866138f6565b905060006133cc826133c6898661342a565b9061342a565b979296509094509092505050565b60008080806133e988866135d5565b905060006133f788876135d5565b9050600061340588886135d5565b90506000613417826133c6868661342a565b939b939a50919850919650505050505050565b600061113a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cd7565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134a1576134a1613d16565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156134f557600080fd5b505afa158015613509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352d9190613cc4565b8160018151811061354057613540613d16565b6001600160a01b039283166020918202929092010152602754613566913091168461219d565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac9479061359f908590600090869030904290600401613e12565b600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b505050505050565b6000826135e457506000610f57565b60006135f08385613cf7565b9050826135fd8583613d74565b1461113a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bff565b60008060008060008061366687612dd5565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613698908861342a565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546136c7908761342a565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546136f69086612d76565b6001600160a01b03891660009081526006602052604090205561371881613912565b6137228483613a78565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161376791815260200190565b60405180910390a3505050505050505050565b60008060008060008061378c87612dd5565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506137be908761342a565b6001600160a01b03808b16600090815260066020908152604080832094909455918b168152600790915220546137f49084612d76565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546136f69086612d76565b60008060008060008061383587612dd5565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613867908861342a565b6001600160a01b038a166000908152600760209081526040808320939093556006905220546137be908761342a565b6000806000806000806138a887612dd5565b6001600160a01b038f16600090815260066020526040902054959b509399509197509550935091506136c7908761342a565b6000610f576064612eb3601054856135d590919063ffffffff16565b6000610f576064612eb3601354856135d590919063ffffffff16565b600160155414156139835760135460175461392d9083613cf7565b6139379190613d74565b601f60008282546139489190613d96565b909155505060135460185461395d9083613cf7565b6139679190613d74565b602060008282546139789190613d96565b909155506139ef9050565b600260155414156139ef57601354601a5461399e9083613cf7565b6139a89190613d74565b601f60008282546139b99190613d96565b9091555050601354601b546139ce9083613cf7565b6139d89190613d74565b602060008282546139e99190613d96565b90915550505b60006139f9612d11565b90506000613a0783836135d5565b30600090815260066020526040902054909150613a249082612d76565b30600090815260066020908152604080832093909355600c9052205460ff1615613a735730600090815260076020526040902054613a629084612d76565b306000908152600760205260409020555b505050565b600e54613a85908361342a565b600e55600f54613a959082612d76565b600f555050565b600060208083528351808285015260005b81811015613ac957858101830151858201604001528201613aad565b81811115613adb576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613b0357600080fd5b5035919050565b6001600160a01b0381168114613b1f57600080fd5b50565b60008060408385031215613b3557600080fd5b8235613b4081613b0a565b946020939093013593505050565b600060208284031215613b6057600080fd5b813561113a81613b0a565b600080600060608486031215613b8057600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613bac57600080fd5b8335613bb781613b0a565b92506020840135613bc781613b0a565b929592945050506040919091013590565b8015158114613b1f57600080fd5b60008060408385031215613bf957600080fd5b823591506020830135613c0b81613bd8565b809150509250929050565b60008060408385031215613c2957600080fd5b8235613c3481613b0a565b91506020830135613c0b81613bd8565b60008060408385031215613c5757600080fd5b8235613c6281613b0a565b91506020830135613c0b81613b0a565b600060208284031215613c8457600080fd5b813561113a81613bd8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215613cd657600080fd5b815161113a81613b0a565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d1157613d11613ce1565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613d3e57613d3e613ce1565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613d6d57613d6d613ce1565b5060010190565b600082613d9157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613da957613da9613ce1565b500190565b600060208284031215613dc057600080fd5b5051919050565b600060208284031215613dd957600080fd5b815161113a81613bd8565b600080600060608486031215613df957600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e625784516001600160a01b031683529383019391830191600101613e3d565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029420c3b4fd036a5d0550cd7650db724239aa5a6fa9b229b4640412308e5ce6264736f6c63430008090033

Deployed Bytecode Sourcemap

17529:31137:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26453:905;;;;;;;;;;;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;26453:905:0;;;;;;;;22937:85;;;;;;;;;;-1:-1:-1;23009:5:0;;;;;;;;;;;;-1:-1:-1;;;23009:5:0;;;;22937:85;;;;;;;:::i;28043:135::-;;;;;;;;;;-1:-1:-1;28043:135:0;;;;;:::i;:::-;;:::i;:::-;;23934:193;;;;;;;;;;-1:-1:-1;23934:193:0;;;;;:::i;:::-;;:::i;19744:64::-;;;;;;;;;;-1:-1:-1;19744:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25473:89;;;;;;;;;;-1:-1:-1;25544:10:0;;25473:89;;;1847:25:1;;;1835:2;1820:18;25473:89:0;1701:177:1;20224:41:0;;;;;;;;;;-1:-1:-1;20224:41:0;;;;-1:-1:-1;;;;;20224:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;20224:41:0;1883:230:1;23220:97:0;;;;;;;;;;-1:-1:-1;18396:14:0;23220:97;;46490:345;;;;;;;;;;-1:-1:-1;46490:345:0;;;;;:::i;:::-;;:::i;19555:33::-;;;;;;;;;;;;;;;;19319:30;;;;;;;;;;;;;;;;24135:448;;;;;;;;;;-1:-1:-1;24135:448:0;;;;;:::i;:::-;;:::i;19652:37::-;;;;;;;;;;;;;;;;46151:331;;;;;;;;;;-1:-1:-1;46151:331:0;;;;;:::i;:::-;;:::i;28675:322::-;;;;;;;;;;-1:-1:-1;28675:322:0;;;;;:::i;:::-;;:::i;23127:85::-;;;;;;;;;;-1:-1:-1;23127:85:0;;18644:1;3042:36:1;;3030:2;3015:18;23127:85:0;2900:184:1;17759:39:0;;;;;;;;;;-1:-1:-1;17759:39:0;;;;-1:-1:-1;;;;;17759:39:0;;;29472:471;;;;;;;;;;-1:-1:-1;29472:471:0;;;;;:::i;:::-;;:::i;24591:302::-;;;;;;;;;;-1:-1:-1;24591:302:0;;;;;:::i;:::-;;:::i;17709:33::-;;;;;;;;;;-1:-1:-1;17709:33:0;;;;-1:-1:-1;;;;;17709:33:0;;;19608:37;;;;;;;;;;;;;;;;45834:152;;;;;;;;;;-1:-1:-1;45834:152:0;;;;;:::i;:::-;;:::i;28186:481::-;;;;;;;;;;-1:-1:-1;28186:481:0;;;;;:::i;:::-;;:::i;20272:28::-;;;;;;;;;;-1:-1:-1;20272:28:0;;;;-1:-1:-1;;;;;20272:28:0;;;18119:33;;;;;;;;;;-1:-1:-1;18119:33:0;;;;;;;;;;;20337:41;;;;;;;;;;-1:-1:-1;20337:41:0;;;;-1:-1:-1;;;20337:41:0;;;;;;36597:304;;;;;;;;;;;;;:::i;29005:459::-;;;;;;;;;;-1:-1:-1;29005:459:0;;;;;:::i;:::-;;:::i;47255:341::-;;;;;;;;;;-1:-1:-1;47255:341:0;;;;;:::i;:::-;;:::i;45539:126::-;;;;;;;;;;-1:-1:-1;45539:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45630:27:0;45606:4;45630:27;;;:18;:27;;;;;;;;;45539:126;8231:90;;;;;;;;;;-1:-1:-1;8298:15:0;8231:90;;45678:148;;;;;;;;;;-1:-1:-1;45678:148:0;;;;;:::i;:::-;;:::i;8133:90::-;;;;;;;;;;-1:-1:-1;8206:9:0;;8133:90;;23325:198;;;;;;;;;;-1:-1:-1;23325:198:0;;;;;:::i;:::-;;:::i;7688:148::-;;;;;;;;;;;;;:::i;25634:192::-;;;;;;;;;;;;;:::i;26015:144::-;;;;;;;;;;-1:-1:-1;26015:144:0;;;;;:::i;:::-;;:::i;47878:488::-;;;;;;;;;;-1:-1:-1;47878:488:0;;;;;:::i;:::-;;:::i;19498:43::-;;;;;;;;;;-1:-1:-1;19498:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19356:36;;;;;;;;;;;;;;;;25311:154;;;;;;;;;;-1:-1:-1;25311:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;25437:20:0;25408:4;25437:20;;;:11;:20;;;;;;;;;25311:154;7474:79;;;;;;;;;;-1:-1:-1;7512:7:0;7539:6;-1:-1:-1;;;;;7539:6:0;7474:79;;46845:398;;;;;;;;;;-1:-1:-1;46845:398:0;;;;;:::i;:::-;;:::i;23030:89::-;;;;;;;;;;-1:-1:-1;23104:7:0;;;;;;;;;;;;-1:-1:-1;;;23104:7:0;;;;23030:89;;27504:244;;;;;;;;;;-1:-1:-1;27504:244:0;;;;;:::i;:::-;;:::i;27370:122::-;;;;;;;;;;-1:-1:-1;27461:23:0;;27370:122;;24901:402;;;;;;;;;;-1:-1:-1;24901:402:0;;;;;:::i;:::-;;:::i;17653:39::-;;;;;;;;;;-1:-1:-1;17653:39:0;;;;-1:-1:-1;;;;;17653:39:0;;;23531:201;;;;;;;;;;-1:-1:-1;23531:201:0;;;;;:::i;:::-;;:::i;20109:58::-;;;;;;;;;;-1:-1:-1;20109:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20385:33;;;;;;;;;;-1:-1:-1;20385:33:0;;;;-1:-1:-1;;;20385:33:0;;;;;;47604:171;;;;;;;;;;-1:-1:-1;47604:171:0;;;;;:::i;:::-;;:::i;19275:35::-;;;;;;;;;;;;;;;;19399:36;;;;;;;;;;;;;;;;18073:39;;;;;;;;;;-1:-1:-1;18073:39:0;;;;;;;;19702:35;;;;;;;;;;;;;;;;19233;;;;;;;;;;;;;;;;23740:186;;;;;;;;;;-1:-1:-1;23740:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23891:18:0;;;23859:7;23891:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23740:186;25869:134;;;;;;;;;;;;;:::i;45994:149::-;;;;;;;;;;-1:-1:-1;45994:149:0;;;;;:::i;:::-;;:::i;19448:37::-;;;;;;;;;;;;;;;;19197:29;;;;;;;;;;;;;;;;7844:281;;;;;;;;;;-1:-1:-1;7844:281:0;;;;;:::i;:::-;;:::i;48422:241::-;;;;;;;;;;;;;:::i;26453:905::-;26499:4;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;;;;;;;;;26524:13:::1;::::0;-1:-1:-1;;;26524:13:0;::::1;;;26523:14;26515:70;;;::::0;-1:-1:-1;;;26515:70:0;;5547:2:1;26515:70:0::1;::::0;::::1;5529:21:1::0;5586:2;5566:18;;;5559:30;5625:34;5605:18;;;5598:62;-1:-1:-1;;;5676:18:1;;;5669:41;5727:19;;26515:70:0::1;5345:407:1::0;26515:70:0::1;26605:15;:13;:15::i;:::-;26688:42;26742:58;26688:42:::0;26795:4:::1;26742:25;:58::i;:::-;26811:15;:34:::0;;-1:-1:-1;;;;;;26811:34:0::1;-1:-1:-1::0;;;;;26811:34:0;::::1;::::0;;::::1;::::0;;;26856:58:::1;::::0;26873:4:::1;::::0;18396:14:::1;26856:8;:58::i;:::-;26959:16;-1:-1:-1::0;;;;;26959:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26941:56:0::1;;27006:4;27013:16;-1:-1:-1::0;;;;;27013:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26941:96;::::0;-1:-1:-1;;;;;;26941:96:0::1;::::0;;;;;;-1:-1:-1;;;;;6243:15:1;;;26941:96:0::1;::::0;::::1;6225:34:1::0;6295:15;;6275:18;;;6268:43;6160:18;;26941:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26925:13;:112:::0;;-1:-1:-1;;;;;;26925:112:0::1;-1:-1:-1::0;;;;;26925:112:0;;;::::1;::::0;;::::1;::::0;;27048:55:::1;::::0;-1:-1:-1;27048:25:0::1;:55::i;:::-;27151:13;::::0;27114:58:::1;::::0;-1:-1:-1;;;;;27151:13:0::1;::::0;27114:28:::1;:58::i;:::-;27215:1;27191:21;:25;27183:73;;;::::0;-1:-1:-1;;;27183:73:0;;6524:2:1;27183:73:0::1;::::0;::::1;6506:21:1::0;6563:2;6543:18;;;6536:30;6602:34;6582:18;;;6575:62;-1:-1:-1;;;6653:18:1;;;6646:33;6696:19;;27183:73:0::1;6322:399:1::0;27183:73:0::1;27267:61;27280:24;27298:4;27280:9;:24::i;:::-;27306:21;27267:12;:61::i;:::-;27346:4;27339:11;;;26453:905:::0;:::o;28043:135::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;28127:3:::1;28120;:10;;28112:19;;;::::0;::::1;;28158:12;:3:::0;28164:6:::1;28158:12;:::i;:::-;28142:13;:28:::0;-1:-1:-1;28043:135:0:o;23934:193::-;24036:4;24058:39;1213:10;24081:7;24090:6;24058:8;:39::i;:::-;-1:-1:-1;24115:4:0;23934:193;;;;;:::o;46490:345::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;46635:11:::1;:24:::0;;;46670:17:::1;:36:::0;;;46717:17:::1;:36:::0;;;46769:58:::1;::::0;;7233:25:1;;;7289:2;7274:18;;7267:34;;;7317:18;;;7310:34;;;46769:58:0::1;::::0;7221:2:1;7206:18;46769:58:0::1;;;;;;;;46490:345:::0;;;:::o;24135:448::-;24269:4;24286:36;24296:6;24304:9;24315:6;24286:9;:36::i;:::-;24333:220;24356:6;1213:10;24404:138;24460:6;24404:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24404:19:0;;;;;;:11;:19;;;;;;;;1213:10;24404:33;;;;;;;;;;:37;:138::i;:::-;24333:8;:220::i;:::-;-1:-1:-1;24571:4:0;24135:448;;;;;:::o;46151:331::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;46292:10:::1;:22:::0;;;46325:16:::1;:34:::0;;;46370:16:::1;:34:::0;;;46420:54:::1;::::0;;7233:25:1;;;7289:2;7274:18;;7267:34;;;7317:18;;;7310:34;;;46420:54:0::1;::::0;7221:2:1;7206:18;46420:54:0::1;7031:319:1::0;28675:322:0;28769:7;28827;;28816;:18;;28794:110;;;;-1:-1:-1;;;28794:110:0;;7557:2:1;28794:110:0;;;7539:21:1;7596:2;7576:18;;;7569:30;7635:34;7615:18;;;7608:62;-1:-1:-1;;;7686:18:1;;;7679:40;7736:19;;28794:110:0;7355:406:1;28794:110:0;28915:19;28937:10;:8;:10::i;:::-;28915:32;-1:-1:-1;28965:24:0;:7;28915:32;28965:11;:24::i;:::-;28958:31;28675:322;-1:-1:-1;;;28675:322:0:o;29472:471::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29550:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29542:56;;;::::0;-1:-1:-1;;;29542:56:0;;7968:2:1;29542:56:0::1;::::0;::::1;7950:21:1::0;8007:2;7987:18;;;7980:30;8046:25;8026:18;;;8019:53;8089:18;;29542:56:0::1;7766:347:1::0;29542:56:0::1;29614:9;29609:327;29633:9;:16:::0;29629:20;::::1;29609:327;;;29691:7;-1:-1:-1::0;;;;;29675:23:0::1;:9;29685:1;29675:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29675:12:0::1;:23;29671:254;;;29734:9;29744:16:::0;;:20:::1;::::0;29763:1:::1;::::0;29744:20:::1;:::i;:::-;29734:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29719:9:::1;:12:::0;;-1:-1:-1;;;;;29734:31:0;;::::1;::::0;29729:1;;29719:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29719:46:0::1;-1:-1:-1::0;;;;;29719:46:0;;::::1;;::::0;;29784:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29823:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29823:28:0::1;::::0;;29870:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29870:15:0;;;;;-1:-1:-1;;;;;;29870:15:0::1;::::0;;;;;29609:327:::1;29472:471:::0;:::o;29671:254::-:1;29651:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29609:327;;;;29472:471:::0;:::o;24591:302::-;1213:10;24708:4;24802:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24802:34:0;;;;;;;;;;24708:4;;24730:133;;24780:7;;24802:50;;24841:10;24802:38;:50::i;45834:152::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45905:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;45905:34:0::1;45935:4;45905:34;::::0;;45955:23;;2056:51:1;;;45955:23:0::1;::::0;2029:18:1;45955:23:0::1;;;;;;;;45834:152:::0;:::o;28186:481::-;28306:7;18396:14;28339:7;:18;;28331:62;;;;-1:-1:-1;;;28331:62:0;;8854:2:1;28331:62:0;;;8836:21:1;8893:2;8873:18;;;8866:30;8932:33;8912:18;;;8905:61;8983:18;;28331:62:0;8652:355:1;28331:62:0;28409:17;28404:256;;28444:15;28473:19;28484:7;28473:10;:19::i;:::-;-1:-1:-1;28443:49:0;;-1:-1:-1;28507:14:0;;-1:-1:-1;;;;;28507:14:0;28404:256;28557:23;28592:19;28603:7;28592:10;:19::i;:::-;-1:-1:-1;28554:57:0;;-1:-1:-1;28626:22:0;;-1:-1:-1;;;;;28626:22:0;36597:304;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;36652:23:::1;36678:24;36696:4;36678:9;:24::i;:::-;36652:50:::0;-1:-1:-1;36740:13:0::1;36750:3;18396:14;36740:13;:::i;:::-;36721:15;:32;;36713:107;;;::::0;-1:-1:-1;;;36713:107:0;;9436:2:1;36713:107:0::1;::::0;::::1;9418:21:1::0;9475:2;9455:18;;;9448:30;9514:34;9494:18;;;9487:62;9585:32;9565:18;;;9558:60;9635:19;;36713:107:0::1;9234:426:1::0;36713:107:0::1;36831:10;:8;:10::i;:::-;36857:36;::::0;36877:15:::1;1847:25:1::0;;36857:36:0::1;::::0;1835:2:1;1820:18;36857:36:0::1;1701:177:1::0;29005:459:0;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29086:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29085:21;29077:61;;;::::0;-1:-1:-1;;;29077:61:0;;9867:2:1;29077:61:0::1;::::0;::::1;9849:21:1::0;9906:2;9886:18;;;9879:30;9945:29;9925:18;;;9918:57;9992:18;;29077:61:0::1;9665:351:1::0;29077:61:0::1;29157:9;:16:::0;29181:2:::1;::::0;29157:20:::1;::::0;29176:1:::1;29157:20;:::i;:::-;:26;;29149:116;;;::::0;-1:-1:-1;;;29149:116:0;;10356:2:1;29149:116:0::1;::::0;::::1;10338:21:1::0;10395:2;10375:18;;;10368:30;10434:34;10414:18;;;10407:62;10505:34;10485:18;;;10478:62;-1:-1:-1;;;10556:19:1;;;10549:44;10610:19;;29149:116:0::1;10154:481:1::0;29149:116:0::1;-1:-1:-1::0;;;;;29280:16:0;::::1;29299:1;29280:16:::0;;;:7:::1;:16;::::0;;;;;:20;29276:109:::1;;-1:-1:-1::0;;;;;29356:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29336:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29317:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29276:109:::1;-1:-1:-1::0;;;;;29395:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29395:27:0::1;29418:4;29395:27:::0;;::::1;::::0;;;29433:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29433:23:0::1;::::0;;::::1;::::0;;29005:459::o;47255:341::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47347:31:0;::::1;47339:81;;;::::0;-1:-1:-1;;;47339:81:0;;10842:2:1;47339:81:0::1;::::0;::::1;10824:21:1::0;10881:2;10861:18;;;10854:30;10920:34;10900:18;;;10893:62;-1:-1:-1;;;10971:18:1;;;10964:35;11016:19;;47339:81:0::1;10640:401:1::0;47339:81:0::1;47431:16;:45:::0;;-1:-1:-1;;;;;;47431:45:0::1;-1:-1:-1::0;;;;;47431:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;47487:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;47487:43:0::1;-1:-1:-1::0;47487:43:0::1;::::0;;47546:42;;2056:51:1;;;47546:42:0::1;::::0;2029:18:1;47546:42:0::1;1883:230:1::0;45678:148:0;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45752:20:0;::::1;45775:5;45752:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;45752:28:0::1;::::0;;45796:22;::::1;::::0;45775:5;45796:22:::1;45678:148:::0;:::o;23325:198::-;-1:-1:-1;;;;;23415:20:0;;23391:7;23415:20;;;:11;:20;;;;;;;;23411:49;;;-1:-1:-1;;;;;;23444:16:0;;;;;:7;:16;;;;;;;23325:198::o;23411:49::-;-1:-1:-1;;;;;23498:16:0;;;;;;:7;:16;;;;;;23478:37;;:19;:37::i;7688:148::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;7795:1:::1;7779:6:::0;;7758:40:::1;::::0;-1:-1:-1;;;;;7779:6:0;;::::1;::::0;7758:40:::1;::::0;7795:1;;7758:40:::1;7826:1;7809:19:::0;;-1:-1:-1;;;;;;7809:19:0::1;::::0;;7688:148::o;25634:192::-;25686:4;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;25702:14:0::1;:22:::0;;25735:14:::1;:22:::0;;-1:-1:-1;;25735:22:0::1;::::0;;-1:-1:-1;;25768:28:0;;;25702:14:::1;25634:192:::0;:::o;26015:144::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26105:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;26105:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26015:144::o;47878:488::-;47992:10;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48028:20:0;::::1;48020:59;;;::::0;-1:-1:-1;;;48020:59:0;;11248:2:1;48020:59:0::1;::::0;::::1;11230:21:1::0;11287:2;11267:18;;;11260:30;11326:28;11306:18;;;11299:56;11372:18;;48020:59:0::1;11046:350:1::0;48020:59:0::1;-1:-1:-1::0;;;;;48098:23:0;::::1;48116:4;48098:23;;48090:64;;;::::0;-1:-1:-1;;;48090:64:0;;11603:2:1;48090:64:0::1;::::0;::::1;11585:21:1::0;11642:2;11622:18;;;11615:30;11681;11661:18;;;11654:58;11729:18;;48090:64:0::1;11401:352:1::0;48090:64:0::1;48192:39;::::0;-1:-1:-1;;;48192:39:0;;48225:4:::1;48192:39;::::0;::::1;2056:51:1::0;48165:24:0::1;::::0;-1:-1:-1;;;;;48192:24:0;::::1;::::0;::::1;::::0;2029:18:1;;48192:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48250:46;::::0;-1:-1:-1;;;48250:46:0;;-1:-1:-1;;;;;12139:32:1;;;48250:46:0::1;::::0;::::1;12121:51:1::0;12188:18;;;12181:34;;;48165:66:0;;-1:-1:-1;48250:23:0;;::::1;::::0;::::1;::::0;12094:18:1;;48250:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48312;::::0;;-1:-1:-1;;;;;12139:32:1;;12121:51;;12203:2;12188:18;;12181:34;;;48242:54:0;;-1:-1:-1;48312:46:0::1;::::0;12094:18:1;48312:46:0::1;;;;;;;48009:357;47878:488:::0;;;;:::o;46845:398::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46939:31:0;::::1;46931:81;;;::::0;-1:-1:-1;;;46931:81:0;;12678:2:1;46931:81:0::1;::::0;::::1;12660:21:1::0;12717:2;12697:18;;;12690:30;12756:34;12736:18;;;12729:62;-1:-1:-1;;;12807:18:1;;;12800:35;12852:19;;46931:81:0::1;12476:401:1::0;46931:81:0::1;47042:16;::::0;;-1:-1:-1;;;;;47042:16:0;;::::1;47062:5;47023:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;47023:44:0;;::::1;::::0;;;47078:45;;-1:-1:-1;;;;;;47078:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;47134:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;47134:43:0::1;::::0;;;47193:42;2056:51:1;;;47193:42:0::1;::::0;2029:18:1;47193:42:0::1;1883:230:1::0;27504:244:0;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;27611:13:::1;::::0;-1:-1:-1;;;;;27603:21:0;;::::1;27611:13:::0;::::1;27603:21;;27595:91;;;::::0;-1:-1:-1;;;27595:91:0;;13084:2:1;27595:91:0::1;::::0;::::1;13066:21:1::0;13123:2;13103:18;;;13096:30;13162:34;13142:18;;;13135:62;13233:27;13213:18;;;13206:55;13278:19;;27595:91:0::1;12882:421:1::0;27595:91:0::1;27699:41;27728:4;27734:5;27699:28;:41::i;24901:402::-:0;25023:4;25045:228;1213:10;25095:7;25117:145;25174:15;25117:145;;;;;;;;;;;;;;;;;1213:10;25117:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25117:34:0;;;;;;;;;;;;:38;:145::i;23531:201::-;23638:4;23660:42;1213:10;23684:9;23695:6;23660:9;:42::i;47604:171::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;47681:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;47681:32:0::1;-1:-1:-1::0;;;;47681:32:0;;::::1;;::::0;;47729:38:::1;::::0;::::1;::::0;::::1;::::0;47705:8;179:14:1;172:22;154:41;;142:2;127:18;;14:187;25869:134:0;25929:4;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;25945:20:0::1;:28:::0;;-1:-1:-1;;25945:28:0::1;::::0;;;25869:134;:::o;45994:149::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46063:27:0;::::1;46093:5;46063:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;46063:35:0::1;::::0;;46114:21;;2056:51:1;;;46114:21:0::1;::::0;2029:18:1;46114:21:0::1;1883:230:1::0;7844:281:0;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7947:22:0;::::1;7925:110;;;::::0;-1:-1:-1;;;7925:110:0;;13510:2:1;7925:110:0::1;::::0;::::1;13492:21:1::0;13549:2;13529:18;;;13522:30;13588:34;13568:18;;;13561:62;-1:-1:-1;;;13639:18:1;;;13632:36;13685:19;;7925:110:0::1;13308:402:1::0;7925:110:0::1;8072:6;::::0;;8051:38:::1;::::0;-1:-1:-1;;;;;8051:38:0;;::::1;::::0;8072:6;::::1;::::0;8051:38:::1;::::0;::::1;8100:6;:17:::0;;-1:-1:-1;;;;;;8100:17:0::1;-1:-1:-1::0;;;;;8100:17:0;;;::::1;::::0;;;::::1;::::0;;7844:281::o;48422:241::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;48489:13:::1;::::0;-1:-1:-1;;;48489:13:0;::::1;;;48488:14;48480:70;;;::::0;-1:-1:-1;;;48480:70:0;;13917:2:1;48480:70:0::1;::::0;::::1;13899:21:1::0;13956:2;13936:18;;;13929:30;13995:34;13975:18;;;13968:62;-1:-1:-1;;;14046:18:1;;;14039:41;14097:19;;48480:70:0::1;13715:407:1::0;48480:70:0::1;48597:58;::::0;48561:12:::1;::::0;48605:10:::1;::::0;48629:21:::1;::::0;48561:12;48597:58;48561:12;48597:58;48629:21;48605:10;48597:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;48422:241:0:o;26217:224::-;7601:6;;-1:-1:-1;;;;;7601:6:0;1213:10;7601:22;7593:67;;;;-1:-1:-1;;;7593:67:0;;;;;;;:::i;:::-;26272:13:::1;:20:::0;;-1:-1:-1;;;;26303:28:0;-1:-1:-1;;;26303:28:0;;;26363:12:::1;26342:18;:33:::0;26407:26:::1;:15;26425:8;26407:26;:::i;:::-;26386:18;:47:::0;26217:224::o;29952:371::-;-1:-1:-1;;;;;30079:19:0;;30071:68;;;;-1:-1:-1;;;30071:68:0;;14539:2:1;30071:68:0;;;14521:21:1;14578:2;14558:18;;;14551:30;14617:34;14597:18;;;14590:62;-1:-1:-1;;;14668:18:1;;;14661:34;14712:19;;30071:68:0;14337:400:1;30071:68:0;-1:-1:-1;;;;;30158:21:0;;30150:68;;;;-1:-1:-1;;;30150:68:0;;14944:2:1;30150:68:0;;;14926:21:1;14983:2;14963:18;;;14956:30;15022:34;15002:18;;;14995:62;-1:-1:-1;;;15073:18:1;;;15066:32;15115:19;;30150:68:0;14742:398:1;30150:68:0;-1:-1:-1;;;;;30231:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30283:32;;1847:25:1;;;30283:32:0;;1820:18:1;30283:32:0;;;;;;;29952:371;;;:::o;27756:275::-;-1:-1:-1;;;;;27839:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;27839:39:0;;;;;;;;27889:31;:37;;;;;;;:45;;;;;;;;;;;27945:35;;27955:23;27973:4;27955:17;:23::i;:::-;27994:5;27990:34;;28001:21;28017:4;28001:15;:21::i;37424:423::-;37537:15;;37505:62;;37522:4;;-1:-1:-1;;;;;37537:15:0;37555:11;37505:8;:62::i;:::-;37578:15;;37782:16;;37578:261;;-1:-1:-1;;;37578:261:0;;37650:4;37578:261;;;15494:34:1;15544:18;;;15537:34;;;37578:15:0;15587:18:1;;;15580:34;;;15630:18;;;15623:34;-1:-1:-1;;;;;37782:16:0;;;15673:19:1;;;15666:44;37813:15:0;15726:19:1;;;15719:35;37578:15:0;;;:31;;37617:9;;15428:19:1;;37578:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37424:423;;:::o;30331:4614::-;-1:-1:-1;;;;;30453:18:0;;30445:68;;;;-1:-1:-1;;;30445:68:0;;16278:2:1;30445:68:0;;;16260:21:1;16317:2;16297:18;;;16290:30;16356:34;16336:18;;;16329:62;-1:-1:-1;;;16407:18:1;;;16400:35;16452:19;;30445:68:0;16076:401:1;30445:68:0;-1:-1:-1;;;;;30532:16:0;;30524:64;;;;-1:-1:-1;;;30524:64:0;;16684:2:1;30524:64:0;;;16666:21:1;16723:2;16703:18;;;16696:30;16762:34;16742:18;;;16735:62;-1:-1:-1;;;16813:18:1;;;16806:33;16856:19;;30524:64:0;16482:399:1;30524:64:0;30616:1;30607:6;:10;30599:64;;;;-1:-1:-1;;;30599:64:0;;17088:2:1;30599:64:0;;;17070:21:1;17127:2;17107:18;;;17100:30;17166:34;17146:18;;;17139:62;-1:-1:-1;;;17217:18:1;;;17210:39;17266:19;;30599:64:0;16886:405:1;30599:64:0;30688:13;;-1:-1:-1;;;30688:13:0;;;;30684:134;;-1:-1:-1;;;;;30725:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;30753:22:0;;;;;;:18;:22;;;;;;;;30725:50;30717:89;;;;-1:-1:-1;;;30717:89:0;;17498:2:1;30717:89:0;;;17480:21:1;17537:2;17517:18;;;17510:30;17576:28;17556:18;;;17549:56;17622:18;;30717:89:0;17296:350:1;30717:89:0;30861:14;;;;;;;30858:1896;;;7512:7;7539:6;-1:-1:-1;;;;;30913:15:0;;;7539:6;;30913:15;;;;:49;;-1:-1:-1;7512:7:0;7539:6;-1:-1:-1;;;;;30949:13:0;;;7539:6;;30949:13;;30913:49;:86;;;;-1:-1:-1;;;;;;30983:16:0;;;;30913:86;:128;;;;-1:-1:-1;;;;;;31020:21:0;;31034:6;31020:21;;30913:128;:166;;;;-1:-1:-1;31063:16:0;;-1:-1:-1;;;31063:16:0;;;;31062:17;30913:166;30891:1852;;;7512:7;7539:6;-1:-1:-1;;;;;31134:15:0;;;7539:6;;31134:15;;;;:38;;-1:-1:-1;31159:13:0;;-1:-1:-1;;;;;31153:19:0;;;31159:13;;31153:19;;31134:38;:76;;;;;31192:18;;31176:12;:34;31134:76;31131:188;;;-1:-1:-1;;;;;31234:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;31234:22:0;31252:4;31234:22;;;31284:15;;;31234;31284;31131:188;31432:14;;;;:49;;;;-1:-1:-1;;;;;;31450:31:0;;;;;;:25;:31;;;;;;;;31432:49;31428:163;;;31529:13;;31514:11;:28;;31506:65;;;;-1:-1:-1;;;31506:65:0;;17853:2:1;31506:65:0;;;17835:21:1;17892:2;17872:18;;;17865:30;17931:26;17911:18;;;17904:54;17975:18;;31506:65:0;17651:348:1;31506:65:0;31765:20;;;;31761:409;;;7512:7;7539:6;-1:-1:-1;;;;;31813:13:0;;;7539:6;;31813:13;;;;:47;;-1:-1:-1;31844:15:0;;-1:-1:-1;;;;;31830:30:0;;;31844:15;;31830:30;;31813:47;:79;;;;-1:-1:-1;31878:13:0;;-1:-1:-1;;;;;31864:28:0;;;31878:13;;31864:28;;31813:79;31809:342;;;-1:-1:-1;;;;;31928:32:0;;;;;;:28;:32;;;;;;31963:12;-1:-1:-1;31920:133:0;;;;-1:-1:-1;;;31920:133:0;;18206:2:1;31920:133:0;;;18188:21:1;18245:2;18225:18;;;18218:30;18284:34;18264:18;;;18257:62;18355:34;18335:18;;;18328:62;-1:-1:-1;;;18406:19:1;;;18399:40;18456:19;;31920:133:0;18004:477:1;31920:133:0;-1:-1:-1;;;;;32080:32:0;;;;;;:28;:32;;;;;32115:12;32080:47;;31809:342;-1:-1:-1;;;;;32238:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;32274:35:0;;;;;;:31;:35;;;;;;;;32273:36;32238:71;32234:494;;;32356:20;;32346:6;:30;;32338:96;;;;-1:-1:-1;;;32338:96:0;;18688:2:1;32338:96:0;;;18670:21:1;18727:2;18707:18;;;18700:30;18766:34;18746:18;;;18739:62;-1:-1:-1;;;18817:18:1;;;18810:51;18878:19;;32338:96:0;18486:417:1;32338:96:0;32234:494;;;-1:-1:-1;;;;;32511:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;32545:37:0;;;;;;:31;:37;;;;;;;;32544:38;32511:71;32507:221;;;32629:20;;32619:6;:30;;32611:97;;;;-1:-1:-1;;;32611:97:0;;19110:2:1;32611:97:0;;;19092:21:1;19149:2;19129:18;;;19122:30;19188:34;19168:18;;;19161:62;-1:-1:-1;;;19239:18:1;;;19232:52;19301:19;;32611:97:0;18908:418:1;32611:97:0;32794:25;32822:50;32849:22;;32822;;:26;;:50;;;;:::i;:::-;32794:78;;32883:28;32914:24;32932:4;32914:9;:24::i;:::-;33004:23;;33088:16;;32883:55;;-1:-1:-1;32980:47:0;;;;-1:-1:-1;;;33088:16:0;;;;33087:17;:55;;;;-1:-1:-1;33121:21:0;;-1:-1:-1;;;33121:21:0;;;;33087:55;:100;;;;-1:-1:-1;33169:13:0;;33186:1;;33159:24;;-1:-1:-1;;;;;33169:13:0;33159:9;:24::i;:::-;:28;33087:100;:138;;;;;33224:1;33204:17;:21;33087:138;:178;;;;-1:-1:-1;;;;;;33243:22:0;;;;;;:18;:22;;;;;;;;33242:23;33087:178;:220;;;;-1:-1:-1;;;;;;33283:24:0;;;;;;:18;:24;;;;;;;;33282:25;33087:220;:266;;;;-1:-1:-1;;;;;;33324:29:0;;;;;;:25;:29;;;;;;;;33087:266;:306;;;;;33370:23;33087:306;33069:373;;;33420:10;:8;:10::i;:::-;-1:-1:-1;;;;;33575:24:0;;33454:12;33575:24;;;:18;:24;;;;;;33469:4;;33575:24;;;:50;;-1:-1:-1;;;;;;33603:22:0;;;;;;:18;:22;;;;;;;;33575:50;33571:1295;;;-1:-1:-1;19149:1:0;33672:15;:26;33652:5;33571:1295;;;-1:-1:-1;;;;;33786:31:0;;;;;;:25;:31;;;;;;;;33782:1073;;;33838:14;:12;:14::i;:::-;33881:10;;33871:7;:20;33945:16;;33926;;:35;;33945:16;33926:35;:::i;:::-;33910:13;:51;19065:1;33980:15;:21;33782:1073;;;-1:-1:-1;;;;;34062:29:0;;;;;;:25;:29;;;;;;;;34058:797;;;34112:14;:12;:14::i;:::-;34155:11;;34145:7;:21;34221:17;;34201;;:37;;34221:17;34201:37;:::i;:::-;34185:13;:53;19105:1;34257:15;:22;-1:-1:-1;;;;;34301:17:0;;-1:-1:-1;34301:17:0;;;:11;:17;;;;;;;;:57;;;;;34343:15;34322:18;;:36;34301:57;34298:181;;;34392:7;;:11;;34402:1;34392:11;:::i;:::-;34382:7;:21;34442:13;;:17;;34458:1;34442:17;:::i;:::-;34426:13;:33;34298:181;34058:797;;;-1:-1:-1;;;;;34578:17:0;;;;;;:11;:17;;;;;;;;34577:18;;:59;;;34621:15;34599:18;;:37;;34577:59;34569:161;;;;-1:-1:-1;;;34569:161:0;;19533:2:1;34569:161:0;;;19515:21:1;19572:2;19552:18;;;19545:30;19611:34;19591:18;;;19584:62;19682:34;19662:18;;;19655:62;19754:27;19733:19;;;19726:56;19799:19;;34569:161:0;19331:493:1;34569:161:0;34749:14;:12;:14::i;:::-;19149:1;34782:15;:26;34058:797;34886:41;34901:4;34907:2;34911:6;34919:7;34886:14;:41::i;:::-;30434:4511;;;;30331:4614;;;:::o;2639:226::-;2759:7;2795:12;2787:6;;;;2779:29;;;;-1:-1:-1;;;2779:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2819:9:0;2831:5;2835:1;2831;:5;:::i;:::-;2819:17;2639:226;-1:-1:-1;;;;;2639:226:0:o;43256:164::-;43298:7;43319:15;43336;43355:19;:17;:19::i;:::-;43318:56;;-1:-1:-1;43318:56:0;-1:-1:-1;43392:20:0;43318:56;;43392:11;:20::i;:::-;43385:27;;;;43256:164;:::o;3131:132::-;3189:7;3216:39;3220:1;3223;3216:39;;;;;;;;;;;;;;;;;:3;:39::i;2306:181::-;2364:7;;2396:5;2400:1;2396;:5;:::i;:::-;2384:17;;2425:1;2420;:6;;2412:46;;;;-1:-1:-1;;;2412:46:0;;20031:2:1;2412:46:0;;;20013:21:1;20070:2;20050:18;;;20043:30;20109:29;20089:18;;;20082:57;20156:18;;2412:46:0;19829:351:1;41524:742:0;41624:7;41646;41668;41690;41712;41734;41784:23;41822:12;41849:18;41881:20;41893:7;41881:11;:20::i;:::-;41769:132;;;;;;41913:15;41930:23;41955:12;41971:113;41997:7;42019:4;42038:10;42063;:8;:10::i;:::-;41971:11;:113::i;:::-;41912:172;;;;-1:-1:-1;41912:172:0;;-1:-1:-1;42188:15:0;;-1:-1:-1;42218:4:0;;-1:-1:-1;42237:10:0;;-1:-1:-1;41524:742:0;;-1:-1:-1;;;;;41524:742:0:o;34953:1574::-;21645:16;:23;;-1:-1:-1;;;;21645:23:0;-1:-1:-1;;;21645:23:0;;;;35030:24:::1;35048:4;35030:9;:24::i;:::-;35004:50;;35065:25;35118:22;;35093;;:47;;;;:::i;:::-;35065:75;;35210:26;35239:29;35266:1;35239:22;;:26;;:29;;;;:::i;:::-;35210:58:::0;-1:-1:-1;35279:26:0::1;35308:39;:15:::0;35210:58;35308:19:::1;:39::i;:::-;35279:68:::0;-1:-1:-1;35396:21:0::1;35430:36;35279:68:::0;35430:16:::1;:36::i;:::-;35488:18;35509:44;:21;35535:17:::0;35509:25:::1;:44::i;:::-;35488:65;;35574:23;35600:61;35643:17;35600:38;35615:22;;35600:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;35574:87:::0;-1:-1:-1;35682:23:0::1;35708:31;:10:::0;35574:87;35708:14:::1;:31::i;:::-;35682:57:::0;-1:-1:-1;35760:17:0::1;35801:1;35779:19;:15:::0;35797:1:::1;35779:19;:::i;:::-;:23;;;;:::i;:::-;35760:42:::0;-1:-1:-1;35832:28:0::1;35760:42:::0;35832:28;::::1;:::i;:::-;35906:1;35881:22;:26:::0;;;35918:22:::1;:26:::0;;;35991:16:::1;::::0;35983:58:::1;::::0;35832:28;;-1:-1:-1;35906:1:0;;-1:-1:-1;;;;;35991:16:0;;::::1;::::0;35832:28;;35906:1;35983:58;35906:1;35983:58;35832:28;35991:16;35983:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36073:10:0::1;::::0;36065:46:::1;::::0;35965:76;;-1:-1:-1;;;;;;36073:10:0::1;::::0;36097:9;;36065:46:::1;::::0;;;36097:9;36073:10;36065:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36052:59;;;;;36132:49;36145:18;36165:15;36132:12;:49::i;:::-;36197:71;::::0;;7233:25:1;;;7289:2;7274:18;;7267:34;;;7317:18;;;7310:34;;;36197:71:0::1;::::0;7221:2:1;7206:18;36197:71:0::1;;;;;;;36411:4;36387:21;:28;36384:136;;;36452:16;::::0;36444:64:::1;::::0;-1:-1:-1;;;;;36452:16:0;;::::1;::::0;36482:21:::1;::::0;36444:64:::1;::::0;;;36482:21;36452:16;36444:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36431:77:0;;-1:-1:-1;;36384:136:0::1;-1:-1:-1::0;;21691:16:0;:24;;-1:-1:-1;;;;21691:24:0;;;-1:-1:-1;;;;;;;;34953:1574:0:o;45163:235::-;45210:7;;:12;:34;;;;-1:-1:-1;45226:13:0;;:18;45210:34;45206:47;;;45163:235::o;45206:47::-;45283:7;;;45265:15;:25;45325:13;;;45301:21;:37;-1:-1:-1;45351:11:0;;;;45373:17;45163:235::o;37855:708::-;38011:7;38006:28;;38020:14;:12;:14::i;:::-;-1:-1:-1;;;;;38051:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38075:22:0;;;;;;:11;:22;;;;;;;;38074:23;38051:46;38047:467;;;38114:48;38136:6;38144:9;38155:6;38114:21;:48::i;:::-;38047:467;;;-1:-1:-1;;;;;38185:19:0;;;;;;:11;:19;;;;;;;;38184:20;:46;;;;-1:-1:-1;;;;;;38208:22:0;;;;;;:11;:22;;;;;;;;38184:46;38180:334;;;38247:46;38267:6;38275:9;38286:6;38247:19;:46::i;38180:334::-;-1:-1:-1;;;;;38315:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38338:22:0;;;;;;:11;:22;;;;;;;;38315:45;38311:203;;;38377:48;38399:6;38407:9;38418:6;38377:21;:48::i;38311:203::-;38458:44;38476:6;38484:9;38495:6;38458:17;:44::i;:::-;38531:7;38526:29;;38540:15;45460;;45450:7;:25;45502:21;;45486:13;:37;45406:125;43428:605;43526:7;;43479;;;;18396:14;43479:7;43580:338;43604:9;:16;43600:20;;43580:338;;;43688:7;43664;:21;43672:9;43682:1;43672:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43672:12:0;43664:21;;;;;;;;;;;;;:31;;:83;;;43740:7;43716;:21;43724:9;43734:1;43724:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43724:12:0;43716:21;;;;;;;;;;;;;:31;43664:83;43642:146;;;-1:-1:-1;;43771:7:0;;;18396:14;;-1:-1:-1;43428:605:0;-1:-1:-1;;43428:605:0:o;43642:146::-;43813:34;43825:7;:21;43833:9;43843:1;43833:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43833:12:0;43825:21;;;;;;;;;;;;;43813:7;;:11;:34::i;:::-;43803:44;;43872:34;43884:7;:21;43892:9;43902:1;43892:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43892:12:0;43884:21;;;;;;;;;;;;;43872:7;;:11;:34::i;:::-;43862:44;-1:-1:-1;43622:3:0;;;;:::i;:::-;;;;43580:338;;;-1:-1:-1;43942:7:0;;:20;;18396:14;43942:11;:20::i;:::-;43932:7;:30;43928:61;;;-1:-1:-1;;43972:7:0;;;18396:14;;-1:-1:-1;43428:605:0;-1:-1:-1;43428:605:0:o;43928:61::-;44008:7;;44017;;-1:-1:-1;43428:605:0;-1:-1:-1;43428:605:0:o;3271:312::-;3391:7;3426:12;3419:5;3411:28;;;;-1:-1:-1;;;3411:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3450:9:0;3462:5;3466:1;3462;:5;:::i;42274:412::-;42375:7;42397;42419;42454:12;42469:24;42485:7;42469:15;:24::i;:::-;42454:39;;42504:18;42525:30;42547:7;42525:21;:30::i;:::-;42504:51;-1:-1:-1;42566:23:0;42592:33;42504:51;42592:17;:7;42604:4;42592:11;:17::i;:::-;:21;;:33::i;:::-;42566:59;42661:4;;-1:-1:-1;42667:10:0;;-1:-1:-1;42274:412:0;;-1:-1:-1;;;42274:412:0:o;42694:554::-;42893:7;;;;42990:24;:7;43002:11;42990;:24::i;:::-;42972:42;-1:-1:-1;43025:12:0;43040:21;:4;43049:11;43040:8;:21::i;:::-;43025:36;-1:-1:-1;43072:18:0;43093:27;:10;43108:11;43093:14;:27::i;:::-;43072:48;-1:-1:-1;43131:23:0;43157:33;43072:48;43157:17;:7;43169:4;43157:11;:17::i;:33::-;43209:7;;;;-1:-1:-1;43235:4:0;;-1:-1:-1;42694:554:0;;-1:-1:-1;;;;;;;42694:554:0:o;2495:136::-;2553:7;2580:43;2584:1;2587;2580:43;;;;;;;;;;;;;;;;;:3;:43::i;36913:499::-;37003:16;;;37017:1;37003:16;;;;;;;;36979:21;;37003:16;;;;;;;;;;-1:-1:-1;37003:16:0;36979:40;;37048:4;37030;37035:1;37030:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37030:23:0;;;:7;;;;;;;;;;:23;;;;37074:15;;:22;;;-1:-1:-1;;;37074:22:0;;;;:15;;;;;:20;;:22;;;;;37030:7;;37074:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37064:4;37069:1;37064:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37064:32:0;;;:7;;;;;;;;;:32;37139:15;;37107:62;;37124:4;;37139:15;37157:11;37107:8;:62::i;:::-;37180:15;;:224;;-1:-1:-1;;;37180:224:0;;-1:-1:-1;;;;;37180:15:0;;;;:66;;:224;;37261:11;;37180:15;;37331:4;;37358;;37378:15;;37180:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36968:444;36913:499;:::o;2873:250::-;2931:7;2955:6;2951:47;;-1:-1:-1;2985:1:0;2978:8;;2951:47;3010:9;3022:5;3026:1;3022;:5;:::i;:::-;3010:17;-1:-1:-1;3055:1:0;3046:5;3050:1;3010:17;3046:5;:::i;:::-;:10;3038:56;;;;-1:-1:-1;;;3038:56:0;;21504:2:1;3038:56:0;;;21486:21:1;21543:2;21523:18;;;21516:30;21582:34;21562:18;;;21555:62;-1:-1:-1;;;21633:18:1;;;21626:31;21674:19;;3038:56:0;21302:397:1;39910:686:0;40061:15;40091:23;40129:12;40156:23;40194:12;40221:18;40253:19;40264:7;40253:10;:19::i;:::-;-1:-1:-1;;;;;40301:15:0;;;;;;:7;:15;;;;;;40046:226;;-1:-1:-1;40046:226:0;;-1:-1:-1;40046:226:0;;-1:-1:-1;40046:226:0;-1:-1:-1;40046:226:0;-1:-1:-1;40046:226:0;-1:-1:-1;40301:28:0;;40321:7;40301:19;:28::i;:::-;-1:-1:-1;;;;;40283:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40358:7;:15;;;;:28;;40378:7;40358:19;:28::i;:::-;-1:-1:-1;;;;;40340:15:0;;;;;;;:7;:15;;;;;;:46;;;;40418:18;;;;;;;:39;;40441:15;40418:22;:39::i;:::-;-1:-1:-1;;;;;40397:18:0;;;;;;:7;:18;;;;;:60;40468:26;40483:10;40468:14;:26::i;:::-;40505:23;40517:4;40523;40505:11;:23::i;:::-;40561:9;-1:-1:-1;;;;;40544:44:0;40553:6;-1:-1:-1;;;;;40544:44:0;;40572:15;40544:44;;;;1847:25:1;;1835:2;1820:18;;1701:177;40544:44:0;;;;;;;;40035:561;;;;;;39910:686;;;:::o;39204:698::-;39353:15;39383:23;39421:12;39448:23;39486:12;39513:18;39545:19;39556:7;39545:10;:19::i;:::-;-1:-1:-1;;;;;39593:15:0;;;;;;:7;:15;;;;;;39338:226;;-1:-1:-1;39338:226:0;;-1:-1:-1;39338:226:0;;-1:-1:-1;39338:226:0;-1:-1:-1;39338:226:0;-1:-1:-1;39338:226:0;-1:-1:-1;39593:28:0;;39338:226;39593:19;:28::i;:::-;-1:-1:-1;;;;;39575:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39653:18;;;;;:7;:18;;;;;:39;;39676:15;39653:22;:39::i;:::-;-1:-1:-1;;;;;39632:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39724:7;:18;;;;:39;;39747:15;39724:22;:39::i;40604:757::-;40755:15;40785:23;40823:12;40850:23;40888:12;40915:18;40947:19;40958:7;40947:10;:19::i;:::-;-1:-1:-1;;;;;40995:15:0;;;;;;:7;:15;;;;;;40740:226;;-1:-1:-1;40740:226:0;;-1:-1:-1;40740:226:0;;-1:-1:-1;40740:226:0;-1:-1:-1;40740:226:0;-1:-1:-1;40740:226:0;-1:-1:-1;40995:28:0;;41015:7;40995:19;:28::i;:::-;-1:-1:-1;;;;;40977:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41052:7;:15;;;;:28;;41072:7;41052:19;:28::i;38571:625::-;38718:15;38748:23;38786:12;38813:23;38851:12;38878:18;38910:19;38921:7;38910:10;:19::i;:::-;-1:-1:-1;;;;;38958:15:0;;;;;;:7;:15;;;;;;38703:226;;-1:-1:-1;38703:226:0;;-1:-1:-1;38703:226:0;;-1:-1:-1;38703:226:0;-1:-1:-1;38703:226:0;-1:-1:-1;38703:226:0;-1:-1:-1;38958:28:0;;38703:226;38958:19;:28::i;44843:130::-;44907:7;44934:31;44959:5;44934:20;44946:7;;44934;:11;;:20;;;;:::i;44981:174::-;45078:7;45110:37;45141:5;45110:26;45122:13;;45110:7;:11;;:26;;;;:::i;44041:794::-;19065:1;44107:15;;:22;44104:429;;;44203:13;;44184:16;;44171:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44145:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;44289:13:0;;44270:16;;44257:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44231:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;44104:429:0;;-1:-1:-1;44104:429:0;;19105:1;44323:15;;:23;44320:213;;;44421:13;;44401:17;;44388:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44362:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44508:13:0;;44488:17;;44475:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44449:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44320:213:0;44543:19;44565:10;:8;:10::i;:::-;44543:32;-1:-1:-1;44586:18:0;44607:27;:10;44543:32;44607:14;:27::i;:::-;44686:4;44670:22;;;;:7;:22;;;;;;44586:48;;-1:-1:-1;44670:38:0;;44586:48;44670:26;:38::i;:::-;44661:4;44645:22;;;;:7;:22;;;;;;;;:63;;;;44723:11;:26;;;;;;44719:108;;;44805:4;44789:22;;;;:7;:22;;;;;;:38;;44816:10;44789:26;:38::i;:::-;44780:4;44764:22;;;;:7;:22;;;;;:63;44719:108;44093:742;;44041:794;:::o;41369:147::-;41447:7;;:17;;41459:4;41447:11;:17::i;:::-;41437:7;:27;41488:10;;:20;;41503:4;41488:14;:20::i;:::-;41475:10;:33;-1:-1:-1;;41369:147:0:o;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:180::-;867:6;920:2;908:9;899:7;895:23;891:32;888:52;;;936:1;933;926:12;888:52;-1:-1:-1;959:23:1;;808:180;-1:-1:-1;808:180:1:o;993:131::-;-1:-1:-1;;;;;1068:31:1;;1058:42;;1048:70;;1114:1;1111;1104:12;1048:70;993:131;:::o;1129:315::-;1197:6;1205;1258:2;1246:9;1237:7;1233:23;1229:32;1226:52;;;1274:1;1271;1264:12;1226:52;1313:9;1300:23;1332:31;1357:5;1332:31;:::i;:::-;1382:5;1434:2;1419:18;;;;1406:32;;-1:-1:-1;;;1129: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:241::-;4794:6;4847:2;4835:9;4826:7;4822:23;4818:32;4815:52;;;4863:1;4860;4853:12;4815:52;4902:9;4889:23;4921:28;4943:5;4921:28;:::i;4984:356::-;5186:2;5168:21;;;5205:18;;;5198:30;5264:34;5259:2;5244:18;;5237:62;5331:2;5316:18;;4984:356::o;5757:251::-;5827:6;5880:2;5868:9;5859:7;5855:23;5851:32;5848:52;;;5896:1;5893;5886:12;5848:52;5928:9;5922:16;5947:31;5972:5;5947:31;:::i;6726:127::-;6787:10;6782:3;6778:20;6775:1;6768:31;6818:4;6815:1;6808:15;6842:4;6839:1;6832:15;6858:168;6898:7;6964:1;6960;6956:6;6952:14;6949:1;6946:21;6941:1;6934:9;6927:17;6923:45;6920:71;;;6971:18;;:::i;:::-;-1:-1:-1;7011:9:1;;6858:168::o;8118:127::-;8179:10;8174:3;8170:20;8167:1;8160:31;8210:4;8207:1;8200:15;8234:4;8231:1;8224:15;8250:125;8290:4;8318:1;8315;8312:8;8309:34;;;8323:18;;:::i;:::-;-1:-1:-1;8360:9:1;;8250:125::o;8380:127::-;8441:10;8436:3;8432:20;8429:1;8422:31;8472:4;8469:1;8462:15;8496:4;8493:1;8486:15;8512:135;8551:3;-1:-1:-1;;8572:17:1;;8569:43;;;8592:18;;:::i;:::-;-1:-1:-1;8639:1:1;8628:13;;8512:135::o;9012:217::-;9052:1;9078;9068:132;;9122:10;9117:3;9113:20;9110:1;9103:31;9157:4;9154:1;9147:15;9185:4;9182:1;9175:15;9068:132;-1:-1:-1;9214:9:1;;9012:217::o;10021:128::-;10061:3;10092:1;10088:6;10085:1;10082:13;10079:39;;;10098:18;;:::i;:::-;-1:-1:-1;10134:9:1;;10021:128::o;11758:184::-;11828:6;11881:2;11869:9;11860:7;11856:23;11852:32;11849:52;;;11897:1;11894;11887:12;11849:52;-1:-1:-1;11920:16:1;;11758:184;-1:-1:-1;11758:184:1:o;12226:245::-;12293:6;12346:2;12334:9;12325:7;12321:23;12317:32;12314:52;;;12362:1;12359;12352:12;12314:52;12394:9;12388:16;12413:28;12435:5;12413:28;:::i;15765:306::-;15853:6;15861;15869;15922:2;15910:9;15901:7;15897:23;15893:32;15890:52;;;15938:1;15935;15928:12;15890:52;15967:9;15961:16;15951:26;;16017:2;16006:9;16002:18;15996:25;15986:35;;16061:2;16050:9;16046:18;16040:25;16030:35;;15765:306;;;;;:::o;20317:980::-;20579:4;20627:3;20616:9;20612:19;20658:6;20647:9;20640:25;20684:2;20722:6;20717:2;20706:9;20702:18;20695:34;20765:3;20760:2;20749:9;20745:18;20738:31;20789:6;20824;20818:13;20855:6;20847;20840:22;20893:3;20882:9;20878:19;20871:26;;20932:2;20924:6;20920:15;20906:29;;20953:1;20963:195;20977:6;20974:1;20971:13;20963:195;;;21042:13;;-1:-1:-1;;;;;21038:39:1;21026:52;;21133:15;;;;21098:12;;;;21074:1;20992:9;20963:195;;;-1:-1:-1;;;;;;;21214:32:1;;;;21209:2;21194:18;;21187:60;-1:-1:-1;;;21278:3:1;21263:19;21256:35;21175:3;20317:980;-1:-1:-1;;;20317:980:1:o

Swarm Source

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