Token Florida Man

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000,000,000 FMAN

Holders:
162 addresses
Contract:
0x2a9bb41855ac4c7c3ecf0d4a756034d01d55b6250x2A9bB41855AC4c7c3ECF0D4a756034d01d55b625

Decimals:
18

Social Profiles:
Not Available, Update ?

Filtered by Token Holder (Crypto.com: CDC Withdrawal)

Balance
54,101,250,000 FMAN

Value
$0.00
0xc9219731adfa70645be14cd5d30507266f2092c5
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Florida_Man

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 cronoscan.com on 2022-03-15
*/

/**
 *Submitted for verification at BscScan.com on 2021-11-24
*/

// SPDX-License-Identifier: UNLICENSED

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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) external 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 Florida_Man is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress =
        payable(0xD9B3A1f9464E4cF66d27959F5052B8Aa29cAa809); // Marketing Address
        
    address payable public NFTFarmAddress =
        payable(0x000000000000000000000000000000000000dEaD); // NFTFarm Address
        
    address payable public liquidityAddress =
        payable(0x000000000000000000000000000000000000dEaD); // Liquidity Address
        
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD; // dead address
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;

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

    bool public limitsInEffect = true;
    
    string private constant _name = "Florida Man";
    string private constant _symbol = "FMAN";
    
    uint8 private constant _decimals = 18;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    // 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 _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 3;
    uint256 public _buyMarketingFee = 12;
    uint256 public _buyNFTFarmFee = 0;

    uint256 public _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 3;
    uint256 public _sellMarketingFee = 12;
    uint256 public _sellNFTFarmFee = 0;
    
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty
    
    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingTokensToSwap;
    uint256 private _NFTFarmTokensToSwap;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 100 * 1 gwei; 
    uint256 private gasMaxLimit =  50000000; // gasLeft limit
    
    uint256 public maxWallet;
    uint256 public maxBuyTransactionAmount;
    uint256 public maxSellTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // 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 = _tTotal * 5 / 10000; // 0.05%

    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, uint256 buybackFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee, uint256 buybackFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);
    
    event UpdatedLiquidityAddress(address liquidity);
    
    event UpdatedNFTFarmAddress(address buyback);
    
    event OwnerForcedSwapBack(uint256 timestamp);
    
    event BoughtEarly(address indexed sniper);
    
    event RemovedSniper(address indexed notsnipersupposedly);

    event UpdatedRouter(address indexed newrouter);
    
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;
        
        maxBuyTransactionAmount = _tTotal * 5 / 1000; // 0.5% maxBuyTransactionAmountTxn
        maxSellTransactionAmount = _tTotal * 5 / 1000; // 0.5% maxSellTransactionAmountTxn
        maxWallet = _tTotal * 1 / 100;  // 1% Max wallet
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xd30d3aC04E2325E19A2227cfE6Bc860376Ba20b1);   // crowfi uniswapV2Router address

        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        _isExcludedFromFee[NFTFarmAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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)
        external
        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;
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum > (_tTotal * 1 / 100)/1e18, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * (10**18);
    }

    /*
    Solidity can not process decimals, so to increase flexibility, we multiple everything by 100.
    When entering the percent, you need to shift your decimal two steps to the right.
    eg: For 4% enter 400, for 1% enter 100, for 0.25% enter 25, for 0.2% enter 20 etc!
    */

    function updateMaxBuyTransactionPercent(uint256 maxTxPercent_x100) external onlyOwner {
        require(maxTxPercent_x100 > 20, "Cannot set the maxTransactionPercent lower than 0.2%");
        maxBuyTransactionAmount = _tTotal*maxTxPercent_x100/10000;
    }
    
    function updateMaxSellTransactionPercent(uint256 maxTxPercent_x100) external onlyOwner {
        require(maxTxPercent_x100 > 20, "Cannot set the maxTransactionPercent lower than 0.2%");
        maxSellTransactionAmount = _tTotal*maxTxPercent_x100/10000;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp + 72 hours;
    }
    
     // only use if conducting a presale (more specifically on DxSale where there is both an address and a router)
    function addPresaleAddressForExclusions(address _presaleAddress, address _presaleRouterAddress) external onlyOwner {
        _isExcludedFromFee[_presaleAddress] = true;
        _isExcludedFromFee[_presaleRouterAddress] = true;
        _isExcludedMaxTransactionAmount[_presaleAddress] = true;
        _isExcludedMaxTransactionAmount[_presaleRouterAddress] = true;
    }
    
    
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }
    
    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }
    
    function setGasMaxLimit(uint256 gas) external onlyOwner {
        require(gas >= 750000);
        gasMaxLimit = gas * gasPriceLimit;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        return true;
    }

    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 excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    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);
            }
            
            if (gasLimitActive && automatedMarketMakerPairs[from]) {
                require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
            }

            //only on buys
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyTransactionAmount, "Buy transfer amount exceeds the maxBuyTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
            //only on sells
            if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
            //normal transfer
            else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Can't exceed maxWallet");
            }
        }
    }
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap + _NFTFarmTokensToSwap;
        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;
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee + _buyNFTFarmFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee + _sellNFTFarmFee;
                buyOrSellSwitch = SELL;
                // triple tax if bought in the same block as trading active for 72 hours
                if(boughtEarly[from]  && earlyBuyPenaltyEnd <= block.number){
                    _taxFee = _taxFee * 3;
                    _liquidityFee = _liquidityFee * 3;
                }
            // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        
    }

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

        swapTokensForBNB(amountToSwapForBNB); 
        
        uint256 bnbBalance = address(this).balance.sub(initialBNBBalance);
        
        uint256 bnbForMarketing = bnbBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);
        uint256 bnbForNFTFarm = bnbBalance.mul(_NFTFarmTokensToSwap).div(totalTokensToSwap);
        
        uint256 bnbForLiquidity = bnbBalance.sub(bnbForMarketing).sub(bnbForNFTFarm);

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        _NFTFarmTokensToSwap = 0;
        
        (bool success,) = address(NFTFarmAddress).call{value: bnbForNFTFarm}("");
        (success,) = address(marketingAddress).call{value: bnbForMarketing}("");
        
        addLiquidity(tokensForLiquidity, bnbForLiquidity);
        emit SwapAndLiquify(amountToSwapForBNB, bnbForLiquidity, tokensForLiquidity);
        
        // send leftover BNB 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}("");
        }
    }
    
    function swapTokensForBNB(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);
        }

        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;
            _NFTFarmTokensToSwap += tLiquidity * _buyNFTFarmFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _NFTFarmTokensToSwap += tLiquidity * _sellNFTFarmFee / _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 excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

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

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

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


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setNFTFarmAddress(address _NFTFarmAddress) external onlyOwner {
        require(_NFTFarmAddress != address(0), "_NFTFarmAddress address cannot be 0");
        NFTFarmAddress = payable(_NFTFarmAddress);
        _isExcludedFromFee[NFTFarmAddress] = true;
        emit UpdatedNFTFarmAddress(NFTFarmAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) external 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);
    }

    function getPairAddress() external view onlyOwner returns (address) {
        return uniswapV2Pair;
    }

    function changeRouterVersion(address _router)
        external
        onlyOwner
        returns (address _pair)
    {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"indexed":false,"internalType":"uint256","name":"buybackFee","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"},{"indexed":false,"internalType":"uint256","name":"buybackFee","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buyback","type":"address"}],"name":"UpdatedNFTFarmAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"NFTFarmAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"_buyNFTFarmFee","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":"_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":"_sellNFTFarmFee","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":"_presaleAddress","type":"address"},{"internalType":"address","name":"_presaleRouterAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"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":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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"},{"internalType":"uint256","name":"buyNFTFarmFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","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":"address","name":"_NFTFarmAddress","type":"address"}],"name":"setNFTFarmAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellNFTFarmFee","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":[{"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":[{"internalType":"uint256","name":"maxTxPercent_x100","type":"uint256"}],"name":"updateMaxBuyTransactionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent_x100","type":"uint256"}],"name":"updateMaxSellTransactionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b031990811673d9b3a1f9464e4cf66d27959f5052b8aa29caa8091790915560048054821661dead908117909155600580549092168117909155608052620000676d04ee2d6d415b85acef810000000060001962000deb565b620000759060001962000e18565b600c908155600e8054600160ff1991821681179092556010546011556012546013556000601481905560036015819055601685905560178290556018829055601955601a93909355601b839055601c929092556022805490921617905564174876e8006023556302faf080602455612710620001016d04ee2d6d415b85acef8100000000600562000e32565b6200010d919062000e54565b602a55602c805461ffff60a81b191690553480156200012b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c54336000908152600660205260409020556103e86200019e6d04ee2d6d415b85acef8100000000600562000e32565b620001aa919062000e54565b6026556103e8620001cb6d04ee2d6d415b85acef8100000000600562000e32565b620001d7919062000e54565b6027556064620001f76d04ee2d6d415b85acef8100000000600162000e32565b62000203919062000e54565b602581905550600073d30d3ac04e2325e19a2227cfe6bc860376ba20b190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025e57600080fd5b505afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000299919062000e6b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e257600080fd5b505afa158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000e6b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200036657600080fd5b505af11580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062000e6b565b602b80546001600160a01b038086166001600160a01b031992831617909255602c8054928416929091169190911790559050620003e0816001620004fd565b600160096000620003f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526009909352818320805485166001908117909155600354821684528284208054861682179055600554821684528284208054861682179055600454909116835291208054909216179055620004936200048b6000546001600160a01b031690565b600162000597565b620004a030600162000597565b620004af61dead600162000597565b6040516d04ee2d6d415b85acef8100000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000f53565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200052d828262000597565b80156200053f576200053f8262000611565b806200055057620005508262000829565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b6000546001600160a01b03163314620005e65760405162461bcd60e51b81526020600482018190526024820152600080516020620053be83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146200065c5760405162461bcd60e51b81526020600482018190526024820152600080516020620053be8339815191526044820152606401620005dd565b6001600160a01b0381166000908152600a602052604090205460ff1615620006c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005dd565b600b54603290620006da90600162000e96565b1115620007665760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401620005dd565b6001600160a01b03811660009081526006602052604090205415620007c3576001600160a01b038116600090815260066020526040902054620007a99062000a16565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b03163314620008745760405162461bcd60e51b81526020600482018190526024820152600080516020620053be8339815191526044820152606401620005dd565b6001600160a01b0381166000908152600a602052604090205460ff16620008de5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401620005dd565b60005b600b5481101562000a1257816001600160a01b0316600b82815481106200090c576200090c62000eb1565b6000918252602090912001546001600160a01b03161415620009fd57600b80546200093a9060019062000e18565b815481106200094d576200094d62000eb1565b600091825260209091200154600b80546001600160a01b0390921691839081106200097c576200097c62000eb1565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b805480620009d757620009d762000ec7565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8062000a098162000edd565b915050620008e1565b5050565b6000600c5482111562000a7f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005dd565b600062000a8b62000aae565b905062000aa7818462000ae160201b620026921790919060201c565b9392505050565b6000808062000abc62000b2b565b9150915062000ada818362000ae160201b620026921790919060201c565b9250505090565b600062000aa783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000d1960201b60201c565b600c5460009081906d04ee2d6d415b85acef8100000000825b600b5481101562000cc2578260066000600b848154811062000b6a5762000b6a62000eb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000bd957508160076000600b848154811062000bb25762000bb262000eb1565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000bfb575050600c54936d04ee2d6d415b85acef81000000009350915050565b62000c5260066000600b848154811062000c195762000c1962000eb1565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620026d462000d55821b17901c565b925062000cab60076000600b848154811062000c725762000c7262000eb1565b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620026d462000d55821b17901c565b91508062000cb98162000edd565b91505062000b44565b5062000ced6d04ee2d6d415b85acef8100000000600c5462000ae160201b620026921790919060201c565b82101562000d10575050600c54926d04ee2d6d415b85acef810000000092509050565b90939092509050565b6000818362000d3d5760405162461bcd60e51b8152600401620005dd919062000efb565b50600062000d4c848662000e54565b95945050505050565b600062000aa783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000d9f60201b60201c565b6000818484111562000dc65760405162461bcd60e51b8152600401620005dd919062000efb565b50600062000d4c848662000e18565b634e487b7160e01b600052601260045260246000fd5b60008262000dfd5762000dfd62000dd5565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000e2d5762000e2d62000e02565b500390565b600081600019048311821515161562000e4f5762000e4f62000e02565b500290565b60008262000e665762000e6662000dd5565b500490565b60006020828403121562000e7e57600080fd5b81516001600160a01b038116811462000aa757600080fd5b6000821982111562000eac5762000eac62000e02565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000ef45762000ef462000e02565b5060010190565b600060208083528351808285015260005b8181101562000f2a5785810183015185820160400152820162000f0c565b8181111562000f3d576000604083870101525b50601f01601f1916929092016040019392505050565b60805161444f62000f6f6000396000610614015261444f6000f3fe60806040526004361061041f5760003560e01c8063715018a61161021e578063a5ece94111610123578063d00dc589116100ab578063ea2f0b371161007a578063ea2f0b3714610cc6578063ee40166e14610ce6578063efcc52de14610cfc578063f2fde38b14610d12578063f8b45b0514610d3257600080fd5b8063d00dc58914610c2a578063dc44b6a014610c4a578063dd62ed3e14610c60578063e653da0814610ca657600080fd5b8063bbc0c742116100f2578063bbc0c74214610b9d578063c18bc19514610bbe578063c49b9a8014610bde578063c5d2418914610bfe578063c860795214610c1457600080fd5b8063a5ece94114610b0d578063a9059cbb14610b2d578063b1a8361014610b4d578063b62496f514610b6d57600080fd5b80638c5a133d116101a657806395d89b411161017557806395d89b4114610a6b5780639a7a23d614610a98578063a0263c8914610ab8578063a073d37f14610ad8578063a457c2d714610aed57600080fd5b80638c5a133d146109f85780638d5f81e214610a185780638da5cb5b14610a2d578063906e9dd014610a4b57600080fd5b80638366e79a116101ed5780638366e79a1461094457806385ecfd281461096457806388790a681461099457806388f82020146109aa5780638a8c523c146109e357600080fd5b8063715018a6146108e4578063751039fc146108f95780637571336a1461090e57806377fd00031461092e57600080fd5b806338acb20e1161032457806352390c02116102ac5780635881f3ef1161027b5780635881f3ef146108595780635aa821a9146108795780635bb988c91461088f578063602bc62b146108af57806370a08231146108c457600080fd5b806352390c02146107cd578063525fa81f146107ed5780635342acb41461080d578063557ed1ba1461084657600080fd5b80634549b039116102f35780634549b0391461073257806349bd5a5e146107525780634a62bb65146107725780634a74bb021461078c5780634b228c52146107ad57600080fd5b806338acb20e146106b257806339509351146106d25780634093746c146106f2578063437823ec1461071257600080fd5b80631fc851bd116103a757806327c8f8351161037657806327c8f835146106025780632d83811914610636578063313ce567146106565780633221c93f146106725780633685d4191461069257600080fd5b80631fc851bd146105a0578063200a692d146105b65780632142daff146105cc57806323b872dd146105e257600080fd5b8063095ea7b3116103ee578063095ea7b3146104d357806310d5de531461050357806313114a9d146105335780631694505e1461054857806318160ddd1461058057600080fd5b806302259e9e1461042b57806306fdde03146104545780630923160214610491578063092b2e4e146104b357600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160275481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152600b81526a233637b934b2309026b0b760a91b60208201525b60405161044b9190613f5b565b34801561049d57600080fd5b506104b16104ac366004613fb0565b610d48565b005b3480156104bf57600080fd5b506104b16104ce366004613fb0565b610d9d565b3480156104df57600080fd5b506104f36104ee366004613fe1565b610e11565b604051901515815260200161044b565b34801561050f57600080fd5b506104f361051e36600461400d565b60286020526000908152604090205460ff1681565b34801561053f57600080fd5b50600d54610441565b34801561055457600080fd5b50602b54610568906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b34801561058c57600080fd5b506904ee2d6d415b85acef8160201b610441565b3480156105ac57600080fd5b50610441601e5481565b3480156105c257600080fd5b5061044160185481565b3480156105d857600080fd5b5061044160175481565b3480156105ee57600080fd5b506104f36105fd36600461402a565b610e28565b34801561060e57600080fd5b506105687f000000000000000000000000000000000000000000000000000000000000000081565b34801561064257600080fd5b50610441610651366004613fb0565b610e91565b34801561066257600080fd5b506040516012815260200161044b565b34801561067e57600080fd5b50600554610568906001600160a01b031681565b34801561069e57600080fd5b506104b16106ad36600461400d565b610f15565b3480156106be57600080fd5b506104b16106cd36600461400d565b6110cc565b3480156106de57600080fd5b506104f36106ed366004613fe1565b6111ca565b3480156106fe57600080fd5b50600454610568906001600160a01b031681565b34801561071e57600080fd5b506104b161072d36600461400d565b611200565b34801561073e57600080fd5b5061044161074d366004614079565b61127e565b34801561075e57600080fd5b50602c54610568906001600160a01b031681565b34801561077e57600080fd5b50600e546104f39060ff1681565b34801561079857600080fd5b50602c546104f390600160a81b900460ff1681565b3480156107b957600080fd5b506104b16107c8366004613fb0565b611316565b3480156107d957600080fd5b506104b16107e836600461400d565b61138a565b3480156107f957600080fd5b506104b161080836600461400d565b611578565b34801561081957600080fd5b506104f361082836600461400d565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085257600080fd5b5042610441565b34801561086557600080fd5b5061056861087436600461400d565b61166e565b34801561088557600080fd5b5061044160265481565b34801561089b57600080fd5b506104b16108aa36600461400d565b611a48565b3480156108bb57600080fd5b50600254610441565b3480156108d057600080fd5b506104416108df36600461400d565b611abb565b3480156108f057600080fd5b506104b1611b1a565b34801561090557600080fd5b506104f3611b8e565b34801561091a57600080fd5b506104b16109293660046140a9565b611bd5565b34801561093a57600080fd5b50610441601b5481565b34801561095057600080fd5b506104f361095f3660046140d7565b611c2a565b34801561097057600080fd5b506104f361097f36600461400d565b601d6020526000908152604090205460ff1681565b3480156109a057600080fd5b5061044160195481565b3480156109b657600080fd5b506104f36109c536600461400d565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109ef57600080fd5b506104b1611e50565b348015610a0457600080fd5b506104b1610a13366004614105565b611ea5565b348015610a2457600080fd5b50610568611f9c565b348015610a3957600080fd5b506000546001600160a01b0316610568565b348015610a5757600080fd5b506104b1610a6636600461400d565b611fd7565b348015610a7757600080fd5b506040805180820190915260048152632326a0a760e11b6020820152610484565b348015610aa457600080fd5b506104b1610ab33660046140a9565b6120cd565b348015610ac457600080fd5b506104b1610ad3366004614137565b612185565b348015610ae457600080fd5b50602a54610441565b348015610af957600080fd5b506104f3610b08366004613fe1565b6121c2565b348015610b1957600080fd5b50600354610568906001600160a01b031681565b348015610b3957600080fd5b506104f3610b48366004613fe1565b612211565b348015610b5957600080fd5b506104b1610b683660046140d7565b61221e565b348015610b7957600080fd5b506104f3610b8836600461400d565b60296020526000908152604090205460ff1681565b348015610ba957600080fd5b50602c546104f390600160b01b900460ff1681565b348015610bca57600080fd5b506104b1610bd9366004613fb0565b6122a8565b348015610bea57600080fd5b506104b1610bf9366004614137565b61237a565b348015610c0a57600080fd5b5061044160165481565b348015610c2057600080fd5b50610441601a5481565b348015610c3657600080fd5b506104b1610c45366004613fb0565b6123f1565b348015610c5657600080fd5b5061044160155481565b348015610c6c57600080fd5b50610441610c7b3660046140d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610cb257600080fd5b506104b1610cc1366004614105565b61243e565b348015610cd257600080fd5b506104b1610ce136600461400d565b61252d565b348015610cf257600080fd5b50610441601c5481565b348015610d0857600080fd5b5061044160145481565b348015610d1e57600080fd5b506104b1610d2d36600461400d565b6125a8565b348015610d3e57600080fd5b5061044160255481565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b8152600401610d7290614154565b60405180910390fd5b604b811015610d8957600080fd5b610d9781633b9aca0061419f565b60235550565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610d7290614154565b60148111610de75760405162461bcd60e51b8152600401610d72906141be565b612710610e01826904ee2d6d415b85acef8160201b61419f565b610e0b9190614212565b60265550565b6000610e1e338484612716565b5060015b92915050565b6000610e3584848461283a565b610e878433610e82856040518060600160405280602881526020016143cd602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190613046565b612716565b5060019392505050565b6000600c54821115610ef85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d72565b6000610f02613080565b9050610f0e8382612692565b9392505050565b6000546001600160a01b03163314610f3f5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff16610fa75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d72565b60005b600b548110156110c857816001600160a01b0316600b8281548110610fd157610fd1614234565b6000918252602090912001546001600160a01b031614156110b657600b8054610ffc9060019061424a565b8154811061100c5761100c614234565b600091825260209091200154600b80546001600160a01b03909216918390811061103857611038614234565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061109057611090614261565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c081614277565b915050610faa565b5050565b6000546001600160a01b031633146110f65760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602360248201527f5f4e46544661726d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610d72565b600480546001600160a01b0319166001600160a01b038381169182178355600091825260096020908152604092839020805460ff1916600117905592549151911681527f0c9d4410b0c18b908731a2214ad5d5344fa43a8ca734c3fd0ab11a9c8695c33c91015b60405180910390a150565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e1e918590610e8290866130a3565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016111bf565b60006904ee2d6d415b85acef8160201b8311156112dd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d72565b816112fc5760006112ed84613102565b50939550610e22945050505050565b600061130784613102565b50929550610e22945050505050565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610d7290614154565b601481116113605760405162461bcd60e51b8152600401610d72906141be565b61271061137a826904ee2d6d415b85acef8160201b61419f565b6113849190614212565b60275550565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff161561141d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d72565b600b5460329061142e906001614292565b11156114b85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d72565b6001600160a01b03811660009081526006602052604090205415611512576001600160a01b0381166000908152600660205260409020546114f890610e91565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115a25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016111bf565b600080546001600160a01b031633146116995760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610d72565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176591906142aa565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906142aa565b91506001600160a01b0382166119e757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906142aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561192c57600080fd5b505afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196491906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906142aa565b91505b602c80546001600160a01b038085166001600160a01b031992831617909255602b80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b03163314611a725760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff1615611af857506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610e2290610e91565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610d7290614154565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d7290614154565b50600e805460ff19908116909155602280549091169055600190565b6000546001600160a01b03163314611bff5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c555760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038316611cab5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d72565b6001600160a01b038316301415611d045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d72565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611d4657600080fd5b505afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7e91906142c7565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906142e0565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610d7290614154565b602c805461ffff60a81b191661010160a81b17905543601c55611ea0426203f480614292565b601e55565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610d7290614154565b60148481556015849055601683905560178290558183611eef8688614292565b611ef99190614292565b611f039190614292565b1115611f4d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610d7290614154565b50602c546001600160a01b031690565b6000546001600160a01b031633146120015760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166120655760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016111bf565b6000546001600160a01b031633146120f75760405162461bcd60e51b8152600401610d7290614154565b602c546001600160a01b038381169116141561217b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d72565b6110c88282613151565b6000546001600160a01b031633146121af5760405162461bcd60e51b8152600401610d7290614154565b6022805460ff1916911515919091179055565b6000610e1e3384610e82856040518060600160405280602581526020016143f5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190613046565b6000610e1e33848461283a565b6000546001600160a01b031633146122485760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0391821660008181526009602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352602890915280822080548516861790559181522080549091169091179055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610d7290614154565b670de0b6b3a764000060646122f56904ee2d6d415b85acef8160201b600161419f565b6122ff9190614212565b6123099190614212565b81116123625760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610d72565b61237481670de0b6b3a764000061419f565b60255550565b6000546001600160a01b031633146123a45760405162461bcd60e51b8152600401610d7290614154565b602c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111bf90831515815260200190565b6000546001600160a01b0316331461241b5760405162461bcd60e51b8152600401610d7290614154565b620b71b081101561242b57600080fd5b602354612438908261419f565b60245550565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610d7290614154565b60188490556019839055601a829055601b8190556014818361248a8688614292565b6124949190614292565b61249e9190614292565b11156124e85760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611f8e565b6000546001600160a01b031633146125575760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016111bf565b6000546001600160a01b031633146125d25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166126375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d72565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e3565b6000610f0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613046565b6001600160a01b0383166127785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d72565b6001600160a01b0382166127d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d72565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661289e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d72565b6001600160a01b0382166129005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d72565b600081116129625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d72565b602c54600160b01b900460ff166129fe576001600160a01b03831660009081526009602052604090205460ff16806129b257506001600160a01b03821660009081526009602052604090205460ff165b6129fe5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d72565b600e5460ff1615612dc1576000546001600160a01b03848116911614801590612a3557506000546001600160a01b03838116911614155b8015612a4957506001600160a01b03821615155b8015612a6057506001600160a01b03821661dead14155b8015612a765750602c54600160a01b900460ff16155b15612dc1576000546001600160a01b03848116911614801590612aa75750602c546001600160a01b03838116911614155b8015612ab45750601c5443145b15612b03576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60225460ff168015612b2d57506001600160a01b03831660009081526029602052604090205460ff165b15612b84576023543a1115612b845760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d72565b6001600160a01b03831660009081526029602052604090205460ff168015612bc557506001600160a01b03821660009081526028602052604090205460ff16155b15612c7657602654811115612c425760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e00000000000000006064820152608401610d72565b602554612c4e83611abb565b612c589083614292565b1115612c765760405162461bcd60e51b8152600401610d72906142fd565b6001600160a01b03821660009081526029602052604090205460ff168015612cb757506001600160a01b03831660009081526028602052604090205460ff16155b15612d6d57602754811115612d345760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610d72565b602554612d4083611abb565b612d4a9083614292565b1115612d685760405162461bcd60e51b8152600401610d72906142fd565b612dc1565b6001600160a01b03821660009081526028602052604090205460ff16612dc157602554612d9983611abb565b612da39083614292565b1115612dc15760405162461bcd60e51b8152600401610d72906142fd565b6000602154602054601f54612dd69190614292565b612de09190614292565b90506000612ded30611abb565b602a54602c5491925082101590600160a01b900460ff16158015612e1a5750602c54600160a81b900460ff165b8015612e3b5750602c54600090612e39906001600160a01b0316611abb565b115b8015612e475750600083115b8015612e6c57506001600160a01b03851660009081526009602052604090205460ff16155b8015612e9157506001600160a01b03861660009081526009602052604090205460ff16155b8015612eb557506001600160a01b03851660009081526029602052604090205460ff165b8015612ebe5750805b15612ecb57612ecb613211565b6001600160a01b03861660009081526009602052604090205460019060ff1680612f0d57506001600160a01b03861660009081526009602052604090205460ff165b15612f1f57506003600f556000613031565b6001600160a01b03871660009081526029602052604090205460ff1615612f7857612f4861347c565b601454601055601754601654601554612f619190614292565b612f6b9190614292565b6012556001600f55613031565b6001600160a01b03861660009081526029602052604090205460ff161561302357612fa161347c565b601854601055601b54601a54601954612fba9190614292565b612fc49190614292565b6012556002600f556001600160a01b0387166000908152601d602052604090205460ff168015612ff6575043601e5411155b1561301e5760105461300990600361419f565b60105560125461301a90600361419f565b6012555b613031565b61302b61347c565b6003600f555b61303d878787846134aa565b50505050505050565b6000818484111561306a5760405162461bcd60e51b8152600401610d729190613f5b565b506000613077848661424a565b95945050505050565b600080600061308d6135d0565b909250905061309c8282612692565b9250505090565b6000806130b08385614292565b905083811015610f0e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d72565b60008060008060008060008060006131198a61377c565b92509250925060008060006131378d8686613132613080565b6137b8565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561317f8282611bd5565b801561318e5761318e8261138a565b8061319c5761319c82610f15565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b600081836132045760405162461bcd60e51b8152600401610d729190613f5b565b5060006130778486614212565b602c805460ff60a01b1916600160a01b179055600061322f30611abb565b90506000613256602054613250602154601f546130a390919063ffffffff16565b906130a3565b905060006132706002601f5461269290919063ffffffff16565b9050600061327e84836126d4565b90504761328a82613808565b600061329647836126d4565b905060006132b9866132b36020548561397190919063ffffffff16565b90612692565b905060006132d6876132b36021548661397190919063ffffffff16565b905060006132ee826132e886866126d4565b906126d4565b6000601f8190556020819055602181905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613350576040519150601f19603f3d011682016040523d82523d6000602084013e613355565b606091505b50506003546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146133a5576040519150601f19603f3d011682016040523d82523d6000602084013e6133aa565b606091505b5050809150506133ba88836139f0565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613463576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613458576040519150601f19603f3d011682016040523d82523d6000602084013e61345d565b606091505b50909150505b5050602c805460ff60a01b191690555050505050505050565b60105415801561348c5750601254155b1561349357565b601080546011556012805460135560009182905555565b806134b7576134b761347c565b6001600160a01b0384166000908152600a602052604090205460ff1680156134f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561350d57613508848484613ab3565b6135b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561354e57506001600160a01b0383166000908152600a602052604090205460ff165b1561355e57613508848484613bd9565b6001600160a01b0384166000908152600a602052604090205460ff16801561359e57506001600160a01b0383166000908152600a602052604090205460ff165b156135ae57613508848484613c82565b6135b9848484613cf5565b6135ca601154601055601354601255565b50505050565b600c5460009081906904ee2d6d415b85acef8160201b825b600b54811015613737578260066000600b848154811061360a5761360a614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061367557508160076000600b848154811061364e5761364e614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613695575050600c54936904ee2d6d415b85acef8160201b9350915050565b6136db60066000600b84815481106136af576136af614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d4565b925061372360076000600b84815481106136f7576136f7614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d4565b91508061372f81614277565b9150506135e8565b50600c54613752906904ee2d6d415b85acef8160201b612692565b821015613773575050600c54926904ee2d6d415b85acef8160201b92509050565b90939092509050565b60008060008061378b85613d39565b9050600061379886613d55565b905060006137aa826132e889866126d4565b979296509094509092505050565b60008080806137c78886613971565b905060006137d58887613971565b905060006137e38888613971565b905060006137f5826132e886866126d4565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061383d5761383d614234565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389157600080fd5b505afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906142aa565b816001815181106138dc576138dc614234565b6001600160a01b039283166020918202929092010152602b546139029130911684612716565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061393b90859060009086903090429060040161432d565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b60008261398057506000610e22565b600061398c838561419f565b9050826139998583614212565b14610f0e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d72565b602b54613a089030906001600160a01b031684612716565b602b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aac919061439e565b5050505050565b600080600080600080613ac587613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613af790886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613b2690876126d4565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054613b5590866130a3565b6001600160a01b038916600090815260066020526040902055613b7781613d71565b613b818483613f37565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc691815260200190565b60405180910390a3505050505050505050565b600080600080600080613beb87613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613c1d90876126d4565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613c5390846130a3565b6001600160a01b038916600090815260076020908152604080832093909355600690522054613b5590866130a3565b600080600080600080613c9487613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613cc690886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613c1d90876126d4565b600080600080600080613d0787613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613b2690876126d4565b6000610e2260646132b36010548561397190919063ffffffff16565b6000610e2260646132b36012548561397190919063ffffffff16565b6001600f541415613e1257601254601554613d8c908361419f565b613d969190614212565b601f6000828254613da79190614292565b9091555050601254601754613dbc908361419f565b613dc69190614212565b60216000828254613dd79190614292565b9091555050601254601654613dec908361419f565b613df69190614212565b60206000828254613e079190614292565b90915550613eae9050565b6002600f541415613eae57601254601954613e2d908361419f565b613e379190614212565b601f6000828254613e489190614292565b9091555050601254601b54613e5d908361419f565b613e679190614212565b60216000828254613e789190614292565b9091555050601254601a54613e8d908361419f565b613e979190614212565b60206000828254613ea89190614292565b90915550505b6000613eb8613080565b90506000613ec68383613971565b30600090815260066020526040902054909150613ee390826130a3565b30600090815260066020908152604080832093909355600a9052205460ff1615613f325730600090815260076020526040902054613f2190846130a3565b306000908152600760205260409020555b505050565b600c54613f4490836126d4565b600c55600d54613f5490826130a3565b600d555050565b600060208083528351808285015260005b81811015613f8857858101830151858201604001528201613f6c565b81811115613f9a576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613fc257600080fd5b5035919050565b6001600160a01b0381168114613fde57600080fd5b50565b60008060408385031215613ff457600080fd5b8235613fff81613fc9565b946020939093013593505050565b60006020828403121561401f57600080fd5b8135610f0e81613fc9565b60008060006060848603121561403f57600080fd5b833561404a81613fc9565b9250602084013561405a81613fc9565b929592945050506040919091013590565b8015158114613fde57600080fd5b6000806040838503121561408c57600080fd5b82359150602083013561409e8161406b565b809150509250929050565b600080604083850312156140bc57600080fd5b82356140c781613fc9565b9150602083013561409e8161406b565b600080604083850312156140ea57600080fd5b82356140f581613fc9565b9150602083013561409e81613fc9565b6000806000806080858703121561411b57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561414957600080fd5b8135610f0e8161406b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141b9576141b9614189565b500290565b60208082526034908201527f43616e6e6f742073657420746865206d61785472616e73616374696f6e50657260408201527363656e74206c6f776572207468616e20302e322560601b606082015260800190565b60008261422f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561425c5761425c614189565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561428b5761428b614189565b5060010190565b600082198211156142a5576142a5614189565b500190565b6000602082840312156142bc57600080fd5b8151610f0e81613fc9565b6000602082840312156142d957600080fd5b5051919050565b6000602082840312156142f257600080fd5b8151610f0e8161406b565b60208082526016908201527510d85b89dd08195e18d95959081b585e15d85b1b195d60521b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437d5784516001600160a01b031683529383019391830191600101614358565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3d9379c7f39ff0e2dbdbdc28796fd7e818cba901befffde50d2e21960f6326964736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063715018a61161021e578063a5ece94111610123578063d00dc589116100ab578063ea2f0b371161007a578063ea2f0b3714610cc6578063ee40166e14610ce6578063efcc52de14610cfc578063f2fde38b14610d12578063f8b45b0514610d3257600080fd5b8063d00dc58914610c2a578063dc44b6a014610c4a578063dd62ed3e14610c60578063e653da0814610ca657600080fd5b8063bbc0c742116100f2578063bbc0c74214610b9d578063c18bc19514610bbe578063c49b9a8014610bde578063c5d2418914610bfe578063c860795214610c1457600080fd5b8063a5ece94114610b0d578063a9059cbb14610b2d578063b1a8361014610b4d578063b62496f514610b6d57600080fd5b80638c5a133d116101a657806395d89b411161017557806395d89b4114610a6b5780639a7a23d614610a98578063a0263c8914610ab8578063a073d37f14610ad8578063a457c2d714610aed57600080fd5b80638c5a133d146109f85780638d5f81e214610a185780638da5cb5b14610a2d578063906e9dd014610a4b57600080fd5b80638366e79a116101ed5780638366e79a1461094457806385ecfd281461096457806388790a681461099457806388f82020146109aa5780638a8c523c146109e357600080fd5b8063715018a6146108e4578063751039fc146108f95780637571336a1461090e57806377fd00031461092e57600080fd5b806338acb20e1161032457806352390c02116102ac5780635881f3ef1161027b5780635881f3ef146108595780635aa821a9146108795780635bb988c91461088f578063602bc62b146108af57806370a08231146108c457600080fd5b806352390c02146107cd578063525fa81f146107ed5780635342acb41461080d578063557ed1ba1461084657600080fd5b80634549b039116102f35780634549b0391461073257806349bd5a5e146107525780634a62bb65146107725780634a74bb021461078c5780634b228c52146107ad57600080fd5b806338acb20e146106b257806339509351146106d25780634093746c146106f2578063437823ec1461071257600080fd5b80631fc851bd116103a757806327c8f8351161037657806327c8f835146106025780632d83811914610636578063313ce567146106565780633221c93f146106725780633685d4191461069257600080fd5b80631fc851bd146105a0578063200a692d146105b65780632142daff146105cc57806323b872dd146105e257600080fd5b8063095ea7b3116103ee578063095ea7b3146104d357806310d5de531461050357806313114a9d146105335780631694505e1461054857806318160ddd1461058057600080fd5b806302259e9e1461042b57806306fdde03146104545780630923160214610491578063092b2e4e146104b357600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044160275481565b6040519081526020015b60405180910390f35b34801561046057600080fd5b5060408051808201909152600b81526a233637b934b2309026b0b760a91b60208201525b60405161044b9190613f5b565b34801561049d57600080fd5b506104b16104ac366004613fb0565b610d48565b005b3480156104bf57600080fd5b506104b16104ce366004613fb0565b610d9d565b3480156104df57600080fd5b506104f36104ee366004613fe1565b610e11565b604051901515815260200161044b565b34801561050f57600080fd5b506104f361051e36600461400d565b60286020526000908152604090205460ff1681565b34801561053f57600080fd5b50600d54610441565b34801561055457600080fd5b50602b54610568906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b34801561058c57600080fd5b506904ee2d6d415b85acef8160201b610441565b3480156105ac57600080fd5b50610441601e5481565b3480156105c257600080fd5b5061044160185481565b3480156105d857600080fd5b5061044160175481565b3480156105ee57600080fd5b506104f36105fd36600461402a565b610e28565b34801561060e57600080fd5b506105687f000000000000000000000000000000000000000000000000000000000000dead81565b34801561064257600080fd5b50610441610651366004613fb0565b610e91565b34801561066257600080fd5b506040516012815260200161044b565b34801561067e57600080fd5b50600554610568906001600160a01b031681565b34801561069e57600080fd5b506104b16106ad36600461400d565b610f15565b3480156106be57600080fd5b506104b16106cd36600461400d565b6110cc565b3480156106de57600080fd5b506104f36106ed366004613fe1565b6111ca565b3480156106fe57600080fd5b50600454610568906001600160a01b031681565b34801561071e57600080fd5b506104b161072d36600461400d565b611200565b34801561073e57600080fd5b5061044161074d366004614079565b61127e565b34801561075e57600080fd5b50602c54610568906001600160a01b031681565b34801561077e57600080fd5b50600e546104f39060ff1681565b34801561079857600080fd5b50602c546104f390600160a81b900460ff1681565b3480156107b957600080fd5b506104b16107c8366004613fb0565b611316565b3480156107d957600080fd5b506104b16107e836600461400d565b61138a565b3480156107f957600080fd5b506104b161080836600461400d565b611578565b34801561081957600080fd5b506104f361082836600461400d565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561085257600080fd5b5042610441565b34801561086557600080fd5b5061056861087436600461400d565b61166e565b34801561088557600080fd5b5061044160265481565b34801561089b57600080fd5b506104b16108aa36600461400d565b611a48565b3480156108bb57600080fd5b50600254610441565b3480156108d057600080fd5b506104416108df36600461400d565b611abb565b3480156108f057600080fd5b506104b1611b1a565b34801561090557600080fd5b506104f3611b8e565b34801561091a57600080fd5b506104b16109293660046140a9565b611bd5565b34801561093a57600080fd5b50610441601b5481565b34801561095057600080fd5b506104f361095f3660046140d7565b611c2a565b34801561097057600080fd5b506104f361097f36600461400d565b601d6020526000908152604090205460ff1681565b3480156109a057600080fd5b5061044160195481565b3480156109b657600080fd5b506104f36109c536600461400d565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156109ef57600080fd5b506104b1611e50565b348015610a0457600080fd5b506104b1610a13366004614105565b611ea5565b348015610a2457600080fd5b50610568611f9c565b348015610a3957600080fd5b506000546001600160a01b0316610568565b348015610a5757600080fd5b506104b1610a6636600461400d565b611fd7565b348015610a7757600080fd5b506040805180820190915260048152632326a0a760e11b6020820152610484565b348015610aa457600080fd5b506104b1610ab33660046140a9565b6120cd565b348015610ac457600080fd5b506104b1610ad3366004614137565b612185565b348015610ae457600080fd5b50602a54610441565b348015610af957600080fd5b506104f3610b08366004613fe1565b6121c2565b348015610b1957600080fd5b50600354610568906001600160a01b031681565b348015610b3957600080fd5b506104f3610b48366004613fe1565b612211565b348015610b5957600080fd5b506104b1610b683660046140d7565b61221e565b348015610b7957600080fd5b506104f3610b8836600461400d565b60296020526000908152604090205460ff1681565b348015610ba957600080fd5b50602c546104f390600160b01b900460ff1681565b348015610bca57600080fd5b506104b1610bd9366004613fb0565b6122a8565b348015610bea57600080fd5b506104b1610bf9366004614137565b61237a565b348015610c0a57600080fd5b5061044160165481565b348015610c2057600080fd5b50610441601a5481565b348015610c3657600080fd5b506104b1610c45366004613fb0565b6123f1565b348015610c5657600080fd5b5061044160155481565b348015610c6c57600080fd5b50610441610c7b3660046140d7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610cb257600080fd5b506104b1610cc1366004614105565b61243e565b348015610cd257600080fd5b506104b1610ce136600461400d565b61252d565b348015610cf257600080fd5b50610441601c5481565b348015610d0857600080fd5b5061044160145481565b348015610d1e57600080fd5b506104b1610d2d36600461400d565b6125a8565b348015610d3e57600080fd5b5061044160255481565b6000546001600160a01b03163314610d7b5760405162461bcd60e51b8152600401610d7290614154565b60405180910390fd5b604b811015610d8957600080fd5b610d9781633b9aca0061419f565b60235550565b6000546001600160a01b03163314610dc75760405162461bcd60e51b8152600401610d7290614154565b60148111610de75760405162461bcd60e51b8152600401610d72906141be565b612710610e01826904ee2d6d415b85acef8160201b61419f565b610e0b9190614212565b60265550565b6000610e1e338484612716565b5060015b92915050565b6000610e3584848461283a565b610e878433610e82856040518060600160405280602881526020016143cd602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190613046565b612716565b5060019392505050565b6000600c54821115610ef85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d72565b6000610f02613080565b9050610f0e8382612692565b9392505050565b6000546001600160a01b03163314610f3f5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff16610fa75760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610d72565b60005b600b548110156110c857816001600160a01b0316600b8281548110610fd157610fd1614234565b6000918252602090912001546001600160a01b031614156110b657600b8054610ffc9060019061424a565b8154811061100c5761100c614234565b600091825260209091200154600b80546001600160a01b03909216918390811061103857611038614234565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600a90925220805460ff19169055600b80548061109057611090614261565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c081614277565b915050610faa565b5050565b6000546001600160a01b031633146110f65760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602360248201527f5f4e46544661726d4164647265737320616464726573732063616e6e6f74206260448201526206520360ec1b6064820152608401610d72565b600480546001600160a01b0319166001600160a01b038381169182178355600091825260096020908152604092839020805460ff1916600117905592549151911681527f0c9d4410b0c18b908731a2214ad5d5344fa43a8ca734c3fd0ab11a9c8695c33c91015b60405180910390a150565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e1e918590610e8290866130a3565b6000546001600160a01b0316331461122a5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291016111bf565b60006904ee2d6d415b85acef8160201b8311156112dd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d72565b816112fc5760006112ed84613102565b50939550610e22945050505050565b600061130784613102565b50929550610e22945050505050565b6000546001600160a01b031633146113405760405162461bcd60e51b8152600401610d7290614154565b601481116113605760405162461bcd60e51b8152600401610d72906141be565b61271061137a826904ee2d6d415b85acef8160201b61419f565b6113849190614212565b60275550565b6000546001600160a01b031633146113b45760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000908152600a602052604090205460ff161561141d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d72565b600b5460329061142e906001614292565b11156114b85760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610d72565b6001600160a01b03811660009081526006602052604090205415611512576001600160a01b0381166000908152600660205260409020546114f890610e91565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146115a25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166116065760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600580546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016111bf565b600080546001600160a01b031633146116995760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610d72565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561172d57600080fd5b505afa158015611741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176591906142aa565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906142aa565b91506001600160a01b0382166119e757806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906142aa565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561192c57600080fd5b505afa158015611940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196491906142aa565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156119ac57600080fd5b505af11580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906142aa565b91505b602c80546001600160a01b038085166001600160a01b031992831617909255602b80548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b03163314611a725760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600a602052604081205460ff1615611af857506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610e2290610e91565b6000546001600160a01b03163314611b445760405162461bcd60e51b8152600401610d7290614154565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611bb95760405162461bcd60e51b8152600401610d7290614154565b50600e805460ff19908116909155602280549091169055600190565b6000546001600160a01b03163314611bff5760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611c555760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038316611cab5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d72565b6001600160a01b038316301415611d045760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d72565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611d4657600080fd5b505afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7e91906142c7565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611dcc57600080fd5b505af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0491906142e0565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611e7a5760405162461bcd60e51b8152600401610d7290614154565b602c805461ffff60a81b191661010160a81b17905543601c55611ea0426203f480614292565b601e55565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610d7290614154565b60148481556015849055601683905560178290558183611eef8688614292565b611ef99190614292565b611f039190614292565b1115611f4d5760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527f7e09f732e3c0d29138378fac770c27e86c9881459c60b3218337780e2dd176cf906080015b60405180910390a150505050565b600080546001600160a01b03163314611fc75760405162461bcd60e51b8152600401610d7290614154565b50602c546001600160a01b031690565b6000546001600160a01b031633146120015760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166120655760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d72565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260096020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016111bf565b6000546001600160a01b031633146120f75760405162461bcd60e51b8152600401610d7290614154565b602c546001600160a01b038381169116141561217b5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d72565b6110c88282613151565b6000546001600160a01b031633146121af5760405162461bcd60e51b8152600401610d7290614154565b6022805460ff1916911515919091179055565b6000610e1e3384610e82856040518060600160405280602581526020016143f5602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190613046565b6000610e1e33848461283a565b6000546001600160a01b031633146122485760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0391821660008181526009602090815260408083208054600160ff199182168117909255959096168084528184208054871688179055938352602890915280822080548516861790559181522080549091169091179055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610d7290614154565b670de0b6b3a764000060646122f56904ee2d6d415b85acef8160201b600161419f565b6122ff9190614212565b6123099190614212565b81116123625760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610d72565b61237481670de0b6b3a764000061419f565b60255550565b6000546001600160a01b031633146123a45760405162461bcd60e51b8152600401610d7290614154565b602c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906111bf90831515815260200190565b6000546001600160a01b0316331461241b5760405162461bcd60e51b8152600401610d7290614154565b620b71b081101561242b57600080fd5b602354612438908261419f565b60245550565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610d7290614154565b60188490556019839055601a829055601b8190556014818361248a8688614292565b6124949190614292565b61249e9190614292565b11156124e85760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772032302560381b6044820152606401610d72565b6040805183815260208101859052908101859052606081018290527fc35b083cad11ee3ca1c82068780b9916789cac19799d2fb148fcab9e643d56f990608001611f8e565b6000546001600160a01b031633146125575760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b038116600081815260096020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016111bf565b6000546001600160a01b031633146125d25760405162461bcd60e51b8152600401610d7290614154565b6001600160a01b0381166126375760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d72565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f0e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e3565b6000610f0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613046565b6001600160a01b0383166127785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d72565b6001600160a01b0382166127d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d72565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661289e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d72565b6001600160a01b0382166129005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d72565b600081116129625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d72565b602c54600160b01b900460ff166129fe576001600160a01b03831660009081526009602052604090205460ff16806129b257506001600160a01b03821660009081526009602052604090205460ff165b6129fe5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610d72565b600e5460ff1615612dc1576000546001600160a01b03848116911614801590612a3557506000546001600160a01b03838116911614155b8015612a4957506001600160a01b03821615155b8015612a6057506001600160a01b03821661dead14155b8015612a765750602c54600160a01b900460ff16155b15612dc1576000546001600160a01b03848116911614801590612aa75750602c546001600160a01b03838116911614155b8015612ab45750601c5443145b15612b03576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60225460ff168015612b2d57506001600160a01b03831660009081526029602052604090205460ff165b15612b84576023543a1115612b845760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d72565b6001600160a01b03831660009081526029602052604090205460ff168015612bc557506001600160a01b03821660009081526028602052604090205460ff16155b15612c7657602654811115612c425760405162461bcd60e51b815260206004820152603860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61784275795472616e73616374696f6e416d6f756e742e00000000000000006064820152608401610d72565b602554612c4e83611abb565b612c589083614292565b1115612c765760405162461bcd60e51b8152600401610d72906142fd565b6001600160a01b03821660009081526029602052604090205460ff168015612cb757506001600160a01b03831660009081526028602052604090205460ff16155b15612d6d57602754811115612d345760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610d72565b602554612d4083611abb565b612d4a9083614292565b1115612d685760405162461bcd60e51b8152600401610d72906142fd565b612dc1565b6001600160a01b03821660009081526028602052604090205460ff16612dc157602554612d9983611abb565b612da39083614292565b1115612dc15760405162461bcd60e51b8152600401610d72906142fd565b6000602154602054601f54612dd69190614292565b612de09190614292565b90506000612ded30611abb565b602a54602c5491925082101590600160a01b900460ff16158015612e1a5750602c54600160a81b900460ff165b8015612e3b5750602c54600090612e39906001600160a01b0316611abb565b115b8015612e475750600083115b8015612e6c57506001600160a01b03851660009081526009602052604090205460ff16155b8015612e9157506001600160a01b03861660009081526009602052604090205460ff16155b8015612eb557506001600160a01b03851660009081526029602052604090205460ff165b8015612ebe5750805b15612ecb57612ecb613211565b6001600160a01b03861660009081526009602052604090205460019060ff1680612f0d57506001600160a01b03861660009081526009602052604090205460ff165b15612f1f57506003600f556000613031565b6001600160a01b03871660009081526029602052604090205460ff1615612f7857612f4861347c565b601454601055601754601654601554612f619190614292565b612f6b9190614292565b6012556001600f55613031565b6001600160a01b03861660009081526029602052604090205460ff161561302357612fa161347c565b601854601055601b54601a54601954612fba9190614292565b612fc49190614292565b6012556002600f556001600160a01b0387166000908152601d602052604090205460ff168015612ff6575043601e5411155b1561301e5760105461300990600361419f565b60105560125461301a90600361419f565b6012555b613031565b61302b61347c565b6003600f555b61303d878787846134aa565b50505050505050565b6000818484111561306a5760405162461bcd60e51b8152600401610d729190613f5b565b506000613077848661424a565b95945050505050565b600080600061308d6135d0565b909250905061309c8282612692565b9250505090565b6000806130b08385614292565b905083811015610f0e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d72565b60008060008060008060008060006131198a61377c565b92509250925060008060006131378d8686613132613080565b6137b8565b919f909e50909c50959a5093985091965092945050505050565b6001600160a01b0382166000908152602960205260409020805460ff191682151517905561317f8282611bd5565b801561318e5761318e8261138a565b8061319c5761319c82610f15565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b600081836132045760405162461bcd60e51b8152600401610d729190613f5b565b5060006130778486614212565b602c805460ff60a01b1916600160a01b179055600061322f30611abb565b90506000613256602054613250602154601f546130a390919063ffffffff16565b906130a3565b905060006132706002601f5461269290919063ffffffff16565b9050600061327e84836126d4565b90504761328a82613808565b600061329647836126d4565b905060006132b9866132b36020548561397190919063ffffffff16565b90612692565b905060006132d6876132b36021548661397190919063ffffffff16565b905060006132ee826132e886866126d4565b906126d4565b6000601f8190556020819055602181905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613350576040519150601f19603f3d011682016040523d82523d6000602084013e613355565b606091505b50506003546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146133a5576040519150601f19603f3d011682016040523d82523d6000602084013e6133aa565b606091505b5050809150506133ba88836139f0565b60408051888152602081018490529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613463576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613458576040519150601f19603f3d011682016040523d82523d6000602084013e61345d565b606091505b50909150505b5050602c805460ff60a01b191690555050505050505050565b60105415801561348c5750601254155b1561349357565b601080546011556012805460135560009182905555565b806134b7576134b761347c565b6001600160a01b0384166000908152600a602052604090205460ff1680156134f857506001600160a01b0383166000908152600a602052604090205460ff16155b1561350d57613508848484613ab3565b6135b9565b6001600160a01b0384166000908152600a602052604090205460ff1615801561354e57506001600160a01b0383166000908152600a602052604090205460ff165b1561355e57613508848484613bd9565b6001600160a01b0384166000908152600a602052604090205460ff16801561359e57506001600160a01b0383166000908152600a602052604090205460ff165b156135ae57613508848484613c82565b6135b9848484613cf5565b6135ca601154601055601354601255565b50505050565b600c5460009081906904ee2d6d415b85acef8160201b825b600b54811015613737578260066000600b848154811061360a5761360a614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061367557508160076000600b848154811061364e5761364e614234565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613695575050600c54936904ee2d6d415b85acef8160201b9350915050565b6136db60066000600b84815481106136af576136af614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d4565b925061372360076000600b84815481106136f7576136f7614234565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d4565b91508061372f81614277565b9150506135e8565b50600c54613752906904ee2d6d415b85acef8160201b612692565b821015613773575050600c54926904ee2d6d415b85acef8160201b92509050565b90939092509050565b60008060008061378b85613d39565b9050600061379886613d55565b905060006137aa826132e889866126d4565b979296509094509092505050565b60008080806137c78886613971565b905060006137d58887613971565b905060006137e38888613971565b905060006137f5826132e886866126d4565b939b939a50919850919650505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061383d5761383d614234565b6001600160a01b03928316602091820292909201810191909152602b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561389157600080fd5b505afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906142aa565b816001815181106138dc576138dc614234565b6001600160a01b039283166020918202929092010152602b546139029130911684612716565b602b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061393b90859060009086903090429060040161432d565b600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050505050565b60008261398057506000610e22565b600061398c838561419f565b9050826139998583614212565b14610f0e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d72565b602b54613a089030906001600160a01b031684612716565b602b5460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015613a7357600080fd5b505af1158015613a87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613aac919061439e565b5050505050565b600080600080600080613ac587613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613af790886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613b2690876126d4565b6001600160a01b03808b1660009081526006602052604080822093909355908a1681522054613b5590866130a3565b6001600160a01b038916600090815260066020526040902055613b7781613d71565b613b818483613f37565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613bc691815260200190565b60405180910390a3505050505050505050565b600080600080600080613beb87613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613c1d90876126d4565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613c5390846130a3565b6001600160a01b038916600090815260076020908152604080832093909355600690522054613b5590866130a3565b600080600080600080613c9487613102565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613cc690886126d4565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613c1d90876126d4565b600080600080600080613d0787613102565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613b2690876126d4565b6000610e2260646132b36010548561397190919063ffffffff16565b6000610e2260646132b36012548561397190919063ffffffff16565b6001600f541415613e1257601254601554613d8c908361419f565b613d969190614212565b601f6000828254613da79190614292565b9091555050601254601754613dbc908361419f565b613dc69190614212565b60216000828254613dd79190614292565b9091555050601254601654613dec908361419f565b613df69190614212565b60206000828254613e079190614292565b90915550613eae9050565b6002600f541415613eae57601254601954613e2d908361419f565b613e379190614212565b601f6000828254613e489190614292565b9091555050601254601b54613e5d908361419f565b613e679190614212565b60216000828254613e789190614292565b9091555050601254601a54613e8d908361419f565b613e979190614212565b60206000828254613ea89190614292565b90915550505b6000613eb8613080565b90506000613ec68383613971565b30600090815260066020526040902054909150613ee390826130a3565b30600090815260066020908152604080832093909355600a9052205460ff1615613f325730600090815260076020526040902054613f2190846130a3565b306000908152600760205260409020555b505050565b600c54613f4490836126d4565b600c55600d54613f5490826130a3565b600d555050565b600060208083528351808285015260005b81811015613f8857858101830151858201604001528201613f6c565b81811115613f9a576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613fc257600080fd5b5035919050565b6001600160a01b0381168114613fde57600080fd5b50565b60008060408385031215613ff457600080fd5b8235613fff81613fc9565b946020939093013593505050565b60006020828403121561401f57600080fd5b8135610f0e81613fc9565b60008060006060848603121561403f57600080fd5b833561404a81613fc9565b9250602084013561405a81613fc9565b929592945050506040919091013590565b8015158114613fde57600080fd5b6000806040838503121561408c57600080fd5b82359150602083013561409e8161406b565b809150509250929050565b600080604083850312156140bc57600080fd5b82356140c781613fc9565b9150602083013561409e8161406b565b600080604083850312156140ea57600080fd5b82356140f581613fc9565b9150602083013561409e81613fc9565b6000806000806080858703121561411b57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561414957600080fd5b8135610f0e8161406b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156141b9576141b9614189565b500290565b60208082526034908201527f43616e6e6f742073657420746865206d61785472616e73616374696f6e50657260408201527363656e74206c6f776572207468616e20302e322560601b606082015260800190565b60008261422f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561425c5761425c614189565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561428b5761428b614189565b5060010190565b600082198211156142a5576142a5614189565b500190565b6000602082840312156142bc57600080fd5b8151610f0e81613fc9565b6000602082840312156142d957600080fd5b5051919050565b6000602082840312156142f257600080fd5b8151610f0e8161406b565b60208082526016908201527510d85b89dd08195e18d95959081b585e15d85b1b195d60521b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561437d5784516001600160a01b031683529383019391830191600101614358565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143b357600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3d9379c7f39ff0e2dbdbdc28796fd7e818cba901befffde50d2e21960f6326964736f6c63430008090033

