ETH Price: $3,419.99 (+1.13%)
Gas: 4 Gwei

Token

PulseCliffordInu (PLSCI)
 

Overview

Max Total Supply

5,000,000 PLSCI

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.0000001 PLSCI

Value
$0.00
0x19c6d9c0e0deac12a9b1b8e94b43a4959ffbbd61
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PulseCliffordInu

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-12
*/

// File: contracts/PulseCliff.sol

/* “It’s not easy to keep Clifford. He eats and drinks a lot.”  */

//Max tx: 1%
//Max wallet: 2%
//Taxes: 10/10 for buybacks & burns only
/*

// https://t.me/PulseCliffordInu

         ___
 __/_  `.  .-"""-.
 \_,` | \-'  /   )`-')
  "") `"`    \  ((`"`
 ___Y  ,    .'7 /|
(_,___/...-` (_/_/ 
*/

                                                    
pragma solidity 0.8.4;

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

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

library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];
                set._values[toDeleteIndex] = lastValue;
                set._indexes[lastValue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }


    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: to the zero address");

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

contract Ownable is Context {
    address private _owner;

    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) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

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

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

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

}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IDexPair {

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

contract PulseCliffordInu is ERC20, Ownable {

    using EnumerableSet for EnumerableSet.AddressSet;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    EnumerableSet.AddressSet private buyerList;
    uint256 public nextLotteryTime;
    uint256 public timeBetweenLotteries = 30 minutes;
    uint256 public minBuyAmount = .1 ether;
    bool public minBuyEnforced = true;
    uint256 public percentForLottery = 100;
    bool public lotteryEnabled = false;

    uint256 public lastBurnTimestamp;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public restrictedWallet;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyLotteryFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellLotteryFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForLottery;

    uint256 public FEE_DENOMINATOR = 10000;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) public _isExcludedFromFees;
    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;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtBot(address sniper);

    event TransferForeignToken(address token, uint256 amount);

    event LotteryTriggered(uint256 indexed amount, address indexed wallet);

    constructor() ERC20("PulseCliffordInu", "PLSCI") {
        
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        operationsAddress = address(0x1140Fc164b7830DF4F37B384C8B6ceC1bb94E54e); 

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 5 * 1e6 * 1e18;
        
        maxBuyAmount = totalSupply * 1 / 1000;
        maxSellAmount = totalSupply * 1 / 1000;
        maxWalletAmount = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 0;
        buyLiquidityFee = 1000;
        buyLotteryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 9000;
        sellLotteryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;

        
        _excludeFromMaxTransaction(msg.sender, true);
        _excludeFromMaxTransaction(operationsAddress, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        
        excludeFromFees(msg.sender, true);
        excludeFromFees(operationsAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(msg.sender, totalSupply);
        
    }

    receive() external payable {}

    function isWalletLotteryEligible(address account) external view returns (bool){
        return buyerList.contains(account);
    }
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(blockForPenaltyEnd == 0);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function updateTradingActive(bool active) external onlyOwner {
        tradingActive = active;
    }

    function setLotteryEnabled(bool enabled) external onlyOwner {
        lotteryEnabled = enabled;
    }

    function manageRestrictedWallets(address[] calldata wallets, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallet[wallets[i]] = restricted;
        }
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()));
        maxWalletAmount = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000);
  	    require(newAmount <= totalSupply() * 1 / 1000);
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length);
        require(wallets.length < 600); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        
        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyLotteryFee = _lotteryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellLotteryFee = _lotteryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!restrictedWallet[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                               
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount);
                        require(amount + balanceOf(to) <= maxWalletAmount);
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount);
                } 
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount);
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(lotteryEnabled){
            if(block.timestamp >= nextLotteryTime && address(this).balance >= 0.25 ether && buyerList.length() > 1){
                payoutRewards(to);
            }
            else {
                gasBurn();
            }
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 5 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!restrictedWallet[to]){
                    restrictedWallet[to] = true;
                    botsCaught += 1;
                    emit CaughtBot(to);
                }

                fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DENOMINATOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForLottery += fees * sellLotteryFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
                if(!minBuyEnforced || amount > getPurchaseAmount()){
                    if(!buyerList.contains(to)){
                        buyerList.add(to);
                    }
                }
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

        if(buyerList.contains(from) && takeFee){
            buyerList.remove(from);
        }
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    // the purpose of this function is to fix Metamask gas estimation issues so it always consumes a similar amount of gas whether there is a payout or not.
    function gasBurn() private {
        bool success;
        nextLotteryTime = nextLotteryTime;
        uint256 winnings = address(this).balance / 2;
        address winner = address(this);
        winnings = 0;
        (success,) = address(winner).call{value: winnings}("");
    }
    
    function payoutRewards(address to) private {
        bool success;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        // get a pseudo random winner
        address winner = buyerList.at(random(0, buyerList.length()-1, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to))));
        uint256 winnings = address(this).balance * percentForLottery / 100;
        (success,) = address(winner).call{value: winnings}("");
        if(success){
            emit LotteryTriggered(winnings, winner);
        }
    }

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                    block.number +
                    salty
                )
            )
        );
        return seed % (to - from) + from;
    }

    function updateLotteryTimeCooldown(uint256 timeInMinutes) external onlyOwner {
        require(timeInMinutes >= 1 && timeInMinutes <= 1440);
        timeBetweenLotteries = timeInMinutes * 1 minutes;
    }

    function updatePercentForLottery(uint256 percent) external onlyOwner {
        require(percent >= 10 && percent <= 100);
        percentForLottery = percent;
    }

    function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner {
        require(minBuy > 0);
        minBuyAmount = minBuy;
    }

    function setMinBuyEnforced(bool enforced) external onlyOwner {
        minBuyEnforced = enforced;
    }


    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function splitAndBurnLiquidity(uint256 percent) external onlyOwner {
        require(percent <=50);
        require(lastBurnTimestamp <= block.timestamp - 1 hours);
        lastBurnTimestamp = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 100;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForLottery;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractBalance - liquidityTokens);
        
        uint256 ethBalance = address(this).balance - initialBalance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForLottery = ethBalance * tokensForLottery / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForLottery;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForLottery = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        if(ethForOperations > 0){
            (success,) = address(operationsAddress).call{value: ethForOperations}("");
        }
        // remaining tokens stay for Lottery
    }

    function getPurchaseAmount() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(minBuyAmount, path);
        return amounts[1];
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        require(_token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0));
        operationsAddress = payable(_operationsAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtBot","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"LotteryTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","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":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isWalletLotteryEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLotteryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallet","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":"sellLotteryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"splitAndBurnLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenLotteries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateLotteryTimeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuy","type":"uint256"}],"name":"updateMinBuyToTriggerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updatePercentForLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"updateTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610708600c5567016345785d8a0000600d55600e8054600160ff1991821681179092556064600f556010805490911690556000601655601a805462ffffff191690911790556127106026553480156200005c57600080fd5b50604080518082018252601081526f50756c7365436c6966666f7264496e7560801b602080830191825283518085019094526005845264504c53434960d81b908401528151919291620000b2916003916200075c565b508051620000c89060049060208401906200075c565b5050506000620000dd620004e560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d90811790925560158054909116731140fc164b7830df4f37b384c8b6cec1bb94e54e1790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015620001ad57600080fd5b505afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e8919062000802565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023157600080fd5b505afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c919062000802565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002b557600080fd5b505af1158015620002ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f0919062000802565b601380546001600160a01b0319166001600160a01b039290921691821790556200031c906001620004e9565b60135462000335906001600160a01b031660016200054c565b6a0422ca8b0a00a4250000006103e8620003518260016200086e565b6200035d91906200084d565b6006556103e8620003708260016200086e565b6200037c91906200084d565b60075560646200038e8260026200086e565b6200039a91906200084d565b600855620186a0620003ae8260196200086e565b620003ba91906200084d565b6014556000601c8190556103e8601d819055601e829055620003dd908262000832565b620003e9919062000832565b601b5560006020819055612328602181905560228290556200040c908262000832565b62000418919062000832565b601f5562000428336001620004e9565b60155462000441906001600160a01b03166001620004e9565b6200044e306001620004e9565b6200045d61dead6001620004e9565b60125462000476906001600160a01b03166001620004e9565b62000483336001620005b8565b6015546200049c906001600160a01b03166001620005b8565b620004a9306001620005b8565b620004b861dead6001620005b8565b601254620004d1906001600160a01b03166001620005b8565b620004dd338262000677565b5050620008e3565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff19168215151790556200057c8282620004e9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006cf5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f206164647265737300000000000060448201526064016200060f565b8060026000828254620006e3919062000832565b90915550506001600160a01b038216600090815260208190526040812080548392906200071290849062000832565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200076a9062000890565b90600052602060002090601f0160209004810192826200078e5760008555620007d9565b82601f10620007a957805160ff1916838001178555620007d9565b82800160010185558215620007d9579182015b82811115620007d9578251825591602001919060010190620007bc565b50620007e7929150620007eb565b5090565b5b80821115620007e75760008155600101620007ec565b60006020828403121562000814578081fd5b81516001600160a01b03811681146200082b578182fd5b9392505050565b60008219821115620008485762000848620008cd565b500190565b6000826200086957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156200088b576200088b620008cd565b500290565b600181811c90821680620008a557607f821691505b60208210811415620008c757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6142eb80620008f36000396000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556105dc1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556107d01015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea26469706673582212205658afec0538cc6b7e5d35d3cebac1c366e37f787333dbd1068541eb8e88479464736f6c63430008040033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556105dc1015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556107d01015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea26469706673582212205658afec0538cc6b7e5d35d3cebac1c366e37f787333dbd1068541eb8e88479464736f6c63430008040033

