ETH Price: $3,049.67 (+1.14%)
Gas: 3 Gwei

Token

MINER AI BOT (MAB)
 

Overview

Max Total Supply

100,000,000 MAB

Holders

72

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MinerAIBot

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Website     : https://mineraibot.com
Telegram    : https://t.me/minerAiERC20

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library Address {
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract MinerAIBot is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "MINER AI BOT";
    string private _symbol = "MAB";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0xa929671D1CfFd189F1E3Ec9A5f712F8dd1F328E4);
    address payable public DeployerWalletAddress =
        payable(0xa929671D1CfFd189F1E3Ec9A5f712F8dd1F328E4);
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

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

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isWalletLimitExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 20;
    uint256 public _buyDeployerFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 30;
    uint256 public _sellDeployerFee = 0;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 10;
    uint256 public _deployerShare = 0;

    uint256 public _totalTaxIfBuying = 20;
    uint256 public _totalTaxIfSelling = 30;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply    = 100000000* 10**_decimals;
    uint256 public _maxTxAmount     = 2000000 * 10**_decimals;
    uint256 public _walletMax       = 2000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 20000 * 10**_decimals;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue)
        public
        onlyOwner
    {
        isMarketPair[account] = newValue;
    }

    function MinerAIExcludeMaxTx(address holder, bool exempt)
        external
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

    function MinerAIExcludedFromFee(address account, bool newValue)
        public
        onlyOwner
    {
        isExcludedFromFee[account] = newValue;
    }

    function MinerAISetFee(
        uint256 newBuyLiquidityTax,
        uint256 newBuyMarketingTax,
        uint256 newBuyDeployerTax,

        uint256 newSellLiquidityTax,
        uint256 newSellMarketingTax,
        uint256 newSellDeployerTax
    ) external onlyOwner {
        _buyLiquidityFee = newBuyLiquidityTax;
        _buyMarketingFee = newBuyMarketingTax;
        _buyDeployerFee = newBuyDeployerTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );

        _sellLiquidityFee = newSellLiquidityTax;
        _sellMarketingFee = newSellMarketingTax;
        _sellDeployerFee = newSellDeployerTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
    }

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newMarketingShare,
        uint256 newDeployerShare
    ) external onlyOwner {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _deployerShare = newDeployerShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );
    }

    function MinerAISetMax(uint256 maxTxAmount, uint256 MaxLimit) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        _walletMax = MaxLimit;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
        checkWalletLimit = newValue;
    }

    function MinerAIExludeMaxWallet(address holder, bool exempt)
        external
        onlyOwner
    {
        isWalletLimitExempt[holder] = exempt;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner {
        minimumTokensBeforeSwap = newLimit;
    }

    function MinerAIMarketingWallet(address newAddress) external onlyOwner {
        marketingWalletAddress = payable(newAddress);
    }

    function MinerAIDeployerWallet(address newAddress) external onlyOwner {
        DeployerWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function MinerAITransferTokenBalance(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        } else {
            _sent = IERC20(_token).transfer(_to, _value);
        }
    }
    function MinerAISwapBalance() external onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress)
        public
        onlyOwner
        returns (address newPairAddress)
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            newRouterAddress
        );

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        } else {
            if (!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >=
                minimumTokensBeforeSwap;

            if (
                overMinimumTokenBalance &&
                !inSwapAndLiquify &&
                !isMarketPair[sender] &&
                swapAndLiquifyEnabled
            ) {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(
                amount,
                "Insufficient Balance"
            );

            uint256 finalAmount = (isExcludedFromFee[sender] ||
                isExcludedFromFee[recipient])
                ? amount
                : takeFee(sender, recipient, amount);

            if (checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 tokensForLP = tAmount
            .mul(_liquidityShare)
            .div(_totalDistributionShares)
            .div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(
            _liquidityShare.div(2)
        );

        uint256 amountETHLiquidity = amountReceived
            .mul(_liquidityShare)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHOwner = amountReceived.mul(_deployerShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(
            amountETHOwner
        );

        if (amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if (amountETHOwner > 0)
            transferToAddressETH(DeployerWalletAddress, amountETHOwner);

        if (amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

    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), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    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
            owner(),
            block.timestamp
        );
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        } else if (isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeployerWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"MinerAIDeployerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"MinerAIExcludeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"MinerAIExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"MinerAIExludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"MinerAIMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newBuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newBuyDeployerTax","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newSellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellDeployerTax","type":"uint256"}],"name":"MinerAISetFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxLimit","type":"uint256"}],"name":"MinerAISetMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MinerAISwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"MinerAITransferTokenBalance","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyDeployerFee","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":"_deployerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeployerFee","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":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDeployerShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f4d494e455220414920424f540000000000000000000000000000000000000000815250600290816200004a919062000d9c565b506040518060400160405280600381526020017f4d414200000000000000000000000000000000000000000000000000000000008152506003908162000091919062000d9c565b50600960045f6101000a81548160ff021916908360ff16021790555073a929671d1cffd189f1e3ec9a5f712f8dd1f328e4600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a929671d1cffd189f1e3ec9a5f712f8dd1f328e460055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600c556014600d555f600e555f600f55601e6010555f6011555f601255600a6013555f6014556014601555601e601655600a60175560045f9054906101000a900460ff16600a620001de919062001009565b6305f5e100620001ef919062001059565b60185560045f9054906101000a900460ff16600a6200020f919062001009565b621e84806200021f919062001059565b60195560045f9054906101000a900460ff16600a6200023f919062001009565b621e84806200024f919062001059565b601a5560045f9054906101000a900460ff16600a6200026f919062001009565b614e206200027e919062001059565b601b556001601d60156101000a81548160ff0219169083151502179055505f601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002dd575f80fd5b505f620002ef62000aa860201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000413919062001108565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000479573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200049f919062001108565b6040518363ffffffff1660e01b8152600401620004be92919062001149565b6020604051808303815f875af1158015620004db573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000501919062001108565b601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060185460075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160085f6200063562000aaf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000708600e54620006f9600d54600c5462000ad660201b90919060201c565b62000ad660201b90919060201c565b6015819055506200073d6011546200072e601054600f5462000ad660201b90919060201c565b62000ad660201b90919060201c565b601681905550620007726014546200076360135460125462000ad660201b90919060201c565b62000ad660201b90919060201c565b601781905550600160095f6200078d62000aaf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f620008bc62000aaf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060185460065f620009ec62000aa860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000a3962000aa860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a99919062001185565b60405180910390a35062001258565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000ae69190620011a0565b90508381101562000b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b259062001238565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bb457607f821691505b60208210810362000bca5762000bc962000b6f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c2e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf1565b62000c3a868362000bf1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c8462000c7e62000c788462000c52565b62000c5b565b62000c52565b9050919050565b5f819050919050565b62000c9f8362000c64565b62000cb762000cae8262000c8b565b84845462000bfd565b825550505050565b5f90565b62000ccd62000cbf565b62000cda81848462000c94565b505050565b5b8181101562000d015762000cf55f8262000cc3565b60018101905062000ce0565b5050565b601f82111562000d505762000d1a8162000bd0565b62000d258462000be2565b8101602085101562000d35578190505b62000d4d62000d448562000be2565b83018262000cdf565b50505b505050565b5f82821c905092915050565b5f62000d725f198460080262000d55565b1980831691505092915050565b5f62000d8c838362000d61565b9150826002028217905092915050565b62000da78262000b38565b67ffffffffffffffff81111562000dc35762000dc262000b42565b5b62000dcf825462000b9c565b62000ddc82828562000d05565b5f60209050601f83116001811462000e12575f841562000dfd578287015190505b62000e09858262000d7f565b86555062000e78565b601f19841662000e228662000bd0565b5f5b8281101562000e4b5784890151825560018201915060208501945060208101905062000e24565b8683101562000e6b578489015162000e67601f89168262000d61565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000f0a5780860481111562000ee25762000ee162000e80565b5b600185161562000ef25780820291505b808102905062000f028562000ead565b945062000ec2565b94509492505050565b5f8262000f24576001905062000ff6565b8162000f33575f905062000ff6565b816001811462000f4c576002811462000f575762000f8d565b600191505062000ff6565b60ff84111562000f6c5762000f6b62000e80565b5b8360020a91508482111562000f865762000f8562000e80565b5b5062000ff6565b5060208310610133831016604e8410600b841016171562000fc75782820a90508381111562000fc15762000fc062000e80565b5b62000ff6565b62000fd6848484600162000eb9565b9250905081840481111562000ff05762000fef62000e80565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620010158262000c52565b9150620010228362000ffd565b9250620010517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f13565b905092915050565b5f620010658262000c52565b9150620010728362000c52565b9250828202620010828162000c52565b915082820484148315176200109c576200109b62000e80565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010d282620010a7565b9050919050565b620010e481620010c6565b8114620010ef575f80fd5b50565b5f815190506200110281620010d9565b92915050565b5f6020828403121562001120576200111f620010a3565b5b5f6200112f84828501620010f2565b91505092915050565b6200114381620010c6565b82525050565b5f6040820190506200115e5f83018562001138565b6200116d602083018462001138565b9392505050565b6200117f8162000c52565b82525050565b5f6020820190506200119a5f83018462001174565b92915050565b5f620011ac8262000c52565b9150620011b98362000c52565b9250828201905080821115620011d457620011d362000e80565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62001220601b83620011da565b91506200122d82620011ea565b602082019050919050565b5f6020820190508181035f830152620012518162001212565b9050919050565b608051614b79620012785f395f8181611030015261105b0152614b795ff3fe608060405260043610610384575f3560e01c80638b42507f116101d0578063c860795211610101578063dc44b6a01161009f578063f2e93bb01161006e578063f2e93bb014610d29578063f2fde38b14610d51578063f872858a14610d79578063fd05e4df14610da35761038b565b8063dc44b6a014610c5d578063dd62ed3e14610c87578063f0cd1dac14610cc3578063f18984f514610ced5761038b565b8063cc11a8e7116100db578063cc11a8e714610bc9578063d01edad014610bdf578063d158272d14610c09578063da00097d14610c335761038b565b8063c860795214610b39578063c867d60b14610b63578063cb5f6d0514610b9f5761038b565b8063a9059cbb1161016e578063c49b9a8011610148578063c49b9a8014610a95578063c5d2418914610abd578063c612ae8e14610ae7578063c816841b14610b0f5761038b565b8063a9059cbb14610a09578063acd6ca9b14610a45578063c2d4640e14610a6d5761038b565b8063a073d37f116101aa578063a073d37f14610951578063a08e671f1461097b578063a457c2d7146109a5578063a5d69d1f146109e15761038b565b80638b42507f146108c15780638da5cb5b146108fd57806395d89b41146109275761038b565b80635342acb4116102b557806370a082311161025357806381d5c4991161022257806381d5c4991461081d57806382eefb4314610845578063844d591c1461086f57806388790a68146108975761038b565b806370a08231146107655780637ceac1d6146107a15780637d1db4a5146107c9578063807c2d9c146107f35761038b565b80635881f3ef1161028f5780635881f3ef146106ad5780635ccef525146106e957806361a23c691461071157806363b52db41461073b5761038b565b80635342acb41461061d578063557ed1ba1461065957806357a5802f146106835761038b565b80632b112e49116103225780633b97084a116102fc5780633b97084a146105675780633ecad2711461058f5780634a74bb02146105cb5780634c221371146105f55761038b565b80632b112e49146104d7578063313ce56714610501578063395093511461052b5761038b565b806318160ddd1161035e57806318160ddd1461041f57806323b872dd146104495780632563ae831461048557806327c8f835146104ad5761038b565b806306fdde031461038f578063095ea7b3146103b95780631694505e146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103a3610dcd565b6040516103b09190613c4b565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190613cfc565b610e5d565b6040516103ec9190613d54565b60405180910390f35b348015610400575f80fd5b50610409610e7a565b6040516104169190613dc8565b60405180910390f35b34801561042a575f80fd5b50610433610e9f565b6040516104409190613df0565b60405180910390f35b348015610454575f80fd5b5061046f600480360381019061046a9190613e09565b610ea8565b60405161047c9190613d54565b60405180910390f35b348015610490575f80fd5b506104ab60048036038101906104a69190613e83565b610f7d565b005b3480156104b8575f80fd5b506104c161102e565b6040516104ce9190613ebd565b60405180910390f35b3480156104e2575f80fd5b506104eb611052565b6040516104f89190613df0565b60405180910390f35b34801561050c575f80fd5b50610515611095565b6040516105229190613ef1565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c9190613cfc565b6110aa565b60405161055e9190613d54565b60405180910390f35b348015610572575f80fd5b5061058d60048036038101906105889190613f0a565b611158565b005b34801561059a575f80fd5b506105b560048036038101906105b09190613f35565b6111f6565b6040516105c29190613d54565b60405180910390f35b3480156105d6575f80fd5b506105df611213565b6040516105ec9190613d54565b60405180910390f35b348015610600575f80fd5b5061061b60048036038101906106169190613f60565b611226565b005b348015610628575f80fd5b50610643600480360381019061063e9190613f35565b611312565b6040516106509190613d54565b60405180910390f35b348015610664575f80fd5b5061066d61132f565b60405161067a9190613df0565b60405180910390f35b34801561068e575f80fd5b50610697611336565b6040516106a49190613df0565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190613f35565b61133c565b6040516106e09190613ebd565b60405180910390f35b3480156106f4575f80fd5b5061070f600480360381019061070a9190613f9e565b611824565b005b34801561071c575f80fd5b506107256118ca565b6040516107329190613df0565b60405180910390f35b348015610746575f80fd5b5061074f6118d0565b60405161075c9190613df0565b60405180910390f35b348015610770575f80fd5b5061078b60048036038101906107869190613f35565b6118d6565b6040516107989190613df0565b60405180910390f35b3480156107ac575f80fd5b506107c760048036038101906107c29190613f35565b61191c565b005b3480156107d4575f80fd5b506107dd6119f3565b6040516107ea9190613df0565b60405180910390f35b3480156107fe575f80fd5b506108076119f9565b6040516108149190613df0565b60405180910390f35b348015610828575f80fd5b50610843600480360381019061083e9190613f60565b6119ff565b005b348015610850575f80fd5b50610859611aeb565b6040516108669190613df0565b60405180910390f35b34801561087a575f80fd5b5061089560048036038101906108909190613f60565b611af1565b005b3480156108a2575f80fd5b506108ab611bdd565b6040516108b89190613df0565b60405180910390f35b3480156108cc575f80fd5b506108e760048036038101906108e29190613f35565b611be3565b6040516108f49190613d54565b60405180910390f35b348015610908575f80fd5b50610911611c00565b60405161091e9190613ebd565b60405180910390f35b348015610932575f80fd5b5061093b611c27565b6040516109489190613c4b565b60405180910390f35b34801561095c575f80fd5b50610965611cb7565b6040516109729190613df0565b60405180910390f35b348015610986575f80fd5b5061098f611cc0565b60405161099c9190613df0565b60405180910390f35b3480156109b0575f80fd5b506109cb60048036038101906109c69190613cfc565b611cc6565b6040516109d89190613d54565b60405180910390f35b3480156109ec575f80fd5b50610a076004803603810190610a029190613e83565b611d8e565b005b348015610a14575f80fd5b50610a2f6004803603810190610a2a9190613cfc565b611e3f565b604051610a3c9190613d54565b60405180910390f35b348015610a50575f80fd5b50610a6b6004803603810190610a669190613f60565b611e5d565b005b348015610a78575f80fd5b50610a936004803603810190610a8e9190613fdc565b611f49565b005b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613e83565b612028565b005b348015610ac8575f80fd5b50610ad1612110565b604051610ade9190613df0565b60405180910390f35b348015610af2575f80fd5b50610b0d6004803603810190610b08919061402c565b612116565b005b348015610b1a575f80fd5b50610b2361223e565b604051610b309190613ebd565b60405180910390f35b348015610b44575f80fd5b50610b4d612263565b604051610b5a9190613df0565b60405180910390f35b348015610b6e575f80fd5b50610b896004803603810190610b849190613f35565b612269565b604051610b969190613d54565b60405180910390f35b348015610baa575f80fd5b50610bb3612286565b604051610bc09190613df0565b60405180910390f35b348015610bd4575f80fd5b50610bdd61228c565b005b348015610bea575f80fd5b50610bf3612372565b604051610c0091906140d5565b60405180910390f35b348015610c14575f80fd5b50610c1d612397565b604051610c2a91906140d5565b60405180910390f35b348015610c3e575f80fd5b50610c476123bd565b604051610c549190613d54565b60405180910390f35b348015610c68575f80fd5b50610c716123d0565b604051610c7e9190613df0565b60405180910390f35b348015610c92575f80fd5b50610cad6004803603810190610ca891906140ee565b6123d6565b604051610cba9190613df0565b60405180910390f35b348015610cce575f80fd5b50610cd7612458565b604051610ce49190613df0565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613e09565b61245e565b604051610d209190613d54565b60405180910390f35b348015610d34575f80fd5b50610d4f6004803603810190610d4a9190613f35565b6125fe565b005b348015610d5c575f80fd5b50610d776004803603810190610d729190613f35565b6126d6565b005b348015610d84575f80fd5b50610d8d612893565b604051610d9a9190613d54565b60405180910390f35b348015610dae575f80fd5b50610db76128a6565b604051610dc49190613df0565b60405180910390f35b606060028054610ddc90614159565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0890614159565b8015610e535780601f10610e2a57610100808354040283529160200191610e53565b820191905f5260205f20905b815481529060010190602001808311610e3657829003601f168201915b5050505050905090565b5f610e70610e696128ac565b84846128b3565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b5f610eb4848484612a76565b50610f7284610ec16128ac565b610f6d85604051806060016040528060288152602001614af76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f246128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b600190509392505050565b610f856128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906141d3565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f61109061107f7f00000000000000000000000000000000000000000000000000000000000000006118d6565b60185461309b90919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f61114e6110b66128ac565b846111498560075f6110c66128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b6128b3565b6001905092915050565b6111606128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e3906141d3565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b61122e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906141d3565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f42905090565b60125481565b5f6113456128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c8906141d3565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190614205565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114cb9190614205565b6040518363ffffffff1660e01b81526004016114e8929190614230565b602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190614205565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b2578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c99190614205565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116529190614205565b6040518363ffffffff1660e01b815260040161166f929190614230565b6020604051808303815f875af115801561168b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116af9190614205565b91505b81601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b61182c6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906141d3565b60405180910390fd5b8160198190555080601a819055505050565b60135481565b60145481565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6119246128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906141d3565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b601a5481565b611a076128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906141d3565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60165481565b611af96128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c906141d3565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611c3690614159565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6290614159565b8015611cad5780601f10611c8457610100808354040283529160200191611cad565b820191905f5260205f20905b815481529060010190602001808311611c9057829003601f168201915b5050505050905090565b5f601b54905090565b60175481565b5f611d84611cd26128ac565b84611d7f85604051806060016040528060258152602001614b1f6025913960075f611cfb6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b6001905092915050565b611d966128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906141d3565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b5f611e52611e4b6128ac565b8484612a76565b506001905092915050565b611e656128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee8906141d3565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611f516128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd4906141d3565b60405180910390fd5b82601281905550816013819055508060148190555061201d60145461200f6013546012546130e490919063ffffffff16565b6130e490919063ffffffff16565b601781905550505050565b6120306128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906141d3565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121059190613d54565b60405180910390a150565b600d5481565b61211e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a1906141d3565b60405180910390fd5b85600c8190555084600d8190555083600e819055506121ea600e546121dc600d54600c546130e490919063ffffffff16565b6130e490919063ffffffff16565b60158190555082600f819055508160108190555080601181905550612230601154612222601054600f546130e490919063ffffffff16565b6130e490919063ffffffff16565b601681905550505050505050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b60115481565b6122946128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612317906141d3565b60405180910390fd5b5f47905061232c611c00565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561236e573d5f803e3d5ffd5b5050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60155481565b5f6124676128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea906141d3565b60405180910390fd5b5f8203612579578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125339190613ebd565b602060405180830381865afa15801561254e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612572919061426b565b91506125f7565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016125b4929190614296565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f491906142d1565b90505b9392505050565b6126066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612689906141d3565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126de6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461276a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612761906141d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf9061436c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612918906143fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614488565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a699190613df0565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614516565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a906145a4565b60405180910390fd5b601d60149054906101000a900460ff1615612b7a57612b73848484613141565b9050613032565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c185750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6357601954821115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614632565b60405180910390fd5b5b5f612c6d306118d6565b90505f601b548210159050808015612c925750601d60149054906101000a900460ff16155b8015612ce55750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cfd5750601d60159054906101000a900460ff165b15612d2757601d60169054906101000a900460ff1615612d1d57601b5491505b612d268261330b565b5b612dae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e8b575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9f57612e9a8787876134ef565b612ea1565b845b9050601d60179054906101000a900460ff168015612f06575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3457601a54612f2982612f1b896118d6565b6130e490919063ffffffff16565b1115612f33575f80fd5b5b612f848160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130229190613df0565b60405180910390a3600193505050505b9392505050565b5f838311158290613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779190613c4b565b60405180910390fd5b505f838561308e919061467d565b9050809150509392505050565b5f6130dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613039565b905092915050565b5f8082846130f291906146b0565b905083811015613137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312e9061472d565b60405180910390fd5b8091505092915050565b5f6131c9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061325a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f89190613df0565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f61336360026133556017546133476012548761370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f613379828461309b90919063ffffffff16565b9050613384816137c9565b5f4790505f6133b36133a2600260125461378090919063ffffffff16565b60175461309b90919063ffffffff16565b90505f6133f060026133e2846133d46012548861370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f61341a8361340c6014548761370990919063ffffffff16565b61378090919063ffffffff16565b90505f61344282613434858861309b90919063ffffffff16565b61309b90919063ffffffff16565b90505f81111561347957613478600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a38565b5b5f8211156134ad576134ac60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a38565b5b5f831180156134bb57505f87115b156134cb576134ca8784613a80565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135725761356b606461355d6015548661370990919063ffffffff16565b61378090919063ffffffff16565b90506135ed565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135ec576135e960646135db6016548661370990919063ffffffff16565b61378090919063ffffffff16565b90505b5b5f8111156136ec576136458160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613df0565b60405180910390a35b6136ff818461309b90919063ffffffff16565b9150509392505050565b5f808303613719575f905061377a565b5f8284613726919061474b565b905082848261373591906147b9565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614859565b60405180910390fd5b809150505b92915050565b5f6137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b60565b905092915050565b5f600267ffffffffffffffff8111156137e5576137e4614877565b5b6040519080825280602002602001820160405280156138135781602001602082028036833780820191505090505b50905030815f8151811061382a576138296148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f29190614205565b81600181518110613906576139056148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061396c30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139ce9594939291906149c1565b5f604051808303815f87803b1580156139e5575f80fd5b505af11580156139f7573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a2c929190614a19565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613a7b573d5f803e3d5ffd5b505050565b613aac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613af6611c00565b426040518863ffffffff1660e01b8152600401613b1896959493929190614a47565b60606040518083038185885af1158015613b34573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b599190614aa6565b5050505050565b5f8083118290613ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9d9190613c4b565b60405180910390fd5b505f8385613bb491906147b9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bf8578082015181840152602081019050613bdd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c1d82613bc1565b613c278185613bcb565b9350613c37818560208601613bdb565b613c4081613c03565b840191505092915050565b5f6020820190508181035f830152613c638184613c13565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c9882613c6f565b9050919050565b613ca881613c8e565b8114613cb2575f80fd5b50565b5f81359050613cc381613c9f565b92915050565b5f819050919050565b613cdb81613cc9565b8114613ce5575f80fd5b50565b5f81359050613cf681613cd2565b92915050565b5f8060408385031215613d1257613d11613c6b565b5b5f613d1f85828601613cb5565b9250506020613d3085828601613ce8565b9150509250929050565b5f8115159050919050565b613d4e81613d3a565b82525050565b5f602082019050613d675f830184613d45565b92915050565b5f819050919050565b5f613d90613d8b613d8684613c6f565b613d6d565b613c6f565b9050919050565b5f613da182613d76565b9050919050565b5f613db282613d97565b9050919050565b613dc281613da8565b82525050565b5f602082019050613ddb5f830184613db9565b92915050565b613dea81613cc9565b82525050565b5f602082019050613e035f830184613de1565b92915050565b5f805f60608486031215613e2057613e1f613c6b565b5b5f613e2d86828701613cb5565b9350506020613e3e86828701613cb5565b9250506040613e4f86828701613ce8565b9150509250925092565b613e6281613d3a565b8114613e6c575f80fd5b50565b5f81359050613e7d81613e59565b92915050565b5f60208284031215613e9857613e97613c6b565b5b5f613ea584828501613e6f565b91505092915050565b613eb781613c8e565b82525050565b5f602082019050613ed05f830184613eae565b92915050565b5f60ff82169050919050565b613eeb81613ed6565b82525050565b5f602082019050613f045f830184613ee2565b92915050565b5f60208284031215613f1f57613f1e613c6b565b5b5f613f2c84828501613ce8565b91505092915050565b5f60208284031215613f4a57613f49613c6b565b5b5f613f5784828501613cb5565b91505092915050565b5f8060408385031215613f7657613f75613c6b565b5b5f613f8385828601613cb5565b9250506020613f9485828601613e6f565b9150509250929050565b5f8060408385031215613fb457613fb3613c6b565b5b5f613fc185828601613ce8565b9250506020613fd285828601613ce8565b9150509250929050565b5f805f60608486031215613ff357613ff2613c6b565b5b5f61400086828701613ce8565b935050602061401186828701613ce8565b925050604061402286828701613ce8565b9150509250925092565b5f805f805f8060c0878903121561404657614045613c6b565b5b5f61405389828a01613ce8565b965050602061406489828a01613ce8565b955050604061407589828a01613ce8565b945050606061408689828a01613ce8565b935050608061409789828a01613ce8565b92505060a06140a889828a01613ce8565b9150509295509295509295565b5f6140bf82613c6f565b9050919050565b6140cf816140b5565b82525050565b5f6020820190506140e85f8301846140c6565b92915050565b5f806040838503121561410457614103613c6b565b5b5f61411185828601613cb5565b925050602061412285828601613cb5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061417057607f821691505b6020821081036141835761418261412c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6141bd602083613bcb565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b5f815190506141ff81613c9f565b92915050565b5f6020828403121561421a57614219613c6b565b5b5f614227848285016141f1565b91505092915050565b5f6040820190506142435f830185613eae565b6142506020830184613eae565b9392505050565b5f8151905061426581613cd2565b92915050565b5f602082840312156142805761427f613c6b565b5b5f61428d84828501614257565b91505092915050565b5f6040820190506142a95f830185613eae565b6142b66020830184613de1565b9392505050565b5f815190506142cb81613e59565b92915050565b5f602082840312156142e6576142e5613c6b565b5b5f6142f3848285016142bd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614356602683613bcb565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e4602483613bcb565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614472602283613bcb565b915061447d82614418565b604082019050919050565b5f6020820190508181035f83015261449f81614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614500602583613bcb565b915061450b826144a6565b604082019050919050565b5f6020820190508181035f83015261452d816144f4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458e602383613bcb565b915061459982614534565b604082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61461c602883613bcb565b9150614627826145c2565b604082019050919050565b5f6020820190508181035f83015261464981614610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61468782613cc9565b915061469283613cc9565b92508282039050818111156146aa576146a9614650565b5b92915050565b5f6146ba82613cc9565b91506146c583613cc9565b92508282019050808211156146dd576146dc614650565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614717601b83613bcb565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b5f61475582613cc9565b915061476083613cc9565b925082820261476e81613cc9565b9150828204841483151761478557614784614650565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6147c382613cc9565b91506147ce83613cc9565b9250826147de576147dd61478c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614843602183613bcb565b915061484e826147e9565b604082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6148f46148ef6148ea846148d1565b613d6d565b613cc9565b9050919050565b614904816148da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61493c81613c8e565b82525050565b5f61494d8383614933565b60208301905092915050565b5f602082019050919050565b5f61496f8261490a565b6149798185614914565b935061498483614924565b805f5b838110156149b457815161499b8882614942565b97506149a683614959565b925050600181019050614987565b5085935050505092915050565b5f60a0820190506149d45f830188613de1565b6149e160208301876148fb565b81810360408301526149f38186614965565b9050614a026060830185613eae565b614a0f6080830184613de1565b9695505050505050565b5f604082019050614a2c5f830185613de1565b8181036020830152614a3e8184614965565b90509392505050565b5f60c082019050614a5a5f830189613eae565b614a676020830188613de1565b614a7460408301876148fb565b614a8160608301866148fb565b614a8e6080830185613eae565b614a9b60a0830184613de1565b979650505050505050565b5f805f60608486031215614abd57614abc613c6b565b5b5f614aca86828701614257565b9350506020614adb86828701614257565b9250506040614aec86828701614257565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3dcc27d4fc4fe23233c018970c2dba1b793e54ee20fa8c26f100b9dfb216dc964736f6c63430008160033

Deployed Bytecode

0x608060405260043610610384575f3560e01c80638b42507f116101d0578063c860795211610101578063dc44b6a01161009f578063f2e93bb01161006e578063f2e93bb014610d29578063f2fde38b14610d51578063f872858a14610d79578063fd05e4df14610da35761038b565b8063dc44b6a014610c5d578063dd62ed3e14610c87578063f0cd1dac14610cc3578063f18984f514610ced5761038b565b8063cc11a8e7116100db578063cc11a8e714610bc9578063d01edad014610bdf578063d158272d14610c09578063da00097d14610c335761038b565b8063c860795214610b39578063c867d60b14610b63578063cb5f6d0514610b9f5761038b565b8063a9059cbb1161016e578063c49b9a8011610148578063c49b9a8014610a95578063c5d2418914610abd578063c612ae8e14610ae7578063c816841b14610b0f5761038b565b8063a9059cbb14610a09578063acd6ca9b14610a45578063c2d4640e14610a6d5761038b565b8063a073d37f116101aa578063a073d37f14610951578063a08e671f1461097b578063a457c2d7146109a5578063a5d69d1f146109e15761038b565b80638b42507f146108c15780638da5cb5b146108fd57806395d89b41146109275761038b565b80635342acb4116102b557806370a082311161025357806381d5c4991161022257806381d5c4991461081d57806382eefb4314610845578063844d591c1461086f57806388790a68146108975761038b565b806370a08231146107655780637ceac1d6146107a15780637d1db4a5146107c9578063807c2d9c146107f35761038b565b80635881f3ef1161028f5780635881f3ef146106ad5780635ccef525146106e957806361a23c691461071157806363b52db41461073b5761038b565b80635342acb41461061d578063557ed1ba1461065957806357a5802f146106835761038b565b80632b112e49116103225780633b97084a116102fc5780633b97084a146105675780633ecad2711461058f5780634a74bb02146105cb5780634c221371146105f55761038b565b80632b112e49146104d7578063313ce56714610501578063395093511461052b5761038b565b806318160ddd1161035e57806318160ddd1461041f57806323b872dd146104495780632563ae831461048557806327c8f835146104ad5761038b565b806306fdde031461038f578063095ea7b3146103b95780631694505e146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103a3610dcd565b6040516103b09190613c4b565b60405180910390f35b3480156103c4575f80fd5b506103df60048036038101906103da9190613cfc565b610e5d565b6040516103ec9190613d54565b60405180910390f35b348015610400575f80fd5b50610409610e7a565b6040516104169190613dc8565b60405180910390f35b34801561042a575f80fd5b50610433610e9f565b6040516104409190613df0565b60405180910390f35b348015610454575f80fd5b5061046f600480360381019061046a9190613e09565b610ea8565b60405161047c9190613d54565b60405180910390f35b348015610490575f80fd5b506104ab60048036038101906104a69190613e83565b610f7d565b005b3480156104b8575f80fd5b506104c161102e565b6040516104ce9190613ebd565b60405180910390f35b3480156104e2575f80fd5b506104eb611052565b6040516104f89190613df0565b60405180910390f35b34801561050c575f80fd5b50610515611095565b6040516105229190613ef1565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c9190613cfc565b6110aa565b60405161055e9190613d54565b60405180910390f35b348015610572575f80fd5b5061058d60048036038101906105889190613f0a565b611158565b005b34801561059a575f80fd5b506105b560048036038101906105b09190613f35565b6111f6565b6040516105c29190613d54565b60405180910390f35b3480156105d6575f80fd5b506105df611213565b6040516105ec9190613d54565b60405180910390f35b348015610600575f80fd5b5061061b60048036038101906106169190613f60565b611226565b005b348015610628575f80fd5b50610643600480360381019061063e9190613f35565b611312565b6040516106509190613d54565b60405180910390f35b348015610664575f80fd5b5061066d61132f565b60405161067a9190613df0565b60405180910390f35b34801561068e575f80fd5b50610697611336565b6040516106a49190613df0565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190613f35565b61133c565b6040516106e09190613ebd565b60405180910390f35b3480156106f4575f80fd5b5061070f600480360381019061070a9190613f9e565b611824565b005b34801561071c575f80fd5b506107256118ca565b6040516107329190613df0565b60405180910390f35b348015610746575f80fd5b5061074f6118d0565b60405161075c9190613df0565b60405180910390f35b348015610770575f80fd5b5061078b60048036038101906107869190613f35565b6118d6565b6040516107989190613df0565b60405180910390f35b3480156107ac575f80fd5b506107c760048036038101906107c29190613f35565b61191c565b005b3480156107d4575f80fd5b506107dd6119f3565b6040516107ea9190613df0565b60405180910390f35b3480156107fe575f80fd5b506108076119f9565b6040516108149190613df0565b60405180910390f35b348015610828575f80fd5b50610843600480360381019061083e9190613f60565b6119ff565b005b348015610850575f80fd5b50610859611aeb565b6040516108669190613df0565b60405180910390f35b34801561087a575f80fd5b5061089560048036038101906108909190613f60565b611af1565b005b3480156108a2575f80fd5b506108ab611bdd565b6040516108b89190613df0565b60405180910390f35b3480156108cc575f80fd5b506108e760048036038101906108e29190613f35565b611be3565b6040516108f49190613d54565b60405180910390f35b348015610908575f80fd5b50610911611c00565b60405161091e9190613ebd565b60405180910390f35b348015610932575f80fd5b5061093b611c27565b6040516109489190613c4b565b60405180910390f35b34801561095c575f80fd5b50610965611cb7565b6040516109729190613df0565b60405180910390f35b348015610986575f80fd5b5061098f611cc0565b60405161099c9190613df0565b60405180910390f35b3480156109b0575f80fd5b506109cb60048036038101906109c69190613cfc565b611cc6565b6040516109d89190613d54565b60405180910390f35b3480156109ec575f80fd5b50610a076004803603810190610a029190613e83565b611d8e565b005b348015610a14575f80fd5b50610a2f6004803603810190610a2a9190613cfc565b611e3f565b604051610a3c9190613d54565b60405180910390f35b348015610a50575f80fd5b50610a6b6004803603810190610a669190613f60565b611e5d565b005b348015610a78575f80fd5b50610a936004803603810190610a8e9190613fdc565b611f49565b005b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613e83565b612028565b005b348015610ac8575f80fd5b50610ad1612110565b604051610ade9190613df0565b60405180910390f35b348015610af2575f80fd5b50610b0d6004803603810190610b08919061402c565b612116565b005b348015610b1a575f80fd5b50610b2361223e565b604051610b309190613ebd565b60405180910390f35b348015610b44575f80fd5b50610b4d612263565b604051610b5a9190613df0565b60405180910390f35b348015610b6e575f80fd5b50610b896004803603810190610b849190613f35565b612269565b604051610b969190613d54565b60405180910390f35b348015610baa575f80fd5b50610bb3612286565b604051610bc09190613df0565b60405180910390f35b348015610bd4575f80fd5b50610bdd61228c565b005b348015610bea575f80fd5b50610bf3612372565b604051610c0091906140d5565b60405180910390f35b348015610c14575f80fd5b50610c1d612397565b604051610c2a91906140d5565b60405180910390f35b348015610c3e575f80fd5b50610c476123bd565b604051610c549190613d54565b60405180910390f35b348015610c68575f80fd5b50610c716123d0565b604051610c7e9190613df0565b60405180910390f35b348015610c92575f80fd5b50610cad6004803603810190610ca891906140ee565b6123d6565b604051610cba9190613df0565b60405180910390f35b348015610cce575f80fd5b50610cd7612458565b604051610ce49190613df0565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613e09565b61245e565b604051610d209190613d54565b60405180910390f35b348015610d34575f80fd5b50610d4f6004803603810190610d4a9190613f35565b6125fe565b005b348015610d5c575f80fd5b50610d776004803603810190610d729190613f35565b6126d6565b005b348015610d84575f80fd5b50610d8d612893565b604051610d9a9190613d54565b60405180910390f35b348015610dae575f80fd5b50610db76128a6565b604051610dc49190613df0565b60405180910390f35b606060028054610ddc90614159565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0890614159565b8015610e535780601f10610e2a57610100808354040283529160200191610e53565b820191905f5260205f20905b815481529060010190602001808311610e3657829003601f168201915b5050505050905090565b5f610e70610e696128ac565b84846128b3565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b5f610eb4848484612a76565b50610f7284610ec16128ac565b610f6d85604051806060016040528060288152602001614af76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f246128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b600190509392505050565b610f856128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906141d3565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f61109061107f7f000000000000000000000000000000000000000000000000000000000000dead6118d6565b60185461309b90919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f61114e6110b66128ac565b846111498560075f6110c66128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b6128b3565b6001905092915050565b6111606128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e3906141d3565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b61122e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b1906141d3565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f42905090565b60125481565b5f6113456128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c8906141d3565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190614205565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114cb9190614205565b6040518363ffffffff1660e01b81526004016114e8929190614230565b602060405180830381865afa158015611503573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115279190614205565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b2578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c99190614205565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116529190614205565b6040518363ffffffff1660e01b815260040161166f929190614230565b6020604051808303815f875af115801561168b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116af9190614205565b91505b81601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b61182c6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af906141d3565b60405180910390fd5b8160198190555080601a819055505050565b60135481565b60145481565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6119246128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a7906141d3565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b601a5481565b611a076128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906141d3565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60165481565b611af96128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7c906141d3565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611c3690614159565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6290614159565b8015611cad5780601f10611c8457610100808354040283529160200191611cad565b820191905f5260205f20905b815481529060010190602001808311611c9057829003601f168201915b5050505050905090565b5f601b54905090565b60175481565b5f611d84611cd26128ac565b84611d7f85604051806060016040528060258152602001614b1f6025913960075f611cfb6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b6001905092915050565b611d966128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e19906141d3565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b5f611e52611e4b6128ac565b8484612a76565b506001905092915050565b611e656128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee8906141d3565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611f516128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd4906141d3565b60405180910390fd5b82601281905550816013819055508060148190555061201d60145461200f6013546012546130e490919063ffffffff16565b6130e490919063ffffffff16565b601781905550505050565b6120306128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906141d3565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121059190613d54565b60405180910390a150565b600d5481565b61211e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a1906141d3565b60405180910390fd5b85600c8190555084600d8190555083600e819055506121ea600e546121dc600d54600c546130e490919063ffffffff16565b6130e490919063ffffffff16565b60158190555082600f819055508160108190555080601181905550612230601154612222601054600f546130e490919063ffffffff16565b6130e490919063ffffffff16565b601681905550505050505050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b60115481565b6122946128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612317906141d3565b60405180910390fd5b5f47905061232c611c00565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561236e573d5f803e3d5ffd5b5050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60155481565b5f6124676128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea906141d3565b60405180910390fd5b5f8203612579578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125339190613ebd565b602060405180830381865afa15801561254e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612572919061426b565b91506125f7565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016125b4929190614296565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f491906142d1565b90505b9392505050565b6126066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612689906141d3565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126de6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461276a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612761906141d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf9061436c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612918906143fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614488565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a699190613df0565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614516565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a906145a4565b60405180910390fd5b601d60149054906101000a900460ff1615612b7a57612b73848484613141565b9050613032565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c185750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6357601954821115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614632565b60405180910390fd5b5b5f612c6d306118d6565b90505f601b548210159050808015612c925750601d60149054906101000a900460ff16155b8015612ce55750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cfd5750601d60159054906101000a900460ff165b15612d2757601d60169054906101000a900460ff1615612d1d57601b5491505b612d268261330b565b5b612dae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e8b575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9f57612e9a8787876134ef565b612ea1565b845b9050601d60179054906101000a900460ff168015612f06575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3457601a54612f2982612f1b896118d6565b6130e490919063ffffffff16565b1115612f33575f80fd5b5b612f848160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130229190613df0565b60405180910390a3600193505050505b9392505050565b5f838311158290613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779190613c4b565b60405180910390fd5b505f838561308e919061467d565b9050809150509392505050565b5f6130dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613039565b905092915050565b5f8082846130f291906146b0565b905083811015613137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312e9061472d565b60405180910390fd5b8091505092915050565b5f6131c9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061325a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f89190613df0565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f61336360026133556017546133476012548761370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f613379828461309b90919063ffffffff16565b9050613384816137c9565b5f4790505f6133b36133a2600260125461378090919063ffffffff16565b60175461309b90919063ffffffff16565b90505f6133f060026133e2846133d46012548861370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f61341a8361340c6014548761370990919063ffffffff16565b61378090919063ffffffff16565b90505f61344282613434858861309b90919063ffffffff16565b61309b90919063ffffffff16565b90505f81111561347957613478600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a38565b5b5f8211156134ad576134ac60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a38565b5b5f831180156134bb57505f87115b156134cb576134ca8784613a80565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135725761356b606461355d6015548661370990919063ffffffff16565b61378090919063ffffffff16565b90506135ed565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135ec576135e960646135db6016548661370990919063ffffffff16565b61378090919063ffffffff16565b90505b5b5f8111156136ec576136458160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613df0565b60405180910390a35b6136ff818461309b90919063ffffffff16565b9150509392505050565b5f808303613719575f905061377a565b5f8284613726919061474b565b905082848261373591906147b9565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614859565b60405180910390fd5b809150505b92915050565b5f6137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b60565b905092915050565b5f600267ffffffffffffffff8111156137e5576137e4614877565b5b6040519080825280602002602001820160405280156138135781602001602082028036833780820191505090505b50905030815f8151811061382a576138296148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f29190614205565b81600181518110613906576139056148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061396c30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139ce9594939291906149c1565b5f604051808303815f87803b1580156139e5575f80fd5b505af11580156139f7573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a2c929190614a19565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613a7b573d5f803e3d5ffd5b505050565b613aac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613af6611c00565b426040518863ffffffff1660e01b8152600401613b1896959493929190614a47565b60606040518083038185885af1158015613b34573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b599190614aa6565b5050505050565b5f8083118290613ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9d9190613c4b565b60405180910390fd5b505f8385613bb491906147b9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bf8578082015181840152602081019050613bdd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c1d82613bc1565b613c278185613bcb565b9350613c37818560208601613bdb565b613c4081613c03565b840191505092915050565b5f6020820190508181035f830152613c638184613c13565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c9882613c6f565b9050919050565b613ca881613c8e565b8114613cb2575f80fd5b50565b5f81359050613cc381613c9f565b92915050565b5f819050919050565b613cdb81613cc9565b8114613ce5575f80fd5b50565b5f81359050613cf681613cd2565b92915050565b5f8060408385031215613d1257613d11613c6b565b5b5f613d1f85828601613cb5565b9250506020613d3085828601613ce8565b9150509250929050565b5f8115159050919050565b613d4e81613d3a565b82525050565b5f602082019050613d675f830184613d45565b92915050565b5f819050919050565b5f613d90613d8b613d8684613c6f565b613d6d565b613c6f565b9050919050565b5f613da182613d76565b9050919050565b5f613db282613d97565b9050919050565b613dc281613da8565b82525050565b5f602082019050613ddb5f830184613db9565b92915050565b613dea81613cc9565b82525050565b5f602082019050613e035f830184613de1565b92915050565b5f805f60608486031215613e2057613e1f613c6b565b5b5f613e2d86828701613cb5565b9350506020613e3e86828701613cb5565b9250506040613e4f86828701613ce8565b9150509250925092565b613e6281613d3a565b8114613e6c575f80fd5b50565b5f81359050613e7d81613e59565b92915050565b5f60208284031215613e9857613e97613c6b565b5b5f613ea584828501613e6f565b91505092915050565b613eb781613c8e565b82525050565b5f602082019050613ed05f830184613eae565b92915050565b5f60ff82169050919050565b613eeb81613ed6565b82525050565b5f602082019050613f045f830184613ee2565b92915050565b5f60208284031215613f1f57613f1e613c6b565b5b5f613f2c84828501613ce8565b91505092915050565b5f60208284031215613f4a57613f49613c6b565b5b5f613f5784828501613cb5565b91505092915050565b5f8060408385031215613f7657613f75613c6b565b5b5f613f8385828601613cb5565b9250506020613f9485828601613e6f565b9150509250929050565b5f8060408385031215613fb457613fb3613c6b565b5b5f613fc185828601613ce8565b9250506020613fd285828601613ce8565b9150509250929050565b5f805f60608486031215613ff357613ff2613c6b565b5b5f61400086828701613ce8565b935050602061401186828701613ce8565b925050604061402286828701613ce8565b9150509250925092565b5f805f805f8060c0878903121561404657614045613c6b565b5b5f61405389828a01613ce8565b965050602061406489828a01613ce8565b955050604061407589828a01613ce8565b945050606061408689828a01613ce8565b935050608061409789828a01613ce8565b92505060a06140a889828a01613ce8565b9150509295509295509295565b5f6140bf82613c6f565b9050919050565b6140cf816140b5565b82525050565b5f6020820190506140e85f8301846140c6565b92915050565b5f806040838503121561410457614103613c6b565b5b5f61411185828601613cb5565b925050602061412285828601613cb5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061417057607f821691505b6020821081036141835761418261412c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6141bd602083613bcb565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b5f815190506141ff81613c9f565b92915050565b5f6020828403121561421a57614219613c6b565b5b5f614227848285016141f1565b91505092915050565b5f6040820190506142435f830185613eae565b6142506020830184613eae565b9392505050565b5f8151905061426581613cd2565b92915050565b5f602082840312156142805761427f613c6b565b5b5f61428d84828501614257565b91505092915050565b5f6040820190506142a95f830185613eae565b6142b66020830184613de1565b9392505050565b5f815190506142cb81613e59565b92915050565b5f602082840312156142e6576142e5613c6b565b5b5f6142f3848285016142bd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614356602683613bcb565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e4602483613bcb565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614472602283613bcb565b915061447d82614418565b604082019050919050565b5f6020820190508181035f83015261449f81614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614500602583613bcb565b915061450b826144a6565b604082019050919050565b5f6020820190508181035f83015261452d816144f4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458e602383613bcb565b915061459982614534565b604082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61461c602883613bcb565b9150614627826145c2565b604082019050919050565b5f6020820190508181035f83015261464981614610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61468782613cc9565b915061469283613cc9565b92508282039050818111156146aa576146a9614650565b5b92915050565b5f6146ba82613cc9565b91506146c583613cc9565b92508282019050808211156146dd576146dc614650565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614717601b83613bcb565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b5f61475582613cc9565b915061476083613cc9565b925082820261476e81613cc9565b9150828204841483151761478557614784614650565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6147c382613cc9565b91506147ce83613cc9565b9250826147de576147dd61478c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614843602183613bcb565b915061484e826147e9565b604082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6148f46148ef6148ea846148d1565b613d6d565b613cc9565b9050919050565b614904816148da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61493c81613c8e565b82525050565b5f61494d8383614933565b60208301905092915050565b5f602082019050919050565b5f61496f8261490a565b6149798185614914565b935061498483614924565b805f5b838110156149b457815161499b8882614942565b97506149a683614959565b925050600181019050614987565b5085935050505092915050565b5f60a0820190506149d45f830188613de1565b6149e160208301876148fb565b81810360408301526149f38186614965565b9050614a026060830185613eae565b614a0f6080830184613de1565b9695505050505050565b5f604082019050614a2c5f830185613de1565b8181036020830152614a3e8184614965565b90509392505050565b5f60c082019050614a5a5f830189613eae565b614a676020830188613de1565b614a7460408301876148fb565b614a8160608301866148fb565b614a8e6080830185613eae565b614a9b60a0830184613de1565b979650505050505050565b5f805f60608486031215614abd57614abc613c6b565b5b5f614aca86828701614257565b9350506020614adb86828701614257565b9250506040614aec86828701614257565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3dcc27d4fc4fe23233c018970c2dba1b793e54ee20fa8c26f100b9dfb216dc964736f6c63430008160033

Deployed Bytecode Sourcemap

16023:16455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21256:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17722:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19985:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26718:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23745:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16491:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19894:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20412:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24033:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16878:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17833:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23867:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16710:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6729:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17190:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25511:899;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23579:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17231:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17273:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20093:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24305:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17522:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17586;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22155:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17359:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21836:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17059:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16824:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6226:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19799:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21128:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17404:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20720:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24624:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26511:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21996:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23141:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24445:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16973:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22323:810;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17770:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17102:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17146:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25070:149;;;;;;;;;;;;;:::i;:::-;;16377:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16262:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17880:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16931:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20220:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17315:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24761:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24163:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6440:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17932:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17016:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19708:83;19745:13;19778:5;19771:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:83;:::o;21256:193::-;21358:4;21380:39;21389:12;:10;:12::i;:::-;21403:7;21412:6;21380:8;:39::i;:::-;21437:4;21430:11;;21256:193;;;;:::o;17722:41::-;;;;;;;;;;;;;:::o;19985:100::-;20038:7;20065:12;;20058:19;;19985:100;:::o;26718:446::-;26850:4;26867:36;26877:6;26885:9;26896:6;26867:9;:36::i;:::-;;26914:220;26937:6;26958:12;:10;:12::i;:::-;26985:138;27041:6;26985:138;;;;;;;;;;;;;;;;;:11;:19;26997:6;26985:19;;;;;;;;;;;;;;;:33;27005:12;:10;:12::i;:::-;26985:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;26914:8;:220::i;:::-;27152:4;27145:11;;26718:446;;;;;:::o;23745:114::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23843:8:::1;23824:16;;:27;;;;;;;;;;;;;;;;;;23745:114:::0;:::o;16491:90::-;;;:::o;25227:128::-;25280:7;25307:40;25324:22;25334:11;25324:9;:22::i;:::-;25307:12;;:16;;:40;;;;:::i;:::-;25300:47;;25227:128;:::o;19894:83::-;19935:5;19960:9;;;;;;;;;;;19953:16;;19894:83;:::o;20412:300::-;20527:4;20549:133;20572:12;:10;:12::i;:::-;20599:7;20621:50;20660:10;20621:11;:25;20633:12;:10;:12::i;:::-;20621:25;;;;;;;;;;;;;;;:34;20647:7;20621:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20549:8;:133::i;:::-;20700:4;20693:11;;20412:300;;;;:::o;24033:122::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24139:8:::1;24113:23;:34;;;;24033:122:::0;:::o;16878:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17833:40::-;;;;;;;;;;;;;:::o;23867:158::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24011:6:::1;23981:19;:27;24001:6;23981:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23867:158:::0;;:::o;16710:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6729:90::-;6769:7;6796:15;6789:22;;6729:90;:::o;17190:34::-;;;;:::o;25511:899::-;25619:22;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25659:35:::1;25730:16;25659:98;;25805:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25787:53;;;25863:4;25883:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25787:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25770:147;;25960:1;25934:28;;:14;:28;;::::0;25930:226:::1;;26048:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26030:74;;;26113:4;26120:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26030:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26013:131;;25930:226;26182:14;26168:11;;:28;;;;;;;;;;;;;;;;;;26248:16;26230:15;;:34;;;;;;;;;;;;;;;;;;26346:4;26302:19;:41;26330:11;;;;;;;;;;;26302:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26398:4;26361:12;:34;26382:11;;;;;;;;;;;26361:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;25648:762;25511:899:::0;;;:::o;23579:158::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23686:11:::1;23671:12;:26;;;;23721:8;23708:10;:21;;;;23579:158:::0;;:::o;17231:35::-;;;;:::o;17273:33::-;;;;:::o;20093:119::-;20159:7;20186:9;:18;20196:7;20186:18;;;;;;;;;;;;;;;;20179:25;;20093:119;;;:::o;24305:132::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24418:10:::1;24386:21;;:43;;;;;;;;;;;;;;;;;;24305:132:::0;:::o;17522:57::-;;;;:::o;17586:::-;;;;:::o;22155:160::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22299:8:::1;22270:17;:26;22288:7;22270:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;22155:160:::0;;:::o;17359:38::-;;;;:::o;21836:152::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21972:8:::1;21948:12;:21;21961:7;21948:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21836:152:::0;;:::o;17059:36::-;;;;:::o;16824:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;6226:79::-;6264:7;6291:6;;;;;;;;;;;6284:13;;6226:79;:::o;19799:87::-;19838:13;19871:7;19864:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:87;:::o;21128:120::-;21190:7;21217:23;;21210:30;;21128:120;:::o;17404:44::-;;;;:::o;20720:400::-;20840:4;20862:228;20885:12;:10;:12::i;:::-;20912:7;20934:145;20991:15;20934:145;;;;;;;;;;;;;;;;;:11;:25;20946:12;:10;:12::i;:::-;20934:25;;;;;;;;;;;;;;;:34;20960:7;20934:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;20862:8;:228::i;:::-;21108:4;21101:11;;20720:400;;;;:::o;24624:125::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24733:8:::1;24705:25;;:36;;;;;;;;;;;;;;;;;;24624:125:::0;:::o;26511:199::-;26616:4;26638:42;26648:12;:10;:12::i;:::-;26662:9;26673:6;26638:9;:42::i;:::-;;26698:4;26691:11;;26511:199;;;;:::o;21996:151::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22133:6:::1;22107:15;:23;22123:6;22107:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21996:151:::0;;:::o;23141:430::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:17:::1;23318:15;:35;;;;23382:17;23364:15;:35;;;;23427:16;23410:14;:33;;;;23483:80;23538:14;;23483:36;23503:15;;23483;;:19;;:36;;;;:::i;:::-;:40;;:80;;;;:::i;:::-;23456:24;:107;;;;23141:430:::0;;;:::o;24445:171::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24546:8:::1;24522:21;;:32;;;;;;;;;;;;;;;;;;24570:38;24599:8;24570:38;;;;;;:::i;:::-;;;;;;;;24445:171:::0;:::o;16973:36::-;;;;:::o;22323:810::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22627:18:::1;22608:16;:37;;;;22675:18;22656:16;:37;;;;22722:17;22704:15;:35;;;;22772:83;22829:15;;22772:38;22793:16;;22772;;:20;;:38;;;;:::i;:::-;:42;;:83;;;;:::i;:::-;22752:17;:103;;;;22888:19;22868:17;:39;;;;22938:19;22918:17;:39;;;;22987:18;22968:16;:37;;;;23039:86;23098:16;;23039:40;23061:17;;23039;;:21;;:40;;;;:::i;:::-;:44;;:86;;;;:::i;:::-;23018:18;:107;;;;22323:810:::0;;;;;;:::o;17770:26::-;;;;;;;;;;;;;:::o;17102:37::-;;;;:::o;16766:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;17146:35::-;;;;:::o;25070:149::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:12:::1;25145:21;25130:36;;25185:7;:5;:7::i;:::-;25177:25;;:34;25203:7;25177:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25119:100;25070:149::o:0;16377:107::-;;;;;;;;;;;;;:::o;16262:108::-;;;;;;;;;;;;;:::o;17880:45::-;;;;;;;;;;;;;:::o;16931:35::-;;;;:::o;20220:184::-;20337:7;20369:11;:18;20381:5;20369:18;;;;;;;;;;;;;;;:27;20388:7;20369:27;;;;;;;;;;;;;;;;20362:34;;20220:184;;;;:::o;17315:37::-;;;;:::o;24761:303::-;24867:10;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24902:1:::1;24892:6;:11:::0;24889:168:::1;;24936:6;24929:24;;;24962:4;24929:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24920:48;;24889:168;;;25016:6;25009:23;;;25033:3;25038:6;25009:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25001:44;;24889:168;24761:303:::0;;;;;:::o;24163:134::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24278:10:::1;24245:22;;:44;;;;;;;;;;;;;;;;;;24163:134:::0;:::o;6440:281::-;6363:12;:10;:12::i;:::-;6353:22;;:6;;;;;;;;;;:22;;;6345:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6563:1:::1;6543:22;;:8;:22;;::::0;6521:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6676:8;6647:38;;6668:6;::::0;::::1;;;;;;;;6647:38;;;;;;;;;;;;6705:8;6696:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6440:281:::0;:::o;17932:35::-;;;;;;;;;;;;;:::o;17016:34::-;;;;:::o;188:115::-;241:15;284:10;269:26;;188:115;:::o;21457:371::-;21601:1;21584:19;;:5;:19;;;21576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21682:1;21663:21;;:7;:21;;;21655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21766:6;21736:11;:18;21748:5;21736:18;;;;;;;;;;;;;;;:27;21755:7;21736:27;;;;;;;;;;;;;;;:36;;;;21804:7;21788:32;;21797:5;21788:32;;;21813:6;21788:32;;;;;;:::i;:::-;;;;;;;;21457:371;;;:::o;27172:1890::-;27293:4;27336:1;27318:20;;:6;:20;;;27310:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27420:1;27399:23;;:9;:23;;;27391:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27479:16;;;;;;;;;;;27475:1580;;;27519:41;27534:6;27542:9;27553:6;27519:14;:41::i;:::-;27512:48;;;;27475:1580;27598:15;:23;27614:6;27598:23;;;;;;;;;;;;;;;;;;;;;;;;;27597:24;:55;;;;;27626:15;:26;27642:9;27626:26;;;;;;;;;;;;;;;;;;;;;;;;;27625:27;27597:55;27593:232;;;27713:12;;27703:6;:22;;27673:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;27593:232;27841:28;27872:24;27890:4;27872:9;:24::i;:::-;27841:55;;27911:28;27983:23;;27942:20;:64;;27911:95;;28045:23;:61;;;;;28090:16;;;;;;;;;;;28089:17;28045:61;:103;;;;;28128:12;:20;28141:6;28128:20;;;;;;;;;;;;;;;;;;;;;;;;;28127:21;28045:103;:145;;;;;28169:21;;;;;;;;;;;28045:145;28023:371;;;28229:25;;;;;;;;;;;28225:98;;;28300:23;;28277:46;;28225:98;28342:36;28357:20;28342:14;:36::i;:::-;28023:371;28430:102;28470:6;28430:102;;;;;;;;;;;;;;;;;:9;:17;28440:6;28430:17;;;;;;;;;;;;;;;;:21;;:102;;;;;:::i;:::-;28410:9;:17;28420:6;28410:17;;;;;;;;;;;;;;;:122;;;;28549:19;28572:17;:25;28590:6;28572:25;;;;;;;;;;;;;;;;;;;;;;;;;:74;;;;28618:17;:28;28636:9;28618:28;;;;;;;;;;;;;;;;;;;;;;;;;28572:74;28571:156;;28693:34;28701:6;28709:9;28720:6;28693:7;:34::i;:::-;28571:156;;;28667:6;28571:156;28549:178;;28748:16;;;;;;;;;;;:51;;;;;28769:19;:30;28789:9;28769:30;;;;;;;;;;;;;;;;;;;;;;;;;28768:31;28748:51;28744:134;;;28867:10;;28826:37;28851:11;28826:20;28836:9;28826;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28818:60;;;;;;28744:134;28918:37;28943:11;28918:9;:20;28928:9;28918:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28895:9;:20;28905:9;28895:20;;;;;;;;;;;;;;;:60;;;;28994:9;28977:40;;28986:6;28977:40;;;29005:11;28977:40;;;;;;:::i;:::-;;;;;;;;29039:4;29032:11;;;;;27172:1890;;;;;;:::o;1710:226::-;1830:7;1863:1;1858;:6;;1866:12;1850:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1890:9;1906:1;1902;:5;;;;:::i;:::-;1890:17;;1927:1;1920:8;;;1710:226;;;;;:::o;1566:136::-;1624:7;1651:43;1655:1;1658;1651:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1644:50;;1566:136;;;;:::o;1377:181::-;1435:7;1455:9;1471:1;1467;:5;;;;:::i;:::-;1455:17;;1496:1;1491;:6;;1483:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1549:1;1542:8;;;1377:181;;;;:::o;29070:401::-;29197:4;29234:90;29270:6;29234:90;;;;;;;;;;;;;;;;;:9;:17;29244:6;29234:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;29214:9;:17;29224:6;29214:17;;;;;;;;;;;;;;;:110;;;;29358:32;29383:6;29358:9;:20;29368:9;29358:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29335:9;:20;29345:9;29335:20;;;;;;;;;;;;;;;:55;;;;29423:9;29406:35;;29415:6;29406:35;;;29434:6;29406:35;;;;;;:::i;:::-;;;;;;;;29459:4;29452:11;;29070:401;;;;;:::o;29479:1177::-;18349:4;18330:16;;:23;;;;;;;;;;;;;;;;;;29551:19:::1;29573:107;29678:1;29573:86;29634:24;;29573:42;29599:15;;29573:7;:25;;:42;;;;:::i;:::-;:60;;:86;;;;:::i;:::-;:104;;:107;;;;:::i;:::-;29551:129;;29691:21;29715:24;29727:11;29715:7;:11;;:24;;;;:::i;:::-;29691:48;;29752:31;29769:13;29752:16;:31::i;:::-;29794:22;29819:21;29794:46;;29853:19;29875:76;29918:22;29938:1;29918:15;;:19;;:22;;;;:::i;:::-;29875:24;;:28;;:76;;;;:::i;:::-;29853:98;;29964:26;29993:101;30092:1;29993:80;30061:11;29993:49;30026:15;;29993:14;:32;;:49;;;;:::i;:::-;:67;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;29964:130;;30105:22;30130:51;30169:11;30130:34;30149:14;;30130;:18;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;30105:76;;30192:26;30221:82;30278:14;30221:38;30240:18;30221:14;:18;;:38;;;;:::i;:::-;:42;;:82;;;;:::i;:::-;30192:111;;30341:1;30320:18;:22;30316:105;;;30357:64;30378:22;;;;;;;;;;;30402:18;30357:20;:64::i;:::-;30316:105;30455:1;30438:14;:18;30434:96;;;30471:59;30492:21;;;;;;;;;;;30515:14;30471:20;:59::i;:::-;30434:96;30568:1;30547:18;:22;:41;;;;;30587:1;30573:11;:15;30547:41;30543:105;;;30603:45;30616:11;30629:18;30603:12;:45::i;:::-;30543:105;29540:1116;;;;;;;18395:5:::0;18376:16;;:24;;;;;;;;;;;;;;;;;;29479:1177;:::o;31851:624::-;31971:7;31991:17;32011:1;31991:21;;32029:12;:20;32042:6;32029:20;;;;;;;;;;;;;;;;;;;;;;;;;32025:216;;;32078:38;32112:3;32078:29;32089:17;;32078:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;32066:50;;32025:216;;;32138:12;:23;32151:9;32138:23;;;;;;;;;;;;;;;;;;;;;;;;;32134:107;;;32190:39;32225:3;32190:30;32201:18;;32190:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32178:51;;32134:107;32025:216;32269:1;32257:9;:13;32253:174;;;32314:39;32343:9;32314;:24;32332:4;32314:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32287:9;:24;32305:4;32287:24;;;;;;;;;;;;;;;:66;;;;32398:4;32373:42;;32382:6;32373:42;;;32405:9;32373:42;;;;;;:::i;:::-;;;;;;;;32253:174;32446:21;32457:9;32446:6;:10;;:21;;;;:::i;:::-;32439:28;;;31851:624;;;;;:::o;1944:250::-;2002:7;2031:1;2026;:6;2022:47;;2056:1;2049:8;;;;2022:47;2081:9;2097:1;2093;:5;;;;:::i;:::-;2081:17;;2126:1;2121;2117;:5;;;;:::i;:::-;:10;2109:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2185:1;2178:8;;;1944:250;;;;;:::o;2202:132::-;2260:7;2287:39;2291:1;2294;2287:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2280:46;;2202:132;;;;:::o;30664:658::-;30790:21;30828:1;30814:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30790:40;;30859:4;30841;30846:1;30841:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30885:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30875:4;30880:1;30875:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30920:62;30937:4;30952:15;;;;;;;;;;;30970:11;30920:8;:62::i;:::-;31021:15;;;;;;;;;;;:66;;;31102:11;31128:1;31172:4;31199;31235:15;31021:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31279:35;31296:11;31309:4;31279:35;;;;;;;:::i;:::-;;;;;;;;30719:603;30664:658;:::o;25363:140::-;25469:9;:18;;:26;25488:6;25469:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25363:140;;:::o;31330:513::-;31478:62;31495:4;31510:15;;;;;;;;;;;31528:11;31478:8;:62::i;:::-;31583:15;;;;;;;;;;;:31;;;31622:9;31655:4;31675:11;31701:1;31744;31787:7;:5;:7::i;:::-;31809:15;31583:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31330:513;;:::o;2342:312::-;2462:7;2494:1;2490;:5;2497:12;2482:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2521:9;2537:1;2533;:5;;;;:::i;:::-;2521:17;;2645:1;2638:8;;;2342:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:116::-;5471:21;5486:5;5471:21;:::i;:::-;5464:5;5461:32;5451:60;;5507:1;5504;5497:12;5451:60;5401:116;:::o;5523:133::-;5566:5;5604:6;5591:20;5582:29;;5620:30;5644:5;5620:30;:::i;:::-;5523:133;;;;:::o;5662:323::-;5718:6;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:50;5960:7;5951:6;5940:9;5936:22;5918:50;:::i;:::-;5908:60;;5864:114;5662:323;;;;:::o;5991:118::-;6078:24;6096:5;6078:24;:::i;:::-;6073:3;6066:37;5991:118;;:::o;6115:222::-;6208:4;6246:2;6235:9;6231:18;6223:26;;6259:71;6327:1;6316:9;6312:17;6303:6;6259:71;:::i;:::-;6115:222;;;;:::o;6343:86::-;6378:7;6418:4;6411:5;6407:16;6396:27;;6343:86;;;:::o;6435:112::-;6518:22;6534:5;6518:22;:::i;:::-;6513:3;6506:35;6435:112;;:::o;6553:214::-;6642:4;6680:2;6669:9;6665:18;6657:26;;6693:67;6757:1;6746:9;6742:17;6733:6;6693:67;:::i;:::-;6553:214;;;;:::o;6773:329::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:53;7077:7;7068:6;7057:9;7053:22;7032:53;:::i;:::-;7022:63;;6978:117;6773:329;;;;:::o;7108:::-;7167:6;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7108:329;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:619::-;8474:6;8482;8490;8539:2;8527:9;8518:7;8514:23;8510:32;8507:119;;;8545:79;;:::i;:::-;8507:119;8665:1;8690:53;8735:7;8726:6;8715:9;8711:22;8690:53;:::i;:::-;8680:63;;8636:117;8792:2;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8763:118;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8397:619;;;;;:::o;9022:1057::-;9126:6;9134;9142;9150;9158;9166;9215:3;9203:9;9194:7;9190:23;9186:33;9183:120;;;9222:79;;:::i;:::-;9183:120;9342:1;9367:53;9412:7;9403:6;9392:9;9388:22;9367:53;:::i;:::-;9357:63;;9313:117;9469:2;9495:53;9540:7;9531:6;9520:9;9516:22;9495:53;:::i;:::-;9485:63;;9440:118;9597:2;9623:53;9668:7;9659:6;9648:9;9644:22;9623:53;:::i;:::-;9613:63;;9568:118;9725:2;9751:53;9796:7;9787:6;9776:9;9772:22;9751:53;:::i;:::-;9741:63;;9696:118;9853:3;9880:53;9925:7;9916:6;9905:9;9901:22;9880:53;:::i;:::-;9870:63;;9824:119;9982:3;10009:53;10054:7;10045:6;10034:9;10030:22;10009:53;:::i;:::-;9999:63;;9953:119;9022:1057;;;;;;;;:::o;10085:104::-;10130:7;10159:24;10177:5;10159:24;:::i;:::-;10148:35;;10085:104;;;:::o;10195:142::-;10298:32;10324:5;10298:32;:::i;:::-;10293:3;10286:45;10195:142;;:::o;10343:254::-;10452:4;10490:2;10479:9;10475:18;10467:26;;10503:87;10587:1;10576:9;10572:17;10563:6;10503:87;:::i;:::-;10343:254;;;;:::o;10603:474::-;10671:6;10679;10728:2;10716:9;10707:7;10703:23;10699:32;10696:119;;;10734:79;;:::i;:::-;10696:119;10854:1;10879:53;10924:7;10915:6;10904:9;10900:22;10879:53;:::i;:::-;10869:63;;10825:117;10981:2;11007:53;11052:7;11043:6;11032:9;11028:22;11007:53;:::i;:::-;10997:63;;10952:118;10603:474;;;;;:::o;11083:180::-;11131:77;11128:1;11121:88;11228:4;11225:1;11218:15;11252:4;11249:1;11242:15;11269:320;11313:6;11350:1;11344:4;11340:12;11330:22;;11397:1;11391:4;11387:12;11418:18;11408:81;;11474:4;11466:6;11462:17;11452:27;;11408:81;11536:2;11528:6;11525:14;11505:18;11502:38;11499:84;;11555:18;;:::i;:::-;11499:84;11320:269;11269:320;;;:::o;11595:182::-;11735:34;11731:1;11723:6;11719:14;11712:58;11595:182;:::o;11783:366::-;11925:3;11946:67;12010:2;12005:3;11946:67;:::i;:::-;11939:74;;12022:93;12111:3;12022:93;:::i;:::-;12140:2;12135:3;12131:12;12124:19;;11783:366;;;:::o;12155:419::-;12321:4;12359:2;12348:9;12344:18;12336:26;;12408:9;12402:4;12398:20;12394:1;12383:9;12379:17;12372:47;12436:131;12562:4;12436:131;:::i;:::-;12428:139;;12155:419;;;:::o;12580:143::-;12637:5;12668:6;12662:13;12653:22;;12684:33;12711:5;12684:33;:::i;:::-;12580:143;;;;:::o;12729:351::-;12799:6;12848:2;12836:9;12827:7;12823:23;12819:32;12816:119;;;12854:79;;:::i;:::-;12816:119;12974:1;12999:64;13055:7;13046:6;13035:9;13031:22;12999:64;:::i;:::-;12989:74;;12945:128;12729:351;;;;:::o;13086:332::-;13207:4;13245:2;13234:9;13230:18;13222:26;;13258:71;13326:1;13315:9;13311:17;13302:6;13258:71;:::i;:::-;13339:72;13407:2;13396:9;13392:18;13383:6;13339:72;:::i;:::-;13086:332;;;;;:::o;13424:143::-;13481:5;13512:6;13506:13;13497:22;;13528:33;13555:5;13528:33;:::i;:::-;13424:143;;;;:::o;13573:351::-;13643:6;13692:2;13680:9;13671:7;13667:23;13663:32;13660:119;;;13698:79;;:::i;:::-;13660:119;13818:1;13843:64;13899:7;13890:6;13879:9;13875:22;13843:64;:::i;:::-;13833:74;;13789:128;13573:351;;;;:::o;13930:332::-;14051:4;14089:2;14078:9;14074:18;14066:26;;14102:71;14170:1;14159:9;14155:17;14146:6;14102:71;:::i;:::-;14183:72;14251:2;14240:9;14236:18;14227:6;14183:72;:::i;:::-;13930:332;;;;;:::o;14268:137::-;14322:5;14353:6;14347:13;14338:22;;14369:30;14393:5;14369:30;:::i;:::-;14268:137;;;;:::o;14411:345::-;14478:6;14527:2;14515:9;14506:7;14502:23;14498:32;14495:119;;;14533:79;;:::i;:::-;14495:119;14653:1;14678:61;14731:7;14722:6;14711:9;14707:22;14678:61;:::i;:::-;14668:71;;14624:125;14411:345;;;;:::o;14762:225::-;14902:34;14898:1;14890:6;14886:14;14879:58;14971:8;14966:2;14958:6;14954:15;14947:33;14762:225;:::o;14993:366::-;15135:3;15156:67;15220:2;15215:3;15156:67;:::i;:::-;15149:74;;15232:93;15321:3;15232:93;:::i;:::-;15350:2;15345:3;15341:12;15334:19;;14993:366;;;:::o;15365:419::-;15531:4;15569:2;15558:9;15554:18;15546:26;;15618:9;15612:4;15608:20;15604:1;15593:9;15589:17;15582:47;15646:131;15772:4;15646:131;:::i;:::-;15638:139;;15365:419;;;:::o;15790:223::-;15930:34;15926:1;15918:6;15914:14;15907:58;15999:6;15994:2;15986:6;15982:15;15975:31;15790:223;:::o;16019:366::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16391:419;;;:::o;16816:221::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:4;17020:2;17012:6;17008:15;17001:29;16816:221;:::o;17043:366::-;17185:3;17206:67;17270:2;17265:3;17206:67;:::i;:::-;17199:74;;17282:93;17371:3;17282:93;:::i;:::-;17400:2;17395:3;17391:12;17384:19;;17043:366;;;:::o;17415:419::-;17581:4;17619:2;17608:9;17604:18;17596:26;;17668:9;17662:4;17658:20;17654:1;17643:9;17639:17;17632:47;17696:131;17822:4;17696:131;:::i;:::-;17688:139;;17415:419;;;:::o;17840:224::-;17980:34;17976:1;17968:6;17964:14;17957:58;18049:7;18044:2;18036:6;18032:15;18025:32;17840:224;:::o;18070:366::-;18212:3;18233:67;18297:2;18292:3;18233:67;:::i;:::-;18226:74;;18309:93;18398:3;18309:93;:::i;:::-;18427:2;18422:3;18418:12;18411:19;;18070:366;;;:::o;18442:419::-;18608:4;18646:2;18635:9;18631:18;18623:26;;18695:9;18689:4;18685:20;18681:1;18670:9;18666:17;18659:47;18723:131;18849:4;18723:131;:::i;:::-;18715:139;;18442:419;;;:::o;18867:222::-;19007:34;19003:1;18995:6;18991:14;18984:58;19076:5;19071:2;19063:6;19059:15;19052:30;18867:222;:::o;19095:366::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:419::-;19633:4;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19467:419;;;:::o;19892:227::-;20032:34;20028:1;20020:6;20016:14;20009:58;20101:10;20096:2;20088:6;20084:15;20077:35;19892:227;:::o;20125:366::-;20267:3;20288:67;20352:2;20347:3;20288:67;:::i;:::-;20281:74;;20364:93;20453:3;20364:93;:::i;:::-;20482:2;20477:3;20473:12;20466:19;;20125:366;;;:::o;20497:419::-;20663:4;20701:2;20690:9;20686:18;20678:26;;20750:9;20744:4;20740:20;20736:1;20725:9;20721:17;20714:47;20778:131;20904:4;20778:131;:::i;:::-;20770:139;;20497:419;;;:::o;20922:180::-;20970:77;20967:1;20960:88;21067:4;21064:1;21057:15;21091:4;21088:1;21081:15;21108:194;21148:4;21168:20;21186:1;21168:20;:::i;:::-;21163:25;;21202:20;21220:1;21202:20;:::i;:::-;21197:25;;21246:1;21243;21239:9;21231:17;;21270:1;21264:4;21261:11;21258:37;;;21275:18;;:::i;:::-;21258:37;21108:194;;;;:::o;21308:191::-;21348:3;21367:20;21385:1;21367:20;:::i;:::-;21362:25;;21401:20;21419:1;21401:20;:::i;:::-;21396:25;;21444:1;21441;21437:9;21430:16;;21465:3;21462:1;21459:10;21456:36;;;21472:18;;:::i;:::-;21456:36;21308:191;;;;:::o;21505:177::-;21645:29;21641:1;21633:6;21629:14;21622:53;21505:177;:::o;21688:366::-;21830:3;21851:67;21915:2;21910:3;21851:67;:::i;:::-;21844:74;;21927:93;22016:3;21927:93;:::i;:::-;22045:2;22040:3;22036:12;22029:19;;21688:366;;;:::o;22060:419::-;22226:4;22264:2;22253:9;22249:18;22241:26;;22313:9;22307:4;22303:20;22299:1;22288:9;22284:17;22277:47;22341:131;22467:4;22341:131;:::i;:::-;22333:139;;22060:419;;;:::o;22485:410::-;22525:7;22548:20;22566:1;22548:20;:::i;:::-;22543:25;;22582:20;22600:1;22582:20;:::i;:::-;22577:25;;22637:1;22634;22630:9;22659:30;22677:11;22659:30;:::i;:::-;22648:41;;22838:1;22829:7;22825:15;22822:1;22819:22;22799:1;22792:9;22772:83;22749:139;;22868:18;;:::i;:::-;22749:139;22533:362;22485:410;;;;:::o;22901:180::-;22949:77;22946:1;22939:88;23046:4;23043:1;23036:15;23070:4;23067:1;23060:15;23087:185;23127:1;23144:20;23162:1;23144:20;:::i;:::-;23139:25;;23178:20;23196:1;23178:20;:::i;:::-;23173:25;;23217:1;23207:35;;23222:18;;:::i;:::-;23207:35;23264:1;23261;23257:9;23252:14;;23087:185;;;;:::o;23278:220::-;23418:34;23414:1;23406:6;23402:14;23395:58;23487:3;23482:2;23474:6;23470:15;23463:28;23278:220;:::o;23504:366::-;23646:3;23667:67;23731:2;23726:3;23667:67;:::i;:::-;23660:74;;23743:93;23832:3;23743:93;:::i;:::-;23861:2;23856:3;23852:12;23845:19;;23504:366;;;:::o;23876:419::-;24042:4;24080:2;24069:9;24065:18;24057:26;;24129:9;24123:4;24119:20;24115:1;24104:9;24100:17;24093:47;24157:131;24283:4;24157:131;:::i;:::-;24149:139;;23876:419;;;:::o;24301:180::-;24349:77;24346:1;24339:88;24446:4;24443:1;24436:15;24470:4;24467:1;24460:15;24487:180;24535:77;24532:1;24525:88;24632:4;24629:1;24622:15;24656:4;24653:1;24646:15;24673:85;24718:7;24747:5;24736:16;;24673:85;;;:::o;24764:158::-;24822:9;24855:61;24873:42;24882:32;24908:5;24882:32;:::i;:::-;24873:42;:::i;:::-;24855:61;:::i;:::-;24842:74;;24764:158;;;:::o;24928:147::-;25023:45;25062:5;25023:45;:::i;:::-;25018:3;25011:58;24928:147;;:::o;25081:114::-;25148:6;25182:5;25176:12;25166:22;;25081:114;;;:::o;25201:184::-;25300:11;25334:6;25329:3;25322:19;25374:4;25369:3;25365:14;25350:29;;25201:184;;;;:::o;25391:132::-;25458:4;25481:3;25473:11;;25511:4;25506:3;25502:14;25494:22;;25391:132;;;:::o;25529:108::-;25606:24;25624:5;25606:24;:::i;:::-;25601:3;25594:37;25529:108;;:::o;25643:179::-;25712:10;25733:46;25775:3;25767:6;25733:46;:::i;:::-;25811:4;25806:3;25802:14;25788:28;;25643:179;;;;:::o;25828:113::-;25898:4;25930;25925:3;25921:14;25913:22;;25828:113;;;:::o;25977:732::-;26096:3;26125:54;26173:5;26125:54;:::i;:::-;26195:86;26274:6;26269:3;26195:86;:::i;:::-;26188:93;;26305:56;26355:5;26305:56;:::i;:::-;26384:7;26415:1;26400:284;26425:6;26422:1;26419:13;26400:284;;;26501:6;26495:13;26528:63;26587:3;26572:13;26528:63;:::i;:::-;26521:70;;26614:60;26667:6;26614:60;:::i;:::-;26604:70;;26460:224;26447:1;26444;26440:9;26435:14;;26400:284;;;26404:14;26700:3;26693:10;;26101:608;;;25977:732;;;;:::o;26715:831::-;26978:4;27016:3;27005:9;27001:19;26993:27;;27030:71;27098:1;27087:9;27083:17;27074:6;27030:71;:::i;:::-;27111:80;27187:2;27176:9;27172:18;27163:6;27111:80;:::i;:::-;27238:9;27232:4;27228:20;27223:2;27212:9;27208:18;27201:48;27266:108;27369:4;27360:6;27266:108;:::i;:::-;27258:116;;27384:72;27452:2;27441:9;27437:18;27428:6;27384:72;:::i;:::-;27466:73;27534:3;27523:9;27519:19;27510:6;27466:73;:::i;:::-;26715:831;;;;;;;;:::o;27552:483::-;27723:4;27761:2;27750:9;27746:18;27738:26;;27774:71;27842:1;27831:9;27827:17;27818:6;27774:71;:::i;:::-;27892:9;27886:4;27882:20;27877:2;27866:9;27862:18;27855:48;27920:108;28023:4;28014:6;27920:108;:::i;:::-;27912:116;;27552:483;;;;;:::o;28041:807::-;28290:4;28328:3;28317:9;28313:19;28305:27;;28342:71;28410:1;28399:9;28395:17;28386:6;28342:71;:::i;:::-;28423:72;28491:2;28480:9;28476:18;28467:6;28423:72;:::i;:::-;28505:80;28581:2;28570:9;28566:18;28557:6;28505:80;:::i;:::-;28595;28671:2;28660:9;28656:18;28647:6;28595:80;:::i;:::-;28685:73;28753:3;28742:9;28738:19;28729:6;28685:73;:::i;:::-;28768;28836:3;28825:9;28821:19;28812:6;28768:73;:::i;:::-;28041:807;;;;;;;;;:::o;28854:663::-;28942:6;28950;28958;29007:2;28995:9;28986:7;28982:23;28978:32;28975:119;;;29013:79;;:::i;:::-;28975:119;29133:1;29158:64;29214:7;29205:6;29194:9;29190:22;29158:64;:::i;:::-;29148:74;;29104:128;29271:2;29297:64;29353:7;29344:6;29333:9;29329:22;29297:64;:::i;:::-;29287:74;;29242:129;29410:2;29436:64;29492:7;29483:6;29472:9;29468:22;29436:64;:::i;:::-;29426:74;;29381:129;28854:663;;;;;:::o

Swarm Source

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