Deployed ByteCode Sourcemap

16587:33390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19422:39;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19422:39:0;;;;;;;;22801:85;;;;;;;;;;-1:-1:-1;22873:5:0;;;;;;;;;;;;-1:-1:-1;;;22873:5:0;;;;22801:85;;;;;;;:::i;28127:134::-;;;;;;;;;;-1:-1:-1;28127:134:0;;;;;:::i;:::-;;:::i;:::-;;25945:260;;;;;;;;;;-1:-1:-1;25945:260:0;;;;;:::i;:::-;;:::i;23798:195::-;;;;;;;;;;-1:-1:-1;23798:195:0;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;23798:195:0;1439:187:1;19468:64:0;;;;;;;;;;-1:-1:-1;19468:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25339:89;;;;;;;;;;-1:-1:-1;25410:10:0;;25339:89;;19840:41;;;;;;;;;;-1:-1:-1;19840:41:0;;;;-1:-1:-1;;;;;19840:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;19840:41:0;1883:230:1;23084:97:0;;;;;;;;;;-1:-1:-1;;;;23084:97:0;;18936:33;;;;;;;;;;;;;;;;18638:30;;;;;;;;;;;;;;;;18596:33;;;;;;;;;;;;;;;;24001:448;;;;;;;;;;-1:-1:-1;24001:448:0;;;;;:::i;:::-;;:::i;17126:90::-;;;;;;;;;;;;;;;29136:322;;;;;;;;;;-1:-1:-1;29136:322:0;;;;;:::i;:::-;;:::i;22991:85::-;;;;;;;;;;-1:-1:-1;22991:85:0;;17963:2;2929:36:1;;2917:2;2902:18;22991:85:0;2787:184:1;16986:102:0;;;;;;;;;;-1:-1:-1;16986:102:0;;;;-1:-1:-1;;;;;16986:102:0;;;29933:471;;;;;;;;;;-1:-1:-1;29933:471:0;;;;;:::i;:::-;;:::i;47554:324::-;;;;;;;;;;-1:-1:-1;47554:324:0;;;;;:::i;:::-;;:::i;24457:302::-;;;;;;;;;;-1:-1:-1;24457:302:0;;;;;:::i;:::-;;:::i;16850:100::-;;;;;;;;;;-1:-1:-1;16850:100:0;;;;-1:-1:-1;;;;;16850:100:0;;;45622:152;;;;;;;;;;-1:-1:-1;45622:152:0;;;;;:::i;:::-;;:::i;28647:481::-;;;;;;;;;;-1:-1:-1;28647:481:0;;;;;:::i;:::-;;:::i;19888:28::-;;;;;;;;;;-1:-1:-1;19888:28:0;;;;-1:-1:-1;;;;;19888:28:0;;;17777:33;;;;;;;;;;-1:-1:-1;17777:33:0;;;;;;;;19953:41;;;;;;;;;;-1:-1:-1;19953:41:0;;;;-1:-1:-1;;;19953:41:0;;;;;;26217:262;;;;;;;;;;-1:-1:-1;26217:262:0;;;;;:::i;:::-;;:::i;29466:459::-;;;;;;;;;;-1:-1:-1;29466:459:0;;;;;:::i;:::-;;:::i;47890:343::-;;;;;;;;;;-1:-1:-1;47890:343:0;;;;;:::i;:::-;;:::i;45488:126::-;;;;;;;;;;-1:-1:-1;45488:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45579:27:0;45555:4;45579:27;;;:18;:27;;;;;;;;;45488:126;7289:90;;;;;;;;;;-1:-1:-1;7356:15:0;7289:90;;48535:848;;;;;;;;;;-1:-1:-1;48535:848:0;;;;;:::i;:::-;;:::i;19377:38::-;;;;;;;;;;;;;;;;45943:148;;;;;;;;;;-1:-1:-1;45943:148:0;;;;;:::i;:::-;;:::i;7191:90::-;;;;;;;;;;-1:-1:-1;7264:9:0;;7191:90;;23189:198;;;;;;;;;;-1:-1:-1;23189:198:0;;;;;:::i;:::-;;:::i;6742:150::-;;;;;;;;;;;;;:::i;28486:153::-;;;;;;;;;;;;;:::i;30416:144::-;;;;;;;;;;-1:-1:-1;30416:144:0;;;;;:::i;:::-;;:::i;18762:34::-;;;;;;;;;;;;;;;;49486:488;;;;;;;;;;-1:-1:-1;49486:488:0;;;;;:::i;:::-;;:::i;18886:43::-;;;;;;;;;;-1:-1:-1;18886:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18675:36;;;;;;;;;;;;;;;;25177:154;;;;;;;;;;-1:-1:-1;25177:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;25303:20:0;25274:4;25303:20;;;:11;:20;;;;;;;;;25177:154;26533:224;;;;;;;;;;;;;:::i;46099:530::-;;;;;;;;;;-1:-1:-1;46099:530:0;;;;;:::i;:::-;;:::i;48420:107::-;;;;;;;;;;;;;:::i;6528:79::-;;;;;;;;;;-1:-1:-1;6566:7:0;6593:6;-1:-1:-1;;;;;6593:6:0;6528:79;;47199:343;;;;;;;;;;-1:-1:-1;47199:343:0;;;;;:::i;:::-;;:::i;22894:89::-;;;;;;;;;;-1:-1:-1;22968:7:0;;;;;;;;;;;;-1:-1:-1;;;22968:7:0;;;;22894:89;;27416:246;;;;;;;;;;-1:-1:-1;27416:246:0;;;;;:::i;:::-;;:::i;28006:109::-;;;;;;;;;;-1:-1:-1;28006:109:0;;;;;:::i;:::-;;:::i;27282:122::-;;;;;;;;;;-1:-1:-1;27373:23:0;;27282:122;;24767:402;;;;;;;;;;-1:-1:-1;24767:402:0;;;;;:::i;:::-;;:::i;16710:102::-;;;;;;;;;;-1:-1:-1;16710:102:0;;;;-1:-1:-1;;;;;16710:102:0;;;23395:201;;;;;;;;;;-1:-1:-1;23395:201:0;;;;;:::i;:::-;;:::i;26885:373::-;;;;;;;;;;-1:-1:-1;26885:373:0;;;;;:::i;:::-;;:::i;19694:58::-;;;;;;;;;;-1:-1:-1;19694:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20001:33;;;;;;;;;;-1:-1:-1;20001:33:0;;;;-1:-1:-1;;;20001:33:0;;;;;;25440:205;;;;;;;;;;-1:-1:-1;25440:205:0;;;;;:::i;:::-;;:::i;48241:171::-;;;;;;;;;;-1:-1:-1;48241:171:0;;;;;:::i;:::-;;:::i;18553:36::-;;;;;;;;;;;;;;;;18718:37;;;;;;;;;;;;;;;;28273:141;;;;;;;;;;-1:-1:-1;28273:141:0;;;;;:::i;:::-;;:::i;18511:35::-;;;;;;;;;;;;;;;;23604:186;;;;;;;;;;-1:-1:-1;23604:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;23755:18:0;;;23723:7;23755:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23604:186;46637:552;;;;;;;;;;-1:-1:-1;46637:552:0;;;;;:::i;:::-;;:::i;45782:149::-;;;;;;;;;;-1:-1:-1;45782:149:0;;;;;:::i;:::-;;:::i;18809:37::-;;;;;;;;;;;;;;;;18475:29;;;;;;;;;;;;;;;;6900:283;;;;;;;;;;-1:-1:-1;6900:283:0;;;;;:::i;:::-;;:::i;19346:24::-;;;;;;;;;;;;;;;;28127:134;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;;;;;;;;;28211:2:::1;28204:3;:9;;28196:18;;;::::0;::::1;;28241:12;:3:::0;28247:6:::1;28241:12;:::i;:::-;28225:13;:28:::0;-1:-1:-1;28127:134:0:o;25945:260::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;26070:2:::1;26050:17;:22;26042:87;;;;-1:-1:-1::0;;;26042:87:0::1;;;;;;;:::i;:::-;26192:5;26166:25;26174:17:::0;-1:-1:-1;;;26166:25:0::1;:::i;:::-;:31;;;;:::i;:::-;26140:23;:57:::0;-1:-1:-1;25945:260:0:o;23798:195::-;23902:4;23924:39;267:10;23947:7;23956:6;23924:8;:39::i;:::-;-1:-1:-1;23981:4:0;23798:195;;;;;:::o;24001:448::-;24135:4;24152:36;24162:6;24170:9;24181:6;24152:9;:36::i;:::-;24199:220;24222:6;267:10;24270:138;24326:6;24270:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24270:19:0;;;;;;:11;:19;;;;;;;;267:10;24270:33;;;;;;;;;;:37;:138::i;:::-;24199:8;:220::i;:::-;-1:-1:-1;24437:4:0;24001:448;;;;;:::o;29136:322::-;29230:7;29288;;29277;:18;;29255:110;;;;-1:-1:-1;;;29255:110:0;;6564:2:1;29255:110:0;;;6546:21:1;6603:2;6583:18;;;6576:30;6642:34;6622:18;;;6615:62;-1:-1:-1;;;6693:18:1;;;6686:40;6743:19;;29255:110:0;6362:406:1;29255:110:0;29376:19;29398:10;:8;:10::i;:::-;29376:32;-1:-1:-1;29426:24:0;:7;29376:32;29426:11;:24::i;:::-;29419:31;29136:322;-1:-1:-1;;;29136:322:0:o;29933:471::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30011:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30003:56;;;::::0;-1:-1:-1;;;30003:56:0;;6975:2:1;30003:56:0::1;::::0;::::1;6957:21:1::0;7014:2;6994:18;;;6987:30;7053:25;7033:18;;;7026:53;7096:18;;30003:56:0::1;6773:347:1::0;30003:56:0::1;30075:9;30070:327;30094:9;:16:::0;30090:20;::::1;30070:327;;;30152:7;-1:-1:-1::0;;;;;30136:23:0::1;:9;30146:1;30136:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30136:12:0::1;:23;30132:254;;;30195:9;30205:16:::0;;:20:::1;::::0;30224:1:::1;::::0;30205:20:::1;:::i;:::-;30195:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30180:9:::1;:12:::0;;-1:-1:-1;;;;;30195:31:0;;::::1;::::0;30190:1;;30180:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30180:46:0::1;-1:-1:-1::0;;;;;30180:46:0;;::::1;;::::0;;30245:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30284:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30284:28:0::1;::::0;;30331:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30331:15:0;;;;;-1:-1:-1;;;;;;30331:15:0::1;::::0;;;;;30070:327:::1;29933:471:::0;:::o;30132:254::-:1;30112:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30070:327;;;;29933:471:::0;:::o;47554:324::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47644:29:0;::::1;47636:77;;;::::0;-1:-1:-1;;;47636:77:0;;7861:2:1;47636:77:0::1;::::0;::::1;7843:21:1::0;7900:2;7880:18;;;7873:30;7939:34;7919:18;;;7912:62;-1:-1:-1;;;7990:18:1;;;7983:33;8033:19;;47636:77:0::1;7659:399:1::0;47636:77:0::1;47724:14;:41:::0;;-1:-1:-1;;;;;;47724:41:0::1;-1:-1:-1::0;;;;;47724:41:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;47776:34:0;;;:18:::1;:34;::::0;;;;;;;;:41;;-1:-1:-1;;47776:41:0::1;-1:-1:-1::0;47776:41:0::1;::::0;;47855:14;;47833:37;;47855:14;::::1;2056:51:1::0;;47833:37:0::1;::::0;2029:18:1;47833:37:0::1;;;;;;;;47554:324:::0;:::o;24457:302::-;267:10;24574:4;24668:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24668:34:0;;;;;;;;;;24574:4;;24596:133;;24646:7;;24668:50;;24707:10;24668:38;:50::i;45622:152::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45693:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;45693:34:0::1;45723:4;45693:34;::::0;;45743:23;;2056:51:1;;;45743:23:0::1;::::0;2029:18:1;45743:23:0::1;1883:230:1::0;28647:481:0;28767:7;-1:-1:-1;;;28800:7:0;:18;;28792:62;;;;-1:-1:-1;;;28792:62:0;;8481:2:1;28792:62:0;;;8463:21:1;8520:2;8500:18;;;8493:30;8559:33;8539:18;;;8532:61;8610:18;;28792:62:0;8279:355:1;28792:62:0;28870:17;28865:256;;28905:15;28934:19;28945:7;28934:10;:19::i;:::-;-1:-1:-1;28904:49:0;;-1:-1:-1;28968:14:0;;-1:-1:-1;;;;;28968:14:0;28865:256;29018:23;29053:19;29064:7;29053:10;:19::i;:::-;-1:-1:-1;29015:57:0;;-1:-1:-1;29087:22:0;;-1:-1:-1;;;;;29087:22:0;26217:262;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;26343:2:::1;26323:17;:22;26315:87;;;;-1:-1:-1::0;;;26315:87:0::1;;;;;;;:::i;:::-;26466:5;26440:25;26448:17:::0;-1:-1:-1;;;26440:25:0::1;:::i;:::-;:31;;;;:::i;:::-;26413:24;:58:::0;-1:-1:-1;26217:262:0:o;29466:459::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29547:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29546:21;29538:61;;;::::0;-1:-1:-1;;;29538:61:0;;8841:2:1;29538:61:0::1;::::0;::::1;8823:21:1::0;8880:2;8860:18;;;8853:30;8919:29;8899:18;;;8892:57;8966:18;;29538:61:0::1;8639:351:1::0;29538:61:0::1;29618:9;:16:::0;29642:2:::1;::::0;29618:20:::1;::::0;29637:1:::1;29618:20;:::i;:::-;:26;;29610:116;;;::::0;-1:-1:-1;;;29610:116:0;;9330:2:1;29610:116:0::1;::::0;::::1;9312:21:1::0;9369:2;9349:18;;;9342:30;9408:34;9388:18;;;9381:62;9479:34;9459:18;;;9452:62;-1:-1:-1;;;9530:19:1;;;9523:44;9584:19;;29610:116:0::1;9128:481:1::0;29610:116:0::1;-1:-1:-1::0;;;;;29741:16:0;::::1;29760:1;29741:16:::0;;;:7:::1;:16;::::0;;;;;:20;29737:109:::1;;-1:-1:-1::0;;;;;29817:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29797:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29778:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29737:109:::1;-1:-1:-1::0;;;;;29856:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29856:27:0::1;29879:4;29856:27:::0;;::::1;::::0;;;29894:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29894:23:0::1;::::0;;::::1;::::0;;29466:459::o;47890:343::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47984:31:0;::::1;47976:81;;;::::0;-1:-1:-1;;;47976:81:0;;9816:2:1;47976:81:0::1;::::0;::::1;9798:21:1::0;9855:2;9835:18;;;9828:30;9894:34;9874:18;;;9867:62;-1:-1:-1;;;9945:18:1;;;9938:35;9990:19;;47976:81:0::1;9614:401:1::0;47976:81:0::1;48068:16;:45:::0;;-1:-1:-1;;;;;;48068:45:0::1;-1:-1:-1::0;;;;;48068:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;48124:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;48124:43:0::1;-1:-1:-1::0;48124:43:0::1;::::0;;48183:42;;2056:51:1;;;48183:42:0::1;::::0;2029:18:1;48183:42:0::1;1883:230:1::0;48535:848:0;48636:13;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48675:21:0;::::1;48667:61;;;::::0;-1:-1:-1;;;48667:61:0;;10222:2:1;48667:61:0::1;::::0;::::1;10204:21:1::0;10261:2;10241:18;;;10234:30;10300:29;10280:18;;;10273:57;10347:18;;48667:61:0::1;10020:351:1::0;48667:61:0::1;48739:35;48796:7;48739:65;;48843:16;-1:-1:-1::0;;;;;48843:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;48825:53:0::1;;48901:4;48921:16;-1:-1:-1::0;;;;;48921:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48825:130;::::0;-1:-1:-1;;;;;;48825:130:0::1;::::0;;;;;;-1:-1:-1;;;;;10862:15:1;;;48825:130:0::1;::::0;::::1;10844:34:1::0;10914:15;;10894:18;;;10887:43;10779:18;;48825:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48817:138:::0;-1:-1:-1;;;;;;48970:19:0;::::1;48966:240;;49067:16;-1:-1:-1::0;;;;;49067:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49049:56:0::1;;49132:4;49156:16;-1:-1:-1::0;;;;;49156:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49049:145;::::0;-1:-1:-1;;;;;;49049:145:0::1;::::0;;;;;;-1:-1:-1;;;;;10862:15:1;;;49049:145:0::1;::::0;::::1;10844:34:1::0;10914:15;;10894:18;;;10887:43;10779:18;;49049:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49041:153;;48966:240;49216:13;:21:::0;;-1:-1:-1;;;;;49216:21:0;;::::1;-1:-1:-1::0;;;;;;49216:21:0;;::::1;;::::0;;;49303:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;49353:22:::1;::::0;;;::::1;::::0;::::1;::::0;49216:13:::1;::::0;49353:22:::1;48656:727;48535:848:::0;;;:::o;45943:148::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46017:20:0;::::1;46040:5;46017:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;46017:28:0::1;::::0;;46061:22;::::1;::::0;46040:5;46061:22:::1;45943:148:::0;:::o;23189:198::-;-1:-1:-1;;;;;23279:20:0;;23255:7;23279:20;;;:11;:20;;;;;;;;23275:49;;;-1:-1:-1;;;;;;23308:16:0;;;;;:7;:16;;;;;;;23189:198::o;23275:49::-;-1:-1:-1;;;;;23362:16:0;;;;;;:7;:16;;;;;;23342:37;;:19;:37::i;6742:150::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;6851:1:::1;6835:6:::0;;6814:40:::1;::::0;-1:-1:-1;;;;;6835:6:0;;::::1;::::0;6814:40:::1;::::0;6851:1;;6814:40:::1;6882:1;6865:19:::0;;-1:-1:-1;;;;;;6865:19:0::1;::::0;;6742:150::o;28486:153::-;28538:4;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;28554:14:0::1;:22:::0;;-1:-1:-1;;28554:22:0;;::::1;::::0;;;28587:14:::1;:22:::0;;;;::::1;::::0;;28554;28486:153;:::o;30416:144::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30506:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;30506:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30416:144::o;49486:488::-;49600:10;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49636:20:0;::::1;49628:59;;;::::0;-1:-1:-1;;;49628:59:0;;11143:2:1;49628:59:0::1;::::0;::::1;11125:21:1::0;11182:2;11162:18;;;11155:30;11221:28;11201:18;;;11194:56;11267:18;;49628:59:0::1;10941:350:1::0;49628:59:0::1;-1:-1:-1::0;;;;;49706:23:0;::::1;49724:4;49706:23;;49698:64;;;::::0;-1:-1:-1;;;49698:64:0;;11498:2:1;49698:64:0::1;::::0;::::1;11480:21:1::0;11537:2;11517:18;;;11510:30;11576;11556:18;;;11549:58;11624:18;;49698:64:0::1;11296:352:1::0;49698:64:0::1;49800:39;::::0;-1:-1:-1;;;49800:39:0;;49833:4:::1;49800:39;::::0;::::1;2056:51:1::0;49773:24:0::1;::::0;-1:-1:-1;;;;;49800:24:0;::::1;::::0;::::1;::::0;2029:18:1;;49800:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49858:46;::::0;-1:-1:-1;;;49858:46:0;;-1:-1:-1;;;;;12034:32:1;;;49858:46:0::1;::::0;::::1;12016:51:1::0;12083:18;;;12076:34;;;49773:66:0;;-1:-1:-1;49858:23:0;;::::1;::::0;::::1;::::0;11989:18:1;;49858:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49920;::::0;;-1:-1:-1;;;;;12034:32:1;;12016:51;;12098:2;12083:18;;12076:34;;;49850:54:0;;-1:-1:-1;49920:46:0::1;::::0;11989:18:1;49920:46:0::1;;;;;;;49617:357;49486:488:::0;;;;:::o;26533:224::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;26588:13:::1;:20:::0;;-1:-1:-1;;;;26619:28:0;-1:-1:-1;;;26619:28:0;;;26679:12:::1;26658:18;:33:::0;26723:26:::1;:15;26741:8;26723:26;:::i;:::-;26702:18;:47:::0;26533:224::o;46099:530::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;46263:10:::1;:22:::0;;;46296:16:::1;:34:::0;;;46341:16:::1;:34:::0;;;46386:14:::1;:30:::0;;;46403:13;46360:15;46435:29:::1;46315:15:::0;46276:9;46435:29:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;:71;;46427:109;;;::::0;-1:-1:-1;;;46427:109:0;;12573:2:1;46427:109:0::1;::::0;::::1;12555:21:1::0;12612:2;12592:18;;;12585:30;-1:-1:-1;;;12631:18:1;;;12624:55;12696:18;;46427:109:0::1;12371:349:1::0;46427:109:0::1;46552:69;::::0;;12956:25:1;;;13012:2;12997:18;;12990:34;;;13040:18;;;13033:34;;;13098:2;13083:18;;13076:34;;;46552:69:0::1;::::0;12943:3:1;12928:19;46552:69:0::1;;;;;;;;46099:530:::0;;;;:::o;48420:107::-;48479:7;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;48506:13:0::1;::::0;-1:-1:-1;;;;;48506:13:0::1;48420:107:::0;:::o;47199:343::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47293:31:0;::::1;47285:81;;;::::0;-1:-1:-1;;;47285:81:0;;13323:2:1;47285:81:0::1;::::0;::::1;13305:21:1::0;13362:2;13342:18;;;13335:30;13401:34;13381:18;;;13374:62;-1:-1:-1;;;13452:18:1;;;13445:35;13497:19;;47285:81:0::1;13121:401:1::0;47285:81:0::1;47377:16;:45:::0;;-1:-1:-1;;;;;;47377:45:0::1;-1:-1:-1::0;;;;;47377:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;47433:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;47433:43:0::1;-1:-1:-1::0;47433:43:0::1;::::0;;47492:42;;2056:51:1;;;47492:42:0::1;::::0;2029:18:1;47492:42:0::1;1883:230:1::0;27416:246:0;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;27525:13:::1;::::0;-1:-1:-1;;;;;27517:21:0;;::::1;27525:13:::0;::::1;27517:21;;27509:91;;;::::0;-1:-1:-1;;;27509:91:0;;13729:2:1;27509:91:0::1;::::0;::::1;13711:21:1::0;13768:2;13748:18;;;13741:30;13807:34;13787:18;;;13780:62;13878:27;13858:18;;;13851:55;13923:19;;27509:91:0::1;13527:421:1::0;27509:91:0::1;27613:41;27642:4;27648:5;27613:28;:41::i;28006:109::-:0;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;28083:14:::1;:24:::0;;-1:-1:-1;;28083:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28006:109::o;24767:402::-;24889:4;24911:228;267:10;24961:7;24983:145;25040:15;24983:145;;;;;;;;;;;;;;;;;267:10;24983:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24983:34:0;;;;;;;;;;;;:38;:145::i;23395:201::-;23502:4;23524:42;267:10;23548:9;23559:6;23524:9;:42::i;26885:373::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27011:35:0;;::::1;;::::0;;;:18:::1;:35;::::0;;;;;;;:42;;27049:4:::1;-1:-1:-1::0;;27011:42:0;;::::1;::::0;::::1;::::0;;;27064:41;;;::::1;::::0;;;;;;:48;;;::::1;::::0;::::1;::::0;;27123;;;:31:::1;:48:::0;;;;;;:55;;;::::1;::::0;::::1;::::0;;27189:54;;;;:61;;;;::::1;::::0;;::::1;::::0;;26885:373::o;25440:205::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;25554:4:::1;25549:3;25535:11;-1:-1:-1::0;;;25545:1:0::1;25535:11;:::i;:::-;:17;;;;:::i;:::-;25534:24;;;;:::i;:::-;25525:6;:33;25517:80;;;::::0;-1:-1:-1;;;25517:80:0;;14155:2:1;25517:80:0::1;::::0;::::1;14137:21:1::0;14194:2;14174:18;;;14167:30;14233:34;14213:18;;;14206:62;-1:-1:-1;;;14284:18:1;;;14277:32;14326:19;;25517:80:0::1;13953:398:1::0;25517:80:0::1;25620:17;:6:::0;25630::::1;25620:17;:::i;:::-;25608:9;:29:::0;-1:-1:-1;25440:205:0:o;48241:171::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;48318:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;48318:32:0::1;-1:-1:-1::0;;;;48318:32:0;;::::1;;::::0;;48366:38:::1;::::0;::::1;::::0;::::1;::::0;48342:8;1604:14:1;1597:22;1579:41;;1567:2;1552:18;;1439:187;28273:141:0;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;28355:6:::1;28348:3;:13;;28340:22;;;::::0;::::1;;28393:13;::::0;28387:19:::1;::::0;:3;:19:::1;:::i;:::-;28373:11;:33:::0;-1:-1:-1;28273:141:0:o;46637:552::-;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;46806:11:::1;:24:::0;;;46841:17:::1;:36:::0;;;46888:17:::1;:36:::0;;;46935:15:::1;:32:::0;;;47059:2:::1;46953:14:::0;46908:16;46986:31:::1;46861:16:::0;46820:10;46986:31:::1;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;:75;;46978:113;;;::::0;-1:-1:-1;;;46978:113:0;;12573:2:1;46978:113:0::1;::::0;::::1;12555:21:1::0;12612:2;12592:18;;;12585:30;-1:-1:-1;;;12631:18:1;;;12624:55;12696:18;;46978:113:0::1;12371:349:1::0;46978:113:0::1;47107:74;::::0;;12956:25:1;;;13012:2;12997:18;;12990:34;;;13040:18;;;13033:34;;;13098:2;13083:18;;13076:34;;;47107:74:0::1;::::0;12943:3:1;12928:19;47107:74:0::1;12725:391:1::0;45782:149:0;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45851:27:0;::::1;45881:5;45851:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;45851:35:0::1;::::0;;45902:21;;2056:51:1;;;45902:21:0::1;::::0;2029:18:1;45902:21:0::1;1883:230:1::0;6900:283:0;6655:6;;-1:-1:-1;;;;;6655:6:0;267:10;6655:22;6647:67;;;;-1:-1:-1;;;6647:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7005:22:0;::::1;6983:110;;;::::0;-1:-1:-1;;;6983:110:0;;14558:2:1;6983:110:0::1;::::0;::::1;14540:21:1::0;14597:2;14577:18;;;14570:30;14636:34;14616:18;;;14609:62;-1:-1:-1;;;14687:18:1;;;14680:36;14733:19;;6983:110:0::1;14356:402:1::0;6983:110:0::1;7130:6;::::0;;7109:38:::1;::::0;-1:-1:-1;;;;;7109:38:0;;::::1;::::0;7130:6;::::1;::::0;7109:38:::1;::::0;::::1;7158:6;:17:::0;;-1:-1:-1;;;;;;7158:17:0::1;-1:-1:-1::0;;;;;7158:17:0;;;::::1;::::0;;;::::1;::::0;;6900:283::o;2185:132::-;2243:7;2270:39;2274:1;2277;2270:39;;;;;;;;;;;;;;;;;:3;:39::i;1549:136::-;1607:7;1634:43;1638:1;1641;1634:43;;;;;;;;;;;;;;;;;:3;:43::i;30569:371::-;-1:-1:-1;;;;;30696:19:0;;30688:68;;;;-1:-1:-1;;;30688:68:0;;14965:2:1;30688:68:0;;;14947:21:1;15004:2;14984:18;;;14977:30;15043:34;15023:18;;;15016:62;-1:-1:-1;;;15094:18:1;;;15087:34;15138:19;;30688:68:0;14763:400:1;30688:68:0;-1:-1:-1;;;;;30775:21:0;;30767:68;;;;-1:-1:-1;;;30767:68:0;;15370:2:1;30767:68:0;;;15352:21:1;15409:2;15389:18;;;15382:30;15448:34;15428:18;;;15421:62;-1:-1:-1;;;15499:18:1;;;15492:32;15541:19;;30767:68:0;15168:398:1;30767:68:0;-1:-1:-1;;;;;30848:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30900:32;;160:25:1;;;30900:32:0;;133:18:1;30900:32:0;;;;;;;30569:371;;;:::o;30948:4103::-;-1:-1:-1;;;;;31070:18:0;;31062:68;;;;-1:-1:-1;;;31062:68:0;;15773:2:1;31062:68:0;;;15755:21:1;15812:2;15792:18;;;15785:30;15851:34;15831:18;;;15824:62;-1:-1:-1;;;15902:18:1;;;15895:35;15947:19;;31062:68:0;15571:401:1;31062:68:0;-1:-1:-1;;;;;31149:16:0;;31141:64;;;;-1:-1:-1;;;31141:64:0;;16179:2:1;31141:64:0;;;16161:21:1;16218:2;16198:18;;;16191:30;16257:34;16237:18;;;16230:62;-1:-1:-1;;;16308:18:1;;;16301:33;16351:19;;31141:64:0;15977:399:1;31141:64:0;31233:1;31224:6;:10;31216:64;;;;-1:-1:-1;;;31216:64:0;;16583:2:1;31216:64:0;;;16565:21:1;16622:2;16602:18;;;16595:30;16661:34;16641:18;;;16634:62;-1:-1:-1;;;16712:18:1;;;16705:39;16761:19;;31216:64:0;16381:405:1;31216:64:0;31305:13;;-1:-1:-1;;;31305:13:0;;;;31301:134;;-1:-1:-1;;;;;31342:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;31370:22:0;;;;;;:18;:22;;;;;;;;31342:50;31334:89;;;;-1:-1:-1;;;31334:89:0;;16993:2:1;31334:89:0;;;16975:21:1;17032:2;17012:18;;;17005:30;17071:28;17051:18;;;17044:56;17117:18;;31334:89:0;16791:350:1;31334:89:0;31455:14;;;;31452:1526;;;6566:7;6593:6;-1:-1:-1;;;;;31499:15:0;;;6593:6;;31499:15;;;;:45;;-1:-1:-1;6566:7:0;6593:6;-1:-1:-1;;;;;31531:13:0;;;6593:6;;31531:13;;31499:45;:78;;;;-1:-1:-1;;;;;;31561:16:0;;;;31499:78;:116;;;;-1:-1:-1;;;;;;31594:21:0;;31608:6;31594:21;;31499:116;:150;;;;-1:-1:-1;31633:16:0;;-1:-1:-1;;;31633:16:0;;;;31632:17;31499:150;31481:1490;;;6566:7;6593:6;-1:-1:-1;;;;;31692:15:0;;;6593:6;;31692:15;;;;:38;;-1:-1:-1;31717:13:0;;-1:-1:-1;;;;;31711:19:0;;;31717:13;;31711:19;;31692:38;:76;;;;;31750:18;;31734:12;:34;31692:76;31689:176;;;-1:-1:-1;;;;;31788:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;31788:22:0;31806:4;31788:22;;;31834:15;;;31788;31834;31689:176;31897:14;;;;:49;;;;-1:-1:-1;;;;;;31915:31:0;;;;;;:25;:31;;;;;;;;31897:49;31893:155;;;31990:13;;31975:11;:28;;31967:65;;;;-1:-1:-1;;;31967:65:0;;17348:2:1;31967:65:0;;;17330:21:1;17387:2;17367:18;;;17360:30;17426:26;17406:18;;;17399:54;17470:18;;31967:65:0;17146:348:1;31967:65:0;-1:-1:-1;;;;;32096:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;32132:35:0;;;;;;:31;:35;;;;;;;;32131:36;32096:71;32092:311;;;32210:23;;32200:6;:33;;32192:102;;;;-1:-1:-1;;;32192:102:0;;17701:2:1;32192:102:0;;;17683:21:1;17740:2;17720:18;;;17713:30;17779:34;17759:18;;;17752:62;17850:26;17830:18;;;17823:54;17894:19;;32192:102:0;17499:420:1;32192:102:0;32351:9;;32334:13;32344:2;32334:9;:13::i;:::-;32325:22;;:6;:22;:::i;:::-;:35;;32317:70;;;;-1:-1:-1;;;32317:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32450:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;32484:37:0;;;;;;:31;:37;;;;;;;;32483:38;32450:71;32446:514;;;32564:24;;32554:6;:34;;32546:105;;;;-1:-1:-1;;;32546:105:0;;18477:2:1;32546:105:0;;;18459:21:1;18516:2;18496:18;;;18489:30;18555:34;18535:18;;;18528:62;18626:28;18606:18;;;18599:56;18672:19;;32546:105:0;18275:422:1;32546:105:0;32708:9;;32691:13;32701:2;32691:9;:13::i;:::-;32682:22;;:6;:22;:::i;:::-;:35;;32674:70;;;;-1:-1:-1;;;32674:70:0;;;;;;;:::i;:::-;32446:514;;;-1:-1:-1;;;;;32815:35:0;;;;;;:31;:35;;;;;;;;32810:150;;32908:9;;32891:13;32901:2;32891:9;:13::i;:::-;32882:22;;:6;:22;:::i;:::-;:35;;32874:70;;;;-1:-1:-1;;;32874:70:0;;;;;;;:::i;:::-;32998:25;33076:20;;33051:22;;33026;;:47;;;;:::i;:::-;:70;;;;:::i;:::-;32998:98;;33107:28;33138:24;33156:4;33138:9;:24::i;:::-;33228:23;;33312:16;;33107:55;;-1:-1:-1;33204:47:0;;;;-1:-1:-1;;;33312:16:0;;;;33311:17;:55;;;;-1:-1:-1;33345:21:0;;-1:-1:-1;;;33345:21:0;;;;33311:55;:100;;;;-1:-1:-1;33393:13:0;;33410:1;;33383:24;;-1:-1:-1;;;;;33393:13:0;33383:9;:24::i;:::-;:28;33311:100;:138;;;;;33448:1;33428:17;:21;33311:138;:178;;;;-1:-1:-1;;;;;;33467:22:0;;;;;;:18;:22;;;;;;;;33466:23;33311:178;:220;;;;-1:-1:-1;;;;;;33507:24:0;;;;;;:18;:24;;;;;;;;33506:25;33311:220;:266;;;;-1:-1:-1;;;;;;33548:29:0;;;;;;:25;:29;;;;;;;;33311:266;:306;;;;;33594:23;33311:306;33293:373;;;33644:10;:8;:10::i;:::-;-1:-1:-1;;;;;33799:24:0;;33678:12;33799:24;;;:18;:24;;;;;;33693:4;;33799:24;;;:50;;-1:-1:-1;;;;;;33827:22:0;;;;;;:18;:22;;;;;;;;33799:50;33795:1177;;;-1:-1:-1;18093:1:0;33896:15;:26;33876:5;33795:1177;;;-1:-1:-1;;;;;33979:31:0;;;;;;:25;:31;;;;;;;;33975:986;;;34031:14;:12;:14::i;:::-;34074:10;;34064:7;:20;34157:14;;34138:16;;34119;;:35;;34138:16;34119:35;:::i;:::-;:52;;;;:::i;:::-;34103:13;:68;18009:1;34190:15;:21;33975:986;;;-1:-1:-1;;;;;34272:29:0;;;;;;:25;:29;;;;;;;;34268:693;;;34322:14;:12;:14::i;:::-;34365:11;;34355:7;:21;34451:15;;34431:17;;34411;;:37;;34431:17;34411:37;:::i;:::-;:55;;;;:::i;:::-;34395:13;:71;18049:1;34485:15;:22;-1:-1:-1;;;;;34619:17:0;;-1:-1:-1;34619:17:0;;;:11;:17;;;;;;;;:56;;;;;34663:12;34641:18;;:34;;34619:56;34616:180;;;34709:7;;:11;;34719:1;34709:11;:::i;:::-;34699:7;:21;34759:13;;:17;;34775:1;34759:17;:::i;:::-;34743:13;:33;34616:180;34268:693;;;34886:14;:12;:14::i;:::-;18093:1;34919:15;:26;34268:693;34992:41;35007:4;35013:2;35017:6;35025:7;34992:14;:41::i;:::-;31051:4000;;;;30948:4103;;;:::o;1693:226::-;1813:7;1849:12;1841:6;;;;1833:29;;;;-1:-1:-1;;;1833:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1873:9:0;1885:5;1889:1;1885;:5;:::i;:::-;1873:17;1693:226;-1:-1:-1;;;;;1693:226:0:o;43040:164::-;43082:7;43103:15;43120;43139:19;:17;:19::i;:::-;43102:56;;-1:-1:-1;43102:56:0;-1:-1:-1;43176:20:0;43102:56;;43176:11;:20::i;:::-;43169:27;;;;43040:164;:::o;1360:181::-;1418:7;;1450:5;1454:1;1450;:5;:::i;:::-;1438:17;;1479:1;1474;:6;;1466:46;;;;-1:-1:-1;;;1466:46:0;;18904:2:1;1466:46:0;;;18886:21:1;18943:2;18923:18;;;18916:30;18982:29;18962:18;;;18955:57;19029:18;;1466:46:0;18702:351:1;41308:742:0;41408:7;41430;41452;41474;41496;41518;41568:23;41606:12;41633:18;41665:20;41677:7;41665:11;:20::i;:::-;41553:132;;;;;;41697:15;41714:23;41739:12;41755:113;41781:7;41803:4;41822:10;41847;:8;:10::i;:::-;41755:11;:113::i;:::-;41696:172;;;;-1:-1:-1;41696:172:0;;-1:-1:-1;41972:15:0;;-1:-1:-1;42002:4:0;;-1:-1:-1;42021:10:0;;-1:-1:-1;41308:742:0;;-1:-1:-1;;;;;41308:742:0:o;27670:324::-;-1:-1:-1;;;;;27753:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;27753:39:0;;;;;;;27803:38;27753:31;:39;27803:25;:38::i;:::-;27855:5;27852:35;;;27862:23;27880:4;27862:17;:23::i;:::-;27901:5;27897:34;;27908:21;27924:4;27908:15;:21::i;:::-;27946:40;;;-1:-1:-1;;;;;19244:32:1;;19226:51;;19320:14;;19313:22;19308:2;19293:18;;19286:50;27946:40:0;;19199:18:1;27946:40:0;;;;;;;27670:324;;:::o;2325:312::-;2445:7;2480:12;2473:5;2465:28;;;;-1:-1:-1;;;2465:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2504:9:0;2516:5;2520:1;2516;:5;:::i;35059:1640::-;21417:16;:23;;-1:-1:-1;;;;21417:23:0;-1:-1:-1;;;21417:23:0;;;;35136:24:::1;35154:4;35136:9;:24::i;:::-;35110:50;;35181:25;35209:76;35262:22;;35209:48;35236:20;;35209:22;;:26;;:48;;;;:::i;:::-;:52:::0;::::1;:76::i;:::-;35181:104;;35355:26;35384:29;35411:1;35384:22;;:26;;:29;;;;:::i;:::-;35355:58:::0;-1:-1:-1;35424:26:0::1;35453:39;:15:::0;35355:58;35453:19:::1;:39::i;:::-;35424:68:::0;-1:-1:-1;35541:21:0::1;35575:36;35424:68:::0;35575:16:::1;:36::i;:::-;35633:18;35654:44;:21;35680:17:::0;35654:25:::1;:44::i;:::-;35633:65;;35719:23;35745:61;35788:17;35745:38;35760:22;;35745:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;35719:87;;35817:21;35841:59;35882:17;35841:36;35856:20;;35841:10;:14;;:36;;;;:::i;:59::-;35817:83:::0;-1:-1:-1;35921:23:0::1;35947:50;35817:83:::0;35947:31:::1;:10:::0;35962:15;35947:14:::1;:31::i;:::-;:35:::0;::::1;:50::i;:::-;36035:1;36010:22;:26:::0;;;36047:22:::1;:26:::0;;;36084:20:::1;:24:::0;;;36155:14:::1;::::0;36147:54:::1;::::0;35921:76;;-1:-1:-1;36035:1:0;;-1:-1:-1;;;;;36155:14:0;;::::1;::::0;36183:13;;36035:1;36147:54;36035:1;36147:54;36183:13;36155:14;36147:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36233:16:0::1;::::0;36225:58:::1;::::0;36129:72;;-1:-1:-1;;;;;;36233:16:0::1;::::0;36263:15;;36225:58:::1;::::0;;;36263:15;36233:16;36225:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36212:71;;;;;36304:49;36317:18;36337:15;36304:12;:49::i;:::-;36369:71;::::0;;19759:25:1;;;19815:2;19800:18;;19793:34;;;19843:18;;;19836:34;;;36369:71:0::1;::::0;19747:2:1;19732:18;36369:71:0::1;;;;;;;36583:4;36559:21;:28;36556:136;;;36624:16;::::0;36616:64:::1;::::0;-1:-1:-1;;;;;36624:16:0;;::::1;::::0;36654:21:::1;::::0;36616:64:::1;::::0;;;36654:21;36624:16;36616:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36603:77:0;;-1:-1:-1;;36556:136:0::1;-1:-1:-1::0;;21463:16:0;:24;;-1:-1:-1;;;;21463:24:0;;;-1:-1:-1;;;;;;;;35059:1640:0:o;45112:235::-;45159:7;;:12;:34;;;;-1:-1:-1;45175:13:0;;:18;45159:34;45155:47;;;45112:235::o;45155:47::-;45232:7;;;45214:15;:25;45274:13;;;45250:21;:37;-1:-1:-1;45300:11:0;;;;45322:17;45112:235::o;37653:694::-;37809:7;37804:28;;37818:14;:12;:14::i;:::-;-1:-1:-1;;;;;37849:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;37873:22:0;;;;;;:11;:22;;;;;;;;37872:23;37849:46;37845:467;;;37912:48;37934:6;37942:9;37953:6;37912:21;:48::i;:::-;37845:467;;;-1:-1:-1;;;;;37983:19:0;;;;;;:11;:19;;;;;;;;37982:20;:46;;;;-1:-1:-1;;;;;;38006:22:0;;;;;;:11;:22;;;;;;;;37982:46;37978:334;;;38045:46;38065:6;38073:9;38084:6;38045:19;:46::i;37978:334::-;-1:-1:-1;;;;;38113:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38136:22:0;;;;;;:11;:22;;;;;;;;38113:45;38109:203;;;38175:48;38197:6;38205:9;38216:6;38175:21;:48::i;38109:203::-;38256:44;38274:6;38282:9;38293:6;38256:17;:44::i;:::-;38324:15;45409;;45399:7;:25;45451:21;;45435:13;:37;45355:125;38324:15;37653:694;;;;:::o;43212:605::-;43310:7;;43263;;;;-1:-1:-1;;;43263:7:0;43364:338;43388:9;:16;43384:20;;43364:338;;;43472:7;43448;:21;43456:9;43466:1;43456:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43456:12:0;43448:21;;;;;;;;;;;;;:31;;:83;;;43524:7;43500;:21;43508:9;43518:1;43508:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43508:12:0;43500:21;;;;;;;;;;;;;:31;43448:83;43426:146;;;-1:-1:-1;;43555:7:0;;;-1:-1:-1;;;17660:19:0;-1:-1:-1;43212:605:0;-1:-1:-1;;43212:605:0:o;43426:146::-;43597:34;43609:7;:21;43617:9;43627:1;43617:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43617:12:0;43609:21;;;;;;;;;;;;;43597:7;;:11;:34::i;:::-;43587:44;;43656:34;43668:7;:21;43676:9;43686:1;43676:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;43676:12:0;43668:21;;;;;;;;;;;;;43656:7;;:11;:34::i;:::-;43646:44;-1:-1:-1;43406:3:0;;;;:::i;:::-;;;;43364:338;;;-1:-1:-1;43726:7:0;;:20;;-1:-1:-1;;;43726:11:0;:20::i;:::-;43716:7;:30;43712:61;;;-1:-1:-1;;43756:7:0;;;-1:-1:-1;;;17660:19:0;-1:-1:-1;43212:605:0;-1:-1:-1;43212:605:0:o;43712:61::-;43792:7;;43801;;-1:-1:-1;43212:605:0;-1:-1:-1;43212:605:0:o;42058:412::-;42159:7;42181;42203;42238:12;42253:24;42269:7;42253:15;:24::i;:::-;42238:39;;42288:18;42309:30;42331:7;42309:21;:30::i;:::-;42288:51;-1:-1:-1;42350:23:0;42376:33;42288:51;42376:17;:7;42388:4;42376:11;:17::i;:33::-;42350:59;42445:4;;-1:-1:-1;42451:10:0;;-1:-1:-1;42058:412:0;;-1:-1:-1;;;42058:412:0:o;42478:554::-;42677:7;;;;42774:24;:7;42786:11;42774;:24::i;:::-;42756:42;-1:-1:-1;42809:12:0;42824:21;:4;42833:11;42824:8;:21::i;:::-;42809:36;-1:-1:-1;42856:18:0;42877:27;:10;42892:11;42877:14;:27::i;:::-;42856:48;-1:-1:-1;42915:23:0;42941:33;42856:48;42941:17;:7;42953:4;42941:11;:17::i;:33::-;42993:7;;;;-1:-1:-1;43019:4:0;;-1:-1:-1;42478:554:0;;-1:-1:-1;;;;;;;42478:554:0:o;36711:499::-;36801:16;;;36815:1;36801:16;;;;;;;;36777:21;;36801:16;;;;;;;;;;-1:-1:-1;36801:16:0;36777:40;;36846:4;36828;36833:1;36828:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36828:23:0;;;:7;;;;;;;;;;:23;;;;36872:15;;:22;;;-1:-1:-1;;;36872:22:0;;;;:15;;;;;:20;;:22;;;;;36828:7;;36872:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36862:4;36867:1;36862:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36862:32:0;;;:7;;;;;;;;;:32;36937:15;;36905:62;;36922:4;;36937:15;36955:11;36905:8;:62::i;:::-;36978:15;;:224;;-1:-1:-1;;;36978:224:0;;-1:-1:-1;;;;;36978:15:0;;;;:66;;:224;;37059:11;;36978:15;;37129:4;;37156;;37176:15;;36978:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36766:444;36711:499;:::o;1927:250::-;1985:7;2009:6;2005:47;;-1:-1:-1;2039:1:0;2032:8;;2005:47;2064:9;2076:5;2080:1;2076;:5;:::i;:::-;2064:17;-1:-1:-1;2109:1:0;2100:5;2104:1;2064:17;2100:5;:::i;:::-;:10;2092:56;;;;-1:-1:-1;;;2092:56:0;;21200:2:1;2092:56:0;;;21182:21:1;21239:2;21219:18;;;21212:30;21278:34;21258:18;;;21251:62;-1:-1:-1;;;21329:18:1;;;21322:31;21370:19;;2092:56:0;20998:397:1;37222:423:0;37335:15;;37303:62;;37320:4;;-1:-1:-1;;;;;37335:15:0;37353:11;37303:8;:62::i;:::-;37376:15;;37580:16;;37376:261;;-1:-1:-1;;;37376:261:0;;37448:4;37376:261;;;21749:34:1;21799:18;;;21792:34;;;37376:15:0;21842:18:1;;;21835:34;;;21885:18;;;21878:34;-1:-1:-1;;;;;37580:16:0;;;21928:19:1;;;21921:44;37611:15:0;21981:19:1;;;21974:35;37376:15:0;;;:31;;37415:9;;21683:19:1;;37376:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37222:423;;:::o;39694:686::-;39845:15;39875:23;39913:12;39940:23;39978:12;40005:18;40037:19;40048:7;40037:10;:19::i;:::-;-1:-1:-1;;;;;40085:15:0;;;;;;:7;:15;;;;;;39830:226;;-1:-1:-1;39830:226:0;;-1:-1:-1;39830:226:0;;-1:-1:-1;39830:226:0;-1:-1:-1;39830:226:0;-1:-1:-1;39830:226:0;-1:-1:-1;40085:28:0;;40105:7;40085:19;:28::i;:::-;-1:-1:-1;;;;;40067:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40142:7;:15;;;;:28;;40162:7;40142:19;:28::i;:::-;-1:-1:-1;;;;;40124:15:0;;;;;;;:7;:15;;;;;;:46;;;;40202:18;;;;;;;:39;;40225:15;40202:22;:39::i;:::-;-1:-1:-1;;;;;40181:18:0;;;;;;:7;:18;;;;;:60;40252:26;40267:10;40252:14;:26::i;:::-;40289:23;40301:4;40307;40289:11;:23::i;:::-;40345:9;-1:-1:-1;;;;;40328:44:0;40337:6;-1:-1:-1;;;;;40328:44:0;;40356:15;40328:44;;;;160:25:1;;148:2;133:18;;14:177;40328:44:0;;;;;;;;39819:561;;;;;;39694:686;;;:::o;38988:698::-;39137:15;39167:23;39205:12;39232:23;39270:12;39297:18;39329:19;39340:7;39329:10;:19::i;:::-;-1:-1:-1;;;;;39377:15:0;;;;;;:7;:15;;;;;;39122:226;;-1:-1:-1;39122:226:0;;-1:-1:-1;39122:226:0;;-1:-1:-1;39122:226:0;-1:-1:-1;39122:226:0;-1:-1:-1;39122:226:0;-1:-1:-1;39377:28:0;;39122:226;39377:19;:28::i;:::-;-1:-1:-1;;;;;39359:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39437:18;;;;;:7;:18;;;;;:39;;39460:15;39437:22;:39::i;:::-;-1:-1:-1;;;;;39416:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39508:7;:18;;;;:39;;39531:15;39508:22;:39::i;40388:757::-;40539:15;40569:23;40607:12;40634:23;40672:12;40699:18;40731:19;40742:7;40731:10;:19::i;:::-;-1:-1:-1;;;;;40779:15:0;;;;;;:7;:15;;;;;;40524:226;;-1:-1:-1;40524:226:0;;-1:-1:-1;40524:226:0;;-1:-1:-1;40524:226:0;-1:-1:-1;40524:226:0;-1:-1:-1;40524:226:0;-1:-1:-1;40779:28:0;;40799:7;40779:19;:28::i;:::-;-1:-1:-1;;;;;40761:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40836:7;:15;;;;:28;;40856:7;40836:19;:28::i;38355:625::-;38502:15;38532:23;38570:12;38597:23;38635:12;38662:18;38694:19;38705:7;38694:10;:19::i;:::-;-1:-1:-1;;;;;38742:15:0;;;;;;:7;:15;;;;;;38487:226;;-1:-1:-1;38487:226:0;;-1:-1:-1;38487:226:0;;-1:-1:-1;38487:226:0;-1:-1:-1;38487:226:0;-1:-1:-1;38487:226:0;-1:-1:-1;38742:28:0;;38487:226;38742:19;:28::i;44792:130::-;44856:7;44883:31;44908:5;44883:20;44895:7;;44883;:11;;:20;;;;:::i;44930:174::-;45027:7;45059:37;45090:5;45059:26;45071:13;;45059:7;:11;;:26;;;;:::i;43825:959::-;18009:1;43891:15;;:22;43888:594;;;43987:13;;43968:16;;43955:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43929:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;44069:13:0;;44052:14;;44039:27;;:10;:27;:::i;:::-;:43;;;;:::i;:::-;44015:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;44155:13:0;;44136:16;;44123:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;44097:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;43888:594:0;;-1:-1:-1;43888:594:0;;18049:1;44189:15;;:23;44186:296;;;44287:13;;44267:17;;44254:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44228:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44370:13:0;;44352:15;;44339:28;;:10;:28;:::i;:::-;:44;;;;:::i;:::-;44315:20;;:68;;;;;;;:::i;:::-;;;;-1:-1:-1;;44457:13:0;;44437:17;;44424:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;44398:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;44186:296:0;44492:19;44514:10;:8;:10::i;:::-;44492:32;-1:-1:-1;44535:18:0;44556:27;:10;44492:32;44556:14;:27::i;:::-;44635:4;44619:22;;;;:7;:22;;;;;;44535:48;;-1:-1:-1;44619:38:0;;44535:48;44619:26;:38::i;:::-;44610:4;44594:22;;;;:7;:22;;;;;;;;:63;;;;44672:11;:26;;;;;;44668:108;;;44754:4;44738:22;;;;:7;:22;;;;;;:38;;44765:10;44738:26;:38::i;:::-;44729:4;44713:22;;;;:7;:22;;;;;:63;44668:108;43877:907;;43825:959;:::o;41153:147::-;41231:7;;:17;;41243:4;41231:11;:17::i;:::-;41221:7;:27;41272:10;;:20;;41287:4;41272:14;:20::i;:::-;41259:10;:33;-1:-1:-1;;41153:147:0:o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:180::-;857:6;910:2;898:9;889:7;885:23;881:32;878:52;;;926:1;923;916:12;878:52;-1:-1:-1;949:23:1;;798:180;-1:-1:-1;798:180:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1038:70;983:131;:::o;1119:315::-;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;3200:118::-;3286:5;3279:13;3272:21;3265:5;3262:32;3252:60;;3308:1;3305;3298:12;3323:309;3388:6;3396;3449:2;3437:9;3428:7;3424:23;3420:32;3417:52;;;3465:1;3462;3455:12;3417:52;3501:9;3488:23;3478:33;;3561:2;3550:9;3546:18;3533:32;3574:28;3596:5;3574:28;:::i;:::-;3621:5;3611:15;;;3323:309;;;;;:::o;3637:382::-;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3818:9;3805:23;3837:31;3862:5;3837:31;:::i;:::-;3887:5;-1:-1:-1;3944:2:1;3929:18;;3916:32;3957:30;3916:32;3957:30;:::i;4024:388::-;4092:6;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4208:9;4195:23;4227:31;4252:5;4227:31;:::i;:::-;4277:5;-1:-1:-1;4334:2:1;4319:18;;4306:32;4347:33;4306:32;4347:33;:::i;4417:385::-;4503:6;4511;4519;4527;4580:3;4568:9;4559:7;4555:23;4551:33;4548:53;;;4597:1;4594;4587:12;4548:53;-1:-1:-1;;4620:23:1;;;4690:2;4675:18;;4662:32;;-1:-1:-1;4741:2:1;4726:18;;4713:32;;4792:2;4777:18;4764:32;;-1:-1:-1;4417:385:1;-1:-1:-1;4417:385:1:o;4807:241::-;4863:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4971:9;4958:23;4990:28;5012:5;4990:28;:::i;5053:356::-;5255:2;5237:21;;;5274:18;;;5267:30;5333:34;5328:2;5313:18;;5306:62;5400:2;5385:18;;5053:356::o;5414:127::-;5475:10;5470:3;5466:20;5463:1;5456:31;5506:4;5503:1;5496:15;5530:4;5527:1;5520:15;5546:168;5586:7;5652:1;5648;5644:6;5640:14;5637:1;5634:21;5629:1;5622:9;5615:17;5611:45;5608:71;;;5659:18;;:::i;:::-;-1:-1:-1;5699:9:1;;5546:168::o;5719:416::-;5921:2;5903:21;;;5960:2;5940:18;;;5933:30;5999:34;5994:2;5979:18;;5972:62;-1:-1:-1;;;6065:2:1;6050:18;;6043:50;6125:3;6110:19;;5719:416::o;6140:217::-;6180:1;6206;6196:132;;6250:10;6245:3;6241:20;6238:1;6231:31;6285:4;6282:1;6275:15;6313:4;6310:1;6303:15;6196:132;-1:-1:-1;6342:9:1;;6140:217::o;7125:127::-;7186:10;7181:3;7177:20;7174:1;7167:31;7217:4;7214:1;7207:15;7241:4;7238:1;7231:15;7257:125;7297:4;7325:1;7322;7319:8;7316:34;;;7330:18;;:::i;:::-;-1:-1:-1;7367:9:1;;7257:125::o;7387:127::-;7448:10;7443:3;7439:20;7436:1;7429:31;7479:4;7476:1;7469:15;7503:4;7500:1;7493:15;7519:135;7558:3;-1:-1:-1;;7579:17:1;;7576:43;;;7599:18;;:::i;:::-;-1:-1:-1;7646:1:1;7635:13;;7519:135::o;8995:128::-;9035:3;9066:1;9062:6;9059:1;9056:13;9053:39;;;9072:18;;:::i;:::-;-1:-1:-1;9108:9:1;;8995:128::o;10376:251::-;10446:6;10499:2;10487:9;10478:7;10474:23;10470:32;10467:52;;;10515:1;10512;10505:12;10467:52;10547:9;10541:16;10566:31;10591:5;10566:31;:::i;11653:184::-;11723:6;11776:2;11764:9;11755:7;11751:23;11747:32;11744:52;;;11792:1;11789;11782:12;11744:52;-1:-1:-1;11815:16:1;;11653:184;-1:-1:-1;11653:184:1:o;12121:245::-;12188:6;12241:2;12229:9;12220:7;12216:23;12212:32;12209:52;;;12257:1;12254;12247:12;12209:52;12289:9;12283:16;12308:28;12330:5;12308:28;:::i;17924:346::-;18126:2;18108:21;;;18165:2;18145:18;;;18138:30;-1:-1:-1;;;18199:2:1;18184:18;;18177:52;18261:2;18246:18;;17924:346::o;20013:980::-;20275:4;20323:3;20312:9;20308:19;20354:6;20343:9;20336:25;20380:2;20418:6;20413:2;20402:9;20398:18;20391:34;20461:3;20456:2;20445:9;20441:18;20434:31;20485:6;20520;20514:13;20551:6;20543;20536:22;20589:3;20578:9;20574:19;20567:26;;20628:2;20620:6;20616:15;20602:29;;20649:1;20659:195;20673:6;20670:1;20667:13;20659:195;;;20738:13;;-1:-1:-1;;;;;20734:39:1;20722:52;;20829:15;;;;20794:12;;;;20770:1;20688:9;20659:195;;;-1:-1:-1;;;;;;;20910:32:1;;;;20905:2;20890:18;;20883:60;-1:-1:-1;;;20974:3:1;20959:19;20952:35;20871:3;20013:980;-1:-1:-1;;;20013:980:1:o;22020:306::-;22108:6;22116;22124;22177:2;22165:9;22156:7;22152:23;22148:32;22145:52;;;22193:1;22190;22183:12;22145:52;22222:9;22216:16;22206:26;;22272:2;22261:9;22257:18;22251:25;22241:35;;22316:2;22305:9;22301:18;22295:25;22285:35;;22020:306;;;;;:::o

Swarm Source

ipfs://c3d9379c7f39ff0e2dbdbdc28796fd7e818cba901befffde50d2e21960f63269
Loading