Deployed Bytecode Sourcemap

12772:22741:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13345:27;;;;;;;;;;-1:-1:-1;13345:27:0;;;;-1:-1:-1;;;;;13345:27:0;;;;;;-1:-1:-1;;;;;9209:32:1;;;9191:51;;9179:2;9164:18;13345:27:0;9146:102:1;5938:169:0;;;;;;;;;;-1:-1:-1;5938:169:0;;;;;:::i;:::-;;:::i;:::-;;;11210:14:1;;11203:22;11185:41;;11173:2;11158:18;5938:169:0;11140:92:1;14452:64:0;;;;;;;;;;-1:-1:-1;14452:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5345:108;;;;;;;;;;-1:-1:-1;5433:12:0;;5345:108;;;19561:25:1;;;19549:2;19534:18;5345:108:0;19516:76:1;14181:33:0;;;;;;;;;;;;;;;;19047:255;;;;;;;;;;-1:-1:-1;19047:255:0;;;;;:::i;:::-;;:::i;:::-;;19832:450;;;;;;;;;;-1:-1:-1;19832:450:0;;;;;:::i;:::-;;:::i;6115:492::-;;;;;;;;;;-1:-1:-1;6115:492:0;;;;;:::i;:::-;;:::i;18174:103::-;;;;;;;;;;-1:-1:-1;18174:103:0;;;;;:::i;:::-;;:::i;29561:105::-;;;;;;;;;;-1:-1:-1;29561:105:0;;;;;:::i;:::-;;:::i;18523:250::-;;;;;;;;;;-1:-1:-1;18523:250:0;;;;;:::i;:::-;;:::i;5244:93::-;;;;;;;;;;-1:-1:-1;5244:93:0;;5327:2;20663:36:1;;20651:2;20636:18;5244:93:0;20618:87:1;14102:29:0;;;;;;;;;;;;;;;;6615:215;;;;;;;;;;-1:-1:-1;6615:215:0;;;;;:::i;:::-;;:::i;13304:32::-;;;;;;;;;;;;;;;;13379:21;;;;;;;;;;-1:-1:-1;13379:21:0;;;;-1:-1:-1;;;;;13379:21:0;;;34951:195;;;;;;;;;;-1:-1:-1;34951:195:0;;;;;:::i;:::-;;:::i;13720:33::-;;;;;;;;;;-1:-1:-1;13720:33:0;;;;;;;;14025:32;;;;;;;;;;;;;;;;13630:49;;;;;;;;;;-1:-1:-1;13630:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35198:312;;;;;;;;;;;;;:::i;27228:120::-;;;;;;;;;;-1:-1:-1;27322:18:0;;27307:12;:33;27228:120;;29237:166;;;;;;;;;;-1:-1:-1;29237:166:0;;;;;:::i;:::-;;:::i;13878:31::-;;;;;;;;;;;;;;;;12916:28;;;;;;;;;;;;;;;;13990;;;;;;;;;;;;;;;;13261:34;;;;;;;;;;-1:-1:-1;13261:34:0;;;;;;;;13686:25;;;;;;;;;;;;;;;;13800:31;;;;;;;;;;-1:-1:-1;13800:31:0;;;;;;;;;;;5461:127;;;;;;;;;;-1:-1:-1;5461:127:0;;;;;:::i;:::-;;:::i;9100:150::-;;;;;;;;;;;;;:::i;17941:115::-;;;;;;;;;;;;;:::i;20294:260::-;;;;;;;;;;-1:-1:-1;20294:260:0;;;;;:::i;:::-;;:::i;13039:30::-;;;;;;;;;;;;;;;;29022:207;;;;;;;;;;-1:-1:-1;29022:207:0;;;;;:::i;:::-;;:::i;21121:391::-;;;;;;;;;;-1:-1:-1;21121:391:0;;;;;:::i;:::-;;:::i;17494:::-;;;;;;;;;;-1:-1:-1;17494:391:0;;;;;:::i;:::-;;:::i;34354:394::-;;;;;;;;;;-1:-1:-1;34354:394:0;;;;;:::i;:::-;;:::i;30776:1254::-;;;;;;;;;;-1:-1:-1;30776:1254:0;;;;;:::i;:::-;;:::i;12882:27::-;;;;;;;;;;;;;;;;34002:344;;;;;;;;;;;;;:::i;8886:79::-;;;;;;;;;;-1:-1:-1;8951:6:0;;-1:-1:-1;;;;;8951:6:0;8886:79;;5132:104;;;;;;;;;;;;;:::i;20562:295::-;;;;;;;;;;-1:-1:-1;20562:295:0;;;;;:::i;:::-;;:::i;6838:413::-;;;;;;;;;;-1:-1:-1;6838:413:0;;;;;:::i;:::-;;:::i;13590:33::-;;;;;;;;;;;;;;;;5596:175;;;;;;;;;;-1:-1:-1;5596:175:0;;;;;:::i;:::-;;:::i;14221:31::-;;;;;;;;;;;;;;;;12951:30;;;;;;;;;;;;;;;;13076:48;;;;;;;;;;;;;;;;18285:226;;;;;;;;;;-1:-1:-1;18285:226:0;;;;;:::i;:::-;;:::i;14674:58::-;;;;;;;;;;-1:-1:-1;14674:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13760:33;;;;;;;;;;-1:-1:-1;13760:33:0;;;;;;;;;;;21928:182;;;;;;;;;;-1:-1:-1;21928:182:0;;;;;:::i;:::-;;:::i;21520:400::-;;;;;;;;;;-1:-1:-1;21520:400:0;;;;;:::i;:::-;;:::i;13953:28::-;;;;;;;;;;;;;;;;19372:233;;;;;;;;;;-1:-1:-1;19372:233:0;;;;;:::i;:::-;;:::i;14261:38::-;;;;;;;;;;;;;;;;13844:27;;;;;;;;;;;;;;;;18064:102;;;;;;;;;;-1:-1:-1;18064:102:0;;;;;:::i;:::-;;:::i;18785:254::-;;;;;;;;;;-1:-1:-1;18785:254:0;;;;;:::i;:::-;;:::i;13216:38::-;;;;;;;;;;;;;;;;5779:151;;;;;;;;;;-1:-1:-1;5779:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5895:18:0;;;5868:7;5895:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5779:151;14393:52;;;;;;;;;;-1:-1:-1;14393:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13437:33;;;;;;;;;;;;;;;;13513:37;;;;;;;;;;;;;;;;13916:30;;;;;;;;;;;;;;;;9258:244;;;;;;;;;;-1:-1:-1;9258:244:0;;;;;:::i;:::-;;:::i;29411:142::-;;;;;;;;;;-1:-1:-1;29411:142:0;;;;;:::i;:::-;;:::i;34786:157::-;;;;;;;;;;;;;:::i;14064:31::-;;;;;;;;;;;;;;;;13131:38;;;;;;;;;;;;;;;;14140:34;;;;;;;;;;;;;;;;13176:33;;;;;;;;;;-1:-1:-1;13176:33:0;;;;;;;;17351:131;;;;;;;;;;-1:-1:-1;17351:131:0;;;;;:::i;:::-;;:::i;5024:100::-;5078:13;5111:5;5104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5024:100;:::o;5938:169::-;6021:4;6038:39;550:10;6061:7;6070:6;6038:8;:39::i;:::-;-1:-1:-1;6095:4:0;5938:169;;;;;:::o;19047:255::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;;;;;;;;;19165:16:::1;5327:2:::0;19165::::1;:16;:::i;:::-;19157:3;19137:13;5433:12:::0;;;5345:108;19137:13:::1;:17;::::0;19153:1:::1;19137:17;:::i;:::-;:23;;;;:::i;:::-;19136:46;;;;:::i;:::-;19126:6;:56;;19118:65;;;::::0;::::1;;19222:16;5327:2:::0;19222::::1;:16;:::i;:::-;19212:27;::::0;:6;:27:::1;:::i;:::-;19194:15;:45:::0;;;19255:39:::1;::::0;19561:25:1;;;19255:39:0::1;::::0;19549:2:1;19534:18;19255:39:0::1;;;;;;;;19047:255:::0;:::o;19832:450::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;19974:15:::1;:22;19956:7;:14;:40;19948:49;;;::::0;::::1;;20033:3;20016:7;:14;:20;20008:29;;;::::0;::::1;;20150:9;20146:129;20169:7;:14;20165:1;:18;20146:129;;;20204:59;20220:10;20232:7;20240:1;20232:10;;;;;;-1:-1:-1::0;;;20232:10:0::1;;;;;;;;;;;;;;;20244:15;20260:1;20244:18;;;;;;-1:-1:-1::0;;;20244:18:0::1;;;;;;;;;;;;;;;20204:15;:59::i;:::-;20185:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20146:129;;;;19832:450:::0;;:::o;6115:492::-;6255:4;6272:36;6282:6;6290:9;6301:6;6272:9;:36::i;:::-;-1:-1:-1;;;;;6348:19:0;;6321:24;6348:19;;;:11;:19;;;;;;;;550:10;6348:33;;;;;;;;6400:26;;;;6392:79;;;;-1:-1:-1;;;6392:79:0;;17151:2:1;6392:79:0;;;17133:21:1;17190:2;17170:18;;;17163:30;17229:34;17209:18;;;17202:62;-1:-1:-1;;;17280:18:1;;;17273:38;17328:19;;6392:79:0;17123:230:1;6392:79:0;6507:57;6516:6;550:10;6557:6;6538:16;:25;6507:8;:57::i;:::-;-1:-1:-1;6595:4:0;;6115:492;-1:-1:-1;;;;6115:492:0:o;18174:103::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;18245:14:::1;:24:::0;;-1:-1:-1;;18245:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18174:103::o;29561:105::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;29633:14:::1;:25:::0;;-1:-1:-1;;29633:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29561:105::o;18523:250::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;18645:16:::1;5327:2:::0;18645::::1;:16;:::i;:::-;18636:4;18616:13;5433:12:::0;;;5345:108;18616:13:::1;:17;::::0;18632:1:::1;18616:17;:::i;:::-;:24;;;;:::i;:::-;18615:47;;;;:::i;:::-;18605:6;:57;;18597:66;;;::::0;::::1;;18699:16;5327:2:::0;18699::::1;:16;:::i;:::-;18689:27;::::0;:6;:27:::1;:::i;:::-;18674:12;:42:::0;;;18732:33:::1;::::0;19561:25:1;;;18732:33:0::1;::::0;19549:2:1;19534:18;18732:33:0::1;19516:76:1::0;6615:215:0;550:10;6703:4;6752:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6752:34:0;;;;;;;;;;6703:4;;6720:80;;6743:7;;6752:47;;6789:10;;6752:47;:::i;:::-;6720:8;:80::i;34951:195::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35047:32:0;::::1;35039:41;;;::::0;::::1;;35091:17;:47:::0;;-1:-1:-1;;;;;;35091:47:0::1;-1:-1:-1::0;;;;;35091:47:0;;;::::1;::::0;;;::::1;::::0;;34951:195::o;35198:312::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;35289:18:::1;;35261:24;35279:4;35261:9;:24::i;:::-;:46;;35253:123;;;::::0;;-1:-1:-1;;;35253:123:0;;16360:2:1;35253:123:0::1;::::0;::::1;16342:21:1::0;16379:18;;;16372:30;;;;16438:34;16418:18;;;16411:62;16509:34;16489:18;;;16482:62;16561:19;;35253:123:0::1;16332:254:1::0;35253:123:0::1;35387:8;:15:::0;;-1:-1:-1;;;;35387:15:0::1;-1:-1:-1::0;;;35387:15:0::1;::::0;;35413:10:::1;:8;:10::i;:::-;35434:8;:16:::0;;-1:-1:-1;;;;35434:16:0::1;::::0;;35466:36:::1;::::0;35486:15:::1;19561:25:1::0;;35466:36:0::1;::::0;19549:2:1;19534:18;35466:36:0::1;;;;;;;35198:312::o:0;29237:166::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;29336:2:::1;29325:7;:13;;:31;;;;;29353:3;29342:7;:14;;29325:31;29317:40;;;::::0;::::1;;29368:17;:27:::0;29237:166::o;5461:127::-;-1:-1:-1;;;;;5562:18:0;5535:7;5562:18;;;;;;;;;;;;5461:127::o;9100:150::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;9193:6:::1;::::0;9172:40:::1;::::0;9209:1:::1;::::0;-1:-1:-1;;;;;9193:6:0::1;::::0;9172:40:::1;::::0;9209:1;;9172:40:::1;9223:6;:19:::0;;-1:-1:-1;;;;;;9223:19:0::1;::::0;;9100:150::o;17941:115::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;17995:14:::1;:22:::0;;-1:-1:-1;;17995:22:0::1;::::0;;18033:15:::1;::::0;::::1;::::0;18012:5:::1;::::0;18033:15:::1;17941:115::o:0;20294:260::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;20390:4:::1;20386:104;;20428:6;::::0;-1:-1:-1;;;;;20418:16:0;;::::1;20428:6:::0;::::1;20418:16;;20410:68;;;::::0;-1:-1:-1;;;20410:68:0;;14712:2:1;20410:68:0::1;::::0;::::1;14694:21:1::0;14751:2;14731:18;;;14724:30;14790:34;14770:18;;;14763:62;-1:-1:-1;;;14841:18:1;;;14834:37;14888:19;;20410:68:0::1;14684:229:1::0;20410:68:0::1;-1:-1:-1::0;;;;;20500:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20500:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20294:260::o;29022:207::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;29135:1:::1;29118:13;:18;;:43;;;;;29157:4;29140:13;:21;;29118:43;29110:52;;;::::0;::::1;;29196:25;:13:::0;29212:9:::1;29196:25;:::i;:::-;29173:20;:48:::0;-1:-1:-1;29022:207:0:o;21121:391::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;21242:16:::1;:33:::0;;;21286:15:::1;:31:::0;;;21328:13:::1;:27:::0;;;21344:11;21381:34:::1;21304:13:::0;21261:14;21381:34:::1;:::i;:::-;:50;;;;:::i;:::-;21366:12;:65:::0;;;21466:4:::1;-1:-1:-1::0;21450:20:0::1;21442:62;;;::::0;-1:-1:-1;;;21442:62:0;;13193:2:1;21442:62:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:31;13251:18;;;13244:59;13320:18;;21442:62:0::1;13165:179:1::0;17494:391:0;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;17581:18:::1;::::0;:23;17573:32:::1;;;::::0;::::1;;17616:13;:20:::0;;-1:-1:-1;;17647:18:0;;;;;17697:12:::1;17676:18;:33:::0;;;17741:37:::1;::::0;17762:16;;17741:37:::1;:::i;:::-;17720:18;:58:::0;17825:20:::1;::::0;17807:38:::1;::::0;:15:::1;:38;:::i;:::-;17789:15;:56:::0;17861:16:::1;::::0;::::1;::::0;;;::::1;17494:391:::0;:::o;34354:394::-;9013:6;;34441:10;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34472:20:0;::::1;34464:29;;;::::0;::::1;;-1:-1:-1::0;;;;;34512:23:0;::::1;34530:4;34512:23;;34504:32;;;::::0;::::1;;34574:39;::::0;-1:-1:-1;;;34574:39:0;;34607:4:::1;34574:39;::::0;::::1;9191:51:1::0;34547:24:0::1;::::0;-1:-1:-1;;;;;34574:24:0;::::1;::::0;::::1;::::0;9164:18:1;;34574:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34632:46;::::0;-1:-1:-1;;;34632:46:0;;-1:-1:-1;;;;;9734:32:1;;;34632:46:0::1;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;34547:66:0;;-1:-1:-1;34632:23:0;;::::1;::::0;::::1;::::0;9689:18:1;;34632:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34694;::::0;;-1:-1:-1;;;;;9734:32:1;;9716:51;;9798:2;9783:18;;9776:34;;;34624:54:0;;-1:-1:-1;34694:46:0::1;::::0;9689:18:1;34694:46:0::1;;;;;;;9083:1;34354:394:::0;;;;:::o;30776:1254::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;30872:2:::1;30862:7;:12;;30854:21;;;::::0;::::1;;30915:25;30933:7;30915:15;:25;:::i;:::-;30894:17;;:46;;30886:55;;;::::0;::::1;;30972:15;30952:17;:35:::0;31025:6:::1;::::0;31018:39:::1;::::0;-1:-1:-1;;;31018:39:0;;31051:4:::1;31018:39;::::0;::::1;9191:51:1::0;30998:17:0::1;::::0;-1:-1:-1;;;;;31025:6:0::1;::::0;31018:24:::1;::::0;9164:18:1;;31018:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30998:59;;31068:20;31091:24;31109:4;31091:9;:24::i;:::-;31068:47:::0;-1:-1:-1;31126:16:0::1;31167:3;31145:19;31157:7:::0;31145:9;:19:::1;:::i;:::-;:25;;;;:::i;:::-;31317:6;::::0;31341:9:::1;::::0;31310:52:::1;::::0;-1:-1:-1;;;31310:52:0;;-1:-1:-1;;;;;31341:9:0;;::::1;31310:52;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;31126:44:0;;-1:-1:-1;31209:21:0::1;::::0;31317:6;::::1;::::0;31310:22:::1;::::0;9689:18:1;;31310:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31408:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;31408:234:0;;-1:-1:-1;;;;;31408:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;31459:4:::1;::::0;31479:8;;31408:9;;;;31459:4;;31616:15:::1;::::0;31408:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31655:25;31710:12;31683:24;31701:4;31683:9;:24::i;:::-;:39;;;;:::i;:::-;31655:67:::0;-1:-1:-1;31736:21:0;;31733:118:::1;;31773:66;31797:4;31812:6;31821:17;31773:15;:66::i;:::-;31863:23;31889:41;31913:17:::0;31889:21:::1;:41;:::i;:::-;31863:67:::0;-1:-1:-1;31946:19:0;;31943:80:::1;;31981:30;31995:15;31981:13;:30::i;:::-;9083:1;;;;;;30776:1254:::0;:::o;34002:344::-;34095:16;;;34109:1;34095:16;;;;;;;;34052:7;;;;34095:16;34109:1;34095:16;;;;;;;;-1:-1:-1;;34132:9:0;;:16;;;-1:-1:-1;;;34132:16:0;;;;34071:40;;-1:-1:-1;;;;;;34132:9:0;;;;:14;;-1:-1:-1;34132:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34122:4;34127:1;34122:7;;;;;;-1:-1:-1;;;34122:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;34122:26:0;;;-1:-1:-1;;;;;34122:26:0;;;;;34177:4;34159;34164:1;34159:7;;;;;;-1:-1:-1;;;34159:7:0;;;;;;;;;-1:-1:-1;;;;;34159:23:0;;;;:7;;;;;;;;;;:23;34230:16;;;34244:1;34230:16;;;;;;;;34203:24;;34230:16;;34244:1;;34230:16;;;;;;;;;-1:-1:-1;;34267:9:0;;34291:12;;34267:43;;-1:-1:-1;;;34267:43:0;;34203;;-1:-1:-1;;;;;;34267:9:0;;;;:23;;:43;;34305:4;;34267:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34267:43:0;;;;;;;;;;;;:::i;:::-;34257:53;;34328:7;34336:1;34328:10;;;;;;-1:-1:-1;;;34328:10:0;;;;;;;;;;;;;;;34321:17;;;;34002:344;:::o;5132:104::-;5188:13;5221:7;5214:14;;;;;:::i;20562:295::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;20671:6:::1;::::0;-1:-1:-1;;;;;20663:14:0;;::::1;20671:6:::0;::::1;20663:14;;20655:84;;;::::0;-1:-1:-1;;;20655:84:0;;15120:2:1;20655:84:0::1;::::0;::::1;15102:21:1::0;15159:2;15139:18;;;15132:30;15198:34;15178:18;;;15171:62;15269:27;15249:18;;;15242:55;15314:19;;20655:84:0::1;15092:247:1::0;20655:84:0::1;20752:41;20781:4;20787:5;20752:28;:41::i;:::-;20809:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;20809:40:0;::::1;::::0;::::1;::::0;;;::::1;20562:295:::0;;:::o;6838:413::-;550:10;6931:4;6975:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6975:34:0;;;;;;;;;;7028:35;;;;7020:85;;;;-1:-1:-1;;;7020:85:0;;19211:2:1;7020:85:0;;;19193:21:1;19250:2;19230:18;;;19223:30;19289:34;19269:18;;;19262:62;-1:-1:-1;;;19340:18:1;;;19333:35;19385:19;;7020:85:0;19183:227:1;7020:85:0;7141:67;550:10;7164:7;7192:15;7173:16;:34;7141:8;:67::i;:::-;-1:-1:-1;7239:4:0;;6838:413;-1:-1:-1;;;6838:413:0:o;5596:175::-;5682:4;5699:42;550:10;5723:9;5734:6;5699:9;:42::i;18285:226::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;18397:9:::1;18393:111;18412:18:::0;;::::1;18393:111;;;18482:10;18451:16;:28;18468:7;;18476:1;18468:10;;;;;-1:-1:-1::0;;;18468:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18451:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18451:28:0;:41;;-1:-1:-1;;18451:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18432:3;::::1;::::0;::::1;:::i;:::-;;;;18393:111;;;;18285:226:::0;;;:::o;21928:182::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22013:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22013:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22068:34;;11185:41:1;;;22068:34:0::1;::::0;11158:18:1;22068:34:0::1;;;;;;;21928:182:::0;;:::o;21520:400::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;21642:17:::1;:34:::0;;;21687:16:::1;:32:::0;;;21730:14:::1;:28:::0;;;21747:11;21785:36:::1;21706:13:::0;21662:14;21785:36:::1;:::i;:::-;:53;;;;:::i;:::-;21769:13;:69:::0;;;21874:4:::1;-1:-1:-1::0;21857:21:0::1;21849:63;;;::::0;-1:-1:-1;;;21849:63:0;;16793:2:1;21849:63:0::1;::::0;::::1;16775:21:1::0;16832:2;16812:18;;;16805:30;16871:31;16851:18;;;16844:59;16920:18;;21849:63:0::1;16765:179:1::0;19372:233:0;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;19495:6:::1;19475:13;5433:12:::0;;;5345:108;19475:13:::1;:17;::::0;19491:1:::1;19475:17;:::i;:::-;:26;;;;:::i;:::-;19462:9;:39;;19454:48;;;::::0;::::1;;19553:4;19533:13;5433:12:::0;;;5345:108;19533:13:::1;:17;::::0;19549:1:::1;19533:17;:::i;:::-;:24;;;;:::i;:::-;19520:9;:37;;19512:46;;;::::0;::::1;;19568:18;:30:::0;19372:233::o;18064:102::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;18136:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;18136:22:0;;::::1;::::0;;;::::1;::::0;;18064:102::o;18785:254::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;18908:16:::1;5327:2:::0;18908::::1;:16;:::i;:::-;18899:4;18879:13;5433:12:::0;;;5345:108;18879:13:::1;:17;::::0;18895:1:::1;18879:17;:::i;:::-;:24;;;;:::i;:::-;18878:47;;;;:::i;:::-;18868:6;:57;;18860:66;;;::::0;::::1;;18963:16;5327:2:::0;18963::::1;:16;:::i;:::-;18953:27;::::0;:6;:27:::1;:::i;:::-;18937:13;:43:::0;;;18996:35:::1;::::0;19561:25:1;;;18996:35:0::1;::::0;19549:2:1;19534:18;18996:35:0::1;19516:76:1::0;9258:244:0;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9347:22:0;::::1;9339:73;;;::::0;-1:-1:-1;;;9339:73:0;;13902:2:1;9339:73:0::1;::::0;::::1;13884:21:1::0;13941:2;13921:18;;;13914:30;13980:34;13960:18;;;13953:62;-1:-1:-1;;;14031:18:1;;;14024:36;14077:19;;9339:73:0::1;13874:228:1::0;9339:73:0::1;9449:6;::::0;9428:38:::1;::::0;-1:-1:-1;;;;;9428:38:0;;::::1;::::0;9449:6:::1;::::0;9428:38:::1;::::0;9449:6:::1;::::0;9428:38:::1;9477:6;:17:::0;;-1:-1:-1;;;;;;9477:17:0::1;-1:-1:-1::0;;;;;9477:17:0;;;::::1;::::0;;;::::1;::::0;;9258:244::o;29411:142::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;29511:1:::1;29502:6;:10;29494:19;;;::::0;::::1;;29524:12;:21:::0;29411:142::o;34786:157::-;9013:6;;-1:-1:-1;;;;;9013:6:0;550:10;9013:22;9005:67;;;;-1:-1:-1;;;9005:67:0;;;;;;;:::i;:::-;34844:12:::1;34888:7;8951:6:::0;;-1:-1:-1;;;;;8951:6:0;;8886:79;34888:7:::1;-1:-1:-1::0;;;;;34880:21:0::1;34909;34880:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17351:131:::0;17424:4;17447:27;:9;17466:7;17447:18;:27::i;8175:380::-;-1:-1:-1;;;;;8311:19:0;;8303:68;;;;-1:-1:-1;;;8303:68:0;;18806:2:1;8303:68:0;;;18788:21:1;18845:2;18825:18;;;18818:30;18884:34;18864:18;;;18857:62;-1:-1:-1;;;18935:18:1;;;18928:34;18979:19;;8303:68:0;18778:226:1;8303:68:0;-1:-1:-1;;;;;8390:21:0;;8382:68;;;;-1:-1:-1;;;8382:68:0;;14309:2:1;8382:68:0;;;14291:21:1;14348:2;14328:18;;;14321:30;14387:34;14367:18;;;14360:62;-1:-1:-1;;;14438:18:1;;;14431:32;14480:19;;8382:68:0;14281:224:1;8382:68:0;-1:-1:-1;;;;;8463:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8515:32;;19561:25:1;;;8515:32:0;;19534:18:1;8515:32:0;;;;;;;8175:380;;;:::o;7259:614::-;-1:-1:-1;;;;;7399:20:0;;7391:70;;;;-1:-1:-1;;;7391:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7480:23:0;;7472:71;;;;-1:-1:-1;;;7472:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7580:17:0;;7556:21;7580:17;;;;;;;;;;;7616:23;;;;7608:74;;;;-1:-1:-1;;;7608:74:0;;15953:2:1;7608:74:0;;;15935:21:1;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:36;16128:19;;7608:74:0;15925:228:1;7608:74:0;-1:-1:-1;;;;;7718:17:0;;;:9;:17;;;;;;;;;;;7738:22;;;7718:42;;7782:20;;;;;;;;:30;;7754:6;;7718:9;7782:30;;7754:6;;7782:30;:::i;:::-;;;;;;;;7847:9;-1:-1:-1;;;;;7830:35:0;7839:6;-1:-1:-1;;;;;7830:35:0;;7858:6;7830:35;;;;19561:25:1;;19549:2;19534:18;;19516:76;7830:35:0;;;;;;;;7259:614;;;;:::o;22118:5102::-;-1:-1:-1;;;;;22218:18:0;;22210:68;;;;-1:-1:-1;;;22210:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22297:16:0;;22289:64;;;;-1:-1:-1;;;22289:64:0;;;;;;;:::i;:::-;22381:1;22372:6;:10;22364:61;;;;-1:-1:-1;;;22364:61:0;;15546:2:1;22364:61:0;;;15528:21:1;15585:2;15565:18;;;15558:30;15624:34;15604:18;;;15597:62;-1:-1:-1;;;15675:18:1;;;15668:36;15721:19;;22364:61:0;15518:228:1;22364:61:0;22450:13;;;;;;;22446:132;;-1:-1:-1;;;;;22487:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22516:23:0;;;;;;:19;:23;;;;;;;;22487:52;22479:87;;;;-1:-1:-1;;;22479:87:0;;13551:2:1;22479:87:0;;;13533:21:1;13590:2;13570:18;;;13563:30;-1:-1:-1;;;13609:18:1;;;13602:52;13671:18;;22479:87:0;13523:172:1;22479:87:0;27322:18;;27307:12;:33;22593:26;:52;;;;;22644:1;22623:18;;:22;22593:52;22590:231;;;-1:-1:-1;;;;;22670:22:0;;;;;;:16;:22;;;;;;;;22669:23;;:40;;-1:-1:-1;8951:6:0;;-1:-1:-1;;;;;22696:13:0;;;8951:6;;22696:13;22669:40;:65;;;-1:-1:-1;;;;;;22713:21:0;;22727:6;22713:21;22669:65;22661:148;;;;-1:-1:-1;;;22661:148:0;;17921:2:1;22661:148:0;;;17903:21:1;17960:2;17940:18;;;17933:30;17999:34;17979:18;;;17972:62;18070:34;18050:18;;;18043:62;-1:-1:-1;;;18121:19:1;;;18114:37;18168:19;;22661:148:0;17893:300:1;22661:148:0;22844:14;;;;22841:878;;;8951:6;;-1:-1:-1;;;;;22878:15:0;;;8951:6;;22878:15;;;;:32;;-1:-1:-1;8951:6:0;;-1:-1:-1;;;;;22897:13:0;;;8951:6;;22897:13;;22878:32;:52;;;;-1:-1:-1;;;;;;22914:16:0;;;;22878:52;:77;;;;-1:-1:-1;;;;;;22934:21:0;;22948:6;22934:21;;22878:77;:107;;;;-1:-1:-1;;;;;;22960:25:0;;;;;;:19;:25;;;;;;;;22959:26;22878:107;:135;;;;-1:-1:-1;;;;;;22990:23:0;;;;;;:19;:23;;;;;;;;22989:24;22878:135;22874:834;;;-1:-1:-1;;;;;23098:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23134:35:0;;;;;;:31;:35;;;;;;;;23133:36;23098:71;23094:599;;;23216:12;;23206:6;:22;;23198:31;;;;;;23290:15;;23273:13;23283:2;23273:9;:13::i;:::-;23264:22;;:6;:22;:::i;:::-;:41;;23256:50;;;;;;23094:599;;;-1:-1:-1;;;;;23383:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23417:37:0;;;;;;:31;:37;;;;;;;;23416:38;23383:71;23379:314;;;23501:13;;23491:6;:23;;23483:32;;;;;23379:314;-1:-1:-1;;;;;23564:35:0;;;;;;:31;:35;;;;;;;;23559:134;;23657:15;;23640:13;23650:2;23640:9;:13::i;:::-;23631:22;;:6;:22;:::i;:::-;:41;;23623:50;;;;;;23731:28;23762:24;23780:4;23762:9;:24::i;:::-;23846:18;;23731:55;;-1:-1:-1;23822:42:0;;;;;;;23880:22;;-1:-1:-1;23891:11:0;;;;;;;23880:22;:35;;;;-1:-1:-1;23907:8:0;;-1:-1:-1;;;23907:8:0;;;;23906:9;23880:35;:71;;;;-1:-1:-1;;;;;;23920:31:0;;;;;;:25;:31;;;;;;;;23919:32;23880:71;:101;;;;-1:-1:-1;;;;;;23956:25:0;;;;;;:19;:25;;;;;;;;23955:26;23880:101;:129;;;;-1:-1:-1;;;;;;23986:23:0;;;;;;:19;:23;;;;;;;;23985:24;23880:129;23877:232;;;24026:8;:15;;-1:-1:-1;;;;24026:15:0;-1:-1:-1;;;24026:15:0;;;24056:10;:8;:10::i;:::-;24081:8;:16;;-1:-1:-1;;;;24081:16:0;;;23877:232;24124:14;;;;24121:262;;;24176:15;;24157;:34;;:73;;;;;24220:10;24195:21;:35;;24157:73;:99;;;;;24255:1;24234:18;:9;:16;:18::i;:::-;:22;24157:99;24154:218;;;24276:17;24290:2;24276:13;:17::i;:::-;24154:218;;;24347:9;:7;:9::i;:::-;-1:-1:-1;;;;;24513:25:0;;24395:12;24513:25;;;:19;:25;;;;;;24410:4;;24513:25;;;:52;;-1:-1:-1;;;;;;24542:23:0;;;;;;:19;:23;;;;;;;;24513:52;24510:99;;;-1:-1:-1;24592:5:0;24510:99;24629:12;24733:7;24730:2337;;;27322:18;;27307:12;:33;24796:106;;;;24851:8;24836:12;;:23;;;;:::i;:::-;24826:6;:33;;:75;;;;;24889:12;24863:18;;24884:1;24863:22;;;;:::i;:::-;:38;;24826:75;24795:143;;;;-1:-1:-1;;;;;;24907:31:0;;;;;;:25;:31;;;;;;;;24795:143;:177;;;;-1:-1:-1;;;;;;24943:29:0;;;;;;:25;:29;;;;;;;;24942:30;24795:177;:197;;;;;24991:1;24976:12;;:16;24795:197;24792:2106;;;27322:18;;27307:12;:33;25030:330;;25339:1;25323:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25030:330:0;-1:-1:-1;;;;;25384:20:0;;;;;;:16;:20;;;;;;;;25380:174;;-1:-1:-1;;;;;25428:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;25428:27:0;25451:4;25428:27;;;;;;25478:10;:15;;25451:4;;25478:10;;:15;;25451:4;;25478:15;:::i;:::-;;;;-1:-1:-1;;25521:13:0;;-1:-1:-1;;;;;9209:32:1;;9191:51;;25521:13:0;;9179:2:1;9164:18;25521:13:0;;;;;;;25380:174;25605:15;;25590:12;;25581:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;25574:46;;25683:12;;25665:15;;25658:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25636:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25763:12:0;;25744:16;;25737:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25714:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25837:12:0;;25821:13;;25814:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;25794:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;24792:2106:0;;-1:-1:-1;24792:2106:0;;-1:-1:-1;;;;;25914:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25963:1;25947:13;;:17;25914:50;25910:988;;;26016:15;;26000:13;;25991:22;;:6;:22;:::i;:::-;:40;;;;:::i;:::-;25984:47;;26098:13;;26079:16;;26072:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26050:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26180:13:0;;26160:17;;26153:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;26130:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;26256:13:0;;26239:14;;26232:21;;:4;:21;:::i;25910:988::-;-1:-1:-1;;;;;26332:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26382:1;26367:12;;:16;26332:51;26329:569;;;26432:15;;26417:12;;26408:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;26401:46;;26510:12;;26492:15;;26485:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26463:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26590:12:0;;26571:16;;26564:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26541:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26664:12:0;;26648:13;;26641:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26621:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26699:14:0;;;;26698:15;;:47;;;26726:19;:17;:19::i;:::-;26717:6;:28;26698:47;26695:188;;;26773:22;:9;26792:2;26773:18;:22::i;:::-;26769:95;;26823:17;:9;26837:2;26823:13;:17::i;:::-;;26769:95;26929:8;;26926:93;;26961:42;26977:4;26991;26998;26961:15;:42::i;:::-;27041:14;27051:4;27041:14;;:::i;:::-;;;24730:2337;27079:33;27095:4;27101:2;27105:6;27079:15;:33::i;:::-;27128:24;:9;27147:4;27128:18;:24::i;:::-;:35;;;;;27156:7;27128:35;27125:88;;;27179:22;:9;27196:4;27179:16;:22::i;:::-;;22118:5102;;;;;;;:::o;32428:1566::-;32469:23;32495:24;32513:4;32495:9;:24::i;:::-;32469:50;;32530:25;32601:16;;32579:19;;32558:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;32530:87;-1:-1:-1;32641:20:0;;;:46;;-1:-1:-1;32665:22:0;;32641:46;32638:60;;;32690:7;;32428:1566::o;32638:60::-;32731:18;;:23;;32752:2;32731:23;:::i;:::-;32713:15;:41;32710:113;;;32788:18;;:23;;32809:2;32788:23;:::i;:::-;32770:41;;32710:113;32835:12;32917:23;33002:1;32982:17;32961:18;;32943:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32917:86;-1:-1:-1;33049:21:0;33081:51;33098:33;32917:86;33098:15;:33;:::i;:::-;33081:16;:51::i;:::-;33153:18;33174:38;33198:14;33174:21;:38;:::i;:::-;33153:59;;33223:23;33249:10;33223:36;;33272:24;33375:1;33356:18;;:20;;;;:::i;:::-;33335:42;;:17;:42;:::i;:::-;33312:19;;33299:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;33272:106;;33389:21;33486:1;33467:18;;:20;;;;:::i;:::-;33446:42;;:17;:42;:::i;:::-;33426:16;;33413:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;33389:100;-1:-1:-1;33521:32:0;33389:100;33521:16;:32;:::i;:::-;33502:51;;;;:::i;:::-;33599:1;33578:18;:22;;;33611:19;:23;;;33645:16;:20;33502:51;-1:-1:-1;33689:19:0;;;;;:42;;;33730:1;33712:15;:19;33689:42;33686:119;;;33747:46;33760:15;33777;33747:12;:46::i;:::-;33820:20;;33817:124;;33877:17;;33869:60;;-1:-1:-1;;;;;33877:17:0;;;;33908:16;;33869:60;;;;33908:16;33877:17;33869:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33856:73:0;;-1:-1:-1;;33817:124:0;32428:1566;;;;;;;;;:::o;32038:382::-;32126:16;;;32140:1;32126:16;;;;;;;;32102:21;;32126:16;;;;;;;;-1:-1:-1;;32163:9:0;;:16;;;-1:-1:-1;;;32163:16:0;;;;32102:40;;-1:-1:-1;;;;;;32163:9:0;;;;:14;;-1:-1:-1;32163:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32153:4;32158:1;32153:7;;;;;;-1:-1:-1;;;32153:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;32153:26:0;;;-1:-1:-1;;;;;32153:26:0;;;;;32208:4;32190;32195:1;32190:7;;;;;;-1:-1:-1;;;32190:7:0;;;;;;;;;-1:-1:-1;;;;;32190:23:0;;;:7;;;;;;;;;:23;32226:9;;:186;;-1:-1:-1;;;32226:186:0;;:9;;;:60;;32294:11;;32226:186;;:9;;32337:4;;32364:6;;32386:15;;32226:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20865:248;-1:-1:-1;;;;;20948:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;20948:39:0;;;;;;;21008;20948:31;:39;21008:26;:39::i;2914:167::-;-1:-1:-1;;;;;3048:23:0;;2994:4;2028:19;;;:12;;;:19;;;;;;:24;;3018:55;3011:62;2914:167;-1:-1:-1;;;2914:167:0:o;3167:117::-;3230:7;3257:19;3265:3;2151:18;;2068:109;27812:562;27866:12;27925:20;;27907:15;:38;;;;:::i;:::-;27889:15;:56;27995:14;28012:125;28025:111;27995:14;28054:1;28035:18;:9;:16;:18::i;:::-;:20;;;;:::i;:::-;28113:22;28131:2;28113:9;:22::i;:::-;28084:26;28102:6;28084:9;:26::i;:::-;28057:24;28075:4;28057:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;28025:6;:111::i;:::-;28012:9;;:12;:125::i;:::-;27995:142;;28148:16;28211:3;28191:17;;28167:21;:41;;;;:::i;:::-;:47;;;;:::i;:::-;28148:66;;28246:6;-1:-1:-1;;;;;28238:20:0;28266:8;28238:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28225:54:0;;-1:-1:-1;;28290:77:0;;;;28321:34;;-1:-1:-1;;;;;28321:34:0;;;28338:8;;28321:34;;;;;27812:562;;;;:::o;27514:286::-;27552:12;;27638:25;27662:1;27638:21;:25;:::i;:::-;-1:-1:-1;;27751:41:0;;27674:14;;27699:4;;;;27674:14;;;27751:41;27674:14;27751:41;27674:14;27699:4;27751:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27514:286:0:o;2510:152::-;2580:4;2604:50;2609:3;-1:-1:-1;;;;;2629:23:0;;2604:4;:50::i;2670:158::-;2743:4;2767:53;2775:3;-1:-1:-1;;;;;2795:23:0;;2767:7;:53::i;29676:573::-;29828:16;;;29842:1;29828:16;;;;;;;;29804:21;;29828:16;;;;;;;;;;-1:-1:-1;29828:16:0;29804:40;;29873:4;29855;29860:1;29855:7;;;;;;-1:-1:-1;;;29855:7:0;;;;;;;;;-1:-1:-1;;;;;29855:23:0;;;:7;;;;;;;;;;:23;;;;29899:9;;:16;;;-1:-1:-1;;;29899:16:0;;;;:9;;;;;:14;;:16;;;;;29855:7;;29899:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29889:4;29894:1;29889:7;;;;;;-1:-1:-1;;;29889:7:0;;;;;;;;;-1:-1:-1;;;;;29889:26:0;;;:7;;;;;;;;;:26;29960:9;;29928:56;;29945:4;;29960:9;29972:11;29928:8;:56::i;:::-;30023:9;;:218;;-1:-1:-1;;;30023:218:0;;-1:-1:-1;;;;;30023:9:0;;;;:60;;:218;;30098:11;;30023:9;;30168:4;;30195;;30215:15;;30023:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30261:507;30441:9;;30409:56;;30426:4;;-1:-1:-1;;;;;30441:9:0;30453:11;30409:8;:56::i;:::-;30508:9;;:252;;-1:-1:-1;;;30508:252:0;;-1:-1:-1;;;;;30508:9:0;;;;:25;;30541:9;;30508:252;;30574:4;;30594:11;;30508:9;;;;30574:4;;30734:15;;30508:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30261:507;;:::o;19617:207::-;-1:-1:-1;;;;;19705:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19705:52:0;;;;;;;;;;19773:43;;9421:51:1;;;9488:18;;;9481:50;19773:43:0;;9394:18:1;19773:43:0;;;;;;;19617:207;;:::o;28382:632::-;28801:28;;-1:-1:-1;;28818:10:0;8313:2:1;8309:15;8305:53;28801:28:0;;;8293:66:1;28461:7:0;;;;28913:5;;28877:12;;28836:15;;8375:12:1;;28801:28:0;;;;;;;;;;;;28791:39;;;;;;28783:48;;28782:70;;;;:::i;:::-;28663:32;;-1:-1:-1;;28680:14:0;8313:2:1;8309:15;8305:53;28663:32:0;;;8293:66:1;28743:14:0;;28702:15;;8375:12:1;;28663:32:0;;;;;;;;;;;;28653:43;;;;;;28645:52;;28644:74;;;;:::i;:::-;28585:34;28603:16;28585:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;28546:391;;;;;;8987:19:1;;9031:2;9022:12;;8977:63;28546:391:0;;;;-1:-1:-1;;28546:391:0;;;;;;;;;28518:434;;28546:391;28518:434;;;;;-1:-1:-1;29002:4:0;28989:9;29002:4;28989:2;:9;:::i;:::-;28981:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;28974:32;28382:632;-1:-1:-1;;;;;28382:632:0:o;3292:158::-;3366:7;3417:22;3421:3;3433:5;3417:3;:22::i;951:291::-;1014:4;2028:19;;;:12;;;:19;;;;;;1031:204;;-1:-1:-1;1074:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;1134:18;;1112:19;;;:12;;;:19;;;;;;:40;;;;1167:11;;1031:204;-1:-1:-1;1218:5:0;1211:12;;1250:673;1316:4;1354:19;;;:12;;;:19;;;;;;1390:15;;1386:530;;1422:21;1446:14;1459:1;1446:10;:14;:::i;:::-;1495:18;;1422:38;;-1:-1:-1;1475:17:0;;1495:22;;1516:1;;1495:22;:::i;:::-;1475:42;;1551:13;1538:9;:26;1534:221;;1585:17;1605:3;:11;;1617:9;1605:22;;;;;;-1:-1:-1;;;1605:22:0;;;;;;;;;;;;;;;;;1585:42;;1675:9;1646:3;:11;;1658:13;1646:26;;;;;;-1:-1:-1;;;1646:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;1703:23;;;:12;;;:23;;;;;:36;;;1534:221;1771:17;;:3;;:17;;;-1:-1:-1;;;1771:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;1812:3;:12;;:19;1825:5;1812:19;;;;;;;;;;;1805:26;;;1855:4;1848:11;;;;;;;1386:530;1899:5;1892:12;;;;;2185:120;2252:7;2279:3;:11;;2291:5;2279:18;;;;;;-1:-1:-1;;;2279:18:0;;;;;;;;;;;;;;;;;2272:25;;2185:120;;;;:::o;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1240:398::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1625:7;1615:17;;;1327:311;;;;;:::o;1643:466::-;1720:6;1728;1736;1789:2;1777:9;1768:7;1764:23;1760:32;1757:2;;;1810:6;1802;1795:22;1757:2;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;:::-;1923:5;-1:-1:-1;1980:2:1;1965:18;;1952:32;1993:33;1952:32;1993:33;:::i;:::-;1747:362;;2045:7;;-1:-1:-1;;;2099:2:1;2084:18;;;;2071:32;;1747:362::o;2114:392::-;2179:6;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:2;;;2261:6;2253;2246:22;2208:2;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;-1:-1:-1;2431:2:1;2416:18;;2403:32;2444:30;2403:32;2444:30;:::i;2511:325::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:2;;;2661:6;2653;2646:22;2608:2;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;2826:2;2811:18;;;;2798:32;;-1:-1:-1;;;2598:238:1:o;2841:800::-;2933:6;2941;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:2;;;3023:6;3015;3008:22;2970:2;3068:9;3055:23;3097:18;3138:2;3130:6;3127:14;3124:2;;;3159:6;3151;3144:22;3124:2;3202:6;3191:9;3187:22;3177:32;;3247:7;3240:4;3236:2;3232:13;3228:27;3218:2;;3274:6;3266;3259:22;3218:2;3319;3306:16;3345:2;3337:6;3334:14;3331:2;;;3366:6;3358;3351:22;3331:2;3426:7;3419:4;3409:6;3406:1;3402:14;3398:2;3394:23;3390:34;3387:47;3384:2;;;3452:6;3444;3437:22;3384:2;3488:4;3480:13;;;;-1:-1:-1;3512:6:1;-1:-1:-1;;3553:20:1;;3540:34;3583:28;3540:34;3583:28;:::i;:::-;3630:5;3620:15;;;2960:681;;;;;:::o;3646:1281::-;3764:6;3772;3825:2;3813:9;3804:7;3800:23;3796:32;3793:2;;;3846:6;3838;3831:22;3793:2;3891:9;3878:23;3920:18;3961:2;3953:6;3950:14;3947:2;;;3982:6;3974;3967:22;3947:2;4025:6;4014:9;4010:22;4000:32;;4070:7;4063:4;4059:2;4055:13;4051:27;4041:2;;4097:6;4089;4082:22;4041:2;4138;4125:16;4160:4;4184:60;4200:43;4240:2;4200:43;:::i;4184:60::-;4266:3;4290:2;4285:3;4278:15;4318:2;4313:3;4309:12;4302:19;;4349:2;4345;4341:11;4397:7;4392:2;4386;4383:1;4379:10;4375:2;4371:19;4367:28;4364:41;4361:2;;;4423:6;4415;4408:22;4361:2;4450:6;4441:15;;4465:238;4479:2;4476:1;4473:9;4465:238;;;4550:3;4537:17;4567:31;4592:5;4567:31;:::i;:::-;4611:18;;4497:1;4490:9;;;;;4649:12;;;;4681;;4465:238;;;-1:-1:-1;4722:5:1;-1:-1:-1;;4765:18:1;;4752:32;;-1:-1:-1;;4796:16:1;;;4793:2;;;4830:6;4822;4815:22;4793:2;;4858:63;4913:7;4902:8;4891:9;4887:24;4858:63;:::i;:::-;4848:73;;;3783:1144;;;;;:::o;4932:937::-;5027:6;5058:2;5101;5089:9;5080:7;5076:23;5072:32;5069:2;;;5122:6;5114;5107:22;5069:2;5160:9;5154:16;5193:18;5185:6;5182:30;5179:2;;;5230:6;5222;5215:22;5179:2;5258:22;;5311:4;5303:13;;5299:27;-1:-1:-1;5289:2:1;;5345:6;5337;5330:22;5289:2;5379;5373:9;5402:60;5418:43;5458:2;5418:43;:::i;5402:60::-;5484:3;5508:2;5503:3;5496:15;5536:2;5531:3;5527:12;5520:19;;5567:2;5563;5559:11;5615:7;5610:2;5604;5601:1;5597:10;5593:2;5589:19;5585:28;5582:41;5579:2;;;5641:6;5633;5626:22;5579:2;5668:6;5659:15;;5683:156;5697:2;5694:1;5691:9;5683:156;;;5754:10;;5742:23;;5715:1;5708:9;;;;;5785:12;;;;5817;;5683:156;;;-1:-1:-1;5858:5:1;5038:831;-1:-1:-1;;;;;;;5038:831:1:o;5874:251::-;5930:6;5983:2;5971:9;5962:7;5958:23;5954:32;5951:2;;;6004:6;5996;5989:22;5951:2;6048:9;6035:23;6067:28;6089:5;6067:28;:::i;6130:255::-;6197:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6271:6;6263;6256:22;6218:2;6308:9;6302:16;6327:28;6349:5;6327:28;:::i;6390:190::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6523:6;6515;6508:22;6470:2;-1:-1:-1;6551:23:1;;6460:120;-1:-1:-1;6460:120:1:o;6585:194::-;6655:6;6708:2;6696:9;6687:7;6683:23;6679:32;6676:2;;;6729:6;6721;6714:22;6676:2;-1:-1:-1;6757:16:1;;6666:113;-1:-1:-1;6666:113:1:o;6784:255::-;6863:6;6871;6924:2;6912:9;6903:7;6899:23;6895:32;6892:2;;;6945:6;6937;6930:22;6892:2;-1:-1:-1;;6973:16:1;;7029:2;7014:18;;;7008:25;6973:16;;7008:25;;-1:-1:-1;6882:157:1:o;7044:326::-;7121:6;7129;7137;7190:2;7178:9;7169:7;7165:23;7161:32;7158:2;;;7211:6;7203;7196:22;7158:2;-1:-1:-1;;7239:23:1;;;7309:2;7294:18;;7281:32;;-1:-1:-1;7360:2:1;7345:18;;;7332:32;;7148:222;-1:-1:-1;7148:222:1:o;7375:316::-;7463:6;7471;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:2;;;7553:6;7545;7538:22;7500:2;7587:9;7581:16;7571:26;;7637:2;7626:9;7622:18;7616:25;7606:35;;7681:2;7670:9;7666:18;7660:25;7650:35;;7490:201;;;;;:::o;7696:463::-;7749:3;7787:5;7781:12;7814:6;7809:3;7802:19;7840:4;7869:2;7864:3;7860:12;7853:19;;7906:2;7899:5;7895:14;7927:3;7939:195;7953:6;7950:1;7947:13;7939:195;;;8018:13;;-1:-1:-1;;;;;8014:39:1;8002:52;;8074:12;;;;8109:15;;;;8050:1;7968:9;7939:195;;;-1:-1:-1;8150:3:1;;7757:402;-1:-1:-1;;;;;7757:402:1:o;9821:607::-;-1:-1:-1;;;;;10180:15:1;;;10162:34;;10227:2;10212:18;;10205:34;;;;10270:2;10255:18;;10248:34;;;;10313:2;10298:18;;10291:34;;;;10362:15;;;10356:3;10341:19;;10334:44;10142:3;10394:19;;10387:35;;;;10111:3;10096:19;;10078:350::o;11464:510::-;11735:6;11724:9;11717:25;11778:3;11773:2;11762:9;11758:18;11751:31;11698:4;11799:57;11851:3;11840:9;11836:19;11828:6;11799:57;:::i;:::-;-1:-1:-1;;;;;11892:32:1;;;;11887:2;11872:18;;11865:60;-1:-1:-1;11956:2:1;11941:18;11934:34;11791:65;11707:267;-1:-1:-1;;11707:267:1:o;11979:603::-;12091:4;12120:2;12149;12138:9;12131:21;12181:6;12175:13;12224:6;12219:2;12208:9;12204:18;12197:34;12249:4;12262:140;12276:6;12273:1;12270:13;12262:140;;;12371:14;;;12367:23;;12361:30;12337:17;;;12356:2;12333:26;12326:66;12291:10;;12262:140;;;12420:6;12417:1;12414:13;12411:2;;;12490:4;12485:2;12476:6;12465:9;12461:22;12457:31;12450:45;12411:2;-1:-1:-1;12566:2:1;12545:15;-1:-1:-1;;12541:29:1;12526:45;;;;12573:2;12522:54;;12100:482;-1:-1:-1;;;12100:482:1:o;12587:399::-;12789:2;12771:21;;;12828:2;12808:18;;;12801:30;12867:34;12862:2;12847:18;;12840:62;-1:-1:-1;;;12933:2:1;12918:18;;12911:33;12976:3;12961:19;;12761:225::o;17358:356::-;17560:2;17542:21;;;17579:18;;;17572:30;17638:34;17633:2;17618:18;;17611:62;17705:2;17690:18;;17532:182::o;18198:401::-;18400:2;18382:21;;;18439:2;18419:18;;;18412:30;18478:34;18473:2;18458:18;;18451:62;-1:-1:-1;;;18544:2:1;18529:18;;18522:35;18589:3;18574:19;;18372:227::o;19597:332::-;19804:6;19793:9;19786:25;19847:2;19842;19831:9;19827:18;19820:30;19767:4;19867:56;19919:2;19908:9;19904:18;19896:6;19867:56;:::i;:::-;19859:64;19776:153;-1:-1:-1;;;;19776:153:1:o;19934:582::-;20233:6;20222:9;20215:25;20276:6;20271:2;20260:9;20256:18;20249:34;20319:3;20314:2;20303:9;20299:18;20292:31;20196:4;20340:57;20392:3;20381:9;20377:19;20369:6;20340:57;:::i;:::-;-1:-1:-1;;;;;20433:32:1;;;;20428:2;20413:18;;20406:60;-1:-1:-1;20497:3:1;20482:19;20475:35;20332:65;20205:311;-1:-1:-1;;;20205:311:1:o;20710:275::-;20781:2;20775:9;20846:2;20827:13;;-1:-1:-1;;20823:27:1;20811:40;;20881:18;20866:34;;20902:22;;;20863:62;20860:2;;;20928:18;;:::i;:::-;20964:2;20957:22;20755:230;;-1:-1:-1;20755:230:1:o;20990:183::-;21050:4;21083:18;21075:6;21072:30;21069:2;;;21105:18;;:::i;:::-;-1:-1:-1;21150:1:1;21146:14;21162:4;21142:25;;21059:114::o;21178:128::-;21218:3;21249:1;21245:6;21242:1;21239:13;21236:2;;;21255:18;;:::i;:::-;-1:-1:-1;21291:9:1;;21226:80::o;21311:120::-;21351:1;21377;21367:2;;21382:18;;:::i;:::-;-1:-1:-1;21416:9:1;;21357:74::o;21436:422::-;21525:1;21568:5;21525:1;21582:270;21603:7;21593:8;21590:21;21582:270;;;21662:4;21658:1;21654:6;21650:17;21644:4;21641:27;21638:2;;;21671:18;;:::i;:::-;21721:7;21711:8;21707:22;21704:2;;;21741:16;;;;21704:2;21820:22;;;;21780:15;;;;21582:270;;;21586:3;21500:358;;;;;:::o;21863:140::-;21921:5;21950:47;21991:4;21981:8;21977:19;21971:4;22057:5;22087:8;22077:2;;-1:-1:-1;22128:1:1;22142:5;;22077:2;22176:4;22166:2;;-1:-1:-1;22213:1:1;22227:5;;22166:2;22258:4;22276:1;22271:59;;;;22344:1;22339:130;;;;22251:218;;22271:59;22301:1;22292:10;;22315:5;;;22339:130;22376:3;22366:8;22363:17;22360:2;;;22383:18;;:::i;:::-;-1:-1:-1;;22439:1:1;22425:16;;22454:5;;22251:218;;22553:2;22543:8;22540:16;22534:3;22528:4;22525:13;22521:36;22515:2;22505:8;22502:16;22497:2;22491:4;22488:12;22484:35;22481:77;22478:2;;;-1:-1:-1;22590:19:1;;;22622:5;;22478:2;22669:34;22694:8;22688:4;22669:34;:::i;:::-;22739:6;22735:1;22731:6;22727:19;22718:7;22715:32;22712:2;;;22750:18;;:::i;:::-;22788:20;;22067:747;-1:-1:-1;;;22067:747:1:o;22819:168::-;22859:7;22925:1;22921;22917:6;22913:14;22910:1;22907:21;22902:1;22895:9;22888:17;22884:45;22881:2;;;22932:18;;:::i;:::-;-1:-1:-1;22972:9:1;;22871:116::o;22992:125::-;23032:4;23060:1;23057;23054:8;23051:2;;;23065:18;;:::i;:::-;-1:-1:-1;23102:9:1;;23041:76::o;23122:380::-;23201:1;23197:12;;;;23244;;;23265:2;;23319:4;23311:6;23307:17;23297:27;;23265:2;23372;23364:6;23361:14;23341:18;23338:38;23335:2;;;23418:10;23413:3;23409:20;23406:1;23399:31;23453:4;23450:1;23443:15;23481:4;23478:1;23471:15;23335:2;;23177:325;;;:::o;23507:135::-;23546:3;-1:-1:-1;;23567:17:1;;23564:2;;;23587:18;;:::i;:::-;-1:-1:-1;23634:1:1;23623:13;;23554:88::o;23647:112::-;23679:1;23705;23695:2;;23710:18;;:::i;:::-;-1:-1:-1;23744:9:1;;23685:74::o;23764:127::-;23825:10;23820:3;23816:20;23813:1;23806:31;23856:4;23853:1;23846:15;23880:4;23877:1;23870:15;23896:127;23957:10;23952:3;23948:20;23945:1;23938:31;23988:4;23985:1;23978:15;24012:4;24009:1;24002:15;24028:127;24089:10;24084:3;24080:20;24077:1;24070:31;24120:4;24117:1;24110:15;24144:4;24141:1;24134:15;24160:131;-1:-1:-1;;;;;24235:31:1;;24225:42;;24215:2;;24281:1;24278;24271:12;24215:2;24205:86;:::o;24296:118::-;24382:5;24375:13;24368:21;24361:5;24358:32;24348:2;;24404:1;24401;24394:12

Swarm Source

ipfs://5658afec0538cc6b7e5d35d3cebac1c366e37f787333dbd1068541eb8e884794
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.