ETH Price: $2,195.34 (+5.59%)

Token

The Old Myth (DRAGAN)
 

Overview

Max Total Supply

1,000,000 DRAGAN

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.649452832324642744 DRAGAN

Value
$0.00
0x8f89949dd45fb3de8db1a85106ce88135b447be5
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:
Dragan

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IERC20Metadata is IERC20 {

    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, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address 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");

        _beforeTokenTransfer(sender, recipient, amount);

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

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

contract Dragan is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public liqWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liqWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("The Old Myth", "DRAGAN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 20;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 20_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
        maxWallet = 20_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0xe2C18718EE39204d4F73FA856Bf0bDC0cB311523);
        devWallet = address(0xe2C18718EE39204d4F73FA856Bf0bDC0cB311523);
        liqWallet = address(0xe2C18718EE39204d4F73FA856Bf0bDC0cB311523);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 90, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateLiqWallet(address newLiqWallet) external onlyOwner {
        emit liqWalletUpdated(newLiqWallet, liqWallet);
        liqWallet = newLiqWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // 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) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    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] = uniswapV2Router.WETH();

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyMarketingFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":"tokensForDev","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":"tokensForMarketing","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiqWallet","type":"address"}],"name":"updateLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600c81526020017f546865204f6c64204d79746800000000000000000000000000000000000000008152506040518060400160405280600681526020017f44524147414e000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b32565b5080600490805190602001906200011b92919062000b32565b5050506200013e62000132620005f260201b60201c565b620005fa60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a816001620006c060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000210919062000c4c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000c4c565b6040518363ffffffff1660e01b8152600401620002bd92919062000c8f565b6020604051808303816000875af1158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000c4c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034b60a0516001620006c060201b60201c565b6200036060a0516001620007aa60201b60201c565b600060059050600080600060149050600080600069d3c21bcecceda1000000905069043c33c193756480000060098190555069043c33c1937564800000600b81905550612710600582620003b5919062000cf5565b620003c1919062000d85565b600a81905550866010819055508560118190555084601281905550601254601154601054620003f1919062000dbd565b620003fd919062000dbd565b600f819055508360148190555082601581905550816016819055506016546015546014546200042d919062000dbd565b62000439919062000dbd565b60138190555073e2c18718ee39204d4f73fa856bf0bdc0cb311523600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e2c18718ee39204d4f73fa856bf0bdc0cb311523600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e2c18718ee39204d4f73fa856bf0bdc0cb311523600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000560620005526200084b60201b60201c565b60016200087560201b60201c565b620005733060016200087560201b60201c565b6200058861dead60016200087560201b60201c565b620005aa6200059c6200084b60201b60201c565b6001620006c060201b60201c565b620005bd306001620006c060201b60201c565b620005d261dead6001620006c060201b60201c565b620005e43382620009af60201b60201c565b505050505050505062000fdc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d0620005f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006f66200084b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200074f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007469062000e7b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000885620005f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008ab6200084b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000904576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008fb9062000e7b565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009a3919062000eba565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a199062000f27565b60405180910390fd5b62000a366000838362000b2860201b60201c565b806002600082825462000a4a919062000dbd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aa1919062000dbd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b08919062000f5a565b60405180910390a362000b246000838362000b2d60201b60201c565b5050565b505050565b505050565b82805462000b409062000fa6565b90600052602060002090601f01602090048101928262000b64576000855562000bb0565b82601f1062000b7f57805160ff191683800117855562000bb0565b8280016001018555821562000bb0579182015b8281111562000baf57825182559160200191906001019062000b92565b5b50905062000bbf919062000bc3565b5090565b5b8082111562000bde57600081600090555060010162000bc4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c148262000be7565b9050919050565b62000c268162000c07565b811462000c3257600080fd5b50565b60008151905062000c468162000c1b565b92915050565b60006020828403121562000c655762000c6462000be2565b5b600062000c758482850162000c35565b91505092915050565b62000c898162000c07565b82525050565b600060408201905062000ca6600083018562000c7e565b62000cb5602083018462000c7e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d028262000cbc565b915062000d0f8362000cbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d4b5762000d4a62000cc6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d928262000cbc565b915062000d9f8362000cbc565b92508262000db25762000db162000d56565b5b828204905092915050565b600062000dca8262000cbc565b915062000dd78362000cbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e0f5762000e0e62000cc6565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e6360208362000e1a565b915062000e708262000e2b565b602082019050919050565b6000602082019050818103600083015262000e968162000e54565b9050919050565b60008115159050919050565b62000eb48162000e9d565b82525050565b600060208201905062000ed1600083018462000ea9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f0f601f8362000e1a565b915062000f1c8262000ed7565b602082019050919050565b6000602082019050818103600083015262000f428162000f00565b9050919050565b62000f548162000cbc565b82525050565b600060208201905062000f71600083018462000f49565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fbf57607f821691505b6020821081141562000fd65762000fd562000f77565b5b50919050565b60805160a0516152436200103a6000396000818161127301528181611a9e0152612a2c015260008181610e3b015281816129d401528181613ac801528181613ba901528181613bd001528181613c6c0152613c9301526152436000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f819055506019600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b601381905550605a6013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000000000000000000000000000000000000000000000846124a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea2646970667358221220364cb38eaa3541a22951e271eefbb2b4fc259ec9cc628a041418a4927a71d47864736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cbf578063f2fde38b14610cea578063f637434214610d13578063f8b45b0514610d3e57610376565b8063dd62ed3e14610c2c578063e2f4560514610c69578063e884f26014610c9457610376565b8063c876d0b9116100d1578063c876d0b914610b6e578063c8c8ebe414610b99578063d257b34f14610bc4578063d85ba06314610c0157610376565b8063c024666814610af3578063c17b5b8c14610b1c578063c18bc19514610b4557610376565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610a25578063aacebbe314610a62578063b62496f514610a8b578063bbc0c74214610ac857610376565b80639fccce3214610992578063a0d82dc5146109bd578063a457c2d7146109e857610376565b8063924de9b7116101a0578063924de9b7146108ea57806395d89b41146109135780639a7a23d61461093e5780639c3b4fdc1461096757610376565b80638da5cb5b146108695780638ea5220f1461089457806392136913146108bf57610376565b80634a62bb65116102a057806373dd858c1161023e57806375f0a8741161021857806375f0a874146107d35780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806373dd858c14610756578063751039fc1461077f5780637571336a146107aa57610376565b80636a486a8e1161027a5780636a486a8e146106ac5780636ddd1713146106d757806370a0823114610702578063715018a61461073f57610376565b80634a62bb65146106195780634ec39ba9146106445780634fbee1931461066f57610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d69565b60405161039d9190613dfb565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613eb6565b610dfb565b6040516103da9190613f11565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f2c565b610e19565b6040516104179190613f11565b60405180910390f35b34801561042c57600080fd5b50610435610e39565b6040516104429190613fb8565b60405180910390f35b34801561045757600080fd5b50610460610e5d565b60405161046d9190613fe2565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190613f2c565b610e67565b005b3480156104ab57600080fd5b506104b4610fa3565b6040516104c19190613fe2565b60405180910390f35b3480156104d657600080fd5b506104df610fa9565b6040516104ec9190613fe2565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190613ffd565b610faf565b005b34801561052a57600080fd5b506105456004803603810190610540919061402a565b6110be565b6040516105529190613f11565b60405180910390f35b34801561056757600080fd5b506105706111b6565b60405161057d919061408c565b60405180910390f35b34801561059257600080fd5b5061059b6111bc565b6040516105a891906140c3565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613eb6565b6111c5565b6040516105e59190613f11565b60405180910390f35b3480156105fa57600080fd5b50610603611271565b604051610610919061408c565b60405180910390f35b34801561062557600080fd5b5061062e611295565b60405161063b9190613f11565b60405180910390f35b34801561065057600080fd5b506106596112a8565b604051610666919061408c565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613f2c565b6112ce565b6040516106a39190613f11565b60405180910390f35b3480156106b857600080fd5b506106c1611324565b6040516106ce9190613fe2565b60405180910390f35b3480156106e357600080fd5b506106ec61132a565b6040516106f99190613f11565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613f2c565b61133d565b6040516107369190613fe2565b60405180910390f35b34801561074b57600080fd5b50610754611385565b005b34801561076257600080fd5b5061077d60048036038101906107789190613f2c565b61140d565b005b34801561078b57600080fd5b50610794611549565b6040516107a19190613f11565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061410a565b6115e9565b005b3480156107df57600080fd5b506107e86116c0565b6040516107f5919061408c565b60405180910390f35b34801561080a57600080fd5b506108136116e6565b6040516108209190613fe2565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061414a565b6116ec565b005b34801561085e57600080fd5b506108676117eb565b005b34801561087557600080fd5b5061087e61189f565b60405161088b919061408c565b60405180910390f35b3480156108a057600080fd5b506108a96118c9565b6040516108b6919061408c565b60405180910390f35b3480156108cb57600080fd5b506108d46118ef565b6040516108e19190613fe2565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061419d565b6118f5565b005b34801561091f57600080fd5b5061092861198e565b6040516109359190613dfb565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061410a565b611a20565b005b34801561097357600080fd5b5061097c611b39565b6040516109899190613fe2565b60405180910390f35b34801561099e57600080fd5b506109a7611b3f565b6040516109b49190613fe2565b60405180910390f35b3480156109c957600080fd5b506109d2611b45565b6040516109df9190613fe2565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613eb6565b611b4b565b604051610a1c9190613f11565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190613eb6565b611c36565b604051610a599190613f11565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190613f2c565b611c54565b005b348015610a9757600080fd5b50610ab26004803603810190610aad9190613f2c565b611d90565b604051610abf9190613f11565b60405180910390f35b348015610ad457600080fd5b50610add611db0565b604051610aea9190613f11565b60405180910390f35b348015610aff57600080fd5b50610b1a6004803603810190610b15919061410a565b611dc3565b005b348015610b2857600080fd5b50610b436004803603810190610b3e919061414a565b611ee8565b005b348015610b5157600080fd5b50610b6c6004803603810190610b679190613ffd565b611fe7565b005b348015610b7a57600080fd5b50610b836120f6565b604051610b909190613f11565b60405180910390f35b348015610ba557600080fd5b50610bae612109565b604051610bbb9190613fe2565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190613ffd565b61210f565b604051610bf89190613f11565b60405180910390f35b348015610c0d57600080fd5b50610c16612264565b604051610c239190613fe2565b60405180910390f35b348015610c3857600080fd5b50610c536004803603810190610c4e91906141ca565b61226a565b604051610c609190613fe2565b60405180910390f35b348015610c7557600080fd5b50610c7e6122f1565b604051610c8b9190613fe2565b60405180910390f35b348015610ca057600080fd5b50610ca96122f7565b604051610cb69190613f11565b60405180910390f35b348015610ccb57600080fd5b50610cd4612397565b604051610ce19190613fe2565b60405180910390f35b348015610cf657600080fd5b50610d116004803603810190610d0c9190613f2c565b61239d565b005b348015610d1f57600080fd5b50610d28612495565b604051610d359190613fe2565b60405180910390f35b348015610d4a57600080fd5b50610d5361249b565b604051610d609190613fe2565b60405180910390f35b606060038054610d7890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490614239565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e0f610e086124a1565b84846124a9565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e6f6124a1565b73ffffffffffffffffffffffffffffffffffffffff16610e8d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906142b7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b610fb76124a1565b73ffffffffffffffffffffffffffffffffffffffff16610fd561189f565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906142b7565b60405180910390fd5b670de0b6b3a76400006103e86001611041610e5d565b61104b9190614306565b611055919061438f565b61105f919061438f565b8110156110a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109890614432565b60405180910390fd5b670de0b6b3a7640000816110b59190614306565b60098190555050565b60006110cb848484612674565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111166124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906144c4565b60405180910390fd5b6111aa856111a26124a1565b8584036124a9565b60019150509392505050565b61dead81565b60006012905090565b60006112676111d26124a1565b8484600160006111e06124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126291906144e4565b6124a9565b6001905092915050565b7f000000000000000000000000ef42037056a8c9bde60db1d099e3a91285a18d2681565b600c60009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61138d6124a1565b73ffffffffffffffffffffffffffffffffffffffff166113ab61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f8906142b7565b60405180910390fd5b61140b600061330e565b565b6114156124a1565b73ffffffffffffffffffffffffffffffffffffffff1661143361189f565b73ffffffffffffffffffffffffffffffffffffffff1614611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906142b7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006115536124a1565b73ffffffffffffffffffffffffffffffffffffffff1661157161189f565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906142b7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6115f16124a1565b73ffffffffffffffffffffffffffffffffffffffff1661160f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c906142b7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6116f46124a1565b73ffffffffffffffffffffffffffffffffffffffff1661171261189f565b73ffffffffffffffffffffffffffffffffffffffff1614611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f906142b7565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461179091906144e4565b61179a91906144e4565b600f819055506019600f5411156117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614586565b60405180910390fd5b505050565b6117f36124a1565b73ffffffffffffffffffffffffffffffffffffffff1661181161189f565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906142b7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fd6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661191b61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611968906142b7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461199d90614239565b80601f01602080910402602001604051908101604052809291908181526020018280546119c990614239565b8015611a165780601f106119eb57610100808354040283529160200191611a16565b820191906000526020600020905b8154815290600101906020018083116119f957829003601f168201915b5050505050905090565b611a286124a1565b73ffffffffffffffffffffffffffffffffffffffff16611a4661189f565b73ffffffffffffffffffffffffffffffffffffffff1614611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906142b7565b60405180910390fd5b7f000000000000000000000000ef42037056a8c9bde60db1d099e3a91285a18d2673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614618565b60405180910390fd5b611b3582826133d4565b5050565b60125481565b60195481565b60165481565b60008060016000611b5a6124a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906146aa565b60405180910390fd5b611c2b611c226124a1565b858584036124a9565b600191505092915050565b6000611c4a611c436124a1565b8484612674565b6001905092915050565b611c5c6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611c7a61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906142b7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611dcb6124a1565b73ffffffffffffffffffffffffffffffffffffffff16611de961189f565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e36906142b7565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611edc9190613f11565b60405180910390a25050565b611ef06124a1565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61189f565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906142b7565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611f8c91906144e4565b611f9691906144e4565b601381905550605a6013541115611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990614586565b60405180910390fd5b505050565b611fef6124a1565b73ffffffffffffffffffffffffffffffffffffffff1661200d61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205a906142b7565b60405180910390fd5b670de0b6b3a76400006103e86005612079610e5d565b6120839190614306565b61208d919061438f565b612097919061438f565b8110156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d09061473c565b60405180910390fd5b670de0b6b3a7640000816120ed9190614306565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b60006121196124a1565b73ffffffffffffffffffffffffffffffffffffffff1661213761189f565b73ffffffffffffffffffffffffffffffffffffffff161461218d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612184906142b7565b60405180910390fd5b620186a0600161219b610e5d565b6121a59190614306565b6121af919061438f565b8210156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906147ce565b60405180910390fd5b6103e860056121fe610e5d565b6122089190614306565b612212919061438f565b821115612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90614860565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006123016124a1565b73ffffffffffffffffffffffffffffffffffffffff1661231f61189f565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906142b7565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b6123a56124a1565b73ffffffffffffffffffffffffffffffffffffffff166123c361189f565b73ffffffffffffffffffffffffffffffffffffffff1614612419576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612410906142b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612480906148f2565b60405180910390fd5b6124928161330e565b50565b60155481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614984565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258090614a16565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126679190613fe2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274b90614b3a565b60405180910390fd5b600081141561276e5761276983836000613475565b613309565b600c60009054906101000a900460ff1615612e315761278b61189f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127f957506127c961189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128325750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561286c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128855750600560149054906101000a900460ff16155b15612e3057600c60019054906101000a900460ff1661297f57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061293f5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297590614ba6565b60405180910390fd5b5b600e60009054906101000a900460ff1615612b475761299c61189f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a7b57507f000000000000000000000000ef42037056a8c9bde60db1d099e3a91285a18d2673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b465743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614c5e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bea5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9157600954811115612c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2b90614cf0565b60405180910390fd5b600b54612c408361133d565b82612c4b91906144e4565b1115612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614d5c565b60405180910390fd5b612e2f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d345750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8357600954811115612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614dee565b60405180910390fd5b612e2e565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2d57600b54612de08361133d565b82612deb91906144e4565b1115612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2390614d5c565b60405180910390fd5b5b5b5b5b5b6000612e3c3061133d565b90506000600a548210159050808015612e615750600c60029054906101000a900460ff165b8015612e7a5750600560149054906101000a900460ff16155b8015612ed05750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f265750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f7c5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fc0576001600560146101000a81548160ff021916908315150217905550612fa46136f6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130765750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561308057600090505b600081156132f957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130e357506000601354115b156131b0576131106064613102601354886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050601354601554826131239190614306565b61312d919061438f565b6018600082825461313e91906144e4565b92505081905550601354601654826131569190614306565b613160919061438f565b6019600082825461317191906144e4565b92505081905550601354601454826131899190614306565b613193919061438f565b601760008282546131a491906144e4565b925050819055506132d5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561320b57506000600f54115b156132d457613238606461322a600f54886139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600f546011548261324b9190614306565b613255919061438f565b6018600082825461326691906144e4565b92505081905550600f546012548261327e9190614306565b613288919061438f565b6019600082825461329991906144e4565b92505081905550600f54601054826132b19190614306565b6132bb919061438f565b601760008282546132cc91906144e4565b925050819055505b5b60008111156132ea576132e9873083613475565b5b80856132f69190614e0e565b94505b613304878787613475565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90614aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354c90614b3a565b60405180910390fd5b613560838383613a09565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90614eb4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461367991906144e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136dd9190613fe2565b60405180910390a36136f0848484613a0e565b50505050565b60006137013061133d565b9050600060195460175460185461371891906144e4565b61372291906144e4565b90506000808314806137345750600082145b15613741575050506139db565b6014600a546137509190614306565b831115613769576014600a546137669190614306565b92505b60006002836018548661377c9190614306565b613786919061438f565b613790919061438f565b905060006137a78286613a1390919063ffffffff16565b905060004790506137b782613a29565b60006137cc8247613a1390919063ffffffff16565b905060006137f7876137e9601754856139dd90919063ffffffff16565b6139f390919063ffffffff16565b9050600061382288613814601954866139dd90919063ffffffff16565b6139f390919063ffffffff16565b905060008183856138339190614e0e565b61383d9190614e0e565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161389d90614f05565b60006040518083038185875af1925050503d80600081146138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5050809850506000871180156138f55750600081115b15613942576139048782613c66565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161393993929190614f1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161398890614f05565b60006040518083038185875af1925050503d80600081146139c5576040519150601f19603f3d011682016040523d82523d6000602084013e6139ca565b606091505b505080985050505050505050505050505b565b600081836139eb9190614306565b905092915050565b60008183613a01919061438f565b905092915050565b505050565b505050565b60008183613a219190614e0e565b905092915050565b6000600267ffffffffffffffff811115613a4657613a45614f51565b5b604051908082528060200260200182016040528015613a745781602001602082028036833780820191505090505b5090503081600081518110613a8c57613a8b614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b559190614fc4565b81600181518110613b6957613b68614f80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c309594939291906150ea565b600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505050505050565b613c91307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d1896959493929190615144565b60606040518083038185885af1158015613d36573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d5b91906151ba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d9c578082015181840152602081019050613d81565b83811115613dab576000848401525b50505050565b6000601f19601f8301169050919050565b6000613dcd82613d62565b613dd78185613d6d565b9350613de7818560208601613d7e565b613df081613db1565b840191505092915050565b60006020820190508181036000830152613e158184613dc2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e4d82613e22565b9050919050565b613e5d81613e42565b8114613e6857600080fd5b50565b600081359050613e7a81613e54565b92915050565b6000819050919050565b613e9381613e80565b8114613e9e57600080fd5b50565b600081359050613eb081613e8a565b92915050565b60008060408385031215613ecd57613ecc613e1d565b5b6000613edb85828601613e6b565b9250506020613eec85828601613ea1565b9150509250929050565b60008115159050919050565b613f0b81613ef6565b82525050565b6000602082019050613f266000830184613f02565b92915050565b600060208284031215613f4257613f41613e1d565b5b6000613f5084828501613e6b565b91505092915050565b6000819050919050565b6000613f7e613f79613f7484613e22565b613f59565b613e22565b9050919050565b6000613f9082613f63565b9050919050565b6000613fa282613f85565b9050919050565b613fb281613f97565b82525050565b6000602082019050613fcd6000830184613fa9565b92915050565b613fdc81613e80565b82525050565b6000602082019050613ff76000830184613fd3565b92915050565b60006020828403121561401357614012613e1d565b5b600061402184828501613ea1565b91505092915050565b60008060006060848603121561404357614042613e1d565b5b600061405186828701613e6b565b935050602061406286828701613e6b565b925050604061407386828701613ea1565b9150509250925092565b61408681613e42565b82525050565b60006020820190506140a1600083018461407d565b92915050565b600060ff82169050919050565b6140bd816140a7565b82525050565b60006020820190506140d860008301846140b4565b92915050565b6140e781613ef6565b81146140f257600080fd5b50565b600081359050614104816140de565b92915050565b6000806040838503121561412157614120613e1d565b5b600061412f85828601613e6b565b9250506020614140858286016140f5565b9150509250929050565b60008060006060848603121561416357614162613e1d565b5b600061417186828701613ea1565b935050602061418286828701613ea1565b925050604061419386828701613ea1565b9150509250925092565b6000602082840312156141b3576141b2613e1d565b5b60006141c1848285016140f5565b91505092915050565b600080604083850312156141e1576141e0613e1d565b5b60006141ef85828601613e6b565b925050602061420085828601613e6b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425157607f821691505b602082108114156142655761426461420a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a1602083613d6d565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431182613e80565b915061431c83613e80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614355576143546142d7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439a82613e80565b91506143a583613e80565b9250826143b5576143b4614360565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061441c602f83613d6d565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006144ae602883613d6d565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60006144ef82613e80565b91506144fa83613e80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e6142d7565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614570601d83613d6d565b915061457b8261453a565b602082019050919050565b6000602082019050818103600083015261459f81614563565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614602603983613d6d565b915061460d826145a6565b604082019050919050565b60006020820190508181036000830152614631816145f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614694602583613d6d565b915061469f82614638565b604082019050919050565b600060208201905081810360008301526146c381614687565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614726602483613d6d565b9150614731826146ca565b604082019050919050565b6000602082019050818103600083015261475581614719565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147b8603583613d6d565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061484a603483613d6d565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006148dc602683613d6d565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061496e602483613d6d565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a00602283613d6d565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a92602583613d6d565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b24602383613d6d565b9150614b2f82614ac8565b604082019050919050565b60006020820190508181036000830152614b5381614b17565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b90601683613d6d565b9150614b9b82614b5a565b602082019050919050565b60006020820190508181036000830152614bbf81614b83565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c48604983613d6d565b9150614c5382614bc6565b606082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614cda603583613d6d565b9150614ce582614c7e565b604082019050919050565b60006020820190508181036000830152614d0981614ccd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d46601383613d6d565b9150614d5182614d10565b602082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614dd8603683613d6d565b9150614de382614d7c565b604082019050919050565b60006020820190508181036000830152614e0781614dcb565b9050919050565b6000614e1982613e80565b9150614e2483613e80565b925082821015614e3757614e366142d7565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e9e602683613d6d565b9150614ea982614e42565b604082019050919050565b60006020820190508181036000830152614ecd81614e91565b9050919050565b600081905092915050565b50565b6000614eef600083614ed4565b9150614efa82614edf565b600082019050919050565b6000614f1082614ee2565b9150819050919050565b6000606082019050614f2f6000830186613fd3565b614f3c6020830185613fd3565b614f496040830184613fd3565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fbe81613e54565b92915050565b600060208284031215614fda57614fd9613e1d565b5b6000614fe884828501614faf565b91505092915050565b6000819050919050565b600061501661501161500c84614ff1565b613f59565b613e80565b9050919050565b61502681614ffb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506181613e42565b82525050565b60006150738383615058565b60208301905092915050565b6000602082019050919050565b60006150978261502c565b6150a18185615037565b93506150ac83615048565b8060005b838110156150dd5781516150c48882615067565b97506150cf8361507f565b9250506001810190506150b0565b5085935050505092915050565b600060a0820190506150ff6000830188613fd3565b61510c602083018761501d565b818103604083015261511e818661508c565b905061512d606083018561407d565b61513a6080830184613fd3565b9695505050505050565b600060c082019050615159600083018961407d565b6151666020830188613fd3565b615173604083018761501d565b615180606083018661501d565b61518d608083018561407d565b61519a60a0830184613fd3565b979650505050505050565b6000815190506151b481613e8a565b92915050565b6000806000606084860312156151d3576151d2613e1d565b5b60006151e1868287016151a5565b93505060206151f2868287016151a5565b9250506040615203868287016151a5565b915050925092509256fea2646970667358221220364cb38eaa3541a22951e271eefbb2b4fc259ec9cc628a041418a4927a71d47864736f6c634300080a0033

Deployed Bytecode Sourcemap

15011:16174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3622:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16253:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15087:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3029:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23058:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16118:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16078;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20395:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3799:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15190:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2928:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4299:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15145:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15498:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15350:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23397:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15933:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15578:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3145:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;830:103;;;;;;;;;;;;;:::i;:::-;;23223:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19503:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20942:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15282:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15826;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21313:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19339:112;;;;;;;;;;;;;:::i;:::-;;607:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15319:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15968:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21205:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2816:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22334:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15900:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16158:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16044:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4522:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3280:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22842:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16325:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15538:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22144:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21724:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20678:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15744:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15383:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19890:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15792:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3463:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15425:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19685:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15863:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;941:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16006:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15465:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2708:100;2762:13;2795:5;2788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:100;:::o;3622:169::-;3705:4;3722:39;3731:12;:10;:12::i;:::-;3745:7;3754:6;3722:8;:39::i;:::-;3779:4;3772:11;;3622:169;;;;:::o;16253:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15087:51::-;;;:::o;3029:108::-;3090:7;3117:12;;3110:19;;3029:108;:::o;23058:157::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23165:9:::1;;;;;;;;;;;23137:38;;23154:9;23137:38;;;;;;;;;;;;23198:9;23186;;:21;;;;;;;;;;;;;;;;;;23058:157:::0;:::o;16118:33::-;;;;:::o;16078:::-;;;;:::o;20395:275::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20532:4:::1;20524;20519:1;20503:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20502:26;;;;:::i;:::-;20501:35;;;;:::i;:::-;20491:6;:45;;20469:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;20655:6;20645;:17;;;;:::i;:::-;20622:20;:40;;;;20395:275:::0;:::o;3799:492::-;3939:4;3956:36;3966:6;3974:9;3985:6;3956:9;:36::i;:::-;4005:24;4032:11;:19;4044:6;4032:19;;;;;;;;;;;;;;;:33;4052:12;:10;:12::i;:::-;4032:33;;;;;;;;;;;;;;;;4005:60;;4104:6;4084:16;:26;;4076:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4191:57;4200:6;4208:12;:10;:12::i;:::-;4241:6;4222:16;:25;4191:8;:57::i;:::-;4279:4;4272:11;;;3799:492;;;;;:::o;15190:53::-;15236:6;15190:53;:::o;2928:93::-;2986:5;3011:2;3004:9;;2928:93;:::o;4299:215::-;4387:4;4404:80;4413:12;:10;:12::i;:::-;4427:7;4473:10;4436:11;:25;4448:12;:10;:12::i;:::-;4436:25;;;;;;;;;;;;;;;:34;4462:7;4436:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4404:8;:80::i;:::-;4502:4;4495:11;;4299:215;;;;:::o;15145:38::-;;;:::o;15498:33::-;;;;;;;;;;;;;:::o;15350:24::-;;;;;;;;;;;;;:::o;23397:126::-;23463:4;23487:19;:28;23507:7;23487:28;;;;;;;;;;;;;;;;;;;;;;;;;23480:35;;23397:126;;;:::o;15933:28::-;;;;:::o;15578:31::-;;;;;;;;;;;;;:::o;3145:127::-;3219:7;3246:9;:18;3256:7;3246:18;;;;;;;;;;;;;;;;3239:25;;3145:127;;;:::o;830:103::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;895:30:::1;922:1;895:18;:30::i;:::-;830:103::o:0;23223:166::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:9:::1;;;;;;;;;;;23305:41;;23322:12;23305:41;;;;;;;;;;;;23369:12;23357:9;;:24;;;;;;;;;;;;;;;;;;23223:166:::0;:::o;19503:121::-;19555:4;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19589:5:::1;19572:14;;:22;;;;;;;;;;;;;;;;;;19612:4;19605:11;;19503:121:::0;:::o;20942:167::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21097:4:::1;21055:31;:39;21087:6;21055:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20942:167:::0;;:::o;15282:30::-;;;;;;;;;;;;;:::o;15826:::-;;;;:::o;21313:403::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21481:13:::1;21463:15;:31;;;;21523:13;21505:15;:31;;;;21559:7;21547:9;:19;;;;21628:9;;21610:15;;21592;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;21577:12;:60;;;;21672:2;21656:12;;:18;;21648:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21313:403:::0;;;:::o;19339:112::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19410:4:::1;19394:13;;:20;;;;;;;;;;;;;;;;;;19439:4;19425:11;;:18;;;;;;;;;;;;;;;;;;19339:112::o:0;607:87::-;653:7;680:6;;;;;;;;;;;673:13;;607:87;:::o;15319:24::-;;;;;;;;;;;;;:::o;15968:31::-;;;;:::o;21205:100::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21290:7:::1;21276:11;;:21;;;;;;;;;;;;;;;;;;21205:100:::0;:::o;2816:104::-;2872:13;2905:7;2898:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:104;:::o;22334:304::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22478:13:::1;22470:21;;:4;:21;;;;22448:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22589:41;22618:4;22624:5;22589:28;:41::i;:::-;22334:304:::0;;:::o;15900:24::-;;;;:::o;16158:27::-;;;;:::o;16044:25::-;;;;:::o;4522:413::-;4615:4;4632:24;4659:11;:25;4671:12;:10;:12::i;:::-;4659:25;;;;;;;;;;;;;;;:34;4685:7;4659:34;;;;;;;;;;;;;;;;4632:61;;4732:15;4712:16;:35;;4704:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4825:67;4834:12;:10;:12::i;:::-;4848:7;4876:15;4857:16;:34;4825:8;:67::i;:::-;4923:4;4916:11;;;4522:413;;;;:::o;3280:175::-;3366:4;3383:42;3393:12;:10;:12::i;:::-;3407:9;3418:6;3383:9;:42::i;:::-;3443:4;3436:11;;3280:175;;;;:::o;22842:208::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22979:15:::1;;;;;;;;;;;22936:59;;22959:18;22936:59;;;;;;;;;;;;23024:18;23006:15;;:36;;;;;;;;;;;;;;;;;;22842:208:::0;:::o;16325:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15538:33::-;;;;;;;;;;;;;:::o;22144:182::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22260:8:::1;22229:19;:28;22249:7;22229:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22300:7;22284:34;;;22309:8;22284:34;;;;;;:::i;:::-;;;;;;;;22144:182:::0;;:::o;21724:412::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21894:13:::1;21875:16;:32;;;;21937:13;21918:16;:32;;;;21974:7;21961:10;:20;;;;22046:10;;22027:16;;22008;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;21992:13;:64;;;;22092:2;22075:13;;:19;;22067:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21724:412:::0;;;:::o;20678:256::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20818:4:::1;20810;20805:1;20789:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20788:26;;;;:::i;:::-;20787:35;;;;:::i;:::-;20777:6;:45;;20755:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;20919:6;20909;:17;;;;:::i;:::-;20897:9;:29;;;;20678:256:::0;:::o;15744:39::-;;;;;;;;;;;;;:::o;15383:35::-;;;;:::o;19890:497::-;19998:4;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20077:6:::1;20072:1;20056:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20055:28;;;;:::i;:::-;20042:9;:41;;20020:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20232:4;20227:1;20211:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20210:26;;;;:::i;:::-;20197:9;:39;;20175:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20348:9;20327:18;:30;;;;20375:4;20368:11;;19890:497:::0;;;:::o;15792:27::-;;;;:::o;3463:151::-;3552:7;3579:11;:18;3591:5;3579:18;;;;;;;;;;;;;;;:27;3598:7;3579:27;;;;;;;;;;;;;;;;3572:34;;3463:151;;;;:::o;15425:33::-;;;;:::o;19685:135::-;19745:4;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19785:5:::1;19762:20;;:28;;;;;;;;;;;;;;;;;;19808:4;19801:11;;19685:135:::0;:::o;15863:30::-;;;;:::o;941:201::-;753:12;:10;:12::i;:::-;742:23;;:7;:5;:7::i;:::-;:23;;;734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1050:1:::1;1030:22;;:8;:22;;;;1022:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1106:28;1125:8;1106:18;:28::i;:::-;941:201:::0;:::o;16006:31::-;;;;:::o;15465:24::-;;;;:::o;153:98::-;206:7;233:10;226:17;;153:98;:::o;6690:380::-;6843:1;6826:19;;:5;:19;;;;6818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6924:1;6905:21;;:7;:21;;;;6897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7008:6;6978:11;:18;6990:5;6978:18;;;;;;;;;;;;;;;:27;6997:7;6978:27;;;;;;;;;;;;;;;:36;;;;7046:7;7030:32;;7039:5;7030:32;;;7055:6;7030:32;;;;;;:::i;:::-;;;;;;;;6690:380;;;:::o;23581:4717::-;23729:1;23713:18;;:4;:18;;;;23705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23806:1;23792:16;;:2;:16;;;;23784:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23875:1;23865:6;:11;23861:93;;;23893:28;23909:4;23915:2;23919:1;23893:15;:28::i;:::-;23936:7;;23861:93;23970:14;;;;;;;;;;;23966:2487;;;24031:7;:5;:7::i;:::-;24023:15;;:4;:15;;;;:49;;;;;24065:7;:5;:7::i;:::-;24059:13;;:2;:13;;;;24023:49;:86;;;;;24107:1;24093:16;;:2;:16;;;;24023:86;:128;;;;;24144:6;24130:21;;:2;:21;;;;24023:128;:158;;;;;24173:8;;;;;;;;;;;24172:9;24023:158;24001:2441;;;24221:13;;;;;;;;;;;24216:223;;24293:19;:25;24313:4;24293:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24322:19;:23;24342:2;24322:23;;;;;;;;;;;;;;;;;;;;;;;;;24293:52;24259:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24216:223;24595:20;;;;;;;;;;;24591:641;;;24676:7;:5;:7::i;:::-;24670:13;;:2;:13;;;;:72;;;;;24726:15;24712:30;;:2;:30;;;;24670:72;:129;;;;;24785:13;24771:28;;:2;:28;;;;24670:129;24640:573;;;24963:12;24888:28;:39;24917:9;24888:39;;;;;;;;;;;;;;;;:87;24850:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;25177:12;25135:28;:39;25164:9;25135:39;;;;;;;;;;;;;;;:54;;;;24640:573;24591:641;25306:25;:31;25332:4;25306:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25363:31;:35;25395:2;25363:35;;;;;;;;;;;;;;;;;;;;;;;;;25362:36;25306:92;25280:1147;;;25485:20;;25475:6;:30;;25441:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25693:9;;25676:13;25686:2;25676:9;:13::i;:::-;25667:6;:22;;;;:::i;:::-;:35;;25633:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25280:1147;;;25871:25;:29;25897:2;25871:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25926:31;:37;25958:4;25926:37;;;;;;;;;;;;;;;;;;;;;;;;;25925:38;25871:92;25845:582;;;26050:20;;26040:6;:30;;26006:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25845:582;;;26207:31;:35;26239:2;26207:35;;;;;;;;;;;;;;;;;;;;;;;;;26202:225;;26327:9;;26310:13;26320:2;26310:9;:13::i;:::-;26301:6;:22;;;;:::i;:::-;:35;;26267:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26202:225;25845:582;25280:1147;24001:2441;23966:2487;26465:28;26496:24;26514:4;26496:9;:24::i;:::-;26465:55;;26533:12;26572:18;;26548:20;:42;;26533:57;;26621:7;:35;;;;;26645:11;;;;;;;;;;;26621:35;:61;;;;;26674:8;;;;;;;;;;;26673:9;26621:61;:110;;;;;26700:25;:31;26726:4;26700:31;;;;;;;;;;;;;;;;;;;;;;;;;26699:32;26621:110;:153;;;;;26749:19;:25;26769:4;26749:25;;;;;;;;;;;;;;;;;;;;;;;;;26748:26;26621:153;:194;;;;;26792:19;:23;26812:2;26792:23;;;;;;;;;;;;;;;;;;;;;;;;;26791:24;26621:194;26603:326;;;26853:4;26842:8;;:15;;;;;;;;;;;;;;;;;;26874:10;:8;:10::i;:::-;26912:5;26901:8;;:16;;;;;;;;;;;;;;;;;;26603:326;26941:12;26957:8;;;;;;;;;;;26956:9;26941:24;;27067:19;:25;27087:4;27067:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27096:19;:23;27116:2;27096:23;;;;;;;;;;;;;;;;;;;;;;;;;27067:52;27063:100;;;27146:5;27136:15;;27063:100;27175:12;27280:7;27276:969;;;27332:25;:29;27358:2;27332:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27381:1;27365:13;;:17;27332:50;27328:768;;;27410:34;27440:3;27410:25;27421:13;;27410:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27403:41;;27513:13;;27493:16;;27486:4;:23;;;;:::i;:::-;27485:41;;;;:::i;:::-;27463:18;;:63;;;;;;;:::i;:::-;;;;;;;;27583:13;;27569:10;;27562:4;:17;;;;:::i;:::-;27561:35;;;;:::i;:::-;27545:12;;:51;;;;;;;:::i;:::-;;;;;;;;27665:13;;27645:16;;27638:4;:23;;;;:::i;:::-;27637:41;;;;:::i;:::-;27615:18;;:63;;;;;;;:::i;:::-;;;;;;;;27328:768;;;27740:25;:31;27766:4;27740:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27790:1;27775:12;;:16;27740:51;27736:360;;;27819:33;27848:3;27819:24;27830:12;;27819:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27812:40;;27920:12;;27901:15;;27894:4;:22;;;;:::i;:::-;27893:39;;;;:::i;:::-;27871:18;;:61;;;;;;;:::i;:::-;;;;;;;;27988:12;;27975:9;;27968:4;:16;;;;:::i;:::-;27967:33;;;;:::i;:::-;27951:12;;:49;;;;;;;:::i;:::-;;;;;;;;28068:12;;28049:15;;28042:4;:22;;;;:::i;:::-;28041:39;;;;:::i;:::-;28019:18;;:61;;;;;;;:::i;:::-;;;;;;;;27736:360;27328:768;28123:1;28116:4;:8;28112:91;;;28145:42;28161:4;28175;28182;28145:15;:42::i;:::-;28112:91;28229:4;28219:14;;;;;:::i;:::-;;;27276:969;28257:33;28273:4;28279:2;28283:6;28257:15;:33::i;:::-;23694:4604;;;;23581:4717;;;;:::o;1150:191::-;1224:16;1243:6;;;;;;;;;;;1224:25;;1269:8;1260:6;;:17;;;;;;;;;;;;;;;;;;1324:8;1293:40;;1314:8;1293:40;;;;;;;;;;;;1213:128;1150:191;:::o;22646:188::-;22763:5;22729:25;:31;22755:4;22729:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22820:5;22786:40;;22814:4;22786:40;;;;;;;;;;;;22646:188;;:::o;4943:733::-;5101:1;5083:20;;:6;:20;;;;5075:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5185:1;5164:23;;:9;:23;;;;5156:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5240:47;5261:6;5269:9;5280:6;5240:20;:47::i;:::-;5300:21;5324:9;:17;5334:6;5324:17;;;;;;;;;;;;;;;;5300:41;;5377:6;5360:13;:23;;5352:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5498:6;5482:13;:22;5462:9;:17;5472:6;5462:17;;;;;;;;;;;;;;;:42;;;;5550:6;5526:9;:20;5536:9;5526:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5591:9;5574:35;;5583:6;5574:35;;;5602:6;5574:35;;;;;;:::i;:::-;;;;;;;;5622:46;5642:6;5650:9;5661:6;5622:19;:46::i;:::-;5064:612;4943:733;;;:::o;29426:1756::-;29465:23;29491:24;29509:4;29491:9;:24::i;:::-;29465:50;;29526:25;29622:12;;29588:18;;29554;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29526:108;;29645:12;29693:1;29674:15;:20;:46;;;;29719:1;29698:17;:22;29674:46;29670:85;;;29737:7;;;;;29670:85;29810:2;29789:18;;:23;;;;:::i;:::-;29771:15;:41;29767:115;;;29868:2;29847:18;;:23;;;;:::i;:::-;29829:41;;29767:115;29943:23;30056:1;30023:17;29988:18;;29970:15;:36;;;;:::i;:::-;29969:71;;;;:::i;:::-;:88;;;;:::i;:::-;29943:114;;30068:26;30097:36;30117:15;30097;:19;;:36;;;;:::i;:::-;30068:65;;30146:25;30174:21;30146:49;;30208:36;30225:18;30208:16;:36::i;:::-;30257:18;30278:44;30304:17;30278:21;:25;;:44;;;;:::i;:::-;30257:65;;30335:23;30361:81;30414:17;30361:34;30376:18;;30361:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;30335:107;;30453:17;30473:51;30506:17;30473:28;30488:12;;30473:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30453:71;;30537:23;30594:9;30576:15;30563:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;30537:66;;30637:1;30616:18;:22;;;;30670:1;30649:18;:22;;;;30697:1;30682:12;:16;;;;30733:9;;;;;;;;;;;30725:23;;30756:9;30725:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30711:59;;;;;30805:1;30787:15;:19;:42;;;;;30828:1;30810:15;:19;30787:42;30783:278;;;30846:46;30859:15;30876;30846:12;:46::i;:::-;30912:137;30945:18;30982:15;31016:18;;30912:137;;;;;;;;:::i;:::-;;;;;;;;30783:278;31095:15;;;;;;;;;;;31087:29;;31138:21;31087:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31073:101;;;;;29454:1728;;;;;;;;;;29426:1756;:::o;8696:98::-;8754:7;8785:1;8781;:5;;;;:::i;:::-;8774:12;;8696:98;;;;:::o;8802:::-;8860:7;8891:1;8887;:5;;;;:::i;:::-;8880:12;;8802:98;;;;:::o;7078:125::-;;;;:::o;7211:124::-;;;;:::o;8590:98::-;8648:7;8679:1;8675;:5;;;;:::i;:::-;8668:12;;8590:98;;;;:::o;28306:589::-;28432:21;28470:1;28456:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28432:40;;28501:4;28483;28488:1;28483:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28527:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28517:4;28522:1;28517:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28562:62;28579:4;28594:15;28612:11;28562:8;:62::i;:::-;28663:15;:66;;;28744:11;28770:1;28814:4;28841;28861:15;28663:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28361:534;28306:589;:::o;28903:515::-;29051:62;29068:4;29083:15;29101:11;29051:8;:62::i;:::-;29156:15;:31;;;29195:9;29228:4;29248:11;29274:1;29317;29360:9;;;;;;;;;;;29384:15;29156:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28903:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:305::-;13591:3;13610:20;13628:1;13610:20;:::i;:::-;13605:25;;13644:20;13662:1;13644:20;:::i;:::-;13639:25;;13798:1;13730:66;13726:74;13723:1;13720:81;13717:107;;;13804:18;;:::i;:::-;13717:107;13848:1;13845;13841:9;13834:16;;13551:305;;;;:::o;13862:179::-;14002:31;13998:1;13990:6;13986:14;13979:55;13862:179;:::o;14047:366::-;14189:3;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14286:93;14375:3;14286:93;:::i;:::-;14404:2;14399:3;14395:12;14388:19;;14047:366;;;:::o;14419:419::-;14585:4;14623:2;14612:9;14608:18;14600:26;;14672:9;14666:4;14662:20;14658:1;14647:9;14643:17;14636:47;14700:131;14826:4;14700:131;:::i;:::-;14692:139;;14419:419;;;:::o;14844:244::-;14984:34;14980:1;14972:6;14968:14;14961:58;15053:27;15048:2;15040:6;15036:15;15029:52;14844:244;:::o;15094:366::-;15236:3;15257:67;15321:2;15316:3;15257:67;:::i;:::-;15250:74;;15333:93;15422:3;15333:93;:::i;:::-;15451:2;15446:3;15442:12;15435:19;;15094:366;;;:::o;15466:419::-;15632:4;15670:2;15659:9;15655:18;15647:26;;15719:9;15713:4;15709:20;15705:1;15694:9;15690:17;15683:47;15747:131;15873:4;15747:131;:::i;:::-;15739:139;;15466:419;;;:::o;15891:224::-;16031:34;16027:1;16019:6;16015:14;16008:58;16100:7;16095:2;16087:6;16083:15;16076:32;15891:224;:::o;16121:366::-;16263:3;16284:67;16348:2;16343:3;16284:67;:::i;:::-;16277:74;;16360:93;16449:3;16360:93;:::i;:::-;16478:2;16473:3;16469:12;16462:19;;16121:366;;;:::o;16493:419::-;16659:4;16697:2;16686:9;16682:18;16674:26;;16746:9;16740:4;16736:20;16732:1;16721:9;16717:17;16710:47;16774:131;16900:4;16774:131;:::i;:::-;16766:139;;16493:419;;;:::o;16918:223::-;17058:34;17054:1;17046:6;17042:14;17035:58;17127:6;17122:2;17114:6;17110:15;17103:31;16918:223;:::o;17147:366::-;17289:3;17310:67;17374:2;17369:3;17310:67;:::i;:::-;17303:74;;17386:93;17475:3;17386:93;:::i;:::-;17504:2;17499:3;17495:12;17488:19;;17147:366;;;:::o;17519:419::-;17685:4;17723:2;17712:9;17708:18;17700:26;;17772:9;17766:4;17762:20;17758:1;17747:9;17743:17;17736:47;17800:131;17926:4;17800:131;:::i;:::-;17792:139;;17519:419;;;:::o;17944:240::-;18084:34;18080:1;18072:6;18068:14;18061:58;18153:23;18148:2;18140:6;18136:15;18129:48;17944:240;:::o;18190:366::-;18332:3;18353:67;18417:2;18412:3;18353:67;:::i;:::-;18346:74;;18429:93;18518:3;18429:93;:::i;:::-;18547:2;18542:3;18538:12;18531:19;;18190:366;;;:::o;18562:419::-;18728:4;18766:2;18755:9;18751:18;18743:26;;18815:9;18809:4;18805:20;18801:1;18790:9;18786:17;18779:47;18843:131;18969:4;18843:131;:::i;:::-;18835:139;;18562:419;;;:::o;18987:239::-;19127:34;19123:1;19115:6;19111:14;19104:58;19196:22;19191:2;19183:6;19179:15;19172:47;18987:239;:::o;19232:366::-;19374:3;19395:67;19459:2;19454:3;19395:67;:::i;:::-;19388:74;;19471:93;19560:3;19471:93;:::i;:::-;19589:2;19584:3;19580:12;19573:19;;19232:366;;;:::o;19604:419::-;19770:4;19808:2;19797:9;19793:18;19785:26;;19857:9;19851:4;19847:20;19843:1;19832:9;19828:17;19821:47;19885:131;20011:4;19885:131;:::i;:::-;19877:139;;19604:419;;;:::o;20029:225::-;20169:34;20165:1;20157:6;20153:14;20146:58;20238:8;20233:2;20225:6;20221:15;20214:33;20029:225;:::o;20260:366::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:419::-;20798:4;20836:2;20825:9;20821:18;20813:26;;20885:9;20879:4;20875:20;20871:1;20860:9;20856:17;20849:47;20913:131;21039:4;20913:131;:::i;:::-;20905:139;;20632:419;;;:::o;21057:223::-;21197:34;21193:1;21185:6;21181:14;21174:58;21266:6;21261:2;21253:6;21249:15;21242:31;21057:223;:::o;21286:366::-;21428:3;21449:67;21513:2;21508:3;21449:67;:::i;:::-;21442:74;;21525:93;21614:3;21525:93;:::i;:::-;21643:2;21638:3;21634:12;21627:19;;21286:366;;;:::o;21658:419::-;21824:4;21862:2;21851:9;21847:18;21839:26;;21911:9;21905:4;21901:20;21897:1;21886:9;21882:17;21875:47;21939:131;22065:4;21939:131;:::i;:::-;21931:139;;21658:419;;;:::o;22083:221::-;22223:34;22219:1;22211:6;22207:14;22200:58;22292:4;22287:2;22279:6;22275:15;22268:29;22083:221;:::o;22310:366::-;22452:3;22473:67;22537:2;22532:3;22473:67;:::i;:::-;22466:74;;22549:93;22638:3;22549:93;:::i;:::-;22667:2;22662:3;22658:12;22651:19;;22310:366;;;:::o;22682:419::-;22848:4;22886:2;22875:9;22871:18;22863:26;;22935:9;22929:4;22925:20;22921:1;22910:9;22906:17;22899:47;22963:131;23089:4;22963:131;:::i;:::-;22955:139;;22682:419;;;:::o;23107:224::-;23247:34;23243:1;23235:6;23231:14;23224:58;23316:7;23311:2;23303:6;23299:15;23292:32;23107:224;:::o;23337:366::-;23479:3;23500:67;23564:2;23559:3;23500:67;:::i;:::-;23493:74;;23576:93;23665:3;23576:93;:::i;:::-;23694:2;23689:3;23685:12;23678:19;;23337:366;;;:::o;23709:419::-;23875:4;23913:2;23902:9;23898:18;23890:26;;23962:9;23956:4;23952:20;23948:1;23937:9;23933:17;23926:47;23990:131;24116:4;23990:131;:::i;:::-;23982:139;;23709:419;;;:::o;24134:222::-;24274:34;24270:1;24262:6;24258:14;24251:58;24343:5;24338:2;24330:6;24326:15;24319:30;24134:222;:::o;24362:366::-;24504:3;24525:67;24589:2;24584:3;24525:67;:::i;:::-;24518:74;;24601:93;24690:3;24601:93;:::i;:::-;24719:2;24714:3;24710:12;24703:19;;24362:366;;;:::o;24734:419::-;24900:4;24938:2;24927:9;24923:18;24915:26;;24987:9;24981:4;24977:20;24973:1;24962:9;24958:17;24951:47;25015:131;25141:4;25015:131;:::i;:::-;25007:139;;24734:419;;;:::o;25159:172::-;25299:24;25295:1;25287:6;25283:14;25276:48;25159:172;:::o;25337:366::-;25479:3;25500:67;25564:2;25559:3;25500:67;:::i;:::-;25493:74;;25576:93;25665:3;25576:93;:::i;:::-;25694:2;25689:3;25685:12;25678:19;;25337:366;;;:::o;25709:419::-;25875:4;25913:2;25902:9;25898:18;25890:26;;25962:9;25956:4;25952:20;25948:1;25937:9;25933:17;25926:47;25990:131;26116:4;25990:131;:::i;:::-;25982:139;;25709:419;;;:::o;26134:297::-;26274:34;26270:1;26262:6;26258:14;26251:58;26343:34;26338:2;26330:6;26326:15;26319:59;26412:11;26407:2;26399:6;26395:15;26388:36;26134:297;:::o;26437:366::-;26579:3;26600:67;26664:2;26659:3;26600:67;:::i;:::-;26593:74;;26676:93;26765:3;26676:93;:::i;:::-;26794:2;26789:3;26785:12;26778:19;;26437:366;;;:::o;26809:419::-;26975:4;27013:2;27002:9;26998:18;26990:26;;27062:9;27056:4;27052:20;27048:1;27037:9;27033:17;27026:47;27090:131;27216:4;27090:131;:::i;:::-;27082:139;;26809:419;;;:::o;27234:240::-;27374:34;27370:1;27362:6;27358:14;27351:58;27443:23;27438:2;27430:6;27426:15;27419:48;27234:240;:::o;27480:366::-;27622:3;27643:67;27707:2;27702:3;27643:67;:::i;:::-;27636:74;;27719:93;27808:3;27719:93;:::i;:::-;27837:2;27832:3;27828:12;27821:19;;27480:366;;;:::o;27852:419::-;28018:4;28056:2;28045:9;28041:18;28033:26;;28105:9;28099:4;28095:20;28091:1;28080:9;28076:17;28069:47;28133:131;28259:4;28133:131;:::i;:::-;28125:139;;27852:419;;;:::o;28277:169::-;28417:21;28413:1;28405:6;28401:14;28394:45;28277:169;:::o;28452:366::-;28594:3;28615:67;28679:2;28674:3;28615:67;:::i;:::-;28608:74;;28691:93;28780:3;28691:93;:::i;:::-;28809:2;28804:3;28800:12;28793:19;;28452:366;;;:::o;28824:419::-;28990:4;29028:2;29017:9;29013:18;29005:26;;29077:9;29071:4;29067:20;29063:1;29052:9;29048:17;29041:47;29105:131;29231:4;29105:131;:::i;:::-;29097:139;;28824:419;;;:::o;29249:241::-;29389:34;29385:1;29377:6;29373:14;29366:58;29458:24;29453:2;29445:6;29441:15;29434:49;29249:241;:::o;29496:366::-;29638:3;29659:67;29723:2;29718:3;29659:67;:::i;:::-;29652:74;;29735:93;29824:3;29735:93;:::i;:::-;29853:2;29848:3;29844:12;29837:19;;29496:366;;;:::o;29868:419::-;30034:4;30072:2;30061:9;30057:18;30049:26;;30121:9;30115:4;30111:20;30107:1;30096:9;30092:17;30085:47;30149:131;30275:4;30149:131;:::i;:::-;30141:139;;29868:419;;;:::o;30293:191::-;30333:4;30353:20;30371:1;30353:20;:::i;:::-;30348:25;;30387:20;30405:1;30387:20;:::i;:::-;30382:25;;30426:1;30423;30420:8;30417:34;;;30431:18;;:::i;:::-;30417:34;30476:1;30473;30469:9;30461:17;;30293:191;;;;:::o;30490:225::-;30630:34;30626:1;30618:6;30614:14;30607:58;30699:8;30694:2;30686:6;30682:15;30675:33;30490:225;:::o;30721:366::-;30863:3;30884:67;30948:2;30943:3;30884:67;:::i;:::-;30877:74;;30960:93;31049:3;30960:93;:::i;:::-;31078:2;31073:3;31069:12;31062:19;;30721:366;;;:::o;31093:419::-;31259:4;31297:2;31286:9;31282:18;31274:26;;31346:9;31340:4;31336:20;31332:1;31321:9;31317:17;31310:47;31374:131;31500:4;31374:131;:::i;:::-;31366:139;;31093:419;;;:::o;31518:147::-;31619:11;31656:3;31641:18;;31518:147;;;;:::o;31671:114::-;;:::o;31791:398::-;31950:3;31971:83;32052:1;32047:3;31971:83;:::i;:::-;31964:90;;32063:93;32152:3;32063:93;:::i;:::-;32181:1;32176:3;32172:11;32165:18;;31791:398;;;:::o;32195:379::-;32379:3;32401:147;32544:3;32401:147;:::i;:::-;32394:154;;32565:3;32558:10;;32195:379;;;:::o;32580:442::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32780:71;32848:1;32837:9;32833:17;32824:6;32780:71;:::i;:::-;32861:72;32929:2;32918:9;32914:18;32905:6;32861:72;:::i;:::-;32943;33011:2;33000:9;32996:18;32987:6;32943:72;:::i;:::-;32580:442;;;;;;:::o;33028:180::-;33076:77;33073:1;33066:88;33173:4;33170:1;33163:15;33197:4;33194:1;33187:15;33214:180;33262:77;33259:1;33252:88;33359:4;33356:1;33349:15;33383:4;33380:1;33373:15;33400:143;33457:5;33488:6;33482:13;33473:22;;33504:33;33531:5;33504:33;:::i;:::-;33400:143;;;;:::o;33549:351::-;33619:6;33668:2;33656:9;33647:7;33643:23;33639:32;33636:119;;;33674:79;;:::i;:::-;33636:119;33794:1;33819:64;33875:7;33866:6;33855:9;33851:22;33819:64;:::i;:::-;33809:74;;33765:128;33549:351;;;;:::o;33906:85::-;33951:7;33980:5;33969:16;;33906:85;;;:::o;33997:158::-;34055:9;34088:61;34106:42;34115:32;34141:5;34115:32;:::i;:::-;34106:42;:::i;:::-;34088:61;:::i;:::-;34075:74;;33997:158;;;:::o;34161:147::-;34256:45;34295:5;34256:45;:::i;:::-;34251:3;34244:58;34161:147;;:::o;34314:114::-;34381:6;34415:5;34409:12;34399:22;;34314:114;;;:::o;34434:184::-;34533:11;34567:6;34562:3;34555:19;34607:4;34602:3;34598:14;34583:29;;34434:184;;;;:::o;34624:132::-;34691:4;34714:3;34706:11;;34744:4;34739:3;34735:14;34727:22;;34624:132;;;:::o;34762:108::-;34839:24;34857:5;34839:24;:::i;:::-;34834:3;34827:37;34762:108;;:::o;34876:179::-;34945:10;34966:46;35008:3;35000:6;34966:46;:::i;:::-;35044:4;35039:3;35035:14;35021:28;;34876:179;;;;:::o;35061:113::-;35131:4;35163;35158:3;35154:14;35146:22;;35061:113;;;:::o;35210:732::-;35329:3;35358:54;35406:5;35358:54;:::i;:::-;35428:86;35507:6;35502:3;35428:86;:::i;:::-;35421:93;;35538:56;35588:5;35538:56;:::i;:::-;35617:7;35648:1;35633:284;35658:6;35655:1;35652:13;35633:284;;;35734:6;35728:13;35761:63;35820:3;35805:13;35761:63;:::i;:::-;35754:70;;35847:60;35900:6;35847:60;:::i;:::-;35837:70;;35693:224;35680:1;35677;35673:9;35668:14;;35633:284;;;35637:14;35933:3;35926:10;;35334:608;;;35210:732;;;;:::o;35948:831::-;36211:4;36249:3;36238:9;36234:19;36226:27;;36263:71;36331:1;36320:9;36316:17;36307:6;36263:71;:::i;:::-;36344:80;36420:2;36409:9;36405:18;36396:6;36344:80;:::i;:::-;36471:9;36465:4;36461:20;36456:2;36445:9;36441:18;36434:48;36499:108;36602:4;36593:6;36499:108;:::i;:::-;36491:116;;36617:72;36685:2;36674:9;36670:18;36661:6;36617:72;:::i;:::-;36699:73;36767:3;36756:9;36752:19;36743:6;36699:73;:::i;:::-;35948:831;;;;;;;;:::o;36785:807::-;37034:4;37072:3;37061:9;37057:19;37049:27;;37086:71;37154:1;37143:9;37139:17;37130:6;37086:71;:::i;:::-;37167:72;37235:2;37224:9;37220:18;37211:6;37167:72;:::i;:::-;37249:80;37325:2;37314:9;37310:18;37301:6;37249:80;:::i;:::-;37339;37415:2;37404:9;37400:18;37391:6;37339:80;:::i;:::-;37429:73;37497:3;37486:9;37482:19;37473:6;37429:73;:::i;:::-;37512;37580:3;37569:9;37565:19;37556:6;37512:73;:::i;:::-;36785:807;;;;;;;;;:::o;37598:143::-;37655:5;37686:6;37680:13;37671:22;;37702:33;37729:5;37702:33;:::i;:::-;37598:143;;;;:::o;37747:663::-;37835:6;37843;37851;37900:2;37888:9;37879:7;37875:23;37871:32;37868:119;;;37906:79;;:::i;:::-;37868:119;38026:1;38051:64;38107:7;38098:6;38087:9;38083:22;38051:64;:::i;:::-;38041:74;;37997:128;38164:2;38190:64;38246:7;38237:6;38226:9;38222:22;38190:64;:::i;:::-;38180:74;;38135:129;38303:2;38329:64;38385:7;38376:6;38365:9;38361:22;38329:64;:::i;:::-;38319:74;;38274:129;37747:663;;;;;:::o

Swarm Source

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