ETH Price: $2,642.15 (+0.80%)

Token

This Is Not A Casino (TINAC)
 

Overview

Max Total Supply

1,000,000 TINAC

Holders

133

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
ThisIsNotACasino

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-11-30
*/

/**

Website: https://thisisnotalpha.com/
TG:      https://t.me/ThisIsNotAlphaOfficial
Twitter: https://twitter.com/ThisIsNotAlpha_

ThisIsNotACasino.com (http://thisisnotacasino.com/) is a fully functional casino 
where users can play BlackJack, Roulette, Heads or Tails ,Poker, Baccarat, 
Slots, and many more games to win crypto!

ThisIsNotACasino is a ThisIsNotAlpha.com (http://thisisnotalpha.com/) utility.
Taxes from the casino token will be used to buyback and add liquidity to $TINA. 
$TINA contract is 0x96beaA1316f85fD679ec49e5A63DaCc293B044be

**/
// 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 ThisIsNotACasino 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;
    address public casinoWallet;

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

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

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

    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 casinoWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("This Is Not A Casino", "TINAC") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D uniswap

        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 = 4;
        uint256 _buyLiquidityFee = 4;
        uint256 _buyDevFee = 4;
        uint256 _buyCasinoFee = 3;

        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 15;
        uint256 _sellDevFee = 5;
        uint256 _sellCasinoFee = 5;

        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;
        buyCasinoFee = _buyCasinoFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyCasinoFee;

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

        marketingWallet = address(0x7C3d51E113cB99de38c2029a80Ad019013c1a957); 
        devWallet = address(0x96F71160b01e692d968d3307d03Ce33F905881F2); 
        liqWallet = address(0xaF8C37289CA7d42B1637cd71EBE125Cfec5f71fF); 
        casinoWallet = address(0xFd5CCC8dA4C42592A7790e6ee4B035FE18a18Aba); //thisisnotacasino.eth

        // 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,
        uint256 _casinoFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyCasinoFee = _casinoFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyCasinoFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _casinoFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellCasinoFee = _casinoFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellCasinoFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% 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 updateCasinoWallet(address newWallet) external onlyOwner{
        emit casinoWalletUpdated(newWallet, casinoWallet);
        casinoWallet = 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;
                tokensForCasino += (fees * sellCasinoFee) / 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;
                tokensForCasino += (fees * buyCasinoFee) / 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 +
            tokensForCasino;
        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 ethForCasino = ethBalance.mul(tokensForCasino).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForCasino;

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"casinoWalletUpdated","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":"buyCasinoFee","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":"casinoWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"sellCasinoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForCasino","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint256","name":"_casinoFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateCasinoWallet","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"},{"internalType":"uint256","name":"_casinoFee","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"}]

60c06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280601481526020017f54686973204973204e6f74204120436173696e6f0000000000000000000000008152506040518060400160405280600581526020017f54494e414300000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000bd3565b5080600490805190602001906200011b92919062000bd3565b5050506200013e620001326200069360201b60201c565b6200069b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a8160016200076160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000210919062000ced565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000278573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029e919062000ced565b6040518363ffffffff1660e01b8152600401620002bd92919062000d30565b6020604051808303816000875af1158015620002dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000303919062000ced565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034b60a05160016200076160201b60201c565b6200036060a05160016200084b60201b60201c565b6000600490506000600490506000600490506000600390506000600590506000600f9050600060059050600060059050600069d3c21bcecceda1000000905069043c33c1937564800000600a8190555069043c33c1937564800000600c81905550612710600582620003d3919062000d96565b620003df919062000e26565b600b819055508860118190555087601281905550866013819055508560148190555060145460135460125460115462000419919062000e5e565b62000425919062000e5e565b62000431919062000e5e565b601081905550846016819055508360178190555082601881905550816019819055506019546018546017546016546200046b919062000e5e565b62000477919062000e5e565b62000483919062000e5e565b601581905550737c3d51e113cb99de38c2029a80ad019013c1a957600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507396f71160b01e692d968d3307d03ce33f905881f2600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073af8c37289ca7d42b1637cd71ebe125cfec5f71ff600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fd5ccc8da4c42592a7790e6ee4b035fe18a18aba600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005ff620005f1620008ec60201b60201c565b60016200091660201b60201c565b620006123060016200091660201b60201c565b6200062761dead60016200091660201b60201c565b620006496200063b620008ec60201b60201c565b60016200076160201b60201c565b6200065c3060016200076160201b60201c565b6200067161dead60016200076160201b60201c565b62000683338262000a5060201b60201c565b505050505050505050506200107d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007716200069360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000797620008ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e79062000f1c565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009266200069360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200094c620008ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099c9062000f1c565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a44919062000f5b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aba9062000fc8565b60405180910390fd5b62000ad76000838362000bc960201b60201c565b806002600082825462000aeb919062000e5e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b42919062000e5e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ba9919062000ffb565b60405180910390a362000bc56000838362000bce60201b60201c565b5050565b505050565b505050565b82805462000be19062001047565b90600052602060002090601f01602090048101928262000c05576000855562000c51565b82601f1062000c2057805160ff191683800117855562000c51565b8280016001018555821562000c51579182015b8281111562000c5057825182559160200191906001019062000c33565b5b50905062000c60919062000c64565b5090565b5b8082111562000c7f57600081600090555060010162000c65565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cb58262000c88565b9050919050565b62000cc78162000ca8565b811462000cd357600080fd5b50565b60008151905062000ce78162000cbc565b92915050565b60006020828403121562000d065762000d0562000c83565b5b600062000d168482850162000cd6565b91505092915050565b62000d2a8162000ca8565b82525050565b600060408201905062000d47600083018562000d1f565b62000d56602083018462000d1f565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000da38262000d5d565b915062000db08362000d5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dec5762000deb62000d67565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e338262000d5d565b915062000e408362000d5d565b92508262000e535762000e5262000df7565b5b828204905092915050565b600062000e6b8262000d5d565b915062000e788362000d5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eb05762000eaf62000d67565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f0460208362000ebb565b915062000f118262000ecc565b602082019050919050565b6000602082019050818103600083015262000f378162000ef5565b9050919050565b60008115159050919050565b62000f558162000f3e565b82525050565b600060208201905062000f72600083018462000f4a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fb0601f8362000ebb565b915062000fbd8262000f78565b602082019050919050565b6000602082019050818103600083015262000fe38162000fa1565b9050919050565b62000ff58162000d5d565b82525050565b600060208201905062001012600083018462000fea565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200106057607f821691505b6020821081141562001077576200107662001018565b5b50919050565b60805160a05161563f620010db6000396000818161149801528181611bea0152612cd4015260008181610f4c01528181612c7c01528181613eb001528181613f9101528181613fb801528181614054015261407b015261563f6000f3fe6080604052600436106103a55760003560e01c80638da5cb5b116101e7578063bd6b86d11161010d578063dd62ed3e116100a0578063f11a24d31161006f578063f11a24d314610dca578063f2fde38b14610df5578063f637434214610e1e578063f8b45b0514610e49576103ac565b8063dd62ed3e14610d0e578063e2f4560514610d4b578063e7ad9fcd14610d76578063e884f26014610d9f576103ac565b8063c8c8ebe4116100dc578063c8c8ebe414610c50578063cc55a40a14610c7b578063d257b34f14610ca6578063d85ba06314610ce3576103ac565b8063bd6b86d114610baa578063c024666814610bd3578063c18bc19514610bfc578063c876d0b914610c25576103ac565b80639c3b4fdc11610185578063a9059cbb11610154578063a9059cbb14610adc578063aacebbe314610b19578063b62496f514610b42578063bbc0c74214610b7f576103ac565b80639c3b4fdc14610a1e5780639fccce3214610a49578063a0d82dc514610a74578063a457c2d714610a9f576103ac565b8063924de9b7116101c1578063924de9b71461097657806395d89b411461099f5780639a7a23d6146109ca5780639be4990b146109f3576103ac565b80638da5cb5b146108f55780638ea5220f14610920578063921369131461094b576103ac565b806349bd5a5e116102cc57806370a082311161026a5780637571336a116102395780637571336a1461085f57806375f0a874146108885780637bce5a04146108b35780638a8c523c146108de576103ac565b806370a08231146107b7578063715018a6146107f457806373dd858c1461080b578063751039fc14610834576103ac565b80634ec39ba9116102a65780634ec39ba9146106f95780634fbee193146107245780636a486a8e146107615780636ddd17131461078c576103ac565b806349bd5a5e146106785780634a62bb65146106a35780634a97e0e8146106ce576103ac565b80631a8145bb1161034457806327c8f8351161031357806327c8f835146105bc5780632e6ed7ef146105e7578063313ce56714610610578063395093511461063b576103ac565b80631a8145bb146105005780631f3fed8f1461052b578063203e727e1461055657806323b872dd1461057f576103ac565b806310d5de531161038057806310d5de53146104445780631694505e1461048157806318160ddd146104ac5780631816467f146104d7576103ac565b8062582d85146103b157806306fdde03146103dc578063095ea7b314610407576103ac565b366103ac57005b600080fd5b3480156103bd57600080fd5b506103c6610e74565b6040516103d39190614163565b60405180910390f35b3480156103e857600080fd5b506103f1610e7a565b6040516103fe9190614217565b60405180910390f35b34801561041357600080fd5b5061042e600480360381019061042991906142c8565b610f0c565b60405161043b9190614323565b60405180910390f35b34801561045057600080fd5b5061046b6004803603810190610466919061433e565b610f2a565b6040516104789190614323565b60405180910390f35b34801561048d57600080fd5b50610496610f4a565b6040516104a391906143ca565b60405180910390f35b3480156104b857600080fd5b506104c1610f6e565b6040516104ce9190614163565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f9919061433e565b610f78565b005b34801561050c57600080fd5b506105156110b4565b6040516105229190614163565b60405180910390f35b34801561053757600080fd5b506105406110ba565b60405161054d9190614163565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906143e5565b6110c0565b005b34801561058b57600080fd5b506105a660048036038101906105a19190614412565b6111cf565b6040516105b39190614323565b60405180910390f35b3480156105c857600080fd5b506105d16112c7565b6040516105de9190614474565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061448f565b6112cd565b005b34801561061c57600080fd5b506106256113e1565b6040516106329190614512565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906142c8565b6113ea565b60405161066f9190614323565b60405180910390f35b34801561068457600080fd5b5061068d611496565b60405161069a9190614474565b60405180910390f35b3480156106af57600080fd5b506106b86114ba565b6040516106c59190614323565b60405180910390f35b3480156106da57600080fd5b506106e36114cd565b6040516106f09190614474565b60405180910390f35b34801561070557600080fd5b5061070e6114f3565b60405161071b9190614474565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061433e565b611519565b6040516107589190614323565b60405180910390f35b34801561076d57600080fd5b5061077661156f565b6040516107839190614163565b60405180910390f35b34801561079857600080fd5b506107a1611575565b6040516107ae9190614323565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d9919061433e565b611588565b6040516107eb9190614163565b60405180910390f35b34801561080057600080fd5b506108096115d0565b005b34801561081757600080fd5b50610832600480360381019061082d919061433e565b611658565b005b34801561084057600080fd5b50610849611794565b6040516108569190614323565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190614559565b611834565b005b34801561089457600080fd5b5061089d61190b565b6040516108aa9190614474565b60405180910390f35b3480156108bf57600080fd5b506108c8611931565b6040516108d59190614163565b60405180910390f35b3480156108ea57600080fd5b506108f3611937565b005b34801561090157600080fd5b5061090a6119eb565b6040516109179190614474565b60405180910390f35b34801561092c57600080fd5b50610935611a15565b6040516109429190614474565b60405180910390f35b34801561095757600080fd5b50610960611a3b565b60405161096d9190614163565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614599565b611a41565b005b3480156109ab57600080fd5b506109b4611ada565b6040516109c19190614217565b60405180910390f35b3480156109d657600080fd5b506109f160048036038101906109ec9190614559565b611b6c565b005b3480156109ff57600080fd5b50610a08611c85565b604051610a159190614163565b60405180910390f35b348015610a2a57600080fd5b50610a33611c8b565b604051610a409190614163565b60405180910390f35b348015610a5557600080fd5b50610a5e611c91565b604051610a6b9190614163565b60405180910390f35b348015610a8057600080fd5b50610a89611c97565b604051610a969190614163565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906142c8565b611c9d565b604051610ad39190614323565b60405180910390f35b348015610ae857600080fd5b50610b036004803603810190610afe91906142c8565b611d88565b604051610b109190614323565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b919061433e565b611da6565b005b348015610b4e57600080fd5b50610b696004803603810190610b64919061433e565b611ee2565b604051610b769190614323565b60405180910390f35b348015610b8b57600080fd5b50610b94611f01565b604051610ba19190614323565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc919061433e565b611f14565b005b348015610bdf57600080fd5b50610bfa6004803603810190610bf59190614559565b612050565b005b348015610c0857600080fd5b50610c236004803603810190610c1e91906143e5565b612175565b005b348015610c3157600080fd5b50610c3a612284565b604051610c479190614323565b60405180910390f35b348015610c5c57600080fd5b50610c65612297565b604051610c729190614163565b60405180910390f35b348015610c8757600080fd5b50610c9061229d565b604051610c9d9190614163565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc891906143e5565b6122a3565b604051610cda9190614323565b60405180910390f35b348015610cef57600080fd5b50610cf86123f8565b604051610d059190614163565b60405180910390f35b348015610d1a57600080fd5b50610d356004803603810190610d3091906145c6565b6123fe565b604051610d429190614163565b60405180910390f35b348015610d5757600080fd5b50610d60612485565b604051610d6d9190614163565b60405180910390f35b348015610d8257600080fd5b50610d9d6004803603810190610d98919061448f565b61248b565b005b348015610dab57600080fd5b50610db461259f565b604051610dc19190614323565b60405180910390f35b348015610dd657600080fd5b50610ddf61263f565b604051610dec9190614163565b60405180910390f35b348015610e0157600080fd5b50610e1c6004803603810190610e17919061433e565b612645565b005b348015610e2a57600080fd5b50610e3361273d565b604051610e409190614163565b60405180910390f35b348015610e5557600080fd5b50610e5e612743565b604051610e6b9190614163565b60405180910390f35b60195481565b606060038054610e8990614635565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590614635565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b6000610f20610f19612749565b8484612751565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f80612749565b73ffffffffffffffffffffffffffffffffffffffff16610f9e6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906146b3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612749565b73ffffffffffffffffffffffffffffffffffffffff166110e66119eb565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906146b3565b60405180910390fd5b670de0b6b3a76400006103e86001611152610f6e565b61115c9190614702565b611166919061478b565b611170919061478b565b8110156111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a99061482e565b60405180910390fd5b670de0b6b3a7640000816111c69190614702565b600a8190555050565b60006111dc84848461291c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611227612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906148c0565b60405180910390fd5b6112bb856112b3612749565b858403612751565b60019150509392505050565b61dead81565b6112d5612749565b73ffffffffffffffffffffffffffffffffffffffff166112f36119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906146b3565b60405180910390fd5b8360118190555082601281905550816013819055508060148190555060145460135460125460115461137b91906148e0565b61138591906148e0565b61138f91906148e0565b601081905550603260105411156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614982565b60405180910390fd5b50505050565b60006012905090565b600061148c6113f7612749565b848460016000611405612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461148791906148e0565b612751565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115d8612749565b73ffffffffffffffffffffffffffffffffffffffff166115f66119eb565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611643906146b3565b60405180910390fd5b611656600061361c565b565b611660612749565b73ffffffffffffffffffffffffffffffffffffffff1661167e6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb906146b3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061179e612749565b73ffffffffffffffffffffffffffffffffffffffff166117bc6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611809906146b3565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61183c612749565b73ffffffffffffffffffffffffffffffffffffffff1661185a6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906146b3565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61193f612749565b73ffffffffffffffffffffffffffffffffffffffff1661195d6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906146b3565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a49612749565b73ffffffffffffffffffffffffffffffffffffffff16611a676119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906146b3565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611ae990614635565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1590614635565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b611b74612749565b73ffffffffffffffffffffffffffffffffffffffff16611b926119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906146b3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90614a14565b60405180910390fd5b611c8182826136e2565b5050565b60145481565b60135481565b601c5481565b60185481565b60008060016000611cac612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614aa6565b60405180910390fd5b611d7d611d74612749565b85858403612751565b600191505092915050565b6000611d9c611d95612749565b848461291c565b6001905092915050565b611dae612749565b73ffffffffffffffffffffffffffffffffffffffff16611dcc6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906146b3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611f1c612749565b73ffffffffffffffffffffffffffffffffffffffff16611f3a6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906146b3565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd3e2ca6c779f66505abdee74898f0e492574a93b163f28065d4d5a0b0090719a60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612058612749565b73ffffffffffffffffffffffffffffffffffffffff166120766119eb565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c3906146b3565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121699190614323565b60405180910390a25050565b61217d612749565b73ffffffffffffffffffffffffffffffffffffffff1661219b6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906146b3565b60405180910390fd5b670de0b6b3a76400006103e86005612207610f6e565b6122119190614702565b61221b919061478b565b612225919061478b565b811015612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614b38565b60405180910390fd5b670de0b6b3a76400008161227b9190614702565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b601d5481565b60006122ad612749565b73ffffffffffffffffffffffffffffffffffffffff166122cb6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614612321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612318906146b3565b60405180910390fd5b620186a0600161232f610f6e565b6123399190614702565b612343919061478b565b821015612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614bca565b60405180910390fd5b6103e86005612392610f6e565b61239c9190614702565b6123a6919061478b565b8211156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90614c5c565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b612493612749565b73ffffffffffffffffffffffffffffffffffffffff166124b16119eb565b73ffffffffffffffffffffffffffffffffffffffff1614612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe906146b3565b60405180910390fd5b8360168190555082601781905550816018819055508060198190555060195460185460175460165461253991906148e0565b61254391906148e0565b61254d91906148e0565b60158190555060326015541115612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090614982565b60405180910390fd5b50505050565b60006125a9612749565b73ffffffffffffffffffffffffffffffffffffffff166125c76119eb565b73ffffffffffffffffffffffffffffffffffffffff161461261d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612614906146b3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61264d612749565b73ffffffffffffffffffffffffffffffffffffffff1661266b6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906146b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614cee565b60405180910390fd5b61273a8161361c565b50565b60175481565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890614d80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282890614e12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161290f9190614163565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614f36565b60405180910390fd5b6000811415612a1657612a1183836000613783565b613617565b600d60009054906101000a900460ff16156130d957612a336119eb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa15750612a716119eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ada5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b14575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b2d5750600560149054906101000a900460ff16155b156130d857600d60019054906101000a900460ff16612c2757601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612be75750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1d90614fa2565b60405180910390fd5b5b600f60009054906101000a900460ff1615612def57612c446119eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ccb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dee5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da09061505a565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3957600a54811115612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed3906150ec565b60405180910390fd5b600c54612ee883611588565b82612ef391906148e0565b1115612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b90615158565b60405180910390fd5b6130d7565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fdc5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302b57600a54811115613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d906151ea565b60405180910390fd5b6130d6565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130d557600c5461308883611588565b8261309391906148e0565b11156130d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cb90615158565b60405180910390fd5b5b5b5b5b5b60006130e430611588565b90506000600b5482101590508080156131095750600d60029054906101000a900460ff165b80156131225750600560149054906101000a900460ff16155b80156131785750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131ce5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132245750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613268576001600560146101000a81548160ff02191690831515021790555061324c613a04565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061331e5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332857600090505b6000811561360757602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561338b57506000601554115b1561348b576133b860646133aa60155488613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050601554601754826133cb9190614702565b6133d5919061478b565b601b60008282546133e691906148e0565b92505081905550601554601854826133fe9190614702565b613408919061478b565b601c600082825461341991906148e0565b92505081905550601554601654826134319190614702565b61343b919061478b565b601a600082825461344c91906148e0565b92505081905550601554601954826134649190614702565b61346e919061478b565b601d600082825461347f91906148e0565b925050819055506135e3565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e657506000601054115b156135e257613513606461350560105488613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050601054601254826135269190614702565b613530919061478b565b601b600082825461354191906148e0565b92505081905550601054601354826135599190614702565b613563919061478b565b601c600082825461357491906148e0565b925050819055506010546011548261358c9190614702565b613596919061478b565b601a60008282546135a791906148e0565b92505081905550601054601454826135bf9190614702565b6135c9919061478b565b601d60008282546135da91906148e0565b925050819055505b5b60008111156135f8576135f7873083613783565b5b8085613604919061520a565b94505b613612878787613783565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ea90614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385a90614f36565b60405180910390fd5b61386e838383613df1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156138f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138eb906152b0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461398791906148e0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139eb9190614163565b60405180910390a36139fe848484613df6565b50505050565b6000613a0f30611588565b90506000601d54601c54601a54601b54613a2991906148e0565b613a3391906148e0565b613a3d91906148e0565b9050600080831480613a4f5750600082145b15613a5c57505050613dc3565b6014600b54613a6b9190614702565b831115613a84576014600b54613a819190614702565b92505b6000600283601b5486613a979190614702565b613aa1919061478b565b613aab919061478b565b90506000613ac28286613dfb90919063ffffffff16565b90506000479050613ad282613e11565b6000613ae78247613dfb90919063ffffffff16565b90506000613b1287613b04601a5485613dc590919063ffffffff16565b613ddb90919063ffffffff16565b90506000613b3d88613b2f601c5486613dc590919063ffffffff16565b613ddb90919063ffffffff16565b90506000613b6889613b5a601d5487613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050600081838587613b7a919061520a565b613b84919061520a565b613b8e919061520a565b90506000601b819055506000601a819055506000601c819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613bf690615301565b60006040518083038185875af1925050503d8060008114613c33576040519150601f19603f3d011682016040523d82523d6000602084013e613c38565b606091505b505080995050600088118015613c4e5750600081115b15613c9b57613c5d888261404e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601b54604051613c9293929190615316565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ce190615301565b60006040518083038185875af1925050503d8060008114613d1e576040519150601f19603f3d011682016040523d82523d6000602084013e613d23565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d6f90615301565b60006040518083038185875af1925050503d8060008114613dac576040519150601f19603f3d011682016040523d82523d6000602084013e613db1565b606091505b50508099505050505050505050505050505b565b60008183613dd39190614702565b905092915050565b60008183613de9919061478b565b905092915050565b505050565b505050565b60008183613e09919061520a565b905092915050565b6000600267ffffffffffffffff811115613e2e57613e2d61534d565b5b604051908082528060200260200182016040528015613e5c5781602001602082028036833780820191505090505b5090503081600081518110613e7457613e7361537c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3d91906153c0565b81600181518110613f5157613f5061537c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fb6307f000000000000000000000000000000000000000000000000000000000000000084612751565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140189594939291906154e6565b600060405180830381600087803b15801561403257600080fd5b505af1158015614046573d6000803e3d6000fd5b505050505050565b614079307f000000000000000000000000000000000000000000000000000000000000000084612751565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161410096959493929190615540565b60606040518083038185885af115801561411e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061414391906155b6565b5050505050565b6000819050919050565b61415d8161414a565b82525050565b60006020820190506141786000830184614154565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141b857808201518184015260208101905061419d565b838111156141c7576000848401525b50505050565b6000601f19601f8301169050919050565b60006141e98261417e565b6141f38185614189565b935061420381856020860161419a565b61420c816141cd565b840191505092915050565b6000602082019050818103600083015261423181846141de565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142698261423e565b9050919050565b6142798161425e565b811461428457600080fd5b50565b60008135905061429681614270565b92915050565b6142a58161414a565b81146142b057600080fd5b50565b6000813590506142c28161429c565b92915050565b600080604083850312156142df576142de614239565b5b60006142ed85828601614287565b92505060206142fe858286016142b3565b9150509250929050565b60008115159050919050565b61431d81614308565b82525050565b60006020820190506143386000830184614314565b92915050565b60006020828403121561435457614353614239565b5b600061436284828501614287565b91505092915050565b6000819050919050565b600061439061438b6143868461423e565b61436b565b61423e565b9050919050565b60006143a282614375565b9050919050565b60006143b482614397565b9050919050565b6143c4816143a9565b82525050565b60006020820190506143df60008301846143bb565b92915050565b6000602082840312156143fb576143fa614239565b5b6000614409848285016142b3565b91505092915050565b60008060006060848603121561442b5761442a614239565b5b600061443986828701614287565b935050602061444a86828701614287565b925050604061445b868287016142b3565b9150509250925092565b61446e8161425e565b82525050565b60006020820190506144896000830184614465565b92915050565b600080600080608085870312156144a9576144a8614239565b5b60006144b7878288016142b3565b94505060206144c8878288016142b3565b93505060406144d9878288016142b3565b92505060606144ea878288016142b3565b91505092959194509250565b600060ff82169050919050565b61450c816144f6565b82525050565b60006020820190506145276000830184614503565b92915050565b61453681614308565b811461454157600080fd5b50565b6000813590506145538161452d565b92915050565b600080604083850312156145705761456f614239565b5b600061457e85828601614287565b925050602061458f85828601614544565b9150509250929050565b6000602082840312156145af576145ae614239565b5b60006145bd84828501614544565b91505092915050565b600080604083850312156145dd576145dc614239565b5b60006145eb85828601614287565b92505060206145fc85828601614287565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464d57607f821691505b6020821081141561466157614660614606565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061469d602083614189565b91506146a882614667565b602082019050919050565b600060208201905081810360008301526146cc81614690565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061470d8261414a565b91506147188361414a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614751576147506146d3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147968261414a565b91506147a18361414a565b9250826147b1576147b061475c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614818602f83614189565b9150614823826147bc565b604082019050919050565b600060208201905081810360008301526148478161480b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006148aa602883614189565b91506148b58261484e565b604082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b60006148eb8261414a565b91506148f68361414a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561492b5761492a6146d3565b5b828201905092915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b600061496c601d83614189565b915061497782614936565b602082019050919050565b6000602082019050818103600083015261499b8161495f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149fe603983614189565b9150614a09826149a2565b604082019050919050565b60006020820190508181036000830152614a2d816149f1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a90602583614189565b9150614a9b82614a34565b604082019050919050565b60006020820190508181036000830152614abf81614a83565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b22602483614189565b9150614b2d82614ac6565b604082019050919050565b60006020820190508181036000830152614b5181614b15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614bb4603583614189565b9150614bbf82614b58565b604082019050919050565b60006020820190508181036000830152614be381614ba7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c46603483614189565b9150614c5182614bea565b604082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cd8602683614189565b9150614ce382614c7c565b604082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d6a602483614189565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dfc602283614189565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e8e602583614189565b9150614e9982614e32565b604082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f20602383614189565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f8c601683614189565b9150614f9782614f56565b602082019050919050565b60006020820190508181036000830152614fbb81614f7f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615044604983614189565b915061504f82614fc2565b606082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150d6603583614189565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615142601383614189565b915061514d8261510c565b602082019050919050565b6000602082019050818103600083015261517181615135565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151d4603683614189565b91506151df82615178565b604082019050919050565b60006020820190508181036000830152615203816151c7565b9050919050565b60006152158261414a565b91506152208361414a565b925082821015615233576152326146d3565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061529a602683614189565b91506152a58261523e565b604082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b600081905092915050565b50565b60006152eb6000836152d0565b91506152f6826152db565b600082019050919050565b600061530c826152de565b9150819050919050565b600060608201905061532b6000830186614154565b6153386020830185614154565b6153456040830184614154565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506153ba81614270565b92915050565b6000602082840312156153d6576153d5614239565b5b60006153e4848285016153ab565b91505092915050565b6000819050919050565b600061541261540d615408846153ed565b61436b565b61414a565b9050919050565b615422816153f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61545d8161425e565b82525050565b600061546f8383615454565b60208301905092915050565b6000602082019050919050565b600061549382615428565b61549d8185615433565b93506154a883615444565b8060005b838110156154d95781516154c08882615463565b97506154cb8361547b565b9250506001810190506154ac565b5085935050505092915050565b600060a0820190506154fb6000830188614154565b6155086020830187615419565b818103604083015261551a8186615488565b90506155296060830185614465565b6155366080830184614154565b9695505050505050565b600060c0820190506155556000830189614465565b6155626020830188614154565b61556f6040830187615419565b61557c6060830186615419565b6155896080830185614465565b61559660a0830184614154565b979650505050505050565b6000815190506155b08161429c565b92915050565b6000806000606084860312156155cf576155ce614239565b5b60006155dd868287016155a1565b93505060206155ee868287016155a1565b92505060406155ff868287016155a1565b915050925092509256fea26469706673582212204cd29bde72e0d48b22c45b7565c6784f7736e32274bd077e8b4d5cd8798ca30564736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103a55760003560e01c80638da5cb5b116101e7578063bd6b86d11161010d578063dd62ed3e116100a0578063f11a24d31161006f578063f11a24d314610dca578063f2fde38b14610df5578063f637434214610e1e578063f8b45b0514610e49576103ac565b8063dd62ed3e14610d0e578063e2f4560514610d4b578063e7ad9fcd14610d76578063e884f26014610d9f576103ac565b8063c8c8ebe4116100dc578063c8c8ebe414610c50578063cc55a40a14610c7b578063d257b34f14610ca6578063d85ba06314610ce3576103ac565b8063bd6b86d114610baa578063c024666814610bd3578063c18bc19514610bfc578063c876d0b914610c25576103ac565b80639c3b4fdc11610185578063a9059cbb11610154578063a9059cbb14610adc578063aacebbe314610b19578063b62496f514610b42578063bbc0c74214610b7f576103ac565b80639c3b4fdc14610a1e5780639fccce3214610a49578063a0d82dc514610a74578063a457c2d714610a9f576103ac565b8063924de9b7116101c1578063924de9b71461097657806395d89b411461099f5780639a7a23d6146109ca5780639be4990b146109f3576103ac565b80638da5cb5b146108f55780638ea5220f14610920578063921369131461094b576103ac565b806349bd5a5e116102cc57806370a082311161026a5780637571336a116102395780637571336a1461085f57806375f0a874146108885780637bce5a04146108b35780638a8c523c146108de576103ac565b806370a08231146107b7578063715018a6146107f457806373dd858c1461080b578063751039fc14610834576103ac565b80634ec39ba9116102a65780634ec39ba9146106f95780634fbee193146107245780636a486a8e146107615780636ddd17131461078c576103ac565b806349bd5a5e146106785780634a62bb65146106a35780634a97e0e8146106ce576103ac565b80631a8145bb1161034457806327c8f8351161031357806327c8f835146105bc5780632e6ed7ef146105e7578063313ce56714610610578063395093511461063b576103ac565b80631a8145bb146105005780631f3fed8f1461052b578063203e727e1461055657806323b872dd1461057f576103ac565b806310d5de531161038057806310d5de53146104445780631694505e1461048157806318160ddd146104ac5780631816467f146104d7576103ac565b8062582d85146103b157806306fdde03146103dc578063095ea7b314610407576103ac565b366103ac57005b600080fd5b3480156103bd57600080fd5b506103c6610e74565b6040516103d39190614163565b60405180910390f35b3480156103e857600080fd5b506103f1610e7a565b6040516103fe9190614217565b60405180910390f35b34801561041357600080fd5b5061042e600480360381019061042991906142c8565b610f0c565b60405161043b9190614323565b60405180910390f35b34801561045057600080fd5b5061046b6004803603810190610466919061433e565b610f2a565b6040516104789190614323565b60405180910390f35b34801561048d57600080fd5b50610496610f4a565b6040516104a391906143ca565b60405180910390f35b3480156104b857600080fd5b506104c1610f6e565b6040516104ce9190614163565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f9919061433e565b610f78565b005b34801561050c57600080fd5b506105156110b4565b6040516105229190614163565b60405180910390f35b34801561053757600080fd5b506105406110ba565b60405161054d9190614163565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906143e5565b6110c0565b005b34801561058b57600080fd5b506105a660048036038101906105a19190614412565b6111cf565b6040516105b39190614323565b60405180910390f35b3480156105c857600080fd5b506105d16112c7565b6040516105de9190614474565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061448f565b6112cd565b005b34801561061c57600080fd5b506106256113e1565b6040516106329190614512565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906142c8565b6113ea565b60405161066f9190614323565b60405180910390f35b34801561068457600080fd5b5061068d611496565b60405161069a9190614474565b60405180910390f35b3480156106af57600080fd5b506106b86114ba565b6040516106c59190614323565b60405180910390f35b3480156106da57600080fd5b506106e36114cd565b6040516106f09190614474565b60405180910390f35b34801561070557600080fd5b5061070e6114f3565b60405161071b9190614474565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061433e565b611519565b6040516107589190614323565b60405180910390f35b34801561076d57600080fd5b5061077661156f565b6040516107839190614163565b60405180910390f35b34801561079857600080fd5b506107a1611575565b6040516107ae9190614323565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d9919061433e565b611588565b6040516107eb9190614163565b60405180910390f35b34801561080057600080fd5b506108096115d0565b005b34801561081757600080fd5b50610832600480360381019061082d919061433e565b611658565b005b34801561084057600080fd5b50610849611794565b6040516108569190614323565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190614559565b611834565b005b34801561089457600080fd5b5061089d61190b565b6040516108aa9190614474565b60405180910390f35b3480156108bf57600080fd5b506108c8611931565b6040516108d59190614163565b60405180910390f35b3480156108ea57600080fd5b506108f3611937565b005b34801561090157600080fd5b5061090a6119eb565b6040516109179190614474565b60405180910390f35b34801561092c57600080fd5b50610935611a15565b6040516109429190614474565b60405180910390f35b34801561095757600080fd5b50610960611a3b565b60405161096d9190614163565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614599565b611a41565b005b3480156109ab57600080fd5b506109b4611ada565b6040516109c19190614217565b60405180910390f35b3480156109d657600080fd5b506109f160048036038101906109ec9190614559565b611b6c565b005b3480156109ff57600080fd5b50610a08611c85565b604051610a159190614163565b60405180910390f35b348015610a2a57600080fd5b50610a33611c8b565b604051610a409190614163565b60405180910390f35b348015610a5557600080fd5b50610a5e611c91565b604051610a6b9190614163565b60405180910390f35b348015610a8057600080fd5b50610a89611c97565b604051610a969190614163565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906142c8565b611c9d565b604051610ad39190614323565b60405180910390f35b348015610ae857600080fd5b50610b036004803603810190610afe91906142c8565b611d88565b604051610b109190614323565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b919061433e565b611da6565b005b348015610b4e57600080fd5b50610b696004803603810190610b64919061433e565b611ee2565b604051610b769190614323565b60405180910390f35b348015610b8b57600080fd5b50610b94611f01565b604051610ba19190614323565b60405180910390f35b348015610bb657600080fd5b50610bd16004803603810190610bcc919061433e565b611f14565b005b348015610bdf57600080fd5b50610bfa6004803603810190610bf59190614559565b612050565b005b348015610c0857600080fd5b50610c236004803603810190610c1e91906143e5565b612175565b005b348015610c3157600080fd5b50610c3a612284565b604051610c479190614323565b60405180910390f35b348015610c5c57600080fd5b50610c65612297565b604051610c729190614163565b60405180910390f35b348015610c8757600080fd5b50610c9061229d565b604051610c9d9190614163565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc891906143e5565b6122a3565b604051610cda9190614323565b60405180910390f35b348015610cef57600080fd5b50610cf86123f8565b604051610d059190614163565b60405180910390f35b348015610d1a57600080fd5b50610d356004803603810190610d3091906145c6565b6123fe565b604051610d429190614163565b60405180910390f35b348015610d5757600080fd5b50610d60612485565b604051610d6d9190614163565b60405180910390f35b348015610d8257600080fd5b50610d9d6004803603810190610d98919061448f565b61248b565b005b348015610dab57600080fd5b50610db461259f565b604051610dc19190614323565b60405180910390f35b348015610dd657600080fd5b50610ddf61263f565b604051610dec9190614163565b60405180910390f35b348015610e0157600080fd5b50610e1c6004803603810190610e17919061433e565b612645565b005b348015610e2a57600080fd5b50610e3361273d565b604051610e409190614163565b60405180910390f35b348015610e5557600080fd5b50610e5e612743565b604051610e6b9190614163565b60405180910390f35b60195481565b606060038054610e8990614635565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590614635565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b6000610f20610f19612749565b8484612751565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f80612749565b73ffffffffffffffffffffffffffffffffffffffff16610f9e6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb906146b3565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612749565b73ffffffffffffffffffffffffffffffffffffffff166110e66119eb565b73ffffffffffffffffffffffffffffffffffffffff161461113c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611133906146b3565b60405180910390fd5b670de0b6b3a76400006103e86001611152610f6e565b61115c9190614702565b611166919061478b565b611170919061478b565b8110156111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a99061482e565b60405180910390fd5b670de0b6b3a7640000816111c69190614702565b600a8190555050565b60006111dc84848461291c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611227612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e906148c0565b60405180910390fd5b6112bb856112b3612749565b858403612751565b60019150509392505050565b61dead81565b6112d5612749565b73ffffffffffffffffffffffffffffffffffffffff166112f36119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906146b3565b60405180910390fd5b8360118190555082601281905550816013819055508060148190555060145460135460125460115461137b91906148e0565b61138591906148e0565b61138f91906148e0565b601081905550603260105411156113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290614982565b60405180910390fd5b50505050565b60006012905090565b600061148c6113f7612749565b848460016000611405612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461148791906148e0565b612751565b6001905092915050565b7f00000000000000000000000008d0072f47250471dbae208fcf3e4abc086fe0fe81565b600d60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115d8612749565b73ffffffffffffffffffffffffffffffffffffffff166115f66119eb565b73ffffffffffffffffffffffffffffffffffffffff161461164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611643906146b3565b60405180910390fd5b611656600061361c565b565b611660612749565b73ffffffffffffffffffffffffffffffffffffffff1661167e6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb906146b3565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061179e612749565b73ffffffffffffffffffffffffffffffffffffffff166117bc6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611812576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611809906146b3565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61183c612749565b73ffffffffffffffffffffffffffffffffffffffff1661185a6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906146b3565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61193f612749565b73ffffffffffffffffffffffffffffffffffffffff1661195d6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906146b3565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a49612749565b73ffffffffffffffffffffffffffffffffffffffff16611a676119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906146b3565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611ae990614635565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1590614635565b8015611b625780601f10611b3757610100808354040283529160200191611b62565b820191906000526020600020905b815481529060010190602001808311611b4557829003601f168201915b5050505050905090565b611b74612749565b73ffffffffffffffffffffffffffffffffffffffff16611b926119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906146b3565b60405180910390fd5b7f00000000000000000000000008d0072f47250471dbae208fcf3e4abc086fe0fe73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90614a14565b60405180910390fd5b611c8182826136e2565b5050565b60145481565b60135481565b601c5481565b60185481565b60008060016000611cac612749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614aa6565b60405180910390fd5b611d7d611d74612749565b85858403612751565b600191505092915050565b6000611d9c611d95612749565b848461291c565b6001905092915050565b611dae612749565b73ffffffffffffffffffffffffffffffffffffffff16611dcc6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906146b3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611f1c612749565b73ffffffffffffffffffffffffffffffffffffffff16611f3a6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906146b3565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd3e2ca6c779f66505abdee74898f0e492574a93b163f28065d4d5a0b0090719a60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612058612749565b73ffffffffffffffffffffffffffffffffffffffff166120766119eb565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c3906146b3565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121699190614323565b60405180910390a25050565b61217d612749565b73ffffffffffffffffffffffffffffffffffffffff1661219b6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e8906146b3565b60405180910390fd5b670de0b6b3a76400006103e86005612207610f6e565b6122119190614702565b61221b919061478b565b612225919061478b565b811015612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614b38565b60405180910390fd5b670de0b6b3a76400008161227b9190614702565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b601d5481565b60006122ad612749565b73ffffffffffffffffffffffffffffffffffffffff166122cb6119eb565b73ffffffffffffffffffffffffffffffffffffffff1614612321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612318906146b3565b60405180910390fd5b620186a0600161232f610f6e565b6123399190614702565b612343919061478b565b821015612385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237c90614bca565b60405180910390fd5b6103e86005612392610f6e565b61239c9190614702565b6123a6919061478b565b8211156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df90614c5c565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b612493612749565b73ffffffffffffffffffffffffffffffffffffffff166124b16119eb565b73ffffffffffffffffffffffffffffffffffffffff1614612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe906146b3565b60405180910390fd5b8360168190555082601781905550816018819055508060198190555060195460185460175460165461253991906148e0565b61254391906148e0565b61254d91906148e0565b60158190555060326015541115612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090614982565b60405180910390fd5b50505050565b60006125a9612749565b73ffffffffffffffffffffffffffffffffffffffff166125c76119eb565b73ffffffffffffffffffffffffffffffffffffffff161461261d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612614906146b3565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61264d612749565b73ffffffffffffffffffffffffffffffffffffffff1661266b6119eb565b73ffffffffffffffffffffffffffffffffffffffff16146126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906146b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614cee565b60405180910390fd5b61273a8161361c565b50565b60175481565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b890614d80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282890614e12565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161290f9190614163565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614f36565b60405180910390fd5b6000811415612a1657612a1183836000613783565b613617565b600d60009054906101000a900460ff16156130d957612a336119eb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa15750612a716119eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ada5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b14575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b2d5750600560149054906101000a900460ff16155b156130d857600d60019054906101000a900460ff16612c2757601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612be75750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1d90614fa2565b60405180910390fd5b5b600f60009054906101000a900460ff1615612def57612c446119eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ccb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d2357507f00000000000000000000000008d0072f47250471dbae208fcf3e4abc086fe0fe73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dee5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da09061505a565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e925750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f3957600a54811115612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed3906150ec565b60405180910390fd5b600c54612ee883611588565b82612ef391906148e0565b1115612f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2b90615158565b60405180910390fd5b6130d7565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fdc5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561302b57600a54811115613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d906151ea565b60405180910390fd5b6130d6565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130d557600c5461308883611588565b8261309391906148e0565b11156130d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cb90615158565b60405180910390fd5b5b5b5b5b5b60006130e430611588565b90506000600b5482101590508080156131095750600d60029054906101000a900460ff165b80156131225750600560149054906101000a900460ff16155b80156131785750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131ce5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132245750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613268576001600560146101000a81548160ff02191690831515021790555061324c613a04565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061331e5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332857600090505b6000811561360757602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561338b57506000601554115b1561348b576133b860646133aa60155488613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050601554601754826133cb9190614702565b6133d5919061478b565b601b60008282546133e691906148e0565b92505081905550601554601854826133fe9190614702565b613408919061478b565b601c600082825461341991906148e0565b92505081905550601554601654826134319190614702565b61343b919061478b565b601a600082825461344c91906148e0565b92505081905550601554601954826134649190614702565b61346e919061478b565b601d600082825461347f91906148e0565b925050819055506135e3565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134e657506000601054115b156135e257613513606461350560105488613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050601054601254826135269190614702565b613530919061478b565b601b600082825461354191906148e0565b92505081905550601054601354826135599190614702565b613563919061478b565b601c600082825461357491906148e0565b925050819055506010546011548261358c9190614702565b613596919061478b565b601a60008282546135a791906148e0565b92505081905550601054601454826135bf9190614702565b6135c9919061478b565b601d60008282546135da91906148e0565b925050819055505b5b60008111156135f8576135f7873083613783565b5b8085613604919061520a565b94505b613612878787613783565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ea90614ea4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385a90614f36565b60405180910390fd5b61386e838383613df1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156138f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138eb906152b0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461398791906148e0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139eb9190614163565b60405180910390a36139fe848484613df6565b50505050565b6000613a0f30611588565b90506000601d54601c54601a54601b54613a2991906148e0565b613a3391906148e0565b613a3d91906148e0565b9050600080831480613a4f5750600082145b15613a5c57505050613dc3565b6014600b54613a6b9190614702565b831115613a84576014600b54613a819190614702565b92505b6000600283601b5486613a979190614702565b613aa1919061478b565b613aab919061478b565b90506000613ac28286613dfb90919063ffffffff16565b90506000479050613ad282613e11565b6000613ae78247613dfb90919063ffffffff16565b90506000613b1287613b04601a5485613dc590919063ffffffff16565b613ddb90919063ffffffff16565b90506000613b3d88613b2f601c5486613dc590919063ffffffff16565b613ddb90919063ffffffff16565b90506000613b6889613b5a601d5487613dc590919063ffffffff16565b613ddb90919063ffffffff16565b9050600081838587613b7a919061520a565b613b84919061520a565b613b8e919061520a565b90506000601b819055506000601a819055506000601c819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613bf690615301565b60006040518083038185875af1925050503d8060008114613c33576040519150601f19603f3d011682016040523d82523d6000602084013e613c38565b606091505b505080995050600088118015613c4e5750600081115b15613c9b57613c5d888261404e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601b54604051613c9293929190615316565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613ce190615301565b60006040518083038185875af1925050503d8060008114613d1e576040519150601f19603f3d011682016040523d82523d6000602084013e613d23565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613d6f90615301565b60006040518083038185875af1925050503d8060008114613dac576040519150601f19603f3d011682016040523d82523d6000602084013e613db1565b606091505b50508099505050505050505050505050505b565b60008183613dd39190614702565b905092915050565b60008183613de9919061478b565b905092915050565b505050565b505050565b60008183613e09919061520a565b905092915050565b6000600267ffffffffffffffff811115613e2e57613e2d61534d565b5b604051908082528060200260200182016040528015613e5c5781602001602082028036833780820191505090505b5090503081600081518110613e7457613e7361537c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3d91906153c0565b81600181518110613f5157613f5061537c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fb6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612751565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140189594939291906154e6565b600060405180830381600087803b15801561403257600080fd5b505af1158015614046573d6000803e3d6000fd5b505050505050565b614079307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612751565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161410096959493929190615540565b60606040518083038185885af115801561411e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061414391906155b6565b5050505050565b6000819050919050565b61415d8161414a565b82525050565b60006020820190506141786000830184614154565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141b857808201518184015260208101905061419d565b838111156141c7576000848401525b50505050565b6000601f19601f8301169050919050565b60006141e98261417e565b6141f38185614189565b935061420381856020860161419a565b61420c816141cd565b840191505092915050565b6000602082019050818103600083015261423181846141de565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142698261423e565b9050919050565b6142798161425e565b811461428457600080fd5b50565b60008135905061429681614270565b92915050565b6142a58161414a565b81146142b057600080fd5b50565b6000813590506142c28161429c565b92915050565b600080604083850312156142df576142de614239565b5b60006142ed85828601614287565b92505060206142fe858286016142b3565b9150509250929050565b60008115159050919050565b61431d81614308565b82525050565b60006020820190506143386000830184614314565b92915050565b60006020828403121561435457614353614239565b5b600061436284828501614287565b91505092915050565b6000819050919050565b600061439061438b6143868461423e565b61436b565b61423e565b9050919050565b60006143a282614375565b9050919050565b60006143b482614397565b9050919050565b6143c4816143a9565b82525050565b60006020820190506143df60008301846143bb565b92915050565b6000602082840312156143fb576143fa614239565b5b6000614409848285016142b3565b91505092915050565b60008060006060848603121561442b5761442a614239565b5b600061443986828701614287565b935050602061444a86828701614287565b925050604061445b868287016142b3565b9150509250925092565b61446e8161425e565b82525050565b60006020820190506144896000830184614465565b92915050565b600080600080608085870312156144a9576144a8614239565b5b60006144b7878288016142b3565b94505060206144c8878288016142b3565b93505060406144d9878288016142b3565b92505060606144ea878288016142b3565b91505092959194509250565b600060ff82169050919050565b61450c816144f6565b82525050565b60006020820190506145276000830184614503565b92915050565b61453681614308565b811461454157600080fd5b50565b6000813590506145538161452d565b92915050565b600080604083850312156145705761456f614239565b5b600061457e85828601614287565b925050602061458f85828601614544565b9150509250929050565b6000602082840312156145af576145ae614239565b5b60006145bd84828501614544565b91505092915050565b600080604083850312156145dd576145dc614239565b5b60006145eb85828601614287565b92505060206145fc85828601614287565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464d57607f821691505b6020821081141561466157614660614606565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061469d602083614189565b91506146a882614667565b602082019050919050565b600060208201905081810360008301526146cc81614690565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061470d8261414a565b91506147188361414a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614751576147506146d3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147968261414a565b91506147a18361414a565b9250826147b1576147b061475c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614818602f83614189565b9150614823826147bc565b604082019050919050565b600060208201905081810360008301526148478161480b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006148aa602883614189565b91506148b58261484e565b604082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b60006148eb8261414a565b91506148f68361414a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561492b5761492a6146d3565b5b828201905092915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b600061496c601d83614189565b915061497782614936565b602082019050919050565b6000602082019050818103600083015261499b8161495f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149fe603983614189565b9150614a09826149a2565b604082019050919050565b60006020820190508181036000830152614a2d816149f1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a90602583614189565b9150614a9b82614a34565b604082019050919050565b60006020820190508181036000830152614abf81614a83565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b22602483614189565b9150614b2d82614ac6565b604082019050919050565b60006020820190508181036000830152614b5181614b15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614bb4603583614189565b9150614bbf82614b58565b604082019050919050565b60006020820190508181036000830152614be381614ba7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c46603483614189565b9150614c5182614bea565b604082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cd8602683614189565b9150614ce382614c7c565b604082019050919050565b60006020820190508181036000830152614d0781614ccb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d6a602483614189565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dfc602283614189565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e8e602583614189565b9150614e9982614e32565b604082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f20602383614189565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f8c601683614189565b9150614f9782614f56565b602082019050919050565b60006020820190508181036000830152614fbb81614f7f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615044604983614189565b915061504f82614fc2565b606082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006150d6603583614189565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615142601383614189565b915061514d8261510c565b602082019050919050565b6000602082019050818103600083015261517181615135565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006151d4603683614189565b91506151df82615178565b604082019050919050565b60006020820190508181036000830152615203816151c7565b9050919050565b60006152158261414a565b91506152208361414a565b925082821015615233576152326146d3565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061529a602683614189565b91506152a58261523e565b604082019050919050565b600060208201905081810360008301526152c98161528d565b9050919050565b600081905092915050565b50565b60006152eb6000836152d0565b91506152f6826152db565b600082019050919050565b600061530c826152de565b9150819050919050565b600060608201905061532b6000830186614154565b6153386020830185614154565b6153456040830184614154565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506153ba81614270565b92915050565b6000602082840312156153d6576153d5614239565b5b60006153e4848285016153ab565b91505092915050565b6000819050919050565b600061541261540d615408846153ed565b61436b565b61414a565b9050919050565b615422816153f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61545d8161425e565b82525050565b600061546f8383615454565b60208301905092915050565b6000602082019050919050565b600061549382615428565b61549d8185615433565b93506154a883615444565b8060005b838110156154d95781516154c08882615463565b97506154cb8361547b565b9250506001810190506154ac565b5085935050505092915050565b600060a0820190506154fb6000830188614154565b6155086020830187615419565b818103604083015261551a8186615488565b90506155296060830185614465565b6155366080830184614154565b9695505050505050565b600060c0820190506155556000830189614465565b6155626020830188614154565b61556f6040830187615419565b61557c6060830186615419565b6155896080830185614465565b61559660a0830184614154565b979650505050505050565b6000815190506155b08161429c565b92915050565b6000806000606084860312156155cf576155ce614239565b5b60006155dd868287016155a1565b93505060206155ee868287016155a1565b92505060406155ff868287016155a1565b915050925092509256fea26469706673582212204cd29bde72e0d48b22c45b7565c6784f7736e32274bd077e8b4d5cd8798ca30564736f6c634300080a0033

Deployed Bytecode Sourcemap

15586:17415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16729:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3283:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4197:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16978:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15672:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3604:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24382:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16806:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21557:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4374:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15775:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22475:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3503:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4874:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15730:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16117:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15966:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15935:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24897:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16586:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16197:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3720:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1405:103;;;;;;;;;;;;;:::i;:::-;;24723:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20665:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22104:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15867:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16445;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20501:112;;;;;;;;;;;;;:::i;:::-;;1182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15904:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16621:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22367:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3391:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23658:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16550:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16519:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16846:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16697:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5097:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3855:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24166:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17050:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16157:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24547:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23468:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21840:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16363:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16002:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21052:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16411:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4038:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16044:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22966:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20847:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16482:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1516:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16659:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16084:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16729:28;;;;:::o;3283:100::-;3337:13;3370:5;3363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:100;:::o;4197:169::-;4280:4;4297:39;4306:12;:10;:12::i;:::-;4320:7;4329:6;4297:8;:39::i;:::-;4354:4;4347:11;;4197:169;;;;:::o;16978:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15672:51::-;;;:::o;3604:108::-;3665:7;3692:12;;3685:19;;3604:108;:::o;24382:157::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24489:9:::1;;;;;;;;;;;24461:38;;24478:9;24461:38;;;;;;;;;;;;24522:9;24510;;:21;;;;;;;;;;;;;;;;;;24382:157:::0;:::o;16806:33::-;;;;:::o;16766:::-;;;;:::o;21557:275::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21694:4:::1;21686;21681:1;21665:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21664:26;;;;:::i;:::-;21663:35;;;;:::i;:::-;21653:6;:45;;21631:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;21817:6;21807;:17;;;;:::i;:::-;21784:20;:40;;;;21557:275:::0;:::o;4374:492::-;4514:4;4531:36;4541:6;4549:9;4560:6;4531:9;:36::i;:::-;4580:24;4607:11;:19;4619:6;4607:19;;;;;;;;;;;;;;;:33;4627:12;:10;:12::i;:::-;4607:33;;;;;;;;;;;;;;;;4580:60;;4679:6;4659:16;:26;;4651:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4766:57;4775:6;4783:12;:10;:12::i;:::-;4816:6;4797:16;:25;4766:8;:57::i;:::-;4854:4;4847:11;;;4374:492;;;;;:::o;15775:53::-;15821:6;15775:53;:::o;22475:483::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22672:13:::1;22654:15;:31;;;;22714:13;22696:15;:31;;;;22750:7;22738:9;:19;;;;22783:10;22768:12;:25;;;;22867:12;;22855:9;;22837:15;;22819;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:60;;;;:::i;:::-;22804:12;:75;;;;22914:2;22898:12;;:18;;22890:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22475:483:::0;;;;:::o;3503:93::-;3561:5;3586:2;3579:9;;3503:93;:::o;4874:215::-;4962:4;4979:80;4988:12;:10;:12::i;:::-;5002:7;5048:10;5011:11;:25;5023:12;:10;:12::i;:::-;5011:25;;;;;;;;;;;;;;;:34;5037:7;5011:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4979:8;:80::i;:::-;5077:4;5070:11;;4874:215;;;;:::o;15730:38::-;;;:::o;16117:33::-;;;;;;;;;;;;;:::o;15966:27::-;;;;;;;;;;;;;:::o;15935:24::-;;;;;;;;;;;;;:::o;24897:126::-;24963:4;24987:19;:28;25007:7;24987:28;;;;;;;;;;;;;;;;;;;;;;;;;24980:35;;24897:126;;;:::o;16586:28::-;;;;:::o;16197:31::-;;;;;;;;;;;;;:::o;3720:127::-;3794:7;3821:9;:18;3831:7;3821:18;;;;;;;;;;;;;;;;3814:25;;3720:127;;;:::o;1405:103::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1470:30:::1;1497:1;1470:18;:30::i;:::-;1405:103::o:0;24723:166::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24836:9:::1;;;;;;;;;;;24805:41;;24822:12;24805:41;;;;;;;;;;;;24869:12;24857:9;;:24;;;;;;;;;;;;;;;;;;24723:166:::0;:::o;20665:121::-;20717:4;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20751:5:::1;20734:14;;:22;;;;;;;;;;;;;;;;;;20774:4;20767:11;;20665:121:::0;:::o;22104:167::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22259:4:::1;22217:31;:39;22249:6;22217:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22104:167:::0;;:::o;15867:30::-;;;;;;;;;;;;;:::o;16445:::-;;;;:::o;20501:112::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20572:4:::1;20556:13;;:20;;;;;;;;;;;;;;;;;;20601:4;20587:11;;:18;;;;;;;;;;;;;;;;;;20501:112::o:0;1182:87::-;1228:7;1255:6;;;;;;;;;;;1248:13;;1182:87;:::o;15904:24::-;;;;;;;;;;;;;:::o;16621:31::-;;;;:::o;22367:100::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22452:7:::1;22438:11;;:21;;;;;;;;;;;;;;;;;;22367:100:::0;:::o;3391:104::-;3447:13;3480:7;3473:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3391:104;:::o;23658:304::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23802:13:::1;23794:21;;:4;:21;;;;23772:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23913:41;23942:4;23948:5;23913:28;:41::i;:::-;23658:304:::0;;:::o;16550:27::-;;;;:::o;16519:24::-;;;;:::o;16846:27::-;;;;:::o;16697:25::-;;;;:::o;5097:413::-;5190:4;5207:24;5234:11;:25;5246:12;:10;:12::i;:::-;5234:25;;;;;;;;;;;;;;;:34;5260:7;5234:34;;;;;;;;;;;;;;;;5207:61;;5307:15;5287:16;:35;;5279:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5400:67;5409:12;:10;:12::i;:::-;5423:7;5451:15;5432:16;:34;5400:8;:67::i;:::-;5498:4;5491:11;;;5097:413;;;;:::o;3855:175::-;3941:4;3958:42;3968:12;:10;:12::i;:::-;3982:9;3993:6;3958:9;:42::i;:::-;4018:4;4011:11;;3855:175;;;;:::o;24166:208::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24303:15:::1;;;;;;;;;;;24260:59;;24283:18;24260:59;;;;;;;;;;;;24348:18;24330:15;;:36;;;;;;;;;;;;;;;;;;24166:208:::0;:::o;17050:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16157:33::-;;;;;;;;;;;;;:::o;24547:168::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24659:12:::1;;;;;;;;;;;24628:44;;24648:9;24628:44;;;;;;;;;;;;24698:9;24683:12;;:24;;;;;;;;;;;;;;;;;;24547:168:::0;:::o;23468:182::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23584:8:::1;23553:19;:28;23573:7;23553:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23624:7;23608:34;;;23633:8;23608:34;;;;;;:::i;:::-;;;;;;;;23468:182:::0;;:::o;21840:256::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21980:4:::1;21972;21967:1;21951:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21950:26;;;;:::i;:::-;21949:35;;;;:::i;:::-;21939:6;:45;;21917:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22081:6;22071;:17;;;;:::i;:::-;22059:9;:29;;;;21840:256:::0;:::o;16363:39::-;;;;;;;;;;;;;:::o;16002:35::-;;;;:::o;16880:30::-;;;;:::o;21052:497::-;21160:4;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21239:6:::1;21234:1;21218:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21217:28;;;;:::i;:::-;21204:9;:41;;21182:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21394:4;21389:1;21373:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21372:26;;;;:::i;:::-;21359:9;:39;;21337:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21510:9;21489:18;:30;;;;21537:4;21530:11;;21052:497:::0;;;:::o;16411:27::-;;;;:::o;4038:151::-;4127:7;4154:11;:18;4166:5;4154:18;;;;;;;;;;;;;;;:27;4173:7;4154:27;;;;;;;;;;;;;;;;4147:34;;4038:151;;;;:::o;16044:33::-;;;;:::o;22966:494::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23165:13:::1;23146:16;:32;;;;23208:13;23189:16;:32;;;;23245:7;23232:10;:20;;;;23279:10;23263:13;:26;;;;23367:13;;23354:10;;23335:16;;23316;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:64;;;;:::i;:::-;23300:13;:80;;;;23416:2;23399:13;;:19;;23391:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22966:494:::0;;;;:::o;20847:135::-;20907:4;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20947:5:::1;20924:20;;:28;;;;;;;;;;;;;;;;;;20970:4;20963:11;;20847:135:::0;:::o;16482:30::-;;;;:::o;1516:201::-;1328:12;:10;:12::i;:::-;1317:23;;:7;:5;:7::i;:::-;:23;;;1309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1625:1:::1;1605:22;;:8;:22;;;;1597:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1681:28;1700:8;1681:18;:28::i;:::-;1516:201:::0;:::o;16659:31::-;;;;:::o;16084:24::-;;;;:::o;728:98::-;781:7;808:10;801:17;;728:98;:::o;7265:380::-;7418:1;7401:19;;:5;:19;;;;7393:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7499:1;7480:21;;:7;:21;;;;7472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7583:6;7553:11;:18;7565:5;7553:18;;;;;;;;;;;;;;;:27;7572:7;7553:27;;;;;;;;;;;;;;;:36;;;;7621:7;7605:32;;7614:5;7605:32;;;7630:6;7605:32;;;;;;:::i;:::-;;;;;;;;7265:380;;;:::o;25081:4867::-;25229:1;25213:18;;:4;:18;;;;25205:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25306:1;25292:16;;:2;:16;;;;25284:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25375:1;25365:6;:11;25361:93;;;25393:28;25409:4;25415:2;25419:1;25393:15;:28::i;:::-;25436:7;;25361:93;25470:14;;;;;;;;;;;25466:2487;;;25531:7;:5;:7::i;:::-;25523:15;;:4;:15;;;;:49;;;;;25565:7;:5;:7::i;:::-;25559:13;;:2;:13;;;;25523:49;:86;;;;;25607:1;25593:16;;:2;:16;;;;25523:86;:128;;;;;25644:6;25630:21;;:2;:21;;;;25523:128;:158;;;;;25673:8;;;;;;;;;;;25672:9;25523:158;25501:2441;;;25721:13;;;;;;;;;;;25716:223;;25793:19;:25;25813:4;25793:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25822:19;:23;25842:2;25822:23;;;;;;;;;;;;;;;;;;;;;;;;;25793:52;25759:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25716:223;26095:20;;;;;;;;;;;26091:641;;;26176:7;:5;:7::i;:::-;26170:13;;:2;:13;;;;:72;;;;;26226:15;26212:30;;:2;:30;;;;26170:72;:129;;;;;26285:13;26271:28;;:2;:28;;;;26170:129;26140:573;;;26463:12;26388:28;:39;26417:9;26388:39;;;;;;;;;;;;;;;;:87;26350:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26677:12;26635:28;:39;26664:9;26635:39;;;;;;;;;;;;;;;:54;;;;26140:573;26091:641;26806:25;:31;26832:4;26806:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;26863:31;:35;26895:2;26863:35;;;;;;;;;;;;;;;;;;;;;;;;;26862:36;26806:92;26780:1147;;;26985:20;;26975:6;:30;;26941:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27193:9;;27176:13;27186:2;27176:9;:13::i;:::-;27167:6;:22;;;;:::i;:::-;:35;;27133:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26780:1147;;;27371:25;:29;27397:2;27371:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27426:31;:37;27458:4;27426:37;;;;;;;;;;;;;;;;;;;;;;;;;27425:38;27371:92;27345:582;;;27550:20;;27540:6;:30;;27506:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;27345:582;;;27707:31;:35;27739:2;27707:35;;;;;;;;;;;;;;;;;;;;;;;;;27702:225;;27827:9;;27810:13;27820:2;27810:9;:13::i;:::-;27801:6;:22;;;;:::i;:::-;:35;;27767:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27702:225;27345:582;26780:1147;25501:2441;25466:2487;27965:28;27996:24;28014:4;27996:9;:24::i;:::-;27965:55;;28033:12;28072:18;;28048:20;:42;;28033:57;;28121:7;:35;;;;;28145:11;;;;;;;;;;;28121:35;:61;;;;;28174:8;;;;;;;;;;;28173:9;28121:61;:110;;;;;28200:25;:31;28226:4;28200:31;;;;;;;;;;;;;;;;;;;;;;;;;28199:32;28121:110;:153;;;;;28249:19;:25;28269:4;28249:25;;;;;;;;;;;;;;;;;;;;;;;;;28248:26;28121:153;:194;;;;;28292:19;:23;28312:2;28292:23;;;;;;;;;;;;;;;;;;;;;;;;;28291:24;28121:194;28103:326;;;28353:4;28342:8;;:15;;;;;;;;;;;;;;;;;;28374:10;:8;:10::i;:::-;28412:5;28401:8;;:16;;;;;;;;;;;;;;;;;;28103:326;28441:12;28457:8;;;;;;;;;;;28456:9;28441:24;;28567:19;:25;28587:4;28567:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28596:19;:23;28616:2;28596:23;;;;;;;;;;;;;;;;;;;;;;;;;28567:52;28563:100;;;28646:5;28636:15;;28563:100;28675:12;28780:7;28776:1119;;;28832:25;:29;28858:2;28832:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28881:1;28865:13;;:17;28832:50;28828:918;;;28910:34;28940:3;28910:25;28921:13;;28910:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28903:41;;29013:13;;28993:16;;28986:4;:23;;;;:::i;:::-;28985:41;;;;:::i;:::-;28963:18;;:63;;;;;;;:::i;:::-;;;;;;;;29083:13;;29069:10;;29062:4;:17;;;;:::i;:::-;29061:35;;;;:::i;:::-;29045:12;;:51;;;;;;;:::i;:::-;;;;;;;;29165:13;;29145:16;;29138:4;:23;;;;:::i;:::-;29137:41;;;;:::i;:::-;29115:18;;:63;;;;;;;:::i;:::-;;;;;;;;29241:13;;29224;;29217:4;:20;;;;:::i;:::-;29216:38;;;;:::i;:::-;29197:15;;:57;;;;;;;:::i;:::-;;;;;;;;28828:918;;;29316:25;:31;29342:4;29316:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29366:1;29351:12;;:16;29316:51;29312:434;;;29395:33;29424:3;29395:24;29406:12;;29395:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29388:40;;29496:12;;29477:15;;29470:4;:22;;;;:::i;:::-;29469:39;;;;:::i;:::-;29447:18;;:61;;;;;;;:::i;:::-;;;;;;;;29564:12;;29551:9;;29544:4;:16;;;;:::i;:::-;29543:33;;;;:::i;:::-;29527:12;;:49;;;;;;;:::i;:::-;;;;;;;;29644:12;;29625:15;;29618:4;:22;;;;:::i;:::-;29617:39;;;;:::i;:::-;29595:18;;:61;;;;;;;:::i;:::-;;;;;;;;29718:12;;29702;;29695:4;:19;;;;:::i;:::-;29694:36;;;;:::i;:::-;29675:15;;:55;;;;;;;:::i;:::-;;;;;;;;29312:434;28828:918;29773:1;29766:4;:8;29762:91;;;29795:42;29811:4;29825;29832;29795:15;:42::i;:::-;29762:91;29879:4;29869:14;;;;;:::i;:::-;;;28776:1119;29907:33;29923:4;29929:2;29933:6;29907:15;:33::i;:::-;25194:4754;;;;25081:4867;;;;:::o;1725:191::-;1799:16;1818:6;;;;;;;;;;;1799:25;;1844:8;1835:6;;:17;;;;;;;;;;;;;;;;;;1899:8;1868:40;;1889:8;1868:40;;;;;;;;;;;;1788:128;1725:191;:::o;23970:188::-;24087:5;24053:25;:31;24079:4;24053:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24144:5;24110:40;;24138:4;24110:40;;;;;;;;;;;;23970:188;;:::o;5518:733::-;5676:1;5658:20;;:6;:20;;;;5650:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5760:1;5739:23;;:9;:23;;;;5731:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5815:47;5836:6;5844:9;5855:6;5815:20;:47::i;:::-;5875:21;5899:9;:17;5909:6;5899:17;;;;;;;;;;;;;;;;5875:41;;5952:6;5935:13;:23;;5927:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6073:6;6057:13;:22;6037:9;:17;6047:6;6037:17;;;;;;;;;;;;;;;:42;;;;6125:6;6101:9;:20;6111:9;6101:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6166:9;6149:35;;6158:6;6149:35;;;6177:6;6149:35;;;;;;:::i;:::-;;;;;;;;6197:46;6217:6;6225:9;6236:6;6197:19;:46::i;:::-;5639:612;5518:733;;;:::o;31076:1922::-;31115:23;31141:24;31159:4;31141:9;:24::i;:::-;31115:50;;31176:25;31300:15;;31272:12;;31238:18;;31204;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;:111;;;;:::i;:::-;31176:139;;31326:12;31374:1;31355:15;:20;:46;;;;31400:1;31379:17;:22;31355:46;31351:85;;;31418:7;;;;;31351:85;31491:2;31470:18;;:23;;;;:::i;:::-;31452:15;:41;31448:115;;;31549:2;31528:18;;:23;;;;:::i;:::-;31510:41;;31448:115;31624:23;31711:1;31691:17;31669:18;;31651:15;:36;;;;:::i;:::-;31650:58;;;;:::i;:::-;:62;;;;:::i;:::-;31624:88;;31723:26;31752:36;31772:15;31752;:19;;:36;;;;:::i;:::-;31723:65;;31801:25;31829:21;31801:49;;31863:36;31880:18;31863:16;:36::i;:::-;31912:18;31933:44;31959:17;31933:21;:25;;:44;;;;:::i;:::-;31912:65;;31990:23;32016:57;32055:17;32016:34;32031:18;;32016:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;31990:83;;32084:17;32104:51;32137:17;32104:28;32119:12;;32104:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;32084:71;;32166:20;32189:54;32225:17;32189:31;32204:15;;32189:10;:14;;:31;;;;:::i;:::-;:35;;:54;;;;:::i;:::-;32166:77;;32256:23;32325:12;32313:9;32295:15;32282:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;:55;;;;:::i;:::-;32256:81;;32371:1;32350:18;:22;;;;32404:1;32383:18;:22;;;;32431:1;32416:12;:16;;;;32461:1;32443:15;:19;;;;32497:9;;;;;;;;;;;32489:23;;32520:9;32489:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32475:59;;;;;32569:1;32551:15;:19;:42;;;;;32592:1;32574:15;:19;32551:42;32547:278;;;32610:46;32623:15;32640;32610:12;:46::i;:::-;32676:137;32709:18;32746:15;32780:18;;32676:137;;;;;;;;:::i;:::-;;;;;;;;32547:278;32859:12;;;;;;;;;;;32851:26;;32885:12;32851:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32837:65;;;;;32935:15;;;;;;;;;;;32927:29;;32964:21;32927:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32913:77;;;;;31104:1894;;;;;;;;;;;31076:1922;:::o;9271:98::-;9329:7;9360:1;9356;:5;;;;:::i;:::-;9349:12;;9271:98;;;;:::o;9377:::-;9435:7;9466:1;9462;:5;;;;:::i;:::-;9455:12;;9377:98;;;;:::o;7653:125::-;;;;:::o;7786:124::-;;;;:::o;9165:98::-;9223:7;9254:1;9250;:5;;;;:::i;:::-;9243:12;;9165:98;;;;:::o;29956:589::-;30082:21;30120:1;30106:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30082:40;;30151:4;30133;30138:1;30133:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30177:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30167:4;30172:1;30167:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30212:62;30229:4;30244:15;30262:11;30212:8;:62::i;:::-;30313:15;:66;;;30394:11;30420:1;30464:4;30491;30511:15;30313:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30011:534;29956:589;:::o;30553:515::-;30701:62;30718:4;30733:15;30751:11;30701:8;:62::i;:::-;30806:15;:31;;;30845:9;30878:4;30898:11;30924:1;30967;31010:9;;;;;;;;;;;31034:15;30806:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30553:515;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::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:765::-;6557:6;6565;6573;6581;6630:3;6618:9;6609:7;6605:23;6601:33;6598:120;;;6637:79;;:::i;:::-;6598:120;6757:1;6782:53;6827:7;6818:6;6807:9;6803:22;6782:53;:::i;:::-;6772:63;;6728:117;6884:2;6910:53;6955:7;6946:6;6935:9;6931:22;6910:53;:::i;:::-;6900:63;;6855:118;7012:2;7038:53;7083:7;7074:6;7063:9;7059:22;7038:53;:::i;:::-;7028:63;;6983:118;7140:2;7166:53;7211:7;7202:6;7191:9;7187:22;7166:53;:::i;:::-;7156:63;;7111:118;6471:765;;;;;;;:::o;7242:86::-;7277:7;7317:4;7310:5;7306:16;7295:27;;7242:86;;;:::o;7334:112::-;7417:22;7433:5;7417:22;:::i;:::-;7412:3;7405:35;7334:112;;:::o;7452:214::-;7541:4;7579:2;7568:9;7564:18;7556:26;;7592:67;7656:1;7645:9;7641:17;7632:6;7592:67;:::i;:::-;7452:214;;;;:::o;7672:116::-;7742:21;7757:5;7742:21;:::i;:::-;7735:5;7732:32;7722:60;;7778:1;7775;7768:12;7722:60;7672:116;:::o;7794:133::-;7837:5;7875:6;7862:20;7853:29;;7891:30;7915:5;7891:30;:::i;:::-;7794:133;;;;:::o;7933:468::-;7998:6;8006;8055:2;8043:9;8034:7;8030:23;8026:32;8023:119;;;8061:79;;:::i;:::-;8023:119;8181:1;8206:53;8251:7;8242:6;8231:9;8227:22;8206:53;:::i;:::-;8196:63;;8152:117;8308:2;8334:50;8376:7;8367:6;8356:9;8352:22;8334:50;:::i;:::-;8324:60;;8279:115;7933:468;;;;;:::o;8407:323::-;8463:6;8512:2;8500:9;8491:7;8487:23;8483:32;8480:119;;;8518:79;;:::i;:::-;8480:119;8638:1;8663:50;8705:7;8696:6;8685:9;8681:22;8663:50;:::i;:::-;8653:60;;8609:114;8407:323;;;;:::o;8736:474::-;8804:6;8812;8861:2;8849:9;8840:7;8836:23;8832:32;8829:119;;;8867:79;;:::i;:::-;8829:119;8987:1;9012:53;9057:7;9048:6;9037:9;9033:22;9012:53;:::i;:::-;9002:63;;8958:117;9114:2;9140:53;9185:7;9176:6;9165:9;9161:22;9140:53;:::i;:::-;9130:63;;9085:118;8736:474;;;;;:::o;9216:180::-;9264:77;9261:1;9254:88;9361:4;9358:1;9351:15;9385:4;9382:1;9375:15;9402:320;9446:6;9483:1;9477:4;9473:12;9463:22;;9530:1;9524:4;9520:12;9551:18;9541:81;;9607:4;9599:6;9595:17;9585:27;;9541:81;9669:2;9661:6;9658:14;9638:18;9635:38;9632:84;;;9688:18;;:::i;:::-;9632:84;9453:269;9402:320;;;:::o;9728:182::-;9868:34;9864:1;9856:6;9852:14;9845:58;9728:182;:::o;9916:366::-;10058:3;10079:67;10143:2;10138:3;10079:67;:::i;:::-;10072:74;;10155:93;10244:3;10155:93;:::i;:::-;10273:2;10268:3;10264:12;10257:19;;9916:366;;;:::o;10288:419::-;10454:4;10492:2;10481:9;10477:18;10469:26;;10541:9;10535:4;10531:20;10527:1;10516:9;10512:17;10505:47;10569:131;10695:4;10569:131;:::i;:::-;10561:139;;10288:419;;;:::o;10713:180::-;10761:77;10758:1;10751:88;10858:4;10855:1;10848:15;10882:4;10879:1;10872:15;10899:348;10939:7;10962:20;10980:1;10962:20;:::i;:::-;10957:25;;10996:20;11014:1;10996:20;:::i;:::-;10991:25;;11184:1;11116:66;11112:74;11109:1;11106:81;11101:1;11094:9;11087:17;11083:105;11080:131;;;11191:18;;:::i;:::-;11080:131;11239:1;11236;11232:9;11221:20;;10899:348;;;;:::o;11253:180::-;11301:77;11298:1;11291:88;11398:4;11395:1;11388:15;11422:4;11419:1;11412:15;11439:185;11479:1;11496:20;11514:1;11496:20;:::i;:::-;11491:25;;11530:20;11548:1;11530:20;:::i;:::-;11525:25;;11569:1;11559:35;;11574:18;;:::i;:::-;11559:35;11616:1;11613;11609:9;11604:14;;11439:185;;;;:::o;11630:234::-;11770:34;11766:1;11758:6;11754:14;11747:58;11839:17;11834:2;11826:6;11822:15;11815:42;11630:234;:::o;11870:366::-;12012:3;12033:67;12097:2;12092:3;12033:67;:::i;:::-;12026:74;;12109:93;12198:3;12109:93;:::i;:::-;12227:2;12222:3;12218:12;12211:19;;11870:366;;;:::o;12242:419::-;12408:4;12446:2;12435:9;12431:18;12423:26;;12495:9;12489:4;12485:20;12481:1;12470:9;12466:17;12459:47;12523:131;12649:4;12523:131;:::i;:::-;12515:139;;12242:419;;;:::o;12667:227::-;12807:34;12803:1;12795:6;12791:14;12784:58;12876:10;12871:2;12863:6;12859:15;12852:35;12667:227;:::o;12900:366::-;13042:3;13063:67;13127:2;13122:3;13063:67;:::i;:::-;13056:74;;13139:93;13228:3;13139:93;:::i;:::-;13257:2;13252:3;13248:12;13241:19;;12900:366;;;:::o;13272:419::-;13438:4;13476:2;13465:9;13461:18;13453:26;;13525:9;13519:4;13515:20;13511:1;13500:9;13496:17;13489:47;13553:131;13679:4;13553:131;:::i;:::-;13545:139;;13272:419;;;:::o;13697:305::-;13737:3;13756:20;13774:1;13756:20;:::i;:::-;13751:25;;13790:20;13808:1;13790:20;:::i;:::-;13785:25;;13944:1;13876:66;13872:74;13869:1;13866:81;13863:107;;;13950:18;;:::i;:::-;13863:107;13994:1;13991;13987:9;13980:16;;13697:305;;;;:::o;14008:179::-;14148:31;14144:1;14136:6;14132:14;14125:55;14008:179;:::o;14193:366::-;14335:3;14356:67;14420:2;14415:3;14356:67;:::i;:::-;14349:74;;14432:93;14521:3;14432:93;:::i;:::-;14550:2;14545:3;14541:12;14534:19;;14193:366;;;:::o;14565:419::-;14731:4;14769:2;14758:9;14754:18;14746:26;;14818:9;14812:4;14808:20;14804:1;14793:9;14789:17;14782:47;14846:131;14972:4;14846:131;:::i;:::-;14838:139;;14565:419;;;:::o;14990:244::-;15130:34;15126:1;15118:6;15114:14;15107:58;15199:27;15194:2;15186:6;15182:15;15175:52;14990:244;:::o;15240:366::-;15382:3;15403:67;15467:2;15462:3;15403:67;:::i;:::-;15396:74;;15479:93;15568:3;15479:93;:::i;:::-;15597:2;15592:3;15588:12;15581:19;;15240:366;;;:::o;15612:419::-;15778:4;15816:2;15805:9;15801:18;15793:26;;15865:9;15859:4;15855:20;15851:1;15840:9;15836:17;15829:47;15893:131;16019:4;15893:131;:::i;:::-;15885:139;;15612:419;;;:::o;16037:224::-;16177:34;16173:1;16165:6;16161:14;16154:58;16246:7;16241:2;16233:6;16229:15;16222:32;16037:224;:::o;16267:366::-;16409:3;16430:67;16494:2;16489:3;16430:67;:::i;:::-;16423:74;;16506:93;16595:3;16506:93;:::i;:::-;16624:2;16619:3;16615:12;16608:19;;16267:366;;;:::o;16639:419::-;16805:4;16843:2;16832:9;16828:18;16820:26;;16892:9;16886:4;16882:20;16878:1;16867:9;16863:17;16856:47;16920:131;17046:4;16920:131;:::i;:::-;16912:139;;16639:419;;;:::o;17064:223::-;17204:34;17200:1;17192:6;17188:14;17181:58;17273:6;17268:2;17260:6;17256:15;17249:31;17064:223;:::o;17293:366::-;17435:3;17456:67;17520:2;17515:3;17456:67;:::i;:::-;17449:74;;17532:93;17621:3;17532:93;:::i;:::-;17650:2;17645:3;17641:12;17634:19;;17293:366;;;:::o;17665:419::-;17831:4;17869:2;17858:9;17854:18;17846:26;;17918:9;17912:4;17908:20;17904:1;17893:9;17889:17;17882:47;17946:131;18072:4;17946:131;:::i;:::-;17938:139;;17665:419;;;:::o;18090:240::-;18230:34;18226:1;18218:6;18214:14;18207:58;18299:23;18294:2;18286:6;18282:15;18275:48;18090:240;:::o;18336:366::-;18478:3;18499:67;18563:2;18558:3;18499:67;:::i;:::-;18492:74;;18575:93;18664:3;18575:93;:::i;:::-;18693:2;18688:3;18684:12;18677:19;;18336:366;;;:::o;18708:419::-;18874:4;18912:2;18901:9;18897:18;18889:26;;18961:9;18955:4;18951:20;18947:1;18936:9;18932:17;18925:47;18989:131;19115:4;18989:131;:::i;:::-;18981:139;;18708:419;;;:::o;19133:239::-;19273:34;19269:1;19261:6;19257:14;19250:58;19342:22;19337:2;19329:6;19325:15;19318:47;19133:239;:::o;19378:366::-;19520:3;19541:67;19605:2;19600:3;19541:67;:::i;:::-;19534:74;;19617:93;19706:3;19617:93;:::i;:::-;19735:2;19730:3;19726:12;19719:19;;19378:366;;;:::o;19750:419::-;19916:4;19954:2;19943:9;19939:18;19931:26;;20003:9;19997:4;19993:20;19989:1;19978:9;19974:17;19967:47;20031:131;20157:4;20031:131;:::i;:::-;20023:139;;19750:419;;;:::o;20175:225::-;20315:34;20311:1;20303:6;20299:14;20292:58;20384:8;20379:2;20371:6;20367:15;20360:33;20175:225;:::o;20406:366::-;20548:3;20569:67;20633:2;20628:3;20569:67;:::i;:::-;20562:74;;20645:93;20734:3;20645:93;:::i;:::-;20763:2;20758:3;20754:12;20747:19;;20406:366;;;:::o;20778:419::-;20944:4;20982:2;20971:9;20967:18;20959:26;;21031:9;21025:4;21021:20;21017:1;21006:9;21002:17;20995:47;21059:131;21185:4;21059:131;:::i;:::-;21051:139;;20778:419;;;:::o;21203:223::-;21343:34;21339:1;21331:6;21327:14;21320:58;21412:6;21407:2;21399:6;21395:15;21388:31;21203:223;:::o;21432:366::-;21574:3;21595:67;21659:2;21654:3;21595:67;:::i;:::-;21588:74;;21671:93;21760:3;21671:93;:::i;:::-;21789:2;21784:3;21780:12;21773:19;;21432:366;;;:::o;21804:419::-;21970:4;22008:2;21997:9;21993:18;21985:26;;22057:9;22051:4;22047:20;22043:1;22032:9;22028:17;22021:47;22085:131;22211:4;22085:131;:::i;:::-;22077:139;;21804:419;;;:::o;22229:221::-;22369:34;22365:1;22357:6;22353:14;22346:58;22438:4;22433:2;22425:6;22421:15;22414:29;22229:221;:::o;22456:366::-;22598:3;22619:67;22683:2;22678:3;22619:67;:::i;:::-;22612:74;;22695:93;22784:3;22695:93;:::i;:::-;22813:2;22808:3;22804:12;22797:19;;22456:366;;;:::o;22828:419::-;22994:4;23032:2;23021:9;23017:18;23009:26;;23081:9;23075:4;23071:20;23067:1;23056:9;23052:17;23045:47;23109:131;23235:4;23109:131;:::i;:::-;23101:139;;22828:419;;;:::o;23253:224::-;23393:34;23389:1;23381:6;23377:14;23370:58;23462:7;23457:2;23449:6;23445:15;23438:32;23253:224;:::o;23483:366::-;23625:3;23646:67;23710:2;23705:3;23646:67;:::i;:::-;23639:74;;23722:93;23811:3;23722:93;:::i;:::-;23840:2;23835:3;23831:12;23824:19;;23483:366;;;:::o;23855:419::-;24021:4;24059:2;24048:9;24044:18;24036:26;;24108:9;24102:4;24098:20;24094:1;24083:9;24079:17;24072:47;24136:131;24262:4;24136:131;:::i;:::-;24128:139;;23855:419;;;:::o;24280:222::-;24420:34;24416:1;24408:6;24404:14;24397:58;24489:5;24484:2;24476:6;24472:15;24465:30;24280:222;:::o;24508:366::-;24650:3;24671:67;24735:2;24730:3;24671:67;:::i;:::-;24664:74;;24747:93;24836:3;24747:93;:::i;:::-;24865:2;24860:3;24856:12;24849:19;;24508:366;;;:::o;24880:419::-;25046:4;25084:2;25073:9;25069:18;25061:26;;25133:9;25127:4;25123:20;25119:1;25108:9;25104:17;25097:47;25161:131;25287:4;25161:131;:::i;:::-;25153:139;;24880:419;;;:::o;25305:172::-;25445:24;25441:1;25433:6;25429:14;25422:48;25305:172;:::o;25483:366::-;25625:3;25646:67;25710:2;25705:3;25646:67;:::i;:::-;25639:74;;25722:93;25811:3;25722:93;:::i;:::-;25840:2;25835:3;25831:12;25824:19;;25483:366;;;:::o;25855:419::-;26021:4;26059:2;26048:9;26044:18;26036:26;;26108:9;26102:4;26098:20;26094:1;26083:9;26079:17;26072:47;26136:131;26262:4;26136:131;:::i;:::-;26128:139;;25855:419;;;:::o;26280:297::-;26420:34;26416:1;26408:6;26404:14;26397:58;26489:34;26484:2;26476:6;26472:15;26465:59;26558:11;26553:2;26545:6;26541:15;26534:36;26280:297;:::o;26583:366::-;26725:3;26746:67;26810:2;26805:3;26746:67;:::i;:::-;26739:74;;26822:93;26911:3;26822:93;:::i;:::-;26940:2;26935:3;26931:12;26924:19;;26583:366;;;:::o;26955:419::-;27121:4;27159:2;27148:9;27144:18;27136:26;;27208:9;27202:4;27198:20;27194:1;27183:9;27179:17;27172:47;27236:131;27362:4;27236:131;:::i;:::-;27228:139;;26955:419;;;:::o;27380:240::-;27520:34;27516:1;27508:6;27504:14;27497:58;27589:23;27584:2;27576:6;27572:15;27565:48;27380:240;:::o;27626:366::-;27768:3;27789:67;27853:2;27848:3;27789:67;:::i;:::-;27782:74;;27865:93;27954:3;27865:93;:::i;:::-;27983:2;27978:3;27974:12;27967:19;;27626:366;;;:::o;27998:419::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:169::-;28563:21;28559:1;28551:6;28547:14;28540:45;28423:169;:::o;28598:366::-;28740:3;28761:67;28825:2;28820:3;28761:67;:::i;:::-;28754:74;;28837:93;28926:3;28837:93;:::i;:::-;28955:2;28950:3;28946:12;28939:19;;28598:366;;;:::o;28970:419::-;29136:4;29174:2;29163:9;29159:18;29151:26;;29223:9;29217:4;29213:20;29209:1;29198:9;29194:17;29187:47;29251:131;29377:4;29251:131;:::i;:::-;29243:139;;28970:419;;;:::o;29395:241::-;29535:34;29531:1;29523:6;29519:14;29512:58;29604:24;29599:2;29591:6;29587:15;29580:49;29395:241;:::o;29642:366::-;29784:3;29805:67;29869:2;29864:3;29805:67;:::i;:::-;29798:74;;29881:93;29970:3;29881:93;:::i;:::-;29999:2;29994:3;29990:12;29983:19;;29642:366;;;:::o;30014:419::-;30180:4;30218:2;30207:9;30203:18;30195:26;;30267:9;30261:4;30257:20;30253:1;30242:9;30238:17;30231:47;30295:131;30421:4;30295:131;:::i;:::-;30287:139;;30014:419;;;:::o;30439:191::-;30479:4;30499:20;30517:1;30499:20;:::i;:::-;30494:25;;30533:20;30551:1;30533:20;:::i;:::-;30528:25;;30572:1;30569;30566:8;30563:34;;;30577:18;;:::i;:::-;30563:34;30622:1;30619;30615:9;30607:17;;30439:191;;;;:::o;30636:225::-;30776:34;30772:1;30764:6;30760:14;30753:58;30845:8;30840:2;30832:6;30828:15;30821:33;30636:225;:::o;30867:366::-;31009:3;31030:67;31094:2;31089:3;31030:67;:::i;:::-;31023:74;;31106:93;31195:3;31106:93;:::i;:::-;31224:2;31219:3;31215:12;31208:19;;30867:366;;;:::o;31239:419::-;31405:4;31443:2;31432:9;31428:18;31420:26;;31492:9;31486:4;31482:20;31478:1;31467:9;31463:17;31456:47;31520:131;31646:4;31520:131;:::i;:::-;31512:139;;31239:419;;;:::o;31664:147::-;31765:11;31802:3;31787:18;;31664:147;;;;:::o;31817:114::-;;:::o;31937:398::-;32096:3;32117:83;32198:1;32193:3;32117:83;:::i;:::-;32110:90;;32209:93;32298:3;32209:93;:::i;:::-;32327:1;32322:3;32318:11;32311:18;;31937:398;;;:::o;32341:379::-;32525:3;32547:147;32690:3;32547:147;:::i;:::-;32540:154;;32711:3;32704:10;;32341:379;;;:::o;32726:442::-;32875:4;32913:2;32902:9;32898:18;32890:26;;32926:71;32994:1;32983:9;32979:17;32970:6;32926:71;:::i;:::-;33007:72;33075:2;33064:9;33060:18;33051:6;33007:72;:::i;:::-;33089;33157:2;33146:9;33142:18;33133:6;33089:72;:::i;:::-;32726:442;;;;;;:::o;33174:180::-;33222:77;33219:1;33212:88;33319:4;33316:1;33309:15;33343:4;33340:1;33333:15;33360:180;33408:77;33405:1;33398:88;33505:4;33502:1;33495:15;33529:4;33526:1;33519:15;33546:143;33603:5;33634:6;33628:13;33619:22;;33650:33;33677:5;33650:33;:::i;:::-;33546:143;;;;:::o;33695:351::-;33765:6;33814:2;33802:9;33793:7;33789:23;33785:32;33782:119;;;33820:79;;:::i;:::-;33782:119;33940:1;33965:64;34021:7;34012:6;34001:9;33997:22;33965:64;:::i;:::-;33955:74;;33911:128;33695:351;;;;:::o;34052:85::-;34097:7;34126:5;34115:16;;34052:85;;;:::o;34143:158::-;34201:9;34234:61;34252:42;34261:32;34287:5;34261:32;:::i;:::-;34252:42;:::i;:::-;34234:61;:::i;:::-;34221:74;;34143:158;;;:::o;34307:147::-;34402:45;34441:5;34402:45;:::i;:::-;34397:3;34390:58;34307:147;;:::o;34460:114::-;34527:6;34561:5;34555:12;34545:22;;34460:114;;;:::o;34580:184::-;34679:11;34713:6;34708:3;34701:19;34753:4;34748:3;34744:14;34729:29;;34580:184;;;;:::o;34770:132::-;34837:4;34860:3;34852:11;;34890:4;34885:3;34881:14;34873:22;;34770:132;;;:::o;34908:108::-;34985:24;35003:5;34985:24;:::i;:::-;34980:3;34973:37;34908:108;;:::o;35022:179::-;35091:10;35112:46;35154:3;35146:6;35112:46;:::i;:::-;35190:4;35185:3;35181:14;35167:28;;35022:179;;;;:::o;35207:113::-;35277:4;35309;35304:3;35300:14;35292:22;;35207:113;;;:::o;35356:732::-;35475:3;35504:54;35552:5;35504:54;:::i;:::-;35574:86;35653:6;35648:3;35574:86;:::i;:::-;35567:93;;35684:56;35734:5;35684:56;:::i;:::-;35763:7;35794:1;35779:284;35804:6;35801:1;35798:13;35779:284;;;35880:6;35874:13;35907:63;35966:3;35951:13;35907:63;:::i;:::-;35900:70;;35993:60;36046:6;35993:60;:::i;:::-;35983:70;;35839:224;35826:1;35823;35819:9;35814:14;;35779:284;;;35783:14;36079:3;36072:10;;35480:608;;;35356:732;;;;:::o;36094:831::-;36357:4;36395:3;36384:9;36380:19;36372:27;;36409:71;36477:1;36466:9;36462:17;36453:6;36409:71;:::i;:::-;36490:80;36566:2;36555:9;36551:18;36542:6;36490:80;:::i;:::-;36617:9;36611:4;36607:20;36602:2;36591:9;36587:18;36580:48;36645:108;36748:4;36739:6;36645:108;:::i;:::-;36637:116;;36763:72;36831:2;36820:9;36816:18;36807:6;36763:72;:::i;:::-;36845:73;36913:3;36902:9;36898:19;36889:6;36845:73;:::i;:::-;36094:831;;;;;;;;:::o;36931:807::-;37180:4;37218:3;37207:9;37203:19;37195:27;;37232:71;37300:1;37289:9;37285:17;37276:6;37232:71;:::i;:::-;37313:72;37381:2;37370:9;37366:18;37357:6;37313:72;:::i;:::-;37395:80;37471:2;37460:9;37456:18;37447:6;37395:80;:::i;:::-;37485;37561:2;37550:9;37546:18;37537:6;37485:80;:::i;:::-;37575:73;37643:3;37632:9;37628:19;37619:6;37575:73;:::i;:::-;37658;37726:3;37715:9;37711:19;37702:6;37658:73;:::i;:::-;36931:807;;;;;;;;;:::o;37744:143::-;37801:5;37832:6;37826:13;37817:22;;37848:33;37875:5;37848:33;:::i;:::-;37744:143;;;;:::o;37893:663::-;37981:6;37989;37997;38046:2;38034:9;38025:7;38021:23;38017:32;38014:119;;;38052:79;;:::i;:::-;38014:119;38172:1;38197:64;38253:7;38244:6;38233:9;38229:22;38197:64;:::i;:::-;38187:74;;38143:128;38310:2;38336:64;38392:7;38383:6;38372:9;38368:22;38336:64;:::i;:::-;38326:74;;38281:129;38449:2;38475:64;38531:7;38522:6;38511:9;38507:22;38475:64;:::i;:::-;38465:74;;38420:129;37893:663;;;;;:::o

Swarm Source

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