ETH Price: $2,969.70 (-0.69%)
Gas: 6 Gwei

Token

Fintensor (FAO)
 

Overview

Max Total Supply

100,000,000 FAO

Holders

223

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
673,684.236511782899528792 FAO

Value
$0.00
0x8ea613d384973ac6b5368b4159d2715d11d7c932
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:
Fintensor

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-03
*/

/*
φφφφφφφφφφφφφφφφφφφφφφφφφφφφφφ
φφφφφφφφφφφφφφφφφφφφφφφφφφφφφφ
φφ                          φφ
φφ                          φφ
φφ                          φφ
φφ          φφφφφ           φφ
φφ      φ fintensor φ       φφ
φφ          φφφφφ           φφ
φφ                          φφ
φφ                          φφ
φφ                          φφ
φφφφφφφφφφφφφφφφφφφφφφφφφφφφφφ
φφφφφφφφφφφφφφφφφφφφφφφφφφφφφφ

Unicode 0xCF 0x86
UTF-8 11001111:10000110
UTF-16 0x03C6
UTF-32 0x000003C6

φ https://t.me/fintensor
φ https://twitter.com/fintensor
φ https://fintensor.net

φφφφφφφφφφφφφφφφφφφφφφφφφφφφφφ

*/
// 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 Fintensor is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public operationsWallet;

    uint256 public maxTransaction;
    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 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

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

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

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

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

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

    constructor() ERC20("Fintensor", "FAO") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2router); 

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

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

        // launch buy fees
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 1;
        uint256 _buyOperationsFee = 1;
        
        // launch sell fees
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevelopmentFee = 1;
        uint256 _sellOperationsFee = 2;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransaction = 1_000_000 * 1e18; // 1% max transaction at launch
        maxWallet = 1_000_000 * 1e18; // 1% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = address(0x3436480Aa841e389D07d42277d75cdac6a9cc4af); 
        developmentWallet = address(0x3436480Aa841e389D07d42277d75cdac6a9cc4af); 
        liquidityWallet = address(0x3436480Aa841e389D07d42277d75cdac6a9cc4af); 
        operationsWallet = address(0x3436480Aa841e389D07d42277d75cdac6a9cc4af);

        // 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 {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWallet(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
    {
        _isExcludedmaxTransaction[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 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 99);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 99); 
    }

    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 updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper blocked");

        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] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[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;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / 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
            liquidityWallet,
            block.timestamp
        );
    }

    function updateBL(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != uniV2router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        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 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (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":"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":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","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":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","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":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"developmentWallet","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":"liquidityWallet","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":"maxTransaction","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"sellDevelopmentFee","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":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"tokensForDevelopment","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":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uniV2router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"updateBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketingWallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600981526020017f46696e74656e736f7200000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f46414f000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c32565b5080600490805190602001906200017092919062000c32565b5050506200019362000187620006f260201b60201c565b620006fa60201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007c060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d4c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d4c565b6040518363ffffffff1660e01b81526004016200032092919062000d8f565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d4c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007c060201b60201c565b620003c360a0516001620008aa60201b60201c565b6000600190506000806001905060006001905060006002905060006001905060006001905060006002905060006a52b7d2dcc80cd2e4000000905069d3c21bcecceda1000000600b8190555069d3c21bcecceda1000000600d8190555061271060058262000432919062000df5565b6200043e919062000e85565b600c819055508860148190555087601581905550866016819055508560178190555060175460165460155460145462000478919062000ebd565b62000484919062000ebd565b62000490919062000ebd565b6013819055508460198190555083601a8190555082601b8190555081601c81905550601c54601b54601a54601954620004ca919062000ebd565b620004d6919062000ebd565b620004e2919062000ebd565b601881905550733436480aa841e389d07d42277d75cdac6a9cc4af600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733436480aa841e389d07d42277d75cdac6a9cc4af600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733436480aa841e389d07d42277d75cdac6a9cc4af600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733436480aa841e389d07d42277d75cdac6a9cc4af600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200065e620006506200094b60201b60201c565b60016200097560201b60201c565b620006713060016200097560201b60201c565b6200068661dead60016200097560201b60201c565b620006a86200069a6200094b60201b60201c565b6001620007c060201b60201c565b620006bb306001620007c060201b60201c565b620006d061dead6001620007c060201b60201c565b620006e2338262000aaf60201b60201c565b50505050505050505050620010dc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007d0620006f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007f66200094b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008469062000f7b565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000985620006f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009ab6200094b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fb9062000f7b565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000aa3919062000fba565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b199062001027565b60405180910390fd5b62000b366000838362000c2860201b60201c565b806002600082825462000b4a919062000ebd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ba1919062000ebd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c0891906200105a565b60405180910390a362000c246000838362000c2d60201b60201c565b5050565b505050565b505050565b82805462000c4090620010a6565b90600052602060002090601f01602090048101928262000c64576000855562000cb0565b82601f1062000c7f57805160ff191683800117855562000cb0565b8280016001018555821562000cb0579182015b8281111562000caf57825182559160200191906001019062000c92565b5b50905062000cbf919062000cc3565b5090565b5b8082111562000cde57600081600090555060010162000cc4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d148262000ce7565b9050919050565b62000d268162000d07565b811462000d3257600080fd5b50565b60008151905062000d468162000d1b565b92915050565b60006020828403121562000d655762000d6462000ce2565b5b600062000d758482850162000d35565b91505092915050565b62000d898162000d07565b82525050565b600060408201905062000da6600083018562000d7e565b62000db5602083018462000d7e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e028262000dbc565b915062000e0f8362000dbc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e4b5762000e4a62000dc6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e928262000dbc565b915062000e9f8362000dbc565b92508262000eb25762000eb162000e56565b5b828204905092915050565b600062000eca8262000dbc565b915062000ed78362000dbc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f0f5762000f0e62000dc6565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6360208362000f1a565b915062000f708262000f2b565b602082019050919050565b6000602082019050818103600083015262000f968162000f54565b9050919050565b60008115159050919050565b62000fb48162000f9d565b82525050565b600060208201905062000fd1600083018462000fa9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200100f601f8362000f1a565b91506200101c8262000fd7565b602082019050919050565b60006020820190508181036000830152620010428162001000565b9050919050565b620010548162000dbc565b82525050565b600060208201905062001071600083018462001049565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010bf57607f821691505b60208210811415620010d657620010d562001077565b5b50919050565b60805160a051615b3f620011416000396000818161147c015281816116fd01528181611f7c01526130550152600081816110e801528181612ffd015281816142310152818161431201528181614339015281816143d501526143fc0152615b3f6000f3fe6080604052600436106103c75760003560e01c806392136913116101f2578063d257b34f1161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e1bc3394116100dc578063e1bc339414610d03578063e2f4560514610d40578063e596219514610d6b578063e7ad9fcd14610da8576103ce565b8063d257b34f14610c33578063d469801614610c70578063d85ba06314610c9b578063dd62ed3e14610cc6576103ce565b8063b62496f511610185578063c04a541411610154578063c04a541414610b89578063c3f70b5214610bb4578063c79c04fd14610bdf578063c876d0b914610c08576103ce565b8063b62496f514610acf578063bbc0c74214610b0c578063bff7816914610b37578063c024666814610b60576103ce565b80639a7a23d6116101c15780639a7a23d614610a01578063a457c2d714610a2a578063a9059cbb14610a67578063b204141114610aa4576103ce565b80639213691314610959578063924de9b71461098457806392aa3773146109ad57806395d89b41146109d6576103ce565b806349bd5a5e116102e257806370a082311161027557806375f0a8741161024457806375f0a874146108c15780637bce5a04146108ec5780638a8c523c146109175780638da5cb5b1461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b80631f3fed8f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e391906147cd565b60405180910390f35b3480156108f857600080fd5b50610901611b56565b60405161090e9190614750565b60405180910390f35b34801561092357600080fd5b5061092c611b5c565b005b34801561093a57600080fd5b50610943611c67565b60405161095091906147cd565b60405180910390f35b34801561096557600080fd5b5061096e611c91565b60405161097b9190614750565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906149e4565b611c97565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190614977565b611d30565b005b3480156109e257600080fd5b506109eb611e6c565b6040516109f891906145d1565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a2391906149a4565b611efe565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614651565b612017565b604051610a5e91906146ac565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614651565b612102565b604051610a9b91906146ac565b60405180910390f35b348015610ab057600080fd5b50610ab9612120565b604051610ac69190614750565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af19190614977565b612126565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b21612146565b604051610b2e91906146ac565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614977565b612159565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906149a4565b612295565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906147cd565b60405180910390f35b348015610bc057600080fd5b50610bc96123e0565b604051610bd69190614750565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c019190614977565b6123e6565b005b348015610c1457600080fd5b50610c1d612522565b604051610c2a91906146ac565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c55919061450b565b612535565b604051610c6791906146ac565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c9291906147cd565b60405180910390f35b348015610ca757600080fd5b50610cb06126b0565b604051610cbd9190614750565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a11565b6126b6565b604051610cfa9190614750565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614977565b61273d565b604051610d3791906146ac565b60405180910390f35b348015610d4c57600080fd5b50610d5561275d565b604051610d629190614750565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614977565b612763565b604051610d9f91906146ac565b60405180910390f35b348015610db457600080fd5b50610dcf6004803603810190610dca91906148d9565b612783565b005b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c67565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c67565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c67565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c67565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506063601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c67565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b64612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b82611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c9f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d38612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d56611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e7b90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea790614c67565b8015611ef45780601f10611ec957610100808354040283529160200191611ef4565b820191906000526020600020905b815481529060010190602001808311611ed757829003601f168201915b5050505050905090565b611f06612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611f24611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614a9d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614f69565b60405180910390fd5b6120138282613a63565b5050565b60008060016000612026612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614ffb565b60405180910390fd5b6120f76120ee612a3d565b85858403612a45565b600191505092915050565b600061211661210f612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612161612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661217f611c67565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61229d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122bb611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123ae91906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123ee612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661240c611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061253f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661255d611c67565b73ffffffffffffffffffffffffffffffffffffffff16146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614a9d565b60405180910390fd5b620186a060016125c161110a565b6125cb9190614aec565b6125d59190614b75565b821015612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e9061508d565b60405180910390fd5b6103e8600561262461110a565b61262e9190614aec565b6126389190614b75565b82111561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b61278b612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127a9611c67565b73ffffffffffffffffffffffffffffffffffffffff16146127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a546019546128319190614e35565b61283b9190614e35565b6128459190614e35565b6018819055506063601854111561285b57600080fd5b50505050565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c67565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea2646970667358221220bf9c6be93f9a3f0726073a1ae9941107ea2bfefaf6489fde9d16f05d1c8313dd64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806392136913116101f2578063d257b34f1161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e1bc3394116100dc578063e1bc339414610d03578063e2f4560514610d40578063e596219514610d6b578063e7ad9fcd14610da8576103ce565b8063d257b34f14610c33578063d469801614610c70578063d85ba06314610c9b578063dd62ed3e14610cc6576103ce565b8063b62496f511610185578063c04a541411610154578063c04a541414610b89578063c3f70b5214610bb4578063c79c04fd14610bdf578063c876d0b914610c08576103ce565b8063b62496f514610acf578063bbc0c74214610b0c578063bff7816914610b37578063c024666814610b60576103ce565b80639a7a23d6116101c15780639a7a23d614610a01578063a457c2d714610a2a578063a9059cbb14610a67578063b204141114610aa4576103ce565b80639213691314610959578063924de9b71461098457806392aa3773146109ad57806395d89b41146109d6576103ce565b806349bd5a5e116102e257806370a082311161027557806375f0a8741161024457806375f0a874146108c15780637bce5a04146108ec5780638a8c523c146109175780638da5cb5b1461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b80631f3fed8f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b80631f3fed8f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e391906147cd565b60405180910390f35b3480156108f857600080fd5b50610901611b56565b60405161090e9190614750565b60405180910390f35b34801561092357600080fd5b5061092c611b5c565b005b34801561093a57600080fd5b50610943611c67565b60405161095091906147cd565b60405180910390f35b34801561096557600080fd5b5061096e611c91565b60405161097b9190614750565b60405180910390f35b34801561099057600080fd5b506109ab60048036038101906109a691906149e4565b611c97565b005b3480156109b957600080fd5b506109d460048036038101906109cf9190614977565b611d30565b005b3480156109e257600080fd5b506109eb611e6c565b6040516109f891906145d1565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a2391906149a4565b611efe565b005b348015610a3657600080fd5b50610a516004803603810190610a4c9190614651565b612017565b604051610a5e91906146ac565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a899190614651565b612102565b604051610a9b91906146ac565b60405180910390f35b348015610ab057600080fd5b50610ab9612120565b604051610ac69190614750565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af19190614977565b612126565b604051610b0391906146ac565b60405180910390f35b348015610b1857600080fd5b50610b21612146565b604051610b2e91906146ac565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614977565b612159565b005b348015610b6c57600080fd5b50610b876004803603810190610b8291906149a4565b612295565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906147cd565b60405180910390f35b348015610bc057600080fd5b50610bc96123e0565b604051610bd69190614750565b60405180910390f35b348015610beb57600080fd5b50610c066004803603810190610c019190614977565b6123e6565b005b348015610c1457600080fd5b50610c1d612522565b604051610c2a91906146ac565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c55919061450b565b612535565b604051610c6791906146ac565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c9291906147cd565b60405180910390f35b348015610ca757600080fd5b50610cb06126b0565b604051610cbd9190614750565b60405180910390f35b348015610cd257600080fd5b50610ced6004803603810190610ce89190614a11565b6126b6565b604051610cfa9190614750565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614977565b61273d565b604051610d3791906146ac565b60405180910390f35b348015610d4c57600080fd5b50610d5561275d565b604051610d629190614750565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614977565b612763565b604051610d9f91906146ac565b60405180910390f35b348015610db457600080fd5b50610dcf6004803603810190610dca91906148d9565b612783565b005b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c67565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c67565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b601d5481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c67565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f0000000000000000000000009b5c8464b87c80caf5de78f23ce5520f2ff8828e73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c67565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506063601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f0000000000000000000000009b5c8464b87c80caf5de78f23ce5520f2ff8828e81565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c67565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611b64612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b82611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b611c9f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611cbd611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d38612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d56611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e7b90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea790614c67565b8015611ef45780601f10611ec957610100808354040283529160200191611ef4565b820191906000526020600020905b815481529060010190602001808311611ed757829003601f168201915b5050505050905090565b611f06612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611f24611c67565b73ffffffffffffffffffffffffffffffffffffffff1614611f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7190614a9d565b60405180910390fd5b7f0000000000000000000000009b5c8464b87c80caf5de78f23ce5520f2ff8828e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614f69565b60405180910390fd5b6120138282613a63565b5050565b60008060016000612026612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120da90614ffb565b60405180910390fd5b6120f76120ee612a3d565b85858403612a45565b600191505092915050565b600061211661210f612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612161612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661217f611c67565b73ffffffffffffffffffffffffffffffffffffffff16146121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61229d612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122bb611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123ae91906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6123ee612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661240c611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245990614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b600061253f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661255d611c67565b73ffffffffffffffffffffffffffffffffffffffff16146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa90614a9d565b60405180910390fd5b620186a060016125c161110a565b6125cb9190614aec565b6125d59190614b75565b821015612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e9061508d565b60405180910390fd5b6103e8600561262461110a565b61262e9190614aec565b6126389190614b75565b82111561267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126719061511f565b60405180910390fd5b81600c8190555060019050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b61278b612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127a9611c67565b73ffffffffffffffffffffffffffffffffffffffff16146127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f690614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a546019546128319190614e35565b61283b9190614e35565b6128459190614e35565b6018819055506063601854111561285b57600080fd5b50505050565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c67565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c67565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f0000000000000000000000009b5c8464b87c80caf5de78f23ce5520f2ff8828e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea2646970667358221220bf9c6be93f9a3f0726073a1ae9941107ea2bfefaf6489fde9d16f05d1c8313dd64736f6c634300080a0033

Deployed Bytecode Sourcemap

16051:18327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22345:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3748:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4662:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16130:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4069:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17337:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17458;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22618:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17418:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4839:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16233:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31977:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23241:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3968:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16293:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5339:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16665:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17377:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25784:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17186:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17226:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25376:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16745:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4185:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1870:103;;;;;;;;;;;;;:::i;:::-;;21453:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22876:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16403:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17073;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21200:201;;;;;;;;;;;;;:::i;:::-;;1647:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17261:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23133:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25568:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3856:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24455:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5562:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4320:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17147:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17708:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16705:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24265:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16440:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16556:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25179:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16911:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21840:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16479:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17039:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4503:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17642:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16592:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16991:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23747:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21635:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17498:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17110:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1981:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17299:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16632:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17540:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16516:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22345:265;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22484:4:::1;22476;22471:1;22455:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22454:26;;;;:::i;:::-;22453:35;;;;:::i;:::-;22443:6;:45;;22421:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;22595:6;22585;:17;;;;:::i;:::-;22568:14;:34;;;;22345:265:::0;:::o;3748:100::-;3802:13;3835:5;3828:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3748:100;:::o;4662:169::-;4745:4;4762:39;4771:12;:10;:12::i;:::-;4785:7;4794:6;4762:8;:39::i;:::-;4819:4;4812:11;;4662:169;;;;:::o;16130:51::-;;;:::o;4069:108::-;4130:7;4157:12;;4150:19;;4069:108;:::o;17337:33::-;;;;:::o;17458:::-;;;;:::o;22618:250::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22752:4:::1;22744;22739:1;22723:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22722:26;;;;:::i;:::-;22721:35;;;;:::i;:::-;22711:6;:45;;22689:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22853:6;22843;:17;;;;:::i;:::-;22831:9;:29;;;;22618:250:::0;:::o;17418:33::-;;;;:::o;4839:492::-;4979:4;4996:36;5006:6;5014:9;5025:6;4996:9;:36::i;:::-;5045:24;5072:11;:19;5084:6;5072:19;;;;;;;;;;;;;;;:33;5092:12;:10;:12::i;:::-;5072:33;;;;;;;;;;;;;;;;5045:60;;5144:6;5124:16;:26;;5116:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5231:57;5240:6;5248:12;:10;:12::i;:::-;5281:6;5262:16;:25;5231:8;:57::i;:::-;5319:4;5312:11;;;4839:492;;;;;:::o;16233:53::-;16279:6;16233:53;:::o;31977:386::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32076:9:::1;32072:284;32092:8;;:15;;32090:1;:17;32072:284;;;32127:15;32145:8;;32154:1;32145:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32127:29;;32193:4;32174:24;;:7;:24;;;;:67;;;;;32230:11;;;;;;;;;;;32219:22;;:7;:22;;;;32174:67;:121;;;;;32281:13;32262:33;;:7;:33;;;;32174:121;32171:173;;;32333:11;32314:7;:16;32322:7;32314:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;32171:173;32112:244;32108:3;;;;;:::i;:::-;;;;32072:284;;;;31977:386:::0;;;:::o;23241:498::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23450:13:::1;23432:15;:31;;;;23492:13;23474:15;:31;;;;23536:15;23516:17;:35;;;;23581:14;23562:16;:33;;;;23677:16;;23657:17;;23639:15;;23621;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;23606:12;:87;;;;23728:2;23712:12;;:18;;23704:27;;;::::0;::::1;;23241:498:::0;;;;:::o;3968:93::-;4026:5;4051:2;4044:9;;3968:93;:::o;16293:71::-;;;;;;;;;;;;;:::o;5339:215::-;5427:4;5444:80;5453:12;:10;:12::i;:::-;5467:7;5513:10;5476:11;:25;5488:12;:10;:12::i;:::-;5476:25;;;;;;;;;;;;;;;:34;5502:7;5476:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5444:8;:80::i;:::-;5542:4;5535:11;;5339:215;;;;:::o;16188:38::-;;;:::o;16665:33::-;;;;;;;;;;;;;:::o;17377:32::-;;;;:::o;25784:126::-;25850:4;25874:19;:28;25894:7;25874:28;;;;;;;;;;;;;;;;;;;;;;;;;25867:35;;25784:126;;;:::o;17186:31::-;;;;:::o;17226:28::-;;;;:::o;25376:184::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25496:16:::1;;;;;;;;;;;25461:52;;25485:9;25461:52;;;;;;;;;;;;25543:9;25524:16;;:28;;;;;;;;;;;;;;;;;;25376:184:::0;:::o;16745:31::-;;;;;;;;;;;;;:::o;4185:127::-;4259:7;4286:9;:18;4296:7;4286:18;;;;;;;;;;;;;;;;4279:25;;4185:127;;;:::o;1870:103::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1935:30:::1;1962:1;1935:18;:30::i;:::-;1870:103::o:0;21453:121::-;21505:4;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21539:5:::1;21522:14;;:22;;;;;;;;;;;;;;;;;;21562:4;21555:11;;21453:121:::0;:::o;22876:161::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23025:4:::1;22989:25;:33;23015:6;22989:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22876:161:::0;;:::o;16403:30::-;;;;;;;;;;;;;:::o;17073:::-;;;;:::o;21200:201::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21264:13:::1;;;;;;;;;;;21263:14;21255:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;21323:4;21307:13;;:20;;;;;;;;;;;;;;;;;;21352:12;21338:11;:26;;;;21389:4;21375:11;;:18;;;;;;;;;;;;;;;;;;21200:201::o:0;1647:87::-;1693:7;1720:6;;;;;;;;;;;1713:13;;1647:87;:::o;17261:31::-;;;;:::o;23133:100::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:7:::1;23204:11;;:21;;;;;;;;;;;;;;;;;;23133:100:::0;:::o;25568:208::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25705:15:::1;;;;;;;;;;;25662:59;;25685:18;25662:59;;;;;;;;;;;;25750:18;25732:15;;:36;;;;;;;;;;;;;;;;;;25568:208:::0;:::o;3856:104::-;3912:13;3945:7;3938:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:104;:::o;24455:304::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24599:13:::1;24591:21;;:4;:21;;;;24569:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;24710:41;24739:4;24745:5;24710:28;:41::i;:::-;24455:304:::0;;:::o;5562:413::-;5655:4;5672:24;5699:11;:25;5711:12;:10;:12::i;:::-;5699:25;;;;;;;;;;;;;;;:34;5725:7;5699:34;;;;;;;;;;;;;;;;5672:61;;5772:15;5752:16;:35;;5744:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5865:67;5874:12;:10;:12::i;:::-;5888:7;5916:15;5897:16;:34;5865:8;:67::i;:::-;5963:4;5956:11;;;5562:413;;;;:::o;4320:175::-;4406:4;4423:42;4433:12;:10;:12::i;:::-;4447:9;4458:6;4423:9;:42::i;:::-;4483:4;4476:11;;4320:175;;;;:::o;17147:32::-;;;;:::o;17708:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16705:33::-;;;;;;;;;;;;;:::o;24963:208::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25100:15:::1;;;;;;;;;;;25057:59;;25080:18;25057:59;;;;;;;;;;;;25145:18;25127:15;;:36;;;;;;;;;;;;;;;;;;24963:208:::0;:::o;24265:182::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24381:8:::1;24350:19;:28;24370:7;24350:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24421:7;24405:34;;;24430:8;24405:34;;;;;;:::i;:::-;;;;;;;;24265:182:::0;;:::o;16440:32::-;;;;;;;;;;;;;:::o;16556:29::-;;;;:::o;25179:189::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:17:::1;;;;;;;;;;;25266:54;;25291:9;25266:54;;;;;;;;;;;;25351:9;25331:17;;:29;;;;;;;;;;;;;;;;;;25179:189:::0;:::o;16911:39::-;;;;;;;;;;;;;:::o;21840:497::-;21948:4;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22027:6:::1;22022:1;22006:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22005:28;;;;:::i;:::-;21992:9;:41;;21970:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;22182:4;22177:1;22161:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22160:26;;;;:::i;:::-;22147:9;:39;;22125:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;22298:9;22277:18;:30;;;;22325:4;22318:11;;21840:497:::0;;;:::o;16479:30::-;;;;;;;;;;;;;:::o;17039:27::-;;;;:::o;4503:151::-;4592:7;4619:11;:18;4631:5;4619:18;;;;;;;;;;;;;;;:27;4638:7;4619:27;;;;;;;;;;;;;;;;4612:34;;4503:151;;;;:::o;17642:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16592:33::-;;;;:::o;16991:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;23747:510::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23958:13:::1;23939:16;:32;;;;24001:13;23982:16;:32;;;;24046:15;24025:18;:36;;;;24092:14;24072:17;:34;;;;24192:17;;24171:18;;24152:16;;24133;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;24117:13;:92;;;;24245:2;24228:13;;:19;;24220:28;;;::::0;::::1;;23747:510:::0;;;;:::o;21635:135::-;21695:4;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21735:5:::1;21712:20;;:28;;;;;;;;;;;;;;;;;;21758:4;21751:11;;21635:135:::0;:::o;17498:35::-;;;;:::o;17110:30::-;;;;:::o;1981:201::-;1793:12;:10;:12::i;:::-;1782:23;;:7;:5;:7::i;:::-;:23;;;1774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2090:1:::1;2070:22;;:8;:22;;;;2062:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2146:28;2165:8;2146:18;:28::i;:::-;1981:201:::0;:::o;17299:31::-;;;;:::o;16632:24::-;;;;:::o;17540:34::-;;;;:::o;16516:31::-;;;;;;;;;;;;;:::o;1193:98::-;1246:7;1273:10;1266:17;;1193:98;:::o;7730:380::-;7883:1;7866:19;;:5;:19;;;;7858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7964:1;7945:21;;:7;:21;;;;7937:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8048:6;8018:11;:18;8030:5;8018:18;;;;;;;;;;;;;;;:27;8037:7;8018:27;;;;;;;;;;;;;;;:36;;;;8086:7;8070:32;;8079:5;8070:32;;;8095:6;8070:32;;;;;;:::i;:::-;;;;;;;;7730:380;;;:::o;25918:4925::-;26066:1;26050:18;;:4;:18;;;;26042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26143:1;26129:16;;:2;:16;;;;26121:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26205:7;:13;26213:4;26205:13;;;;;;;;;;;;;;;;;;;;;;;;;26204:14;26196:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26264:1;26254:6;:11;26250:93;;;26282:28;26298:4;26304:2;26308:1;26282:15;:28::i;:::-;26325:7;;26250:93;26359:14;;;;;;;;;;;26355:2445;;;26420:7;:5;:7::i;:::-;26412:15;;:4;:15;;;;:49;;;;;26454:7;:5;:7::i;:::-;26448:13;;:2;:13;;;;26412:49;:86;;;;;26496:1;26482:16;;:2;:16;;;;26412:86;:128;;;;;26533:6;26519:21;;:2;:21;;;;26412:128;:158;;;;;26562:8;;;;;;;;;;;26561:9;26412:158;26390:2399;;;26610:13;;;;;;;;;;;26605:223;;26682:19;:25;26702:4;26682:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26711:19;:23;26731:2;26711:23;;;;;;;;;;;;;;;;;;;;;;;;;26682:52;26648:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26605:223;26984:20;;;;;;;;;;;26980:641;;;27065:7;:5;:7::i;:::-;27059:13;;:2;:13;;;;:72;;;;;27115:15;27101:30;;:2;:30;;;;27059:72;:129;;;;;27174:13;27160:28;;:2;:28;;;;27059:129;27029:573;;;27352:12;27277:28;:39;27306:9;27277:39;;;;;;;;;;;;;;;;:87;27239:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;27566:12;27524:28;:39;27553:9;27524:39;;;;;;;;;;;;;;;:54;;;;27029:573;26980:641;27695:25;:31;27721:4;27695:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27752:25;:29;27778:2;27752:29;;;;;;;;;;;;;;;;;;;;;;;;;27751:30;27695:86;27669:1105;;;27868:14;;27858:6;:24;;27824:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;28064:9;;28047:13;28057:2;28047:9;:13::i;:::-;28038:6;:22;;;;:::i;:::-;:35;;28004:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27669:1105;;;28242:25;:29;28268:2;28242:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;28297:25;:31;28323:4;28297:31;;;;;;;;;;;;;;;;;;;;;;;;;28296:32;28242:86;28216:558;;;28415:14;;28405:6;:24;;28371:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;28216:558;;;28560:25;:29;28586:2;28560:29;;;;;;;;;;;;;;;;;;;;;;;;;28555:219;;28674:9;;28657:13;28667:2;28657:9;:13::i;:::-;28648:6;:22;;;;:::i;:::-;:35;;28614:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28555:219;28216:558;27669:1105;26390:2399;26355:2445;28812:28;28843:24;28861:4;28843:9;:24::i;:::-;28812:55;;28880:12;28919:18;;28895:20;:42;;28880:57;;28968:7;:35;;;;;28992:11;;;;;;;;;;;28968:35;:61;;;;;29021:8;;;;;;;;;;;29020:9;28968:61;:110;;;;;29047:25;:31;29073:4;29047:31;;;;;;;;;;;;;;;;;;;;;;;;;29046:32;28968:110;:153;;;;;29096:19;:25;29116:4;29096:25;;;;;;;;;;;;;;;;;;;;;;;;;29095:26;28968:153;:194;;;;;29139:19;:23;29159:2;29139:23;;;;;;;;;;;;;;;;;;;;;;;;;29138:24;28968:194;28950:326;;;29200:4;29189:8;;:15;;;;;;;;;;;;;;;;;;29221:10;:8;:10::i;:::-;29259:5;29248:8;;:16;;;;;;;;;;;;;;;;;;28950:326;29288:12;29304:8;;;;;;;;;;;29303:9;29288:24;;29414:19;:25;29434:4;29414:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29443:19;:23;29463:2;29443:23;;;;;;;;;;;;;;;;;;;;;;;;;29414:52;29410:100;;;29493:5;29483:15;;29410:100;29522:12;29627:7;29623:1167;;;29679:25;:29;29705:2;29679:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29728:1;29712:13;;:17;29679:50;29675:966;;;29757:34;29787:3;29757:25;29768:13;;29757:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29750:41;;29860:13;;29840:16;;29833:4;:23;;;;:::i;:::-;29832:41;;;;:::i;:::-;29810:18;;:63;;;;;;;:::i;:::-;;;;;;;;29946:13;;29924:18;;29917:4;:25;;;;:::i;:::-;29916:43;;;;:::i;:::-;29892:20;;:67;;;;;;;:::i;:::-;;;;;;;;30028:13;;30008:16;;30001:4;:23;;;;:::i;:::-;30000:41;;;;:::i;:::-;29978:18;;:63;;;;;;;:::i;:::-;;;;;;;;30112:13;;30091:17;;30084:4;:24;;;;:::i;:::-;30083:42;;;;:::i;:::-;30060:19;;:65;;;;;;;:::i;:::-;;;;;;;;29675:966;;;30187:25;:31;30213:4;30187:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30237:1;30222:12;;:16;30187:51;30183:458;;;30266:33;30295:3;30266:24;30277:12;;30266:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30259:40;;30367:12;;30348:15;;30341:4;:22;;;;:::i;:::-;30340:39;;;;:::i;:::-;30318:18;;:61;;;;;;;:::i;:::-;;;;;;;;30451:12;;30430:17;;30423:4;:24;;;;:::i;:::-;30422:41;;;;:::i;:::-;30398:20;;:65;;;;;;;:::i;:::-;;;;;;;;30531:12;;30512:15;;30505:4;:22;;;;:::i;:::-;30504:39;;;;:::i;:::-;30482:18;;:61;;;;;;;:::i;:::-;;;;;;;;30613:12;;30593:16;;30586:4;:23;;;;:::i;:::-;30585:40;;;;:::i;:::-;30562:19;;:63;;;;;;;:::i;:::-;;;;;;;;30183:458;29675:966;30668:1;30661:4;:8;30657:91;;;30690:42;30706:4;30720;30727;30690:15;:42::i;:::-;30657:91;30774:4;30764:14;;;;;:::i;:::-;;;29623:1167;30802:33;30818:4;30824:2;30828:6;30802:15;:33::i;:::-;26031:4812;;;;25918:4925;;;;:::o;2190:191::-;2264:16;2283:6;;;;;;;;;;;2264:25;;2309:8;2300:6;;:17;;;;;;;;;;;;;;;;;;2364:8;2333:40;;2354:8;2333:40;;;;;;;;;;;;2253:128;2190:191;:::o;24767:188::-;24884:5;24850:25;:31;24876:4;24850:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24941:5;24907:40;;24935:4;24907:40;;;;;;;;;;;;24767:188;;:::o;5983:733::-;6141:1;6123:20;;:6;:20;;;;6115:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6225:1;6204:23;;:9;:23;;;;6196:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6280:47;6301:6;6309:9;6320:6;6280:20;:47::i;:::-;6340:21;6364:9;:17;6374:6;6364:17;;;;;;;;;;;;;;;;6340:41;;6417:6;6400:13;:23;;6392:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6538:6;6522:13;:22;6502:9;:17;6512:6;6502:17;;;;;;;;;;;;;;;:42;;;;6590:6;6566:9;:20;6576:9;6566:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6631:9;6614:35;;6623:6;6614:35;;;6642:6;6614:35;;;;;;:::i;:::-;;;;;;;;6662:46;6682:6;6690:9;6701:6;6662:19;:46::i;:::-;6104:612;5983:733;;;:::o;32371:2004::-;32410:23;32436:24;32454:4;32436:9;:24::i;:::-;32410:50;;32471:25;32603:19;;32567:20;;32533:18;;32499;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32471:151;;32633:12;32681:1;32662:15;:20;:46;;;;32707:1;32686:17;:22;32662:46;32658:85;;;32725:7;;;;;32658:85;32798:2;32777:18;;:23;;;;:::i;:::-;32759:15;:41;32755:115;;;32856:2;32835:18;;:23;;;;:::i;:::-;32817:41;;32755:115;32931:23;33018:1;32998:17;32976:18;;32958:15;:36;;;;:::i;:::-;32957:58;;;;:::i;:::-;:62;;;;:::i;:::-;32931:88;;33030:26;33059:36;33079:15;33059;:19;;:36;;;;:::i;:::-;33030:65;;33108:25;33136:21;33108:49;;33170:36;33187:18;33170:16;:36::i;:::-;33219:18;33240:44;33266:17;33240:21;:25;;:44;;;;:::i;:::-;33219:65;;33297:23;33323:57;33362:17;33323:34;33338:18;;33323:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;33297:83;;33391:25;33419:59;33460:17;33419:36;33434:20;;33419:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;33391:87;;33489:24;33516:58;33556:17;33516:35;33531:19;;33516:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;33489:85;;33587:23;33664:16;33644:17;33626:15;33613:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;33587:93;;33714:1;33693:18;:22;;;;33747:1;33726:18;:22;;;;33782:1;33759:20;:24;;;;33816:1;33794:19;:23;;;;33852:17;;;;;;;;;;;33844:31;;33883:17;33844:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33830:75;;;;;33940:1;33922:15;:19;:42;;;;;33963:1;33945:15;:19;33922:42;33918:278;;;33981:46;33994:15;34011;33981:12;:46::i;:::-;34047:137;34080:18;34117:15;34151:18;;34047:137;;;;;;;;:::i;:::-;;;;;;;;33918:278;34228:16;;;;;;;;;;;34220:30;;34258:16;34220:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34206:73;;;;;34312:15;;;;;;;;;;;34304:29;;34341:21;34304:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34290:77;;;;;32399:1976;;;;;;;;;;;32371:2004;:::o;9736:98::-;9794:7;9825:1;9821;:5;;;;:::i;:::-;9814:12;;9736:98;;;;:::o;9842:::-;9900:7;9931:1;9927;:5;;;;:::i;:::-;9920:12;;9842:98;;;;:::o;8118:125::-;;;;:::o;8251:124::-;;;;:::o;9630:98::-;9688:7;9719:1;9715;:5;;;;:::i;:::-;9708:12;;9630:98;;;;:::o;30851:589::-;30977:21;31015:1;31001:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30977:40;;31046:4;31028;31033:1;31028:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31072:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31062:4;31067:1;31062:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31107:62;31124:4;31139:15;31157:11;31107:8;:62::i;:::-;31208:15;:66;;;31289:11;31315:1;31359:4;31386;31406:15;31208:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30906:534;30851:589;:::o;31448:521::-;31596:62;31613:4;31628:15;31646:11;31596:8;:62::i;:::-;31701:15;:31;;;31740:9;31773:4;31793:11;31819:1;31862;31905:15;;;;;;;;;;;31935;31701:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31448:521;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:117::-;6245:1;6242;6235:12;6259:117;6368:1;6365;6358:12;6382:117;6491:1;6488;6481:12;6522:568;6595:8;6605:6;6655:3;6648:4;6640:6;6636:17;6632:27;6622:122;;6663:79;;:::i;:::-;6622:122;6776:6;6763:20;6753:30;;6806:18;6798:6;6795:30;6792:117;;;6828:79;;:::i;:::-;6792:117;6942:4;6934:6;6930:17;6918:29;;6996:3;6988:4;6980:6;6976:17;6966:8;6962:32;6959:41;6956:128;;;7003:79;;:::i;:::-;6956:128;6522:568;;;;;:::o;7096:116::-;7166:21;7181:5;7166:21;:::i;:::-;7159:5;7156:32;7146:60;;7202:1;7199;7192:12;7146:60;7096:116;:::o;7218:133::-;7261:5;7299:6;7286:20;7277:29;;7315:30;7339:5;7315:30;:::i;:::-;7218:133;;;;:::o;7357:698::-;7449:6;7457;7465;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7833:80;7905:7;7896:6;7885:9;7881:22;7833:80;:::i;:::-;7815:98;;;;7611:312;7962:2;7988:50;8030:7;8021:6;8010:9;8006:22;7988:50;:::i;:::-;7978:60;;7933:115;7357:698;;;;;:::o;8061:765::-;8147:6;8155;8163;8171;8220:3;8208:9;8199:7;8195:23;8191:33;8188:120;;;8227:79;;:::i;:::-;8188:120;8347:1;8372:53;8417:7;8408:6;8397:9;8393:22;8372:53;:::i;:::-;8362:63;;8318:117;8474:2;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8445:118;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8061:765;;;;;;;:::o;8832:86::-;8867:7;8907:4;8900:5;8896:16;8885:27;;8832:86;;;:::o;8924:112::-;9007:22;9023:5;9007:22;:::i;:::-;9002:3;8995:35;8924:112;;:::o;9042:214::-;9131:4;9169:2;9158:9;9154:18;9146:26;;9182:67;9246:1;9235:9;9231:17;9222:6;9182:67;:::i;:::-;9042:214;;;;:::o;9262:329::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:53;9566:7;9557:6;9546:9;9542:22;9521:53;:::i;:::-;9511:63;;9467:117;9262:329;;;;:::o;9597:468::-;9662:6;9670;9719:2;9707:9;9698:7;9694:23;9690:32;9687:119;;;9725:79;;:::i;:::-;9687:119;9845:1;9870:53;9915:7;9906:6;9895:9;9891:22;9870:53;:::i;:::-;9860:63;;9816:117;9972:2;9998:50;10040:7;10031:6;10020:9;10016:22;9998:50;:::i;:::-;9988:60;;9943:115;9597:468;;;;;:::o;10071:323::-;10127:6;10176:2;10164:9;10155:7;10151:23;10147:32;10144:119;;;10182:79;;:::i;:::-;10144:119;10302:1;10327:50;10369:7;10360:6;10349:9;10345:22;10327:50;:::i;:::-;10317:60;;10273:114;10071:323;;;;:::o;10400:474::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10651:1;10676:53;10721:7;10712:6;10701:9;10697:22;10676:53;:::i;:::-;10666:63;;10622:117;10778:2;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10749:118;10400:474;;;;;:::o;10880:182::-;11020:34;11016:1;11008:6;11004:14;10997:58;10880:182;:::o;11068:366::-;11210:3;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11307:93;11396:3;11307:93;:::i;:::-;11425:2;11420:3;11416:12;11409:19;;11068:366;;;:::o;11440:419::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:131;11847:4;11721:131;:::i;:::-;11713:139;;11440:419;;;:::o;11865:180::-;11913:77;11910:1;11903:88;12010:4;12007:1;12000:15;12034:4;12031:1;12024:15;12051:348;12091:7;12114:20;12132:1;12114:20;:::i;:::-;12109:25;;12148:20;12166:1;12148:20;:::i;:::-;12143:25;;12336:1;12268:66;12264:74;12261:1;12258:81;12253:1;12246:9;12239:17;12235:105;12232:131;;;12343:18;;:::i;:::-;12232:131;12391:1;12388;12384:9;12373:20;;12051:348;;;;:::o;12405:180::-;12453:77;12450:1;12443:88;12550:4;12547:1;12540:15;12574:4;12571:1;12564:15;12591:185;12631:1;12648:20;12666:1;12648:20;:::i;:::-;12643:25;;12682:20;12700:1;12682:20;:::i;:::-;12677:25;;12721:1;12711:35;;12726:18;;:::i;:::-;12711:35;12768:1;12765;12761:9;12756:14;;12591:185;;;;:::o;12782:228::-;12922:34;12918:1;12910:6;12906:14;12899:58;12991:11;12986:2;12978:6;12974:15;12967:36;12782:228;:::o;13016:366::-;13158:3;13179:67;13243:2;13238:3;13179:67;:::i;:::-;13172:74;;13255:93;13344:3;13255:93;:::i;:::-;13373:2;13368:3;13364:12;13357:19;;13016:366;;;:::o;13388:419::-;13554:4;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13388:419;;;:::o;13813:180::-;13861:77;13858:1;13851:88;13958:4;13955:1;13948:15;13982:4;13979:1;13972:15;13999:320;14043:6;14080:1;14074:4;14070:12;14060:22;;14127:1;14121:4;14117:12;14148:18;14138:81;;14204:4;14196:6;14192:17;14182:27;;14138:81;14266:2;14258:6;14255:14;14235:18;14232:38;14229:84;;;14285:18;;:::i;:::-;14229:84;14050:269;13999:320;;;:::o;14325:223::-;14465:34;14461:1;14453:6;14449:14;14442:58;14534:6;14529:2;14521:6;14517:15;14510:31;14325:223;:::o;14554:366::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:419::-;15092:4;15130:2;15119:9;15115:18;15107:26;;15179:9;15173:4;15169:20;15165:1;15154:9;15150:17;15143:47;15207:131;15333:4;15207:131;:::i;:::-;15199:139;;14926:419;;;:::o;15351:227::-;15491:34;15487:1;15479:6;15475:14;15468:58;15560:10;15555:2;15547:6;15543:15;15536:35;15351:227;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:419::-;16122:4;16160:2;16149:9;16145:18;16137:26;;16209:9;16203:4;16199:20;16195:1;16184:9;16180:17;16173:47;16237:131;16363:4;16237:131;:::i;:::-;16229:139;;15956:419;;;:::o;16381:180::-;16429:77;16426:1;16419:88;16526:4;16523:1;16516:15;16550:4;16547:1;16540:15;16567:233;16606:3;16629:24;16647:5;16629:24;:::i;:::-;16620:33;;16675:66;16668:5;16665:77;16662:103;;;16745:18;;:::i;:::-;16662:103;16792:1;16785:5;16781:13;16774:20;;16567:233;;;:::o;16806:305::-;16846:3;16865:20;16883:1;16865:20;:::i;:::-;16860:25;;16899:20;16917:1;16899:20;:::i;:::-;16894:25;;17053:1;16985:66;16981:74;16978:1;16975:81;16972:107;;;17059:18;;:::i;:::-;16972:107;17103:1;17100;17096:9;17089:16;;16806:305;;;;:::o;17117:164::-;17257:16;17253:1;17245:6;17241:14;17234:40;17117:164;:::o;17287:366::-;17429:3;17450:67;17514:2;17509:3;17450:67;:::i;:::-;17443:74;;17526:93;17615:3;17526:93;:::i;:::-;17644:2;17639:3;17635:12;17628:19;;17287:366;;;:::o;17659:419::-;17825:4;17863:2;17852:9;17848:18;17840:26;;17912:9;17906:4;17902:20;17898:1;17887:9;17883:17;17876:47;17940:131;18066:4;17940:131;:::i;:::-;17932:139;;17659:419;;;:::o;18084:244::-;18224:34;18220:1;18212:6;18208:14;18201:58;18293:27;18288:2;18280:6;18276:15;18269:52;18084:244;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:224::-;19271:34;19267:1;19259:6;19255:14;19248:58;19340:7;19335:2;19327:6;19323:15;19316:32;19131:224;:::o;19361:366::-;19503:3;19524:67;19588:2;19583:3;19524:67;:::i;:::-;19517:74;;19600:93;19689:3;19600:93;:::i;:::-;19718:2;19713:3;19709:12;19702:19;;19361:366;;;:::o;19733:419::-;19899:4;19937:2;19926:9;19922:18;19914:26;;19986:9;19980:4;19976:20;19972:1;19961:9;19957:17;19950:47;20014:131;20140:4;20014:131;:::i;:::-;20006:139;;19733:419;;;:::o;20158:240::-;20298:34;20294:1;20286:6;20282:14;20275:58;20367:23;20362:2;20354:6;20350:15;20343:48;20158:240;:::o;20404:366::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:419::-;20942:4;20980:2;20969:9;20965:18;20957:26;;21029:9;21023:4;21019:20;21015:1;21004:9;21000:17;20993:47;21057:131;21183:4;21057:131;:::i;:::-;21049:139;;20776:419;;;:::o;21201:239::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:22;21405:2;21397:6;21393:15;21386:47;21201:239;:::o;21446:366::-;21588:3;21609:67;21673:2;21668:3;21609:67;:::i;:::-;21602:74;;21685:93;21774:3;21685:93;:::i;:::-;21803:2;21798:3;21794:12;21787:19;;21446:366;;;:::o;21818:419::-;21984:4;22022:2;22011:9;22007:18;21999:26;;22071:9;22065:4;22061:20;22057:1;22046:9;22042:17;22035:47;22099:131;22225:4;22099:131;:::i;:::-;22091:139;;21818:419;;;:::o;22243:225::-;22383:34;22379:1;22371:6;22367:14;22360:58;22452:8;22447:2;22439:6;22435:15;22428:33;22243:225;:::o;22474:366::-;22616:3;22637:67;22701:2;22696:3;22637:67;:::i;:::-;22630:74;;22713:93;22802:3;22713:93;:::i;:::-;22831:2;22826:3;22822:12;22815:19;;22474:366;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;22846:419;;;:::o;23271:223::-;23411:34;23407:1;23399:6;23395:14;23388:58;23480:6;23475:2;23467:6;23463:15;23456:31;23271:223;:::o;23500:366::-;23642:3;23663:67;23727:2;23722:3;23663:67;:::i;:::-;23656:74;;23739:93;23828:3;23739:93;:::i;:::-;23857:2;23852:3;23848:12;23841:19;;23500:366;;;:::o;23872:419::-;24038:4;24076:2;24065:9;24061:18;24053:26;;24125:9;24119:4;24115:20;24111:1;24100:9;24096:17;24089:47;24153:131;24279:4;24153:131;:::i;:::-;24145:139;;23872:419;;;:::o;24297:221::-;24437:34;24433:1;24425:6;24421:14;24414:58;24506:4;24501:2;24493:6;24489:15;24482:29;24297:221;:::o;24524:366::-;24666:3;24687:67;24751:2;24746:3;24687:67;:::i;:::-;24680:74;;24763:93;24852:3;24763:93;:::i;:::-;24881:2;24876:3;24872:12;24865:19;;24524:366;;;:::o;24896:419::-;25062:4;25100:2;25089:9;25085:18;25077:26;;25149:9;25143:4;25139:20;25135:1;25124:9;25120:17;25113:47;25177:131;25303:4;25177:131;:::i;:::-;25169:139;;24896:419;;;:::o;25321:224::-;25461:34;25457:1;25449:6;25445:14;25438:58;25530:7;25525:2;25517:6;25513:15;25506:32;25321:224;:::o;25551:366::-;25693:3;25714:67;25778:2;25773:3;25714:67;:::i;:::-;25707:74;;25790:93;25879:3;25790:93;:::i;:::-;25908:2;25903:3;25899:12;25892:19;;25551:366;;;:::o;25923:419::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26176:9;26170:4;26166:20;26162:1;26151:9;26147:17;26140:47;26204:131;26330:4;26204:131;:::i;:::-;26196:139;;25923:419;;;:::o;26348:222::-;26488:34;26484:1;26476:6;26472:14;26465:58;26557:5;26552:2;26544:6;26540:15;26533:30;26348:222;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:164::-;27513:16;27509:1;27501:6;27497:14;27490:40;27373:164;:::o;27543:366::-;27685:3;27706:67;27770:2;27765:3;27706:67;:::i;:::-;27699:74;;27782:93;27871:3;27782:93;:::i;:::-;27900:2;27895:3;27891:12;27884:19;;27543:366;;;:::o;27915:419::-;28081:4;28119:2;28108:9;28104:18;28096:26;;28168:9;28162:4;28158:20;28154:1;28143:9;28139:17;28132:47;28196:131;28322:4;28196:131;:::i;:::-;28188:139;;27915:419;;;:::o;28340:172::-;28480:24;28476:1;28468:6;28464:14;28457:48;28340:172;:::o;28518:366::-;28660:3;28681:67;28745:2;28740:3;28681:67;:::i;:::-;28674:74;;28757:93;28846:3;28757:93;:::i;:::-;28875:2;28870:3;28866:12;28859:19;;28518:366;;;:::o;28890:419::-;29056:4;29094:2;29083:9;29079:18;29071:26;;29143:9;29137:4;29133:20;29129:1;29118:9;29114:17;29107:47;29171:131;29297:4;29171:131;:::i;:::-;29163:139;;28890:419;;;:::o;29315:297::-;29455:34;29451:1;29443:6;29439:14;29432:58;29524:34;29519:2;29511:6;29507:15;29500:59;29593:11;29588:2;29580:6;29576:15;29569:36;29315:297;:::o;29618:366::-;29760:3;29781:67;29845:2;29840:3;29781:67;:::i;:::-;29774:74;;29857:93;29946:3;29857:93;:::i;:::-;29975:2;29970:3;29966:12;29959:19;;29618:366;;;:::o;29990:419::-;30156:4;30194:2;30183:9;30179:18;30171:26;;30243:9;30237:4;30233:20;30229:1;30218:9;30214:17;30207:47;30271:131;30397:4;30271:131;:::i;:::-;30263:139;;29990:419;;;:::o;30415:234::-;30555:34;30551:1;30543:6;30539:14;30532:58;30624:17;30619:2;30611:6;30607:15;30600:42;30415:234;:::o;30655:366::-;30797:3;30818:67;30882:2;30877:3;30818:67;:::i;:::-;30811:74;;30894:93;30983:3;30894:93;:::i;:::-;31012:2;31007:3;31003:12;30996:19;;30655:366;;;:::o;31027:419::-;31193:4;31231:2;31220:9;31216:18;31208:26;;31280:9;31274:4;31270:20;31266:1;31255:9;31251:17;31244:47;31308:131;31434:4;31308:131;:::i;:::-;31300:139;;31027:419;;;:::o;31452:169::-;31592:21;31588:1;31580:6;31576:14;31569:45;31452:169;:::o;31627:366::-;31769:3;31790:67;31854:2;31849:3;31790:67;:::i;:::-;31783:74;;31866:93;31955:3;31866:93;:::i;:::-;31984:2;31979:3;31975:12;31968:19;;31627:366;;;:::o;31999:419::-;32165:4;32203:2;32192:9;32188:18;32180:26;;32252:9;32246:4;32242:20;32238:1;32227:9;32223:17;32216:47;32280:131;32406:4;32280:131;:::i;:::-;32272:139;;31999:419;;;:::o;32424:235::-;32564:34;32560:1;32552:6;32548:14;32541:58;32633:18;32628:2;32620:6;32616:15;32609:43;32424:235;:::o;32665:366::-;32807:3;32828:67;32892:2;32887:3;32828:67;:::i;:::-;32821:74;;32904:93;32993:3;32904:93;:::i;:::-;33022:2;33017:3;33013:12;33006:19;;32665:366;;;:::o;33037:419::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:191::-;33502:4;33522:20;33540:1;33522:20;:::i;:::-;33517:25;;33556:20;33574:1;33556:20;:::i;:::-;33551:25;;33595:1;33592;33589:8;33586:34;;;33600:18;;:::i;:::-;33586:34;33645:1;33642;33638:9;33630:17;;33462:191;;;;:::o;33659:225::-;33799:34;33795:1;33787:6;33783:14;33776:58;33868:8;33863:2;33855:6;33851:15;33844:33;33659:225;:::o;33890:366::-;34032:3;34053:67;34117:2;34112:3;34053:67;:::i;:::-;34046:74;;34129:93;34218:3;34129:93;:::i;:::-;34247:2;34242:3;34238:12;34231:19;;33890:366;;;:::o;34262:419::-;34428:4;34466:2;34455:9;34451:18;34443:26;;34515:9;34509:4;34505:20;34501:1;34490:9;34486:17;34479:47;34543:131;34669:4;34543:131;:::i;:::-;34535:139;;34262:419;;;:::o;34687:147::-;34788:11;34825:3;34810:18;;34687:147;;;;:::o;34840:114::-;;:::o;34960:398::-;35119:3;35140:83;35221:1;35216:3;35140:83;:::i;:::-;35133:90;;35232:93;35321:3;35232:93;:::i;:::-;35350:1;35345:3;35341:11;35334:18;;34960:398;;;:::o;35364:379::-;35548:3;35570:147;35713:3;35570:147;:::i;:::-;35563:154;;35734:3;35727:10;;35364:379;;;:::o;35749:442::-;35898:4;35936:2;35925:9;35921:18;35913:26;;35949:71;36017:1;36006:9;36002:17;35993:6;35949:71;:::i;:::-;36030:72;36098:2;36087:9;36083:18;36074:6;36030:72;:::i;:::-;36112;36180:2;36169:9;36165:18;36156:6;36112:72;:::i;:::-;35749:442;;;;;;:::o;36197:180::-;36245:77;36242:1;36235:88;36342:4;36339:1;36332:15;36366:4;36363:1;36356:15;36383:143;36440:5;36471:6;36465:13;36456:22;;36487:33;36514:5;36487:33;:::i;:::-;36383:143;;;;:::o;36532:351::-;36602:6;36651:2;36639:9;36630:7;36626:23;36622:32;36619:119;;;36657:79;;:::i;:::-;36619:119;36777:1;36802:64;36858:7;36849:6;36838:9;36834:22;36802:64;:::i;:::-;36792:74;;36748:128;36532:351;;;;:::o;36889:85::-;36934:7;36963:5;36952:16;;36889:85;;;:::o;36980:158::-;37038:9;37071:61;37089:42;37098:32;37124:5;37098:32;:::i;:::-;37089:42;:::i;:::-;37071:61;:::i;:::-;37058:74;;36980:158;;;:::o;37144:147::-;37239:45;37278:5;37239:45;:::i;:::-;37234:3;37227:58;37144:147;;:::o;37297:114::-;37364:6;37398:5;37392:12;37382:22;;37297:114;;;:::o;37417:184::-;37516:11;37550:6;37545:3;37538:19;37590:4;37585:3;37581:14;37566:29;;37417:184;;;;:::o;37607:132::-;37674:4;37697:3;37689:11;;37727:4;37722:3;37718:14;37710:22;;37607:132;;;:::o;37745:108::-;37822:24;37840:5;37822:24;:::i;:::-;37817:3;37810:37;37745:108;;:::o;37859:179::-;37928:10;37949:46;37991:3;37983:6;37949:46;:::i;:::-;38027:4;38022:3;38018:14;38004:28;;37859:179;;;;:::o;38044:113::-;38114:4;38146;38141:3;38137:14;38129:22;;38044:113;;;:::o;38193:732::-;38312:3;38341:54;38389:5;38341:54;:::i;:::-;38411:86;38490:6;38485:3;38411:86;:::i;:::-;38404:93;;38521:56;38571:5;38521:56;:::i;:::-;38600:7;38631:1;38616:284;38641:6;38638:1;38635:13;38616:284;;;38717:6;38711:13;38744:63;38803:3;38788:13;38744:63;:::i;:::-;38737:70;;38830:60;38883:6;38830:60;:::i;:::-;38820:70;;38676:224;38663:1;38660;38656:9;38651:14;;38616:284;;;38620:14;38916:3;38909:10;;38317:608;;;38193:732;;;;:::o;38931:831::-;39194:4;39232:3;39221:9;39217:19;39209:27;;39246:71;39314:1;39303:9;39299:17;39290:6;39246:71;:::i;:::-;39327:80;39403:2;39392:9;39388:18;39379:6;39327:80;:::i;:::-;39454:9;39448:4;39444:20;39439:2;39428:9;39424:18;39417:48;39482:108;39585:4;39576:6;39482:108;:::i;:::-;39474:116;;39600:72;39668:2;39657:9;39653:18;39644:6;39600:72;:::i;:::-;39682:73;39750:3;39739:9;39735:19;39726:6;39682:73;:::i;:::-;38931:831;;;;;;;;:::o;39768:807::-;40017:4;40055:3;40044:9;40040:19;40032:27;;40069:71;40137:1;40126:9;40122:17;40113:6;40069:71;:::i;:::-;40150:72;40218:2;40207:9;40203:18;40194:6;40150:72;:::i;:::-;40232:80;40308:2;40297:9;40293:18;40284:6;40232:80;:::i;:::-;40322;40398:2;40387:9;40383:18;40374:6;40322:80;:::i;:::-;40412:73;40480:3;40469:9;40465:19;40456:6;40412:73;:::i;:::-;40495;40563:3;40552:9;40548:19;40539:6;40495:73;:::i;:::-;39768:807;;;;;;;;;:::o;40581:143::-;40638:5;40669:6;40663:13;40654:22;;40685:33;40712:5;40685:33;:::i;:::-;40581:143;;;;:::o;40730:663::-;40818:6;40826;40834;40883:2;40871:9;40862:7;40858:23;40854:32;40851:119;;;40889:79;;:::i;:::-;40851:119;41009:1;41034:64;41090:7;41081:6;41070:9;41066:22;41034:64;:::i;:::-;41024:74;;40980:128;41147:2;41173:64;41229:7;41220:6;41209:9;41205:22;41173:64;:::i;:::-;41163:74;;41118:129;41286:2;41312:64;41368:7;41359:6;41348:9;41344:22;41312:64;:::i;:::-;41302:74;;41257:129;40730:663;;;;;:::o

Swarm Source

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