ETH Price: $3,522.30 (+5.00%)

Contract

0x5CfD03B212f0e12E31ba25dbd84263624C7D71C8
 

Overview

ETH Balance

0.1847134 ETH

Eth Value

$650.62 (@ $3,522.30/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve214446892024-12-20 15:41:1114 hrs ago1734709271IN
0x5CfD03B2...24C7D71C8
0 ETH0.0008938635.92693199
Approve214377982024-12-19 16:35:5937 hrs ago1734626159IN
0x5CfD03B2...24C7D71C8
0 ETH0.0025440153.93982839
Approve214201452024-12-17 5:24:474 days ago1734413087IN
0x5CfD03B2...24C7D71C8
0 ETH0.0004998210.59769266
Transfer214100342024-12-15 19:34:355 days ago1734291275IN
0x5CfD03B2...24C7D71C8
0 ETH0.001003212.78021666
Approve214087862024-12-15 15:23:115 days ago1734276191IN
0x5CfD03B2...24C7D71C8
0 ETH0.0004950210.49580354
Approve213808882024-12-11 17:55:119 days ago1733939711IN
0x5CfD03B2...24C7D71C8
0 ETH0.0011211923.77236782
Approve213734102024-12-10 16:51:2310 days ago1733849483IN
0x5CfD03B2...24C7D71C8
0 ETH0.0030925165.56940872
Approve213726422024-12-10 14:16:5910 days ago1733840219IN
0x5CfD03B2...24C7D71C8
0 ETH0.003867282.43540598
Approve213518602024-12-07 16:39:2313 days ago1733589563IN
0x5CfD03B2...24C7D71C8
0 ETH0.0008397917.9014777
Approve213507632024-12-07 12:58:1113 days ago1733576291IN
0x5CfD03B2...24C7D71C8
0 ETH0.0006260513.25718858
Approve213507632024-12-07 12:58:1113 days ago1733576291IN
0x5CfD03B2...24C7D71C8
0 ETH0.0006260513.25718858
Approve213503952024-12-07 11:44:1113 days ago1733571851IN
0x5CfD03B2...24C7D71C8
0 ETH0.0006442913.66064689
Approve213436952024-12-06 13:16:5914 days ago1733491019IN
0x5CfD03B2...24C7D71C8
0 ETH0.0012015525.47609391
Approve213394602024-12-05 23:05:2315 days ago1733439923IN
0x5CfD03B2...24C7D71C8
0 ETH0.0014709431.18783914
Approve213003362024-11-30 11:56:4720 days ago1732967807IN
0x5CfD03B2...24C7D71C8
0 ETH0.002358250
Approve213003302024-11-30 11:55:3520 days ago1732967735IN
0x5CfD03B2...24C7D71C8
0 ETH0.002345650
Approve213003282024-11-30 11:55:1120 days ago1732967711IN
0x5CfD03B2...24C7D71C8
0 ETH0.002345650
Approve212865832024-11-28 13:45:4722 days ago1732801547IN
0x5CfD03B2...24C7D71C8
0 ETH0.0005067610.80532972
Approve212865822024-11-28 13:45:3522 days ago1732801535IN
0x5CfD03B2...24C7D71C8
0 ETH0.0003165610.62299176
Approve212789162024-11-27 11:53:5923 days ago1732708439IN
0x5CfD03B2...24C7D71C8
0 ETH0.0005911812.5345879
Approve212736372024-11-26 18:12:2324 days ago1732644743IN
0x5CfD03B2...24C7D71C8
0 ETH0.0008445717.88444112
Transfer212733122024-11-26 17:07:2324 days ago1732640843IN
0x5CfD03B2...24C7D71C8
0 ETH0.0011414815.48633589
Approve212539522024-11-24 0:14:3527 days ago1732407275IN
0x5CfD03B2...24C7D71C8
0 ETH0.0006468313.71462941
Approve212533752024-11-23 22:18:4727 days ago1732400327IN
0x5CfD03B2...24C7D71C8
0 ETH0.0005391211.43086022
Transfer212225022024-11-19 14:53:3531 days ago1732028015IN
0x5CfD03B2...24C7D71C8
0 ETH0.003554148.22588795
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QHASH

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// https://qhash.io/

// https://x.com/QHashX

// https://t.me/QHashPortal


// SPDX-License-Identifier: MIT


pragma solidity ^0.8.20;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

interface IERC20 {

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

    function per(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= 100, "Percentage must be between 0 and 100");
        return a * b / 100;
    }

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

    IUniswapV2Router02 public immutable _uniswapV2Router;
    address public uniswapV2Pair;
    address private devWallet;
    address private marketingWallet;
    address private constant deadAddress = address(0xdead);

    uint8 private constant _decimals = 9;
    uint256 public initialTotalSupply = 10000000 * 10**_decimals;

    uint256 public buyFee = 20;
    uint256 public sellFee = 20;

    // 1% is max wallet
    uint256 public maxWallet = (initialTotalSupply * 10)/1000;
    uint256 public maxTransactionAmount = maxWallet;

    bool private swapping;

    bool public transferDelayEnabled = true;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    
    //swap for 0.1%
    uint256 public swapTokensAtAmount = (initialTotalSupply * 1)/1000;

    bool public tradingOpen = false;
    bool public swapEnabled = false;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor() ERC20("Quantum Hash", "QHASH"){
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        marketingWallet = payable(0x789557Fecc7D434F73A47219d1715B5f157ED69B);
        devWallet = payable(_msgSender());

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(_msgSender()), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromFees(address(_msgSender()), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        // mint
        _mint(devWallet, initialTotalSupply);
    }

    receive() external payable {}

    function addLPToUniswap() external onlyOwner() {
        require(!tradingOpen,"Trading is already open");
        _approve(address(this), address(_uniswapV2Router), initialTotalSupply);
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            0x2960636Ab93D53768DBD41E02F04716f9CDA68c3,
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
    }

    function burn(uint256 amount) external {
        _burn(_msgSender(), amount);
    }

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


    function openTrading() external onlyOwner() {
        swapEnabled = true;
        tradingOpen = true;
    }

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

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

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

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

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

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

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

            if (transferDelayEnabled && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                    if (to != address(_uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number && _holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
            }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack(amount);
            swapping = false;
        }

        bool takeFee = !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to];

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to]) {
                fees = amount.mul(sellFee).div(100);
            }
            else if(automatedMarketMakerPairs[from]) {
                fees = amount.mul(buyFee).div(100);
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            marketingWallet,
            block.timestamp
        );
    }

    function setFee(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        sellFee = _sellFee;
        buyFee = _buyFee;
    }

    function stopTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already disabled!");
        transferDelayEnabled = false;
    }


    function removeTheLimits() external onlyOwner {
        maxTransactionAmount = initialTotalSupply;
        maxWallet = initialTotalSupply;
    }

    function manualSwapToken(uint256 percent) external {
        require(_msgSender() == marketingWallet);
        uint256 contractBalance = balanceOf(address(this));
        uint256 swapAmount = contractBalance * percent / 100;
        swapTokensForEth(swapAmount);
    }

    function withdrawEth() external {
        require(address(this).balance > 0, "Token: no ETH in the contract");
        require(_msgSender() == devWallet);
        payable(msg.sender).transfer(address(this).balance);
    }

    function tokensWithdraw() external {
        require(_msgSender() == devWallet);
        uint256 amount = balanceOf(address(this));
        _transfer(address(this), devWallet, amount);
    }

       //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 _swapTokensAtAmount) public onlyOwner {
        swapTokensAtAmount = _swapTokensAtAmount;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    function swapBack(uint256 tokenAmount) private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        uint256 tokensToSwap = contractBalance;

        if (tokensToSwap >= maxTransactionAmount) {
            tokensToSwap = maxTransactionAmount;
        }

        if(tokensToSwap > tokenAmount) {
            tokensToSwap = tokenAmount;
        }

        swapTokensForEth(tokensToSwap);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLPToUniswap","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwapToken","outputs":[],"stateMutability":"nonpayable","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTheLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTransferDelay","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":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","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":"from","type":"address"},{"internalType":"address","name":"to","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":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526009600a6100129190610bf8565b629896806100209190610c42565b6009556014600a556014600b556103e8600a60095461003f9190610c42565b6100499190610cb0565b600c55600c54600d556001600e60016101000a81548160ff0219169083151502179055506103e8600160095461007f9190610c42565b6100899190610cb0565b6010555f60115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff0219169083151502179055503480156100ca575f80fd5b506040518060400160405280600c81526020017f5175616e74756d204861736800000000000000000000000000000000000000008152506040518060400160405280600581526020017f514841534800000000000000000000000000000000000000000000000000000081525081600390816101469190610f11565b5080600490816101569190610f11565b50505061017561016a6105ef60201b60201c565b6105f660201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505073789557fecc7d434f73a47219d1715b5f157ed69b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061021f6105ef60201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061026f3060016106b960201b60201c565b61028261dead60016106b960201b60201c565b610295608051600161076d60201b60201c565b6102a630600161076d60201b60201c565b6102b961dead600161076d60201b60201c565b6102d76102ca6105ef60201b60201c565b600161076d60201b60201c565b61030960085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161076d60201b60201c565b61033b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161076d60201b60201c565b61035961034c6105ef60201b60201c565b60016106b960201b60201c565b61038b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016106b960201b60201c565b6103bd60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016106b960201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610408573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061042c919061103e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610493573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b7919061103e565b6040518363ffffffff1660e01b81526004016104d4929190611078565b6020604051808303815f875af11580156104f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610514919061103e565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061058560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161076d60201b60201c565b6105b760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016107d360201b60201c565b6105ea60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095461087160201b60201c565b61120d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6106c76109cb60201b60201c565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161076191906110b9565b60405180910390a25050565b61077b6109cb60201b60201c565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d69061112c565b60405180910390fd5b6108f05f8383610a5560201b60201c565b8060025f828254610901919061114a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109ae919061118c565b60405180910390a36109c75f8383610a5a60201b60201c565b5050565b6109d96105ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109fd610a5f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a906111ef565b60405180910390fd5b565b505050565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610b0957808604811115610ae557610ae4610a87565b5b6001851615610af45780820291505b8081029050610b0285610ab4565b9450610ac9565b94509492505050565b5f82610b215760019050610bdc565b81610b2e575f9050610bdc565b8160018114610b445760028114610b4e57610b7d565b6001915050610bdc565b60ff841115610b6057610b5f610a87565b5b8360020a915084821115610b7757610b76610a87565b5b50610bdc565b5060208310610133831016604e8410600b8410161715610bb25782820a905083811115610bad57610bac610a87565b5b610bdc565b610bbf8484846001610ac0565b92509050818404811115610bd657610bd5610a87565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f610c0282610be3565b9150610c0d83610bec565b9250610c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610b12565b905092915050565b5f610c4c82610be3565b9150610c5783610be3565b9250828202610c6581610be3565b91508282048414831517610c7c57610c7b610a87565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610cba82610be3565b9150610cc583610be3565b925082610cd557610cd4610c83565b5b828204905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610d5b57607f821691505b602082108103610d6e57610d6d610d17565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610dd07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d95565b610dda8683610d95565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610e15610e10610e0b84610be3565b610df2565b610be3565b9050919050565b5f819050919050565b610e2e83610dfb565b610e42610e3a82610e1c565b848454610da1565b825550505050565b5f90565b610e56610e4a565b610e61818484610e25565b505050565b5b81811015610e8457610e795f82610e4e565b600181019050610e67565b5050565b601f821115610ec957610e9a81610d74565b610ea384610d86565b81016020851015610eb2578190505b610ec6610ebe85610d86565b830182610e66565b50505b505050565b5f82821c905092915050565b5f610ee95f1984600802610ece565b1980831691505092915050565b5f610f018383610eda565b9150826002028217905092915050565b610f1a82610ce0565b67ffffffffffffffff811115610f3357610f32610cea565b5b610f3d8254610d44565b610f48828285610e88565b5f60209050601f831160018114610f79575f8415610f67578287015190505b610f718582610ef6565b865550610fd8565b601f198416610f8786610d74565b5f5b82811015610fae57848901518255600182019150602085019450602081019050610f89565b86831015610fcb5784890151610fc7601f891682610eda565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61100d82610fe4565b9050919050565b61101d81611003565b8114611027575f80fd5b50565b5f8151905061103881611014565b92915050565b5f6020828403121561105357611052610fe0565b5b5f6110608482850161102a565b91505092915050565b61107281611003565b82525050565b5f60408201905061108b5f830185611069565b6110986020830184611069565b9392505050565b5f8115159050919050565b6110b38161109f565b82525050565b5f6020820190506110cc5f8301846110aa565b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611116601f836110d2565b9150611121826110e2565b602082019050919050565b5f6020820190508181035f8301526111438161110a565b9050919050565b5f61115482610be3565b915061115f83610be3565b925082820190508082111561117757611176610a87565b5b92915050565b61118681610be3565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6111d96020836110d2565b91506111e4826111a5565b602082019050919050565b5f6020820190508181035f830152611206816111cd565b9050919050565b608051613eeb6112565f395f8181610b1101528181610b3a01528181610c3b01528181610d8801528181611b2c0152818161269401528181612773015261279a0152613eeb5ff3fe60806040526004361061023e575f3560e01c8063715018a61161012d578063a9059cbb116100aa578063dd62ed3e1161006e578063dd62ed3e146107e9578063e2f4560514610825578063f2fde38b1461084f578063f8b45b0514610877578063ffb54a99146108a157610245565b8063a9059cbb1461071b578063c024666814610757578063c876d0b91461077f578063c8c8ebe4146107a9578063c9567bf9146107d357610245565b806398a5c315116100f157806398a5c315146106635780639a7a23d61461068b5780639b636545146106b3578063a0ef91df146106c9578063a457c2d7146106df57610245565b8063715018a6146105a957806371f5f01a146105bf5780637571336a146105e75780638da5cb5b1461060f57806395d89b411461063957610245565b80633edab509116101bb57806352f7c9881161017f57806352f7c988146104c9578063583e0568146104f15780636d8aa8f81461051b5780636ddd17131461054357806370a082311461056d57610245565b80633edab509146103fb57806342966c6814610411578063470624021461043957806349bd5a5e146104635780634fbee1931461048d57610245565b80632b14ca56116102025780632b14ca561461032b5780632cb743f714610355578063311028af1461036b578063313ce5671461039557806339509351146103bf57610245565b806306fdde0314610249578063095ea7b314610273578063139864a8146102af57806318160ddd146102c557806323b872dd146102ef57610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d6108cb565b60405161026a9190612c40565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612cf1565b61095b565b6040516102a69190612d49565b60405180910390f35b3480156102ba575f80fd5b506102c361097d565b005b3480156102d0575f80fd5b506102d9610999565b6040516102e69190612d71565b60405180910390f35b3480156102fa575f80fd5b5061031560048036038101906103109190612d8a565b6109a2565b6040516103229190612d49565b60405180910390f35b348015610336575f80fd5b5061033f6109d0565b60405161034c9190612d71565b60405180910390f35b348015610360575f80fd5b506103696109d6565b005b348015610376575f80fd5b5061037f610a70565b60405161038c9190612d71565b60405180910390f35b3480156103a0575f80fd5b506103a9610a76565b6040516103b69190612df5565b60405180910390f35b3480156103ca575f80fd5b506103e560048036038101906103e09190612cf1565b610a7e565b6040516103f29190612d49565b60405180910390f35b348015610406575f80fd5b5061040f610ab4565b005b34801561041c575f80fd5b5061043760048036038101906104329190612e0e565b610cdb565b005b348015610444575f80fd5b5061044d610cef565b60405161045a9190612d71565b60405180910390f35b34801561046e575f80fd5b50610477610cf5565b6040516104849190612e48565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae9190612e61565b610d1a565b6040516104c09190612d49565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea9190612e8c565b610d6c565b005b3480156104fc575f80fd5b50610505610d86565b6040516105129190612f25565b60405180910390f35b348015610526575f80fd5b50610541600480360381019061053c9190612f68565b610daa565b005b34801561054e575f80fd5b50610557610dcf565b6040516105649190612d49565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190612e61565b610de2565b6040516105a09190612d71565b60405180910390f35b3480156105b4575f80fd5b506105bd610e27565b005b3480156105ca575f80fd5b506105e560048036038101906105e09190612e0e565b610e3a565b005b3480156105f2575f80fd5b5061060d60048036038101906106089190612f93565b610ece565b005b34801561061a575f80fd5b50610623610f2e565b6040516106309190612e48565b60405180910390f35b348015610644575f80fd5b5061064d610f56565b60405161065a9190612c40565b60405180910390f35b34801561066e575f80fd5b5061068960048036038101906106849190612e0e565b610fe6565b005b348015610696575f80fd5b506106b160048036038101906106ac9190612f93565b610ff8565b005b3480156106be575f80fd5b506106c761109d565b005b3480156106d4575f80fd5b506106dd611110565b005b3480156106ea575f80fd5b5061070560048036038101906107009190612cf1565b6111f7565b6040516107129190612d49565b60405180910390f35b348015610726575f80fd5b50610741600480360381019061073c9190612cf1565b61126c565b60405161074e9190612d49565b60405180910390f35b348015610762575f80fd5b5061077d60048036038101906107789190612f93565b61128e565b005b34801561078a575f80fd5b5061079361133c565b6040516107a09190612d49565b60405180910390f35b3480156107b4575f80fd5b506107bd61134f565b6040516107ca9190612d71565b60405180910390f35b3480156107de575f80fd5b506107e7611355565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190612fd1565b611394565b60405161081c9190612d71565b60405180910390f35b348015610830575f80fd5b50610839611416565b6040516108469190612d71565b60405180910390f35b34801561085a575f80fd5b5061087560048036038101906108709190612e61565b61141c565b005b348015610882575f80fd5b5061088b61149e565b6040516108989190612d71565b60405180910390f35b3480156108ac575f80fd5b506108b56114a4565b6040516108c29190612d49565b60405180910390f35b6060600380546108da9061303c565b80601f01602080910402602001604051908101604052809291908181526020018280546109069061303c565b80156109515780601f1061092857610100808354040283529160200191610951565b820191905f5260205f20905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b5f806109656114b6565b90506109728185856114bd565b600191505092915050565b610985611680565b600954600d81905550600954600c81905550565b5f600254905090565b5f806109ac6114b6565b90506109b98582856116fe565b6109c4858585611789565b60019150509392505050565b600b5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a166114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610a35575f80fd5b5f610a3f30610de2565b9050610a6d3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611789565b50565b60095481565b5f6009905090565b5f80610a886114b6565b9050610aa9818585610a9a8589611394565b610aa49190613099565b6114bd565b600191505092915050565b610abc611680565b60115f9054906101000a900460ff1615610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290613116565b60405180910390fd5b610b38307f00000000000000000000000000000000000000000000000000000000000000006009546114bd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b7f30610de2565b5f80732960636ab93d53768dbd41e02f04716f9cda68c3426040518863ffffffff1660e01b8152600401610bb89695949392919061316d565b60606040518083038185885af1158015610bd4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bf991906131e0565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c98929190613230565b6020604051808303815f875af1158015610cb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd8919061326b565b50565b610cec610ce66114b6565b82612371565b50565b600a5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610d74611680565b80600b8190555081600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610db2611680565b80601160016101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e2f611680565b610e385f612534565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e7a6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610e99575f80fd5b5f610ea330610de2565b90505f60648383610eb49190613296565b610ebe9190613304565b9050610ec9816125f7565b505050565b610ed6611680565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f659061303c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f919061303c565b8015610fdc5780601f10610fb357610100808354040283529160200191610fdc565b820191905f5260205f20905b815481529060010190602001808311610fbf57829003601f168201915b5050505050905090565b610fee611680565b8060108190555050565b611000611680565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906133a4565b60405180910390fd5b611099828261284b565b5050565b6110a5611680565b600e60019054906101000a900460ff166110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061340c565b60405180910390fd5b5f600e60016101000a81548160ff021916908315150217905550565b5f4711611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613474565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111926114b6565b73ffffffffffffffffffffffffffffffffffffffff16146111b1575f80fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156111f4573d5f803e3d5ffd5b50565b5f806112016114b6565b90505f61120e8286611394565b905083811015611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90613502565b60405180910390fd5b61126082868684036114bd565b60019250505092915050565b5f806112766114b6565b9050611283818585611789565b600191505092915050565b611296611680565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113309190612d49565b60405180910390a25050565b600e60019054906101000a900460ff1681565b600d5481565b61135d611680565b6001601160016101000a81548160ff021916908315150217905550600160115f6101000a81548160ff021916908315150217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b611424611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990613590565b60405180910390fd5b61149b81612534565b50565b600c5481565b60115f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361152b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115229061361e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611590906136ac565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116739190612d71565b60405180910390a3505050565b6116886114b6565b73ffffffffffffffffffffffffffffffffffffffff166116a6610f2e565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613714565b60405180910390fd5b565b5f6117098484611394565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117835781811015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c9061377c565b60405180910390fd5b61178284848484036114bd565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee9061380a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613898565b60405180910390fd5b5f810361187c5761187783835f6128e9565b61236c565b611884610f2e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118f257506118c2610f2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561192a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611964575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561197c5750600e5f9054906101000a900460ff16155b15611fff5760115f9054906101000a900460ff16611a6f5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a2f575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613900565b60405180910390fd5b5b600e60019054906101000a900460ff168015611ad2575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611b25575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d25577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611bd3575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d245743600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054108015611c60575043600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c969061398e565b60405180910390fd5b43600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611dc2575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e6957600d54811115611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613a1c565b60405180910390fd5b600c54611e1883610de2565b82611e239190613099565b1115611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b90613a84565b60405180910390fd5b611ffe565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f06575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f5557600d54811115611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613b12565b60405180910390fd5b611ffd565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ffc57600c54611faf83610de2565b82611fba9190613099565b1115611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290613a84565b60405180910390fd5b5b5b5b5b5f61200930610de2565b90505f601054821015905080801561202d5750601160019054906101000a900460ff165b80156120455750600e5f9054906101000a900460ff16155b8015612098575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120eb575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561213e575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612180576001600e5f6101000a81548160ff02191690831515021790555061216683612b55565b5f600e5f6101000a81548160ff0219169083151502179055505b5f600e5f9054906101000a900460ff161580156121e4575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612237575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f811561235c5760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156122be576122b760646122a9600b5488612b9c90919063ffffffff16565b612bb190919063ffffffff16565b9050612339565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612338576123356064612327600a5488612b9c90919063ffffffff16565b612bb190919063ffffffff16565b90505b5b5f81111561234d5761234c8730836128e9565b5b80856123599190613b30565b94505b6123678787876128e9565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d690613bd3565b60405180910390fd5b6123ea825f83612bc6565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490613c61565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251c9190612d71565b60405180910390a361252f835f84612bcb565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561261357612612613c7f565b5b6040519080825280602002602001820160405280156126415781602001602082028036833780820191505090505b50905030815f8151811061265857612657613cac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061271f9190613ced565b8160018151811061273357612732613cac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612798307f0000000000000000000000000000000000000000000000000000000000000000846114bd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161281a959493929190613dcf565b5f604051808303815f87803b158015612831575f80fd5b505af1158015612843573d5f803e3d5ffd5b505050505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e9061380a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613898565b60405180910390fd5b6129d0838383612bc6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90613e97565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3c9190612d71565b60405180910390a3612b4f848484612bcb565b50505050565b5f612b5f30610de2565b90505f8103612b6e5750612b99565b5f819050600d548110612b8157600d5490505b82811115612b8d578290505b612b96816125f7565b50505b50565b5f8183612ba99190613296565b905092915050565b5f8183612bbe9190613304565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c1282612bd0565b612c1c8185612bda565b9350612c2c818560208601612bea565b612c3581612bf8565b840191505092915050565b5f6020820190508181035f830152612c588184612c08565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c8d82612c64565b9050919050565b612c9d81612c83565b8114612ca7575f80fd5b50565b5f81359050612cb881612c94565b92915050565b5f819050919050565b612cd081612cbe565b8114612cda575f80fd5b50565b5f81359050612ceb81612cc7565b92915050565b5f8060408385031215612d0757612d06612c60565b5b5f612d1485828601612caa565b9250506020612d2585828601612cdd565b9150509250929050565b5f8115159050919050565b612d4381612d2f565b82525050565b5f602082019050612d5c5f830184612d3a565b92915050565b612d6b81612cbe565b82525050565b5f602082019050612d845f830184612d62565b92915050565b5f805f60608486031215612da157612da0612c60565b5b5f612dae86828701612caa565b9350506020612dbf86828701612caa565b9250506040612dd086828701612cdd565b9150509250925092565b5f60ff82169050919050565b612def81612dda565b82525050565b5f602082019050612e085f830184612de6565b92915050565b5f60208284031215612e2357612e22612c60565b5b5f612e3084828501612cdd565b91505092915050565b612e4281612c83565b82525050565b5f602082019050612e5b5f830184612e39565b92915050565b5f60208284031215612e7657612e75612c60565b5b5f612e8384828501612caa565b91505092915050565b5f8060408385031215612ea257612ea1612c60565b5b5f612eaf85828601612cdd565b9250506020612ec085828601612cdd565b9150509250929050565b5f819050919050565b5f612eed612ee8612ee384612c64565b612eca565b612c64565b9050919050565b5f612efe82612ed3565b9050919050565b5f612f0f82612ef4565b9050919050565b612f1f81612f05565b82525050565b5f602082019050612f385f830184612f16565b92915050565b612f4781612d2f565b8114612f51575f80fd5b50565b5f81359050612f6281612f3e565b92915050565b5f60208284031215612f7d57612f7c612c60565b5b5f612f8a84828501612f54565b91505092915050565b5f8060408385031215612fa957612fa8612c60565b5b5f612fb685828601612caa565b9250506020612fc785828601612f54565b9150509250929050565b5f8060408385031215612fe757612fe6612c60565b5b5f612ff485828601612caa565b925050602061300585828601612caa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061305357607f821691505b6020821081036130665761306561300f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6130a382612cbe565b91506130ae83612cbe565b92508282019050808211156130c6576130c561306c565b5b92915050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613100601783612bda565b915061310b826130cc565b602082019050919050565b5f6020820190508181035f83015261312d816130f4565b9050919050565b5f819050919050565b5f61315761315261314d84613134565b612eca565b612cbe565b9050919050565b6131678161313d565b82525050565b5f60c0820190506131805f830189612e39565b61318d6020830188612d62565b61319a604083018761315e565b6131a7606083018661315e565b6131b46080830185612e39565b6131c160a0830184612d62565b979650505050505050565b5f815190506131da81612cc7565b92915050565b5f805f606084860312156131f7576131f6612c60565b5b5f613204868287016131cc565b9350506020613215868287016131cc565b9250506040613226868287016131cc565b9150509250925092565b5f6040820190506132435f830185612e39565b6132506020830184612d62565b9392505050565b5f8151905061326581612f3e565b92915050565b5f602082840312156132805761327f612c60565b5b5f61328d84828501613257565b91505092915050565b5f6132a082612cbe565b91506132ab83612cbe565b92508282026132b981612cbe565b915082820484148315176132d0576132cf61306c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61330e82612cbe565b915061331983612cbe565b925082613329576133286132d7565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61338e603983612bda565b915061339982613334565b604082019050919050565b5f6020820190508181035f8301526133bb81613382565b9050919050565b7f416c72656164792064697361626c6564210000000000000000000000000000005f82015250565b5f6133f6601183612bda565b9150613401826133c2565b602082019050919050565b5f6020820190508181035f830152613423816133ea565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e74726163740000005f82015250565b5f61345e601d83612bda565b91506134698261342a565b602082019050919050565b5f6020820190508181035f83015261348b81613452565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6134ec602583612bda565b91506134f782613492565b604082019050919050565b5f6020820190508181035f830152613519816134e0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61357a602683612bda565b915061358582613520565b604082019050919050565b5f6020820190508181035f8301526135a78161356e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613608602483612bda565b9150613613826135ae565b604082019050919050565b5f6020820190508181035f830152613635816135fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613696602283612bda565b91506136a18261363c565b604082019050919050565b5f6020820190508181035f8301526136c38161368a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136fe602083612bda565b9150613709826136ca565b602082019050919050565b5f6020820190508181035f83015261372b816136f2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613766601d83612bda565b915061377182613732565b602082019050919050565b5f6020820190508181035f8301526137938161375a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137f4602583612bda565b91506137ff8261379a565b604082019050919050565b5f6020820190508181035f830152613821816137e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613882602383612bda565b915061388d82613828565b604082019050919050565b5f6020820190508181035f8301526138af81613876565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6138ea601683612bda565b91506138f5826138b6565b602082019050919050565b5f6020820190508181035f830152613917816138de565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b5f613978603583612bda565b91506139838261391e565b604082019050919050565b5f6020820190508181035f8301526139a58161396c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613a06603583612bda565b9150613a11826139ac565b604082019050919050565b5f6020820190508181035f830152613a33816139fa565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613a6e601383612bda565b9150613a7982613a3a565b602082019050919050565b5f6020820190508181035f830152613a9b81613a62565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613afc603683612bda565b9150613b0782613aa2565b604082019050919050565b5f6020820190508181035f830152613b2981613af0565b9050919050565b5f613b3a82612cbe565b9150613b4583612cbe565b9250828203905081811115613b5d57613b5c61306c565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbd602183612bda565b9150613bc882613b63565b604082019050919050565b5f6020820190508181035f830152613bea81613bb1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4b602283612bda565b9150613c5682613bf1565b604082019050919050565b5f6020820190508181035f830152613c7881613c3f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613ce781612c94565b92915050565b5f60208284031215613d0257613d01612c60565b5b5f613d0f84828501613cd9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d4a81612c83565b82525050565b5f613d5b8383613d41565b60208301905092915050565b5f602082019050919050565b5f613d7d82613d18565b613d878185613d22565b9350613d9283613d32565b805f5b83811015613dc2578151613da98882613d50565b9750613db483613d67565b925050600181019050613d95565b5085935050505092915050565b5f60a082019050613de25f830188612d62565b613def602083018761315e565b8181036040830152613e018186613d73565b9050613e106060830185612e39565b613e1d6080830184612d62565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e81602683612bda565b9150613e8c82613e27565b604082019050919050565b5f6020820190508181035f830152613eae81613e75565b905091905056fea2646970667358221220296f5f5ecdc74c1d7f252d31650f212af1fb1e53428e65dfcad718c41ab0e89f64736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061023e575f3560e01c8063715018a61161012d578063a9059cbb116100aa578063dd62ed3e1161006e578063dd62ed3e146107e9578063e2f4560514610825578063f2fde38b1461084f578063f8b45b0514610877578063ffb54a99146108a157610245565b8063a9059cbb1461071b578063c024666814610757578063c876d0b91461077f578063c8c8ebe4146107a9578063c9567bf9146107d357610245565b806398a5c315116100f157806398a5c315146106635780639a7a23d61461068b5780639b636545146106b3578063a0ef91df146106c9578063a457c2d7146106df57610245565b8063715018a6146105a957806371f5f01a146105bf5780637571336a146105e75780638da5cb5b1461060f57806395d89b411461063957610245565b80633edab509116101bb57806352f7c9881161017f57806352f7c988146104c9578063583e0568146104f15780636d8aa8f81461051b5780636ddd17131461054357806370a082311461056d57610245565b80633edab509146103fb57806342966c6814610411578063470624021461043957806349bd5a5e146104635780634fbee1931461048d57610245565b80632b14ca56116102025780632b14ca561461032b5780632cb743f714610355578063311028af1461036b578063313ce5671461039557806339509351146103bf57610245565b806306fdde0314610249578063095ea7b314610273578063139864a8146102af57806318160ddd146102c557806323b872dd146102ef57610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d6108cb565b60405161026a9190612c40565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612cf1565b61095b565b6040516102a69190612d49565b60405180910390f35b3480156102ba575f80fd5b506102c361097d565b005b3480156102d0575f80fd5b506102d9610999565b6040516102e69190612d71565b60405180910390f35b3480156102fa575f80fd5b5061031560048036038101906103109190612d8a565b6109a2565b6040516103229190612d49565b60405180910390f35b348015610336575f80fd5b5061033f6109d0565b60405161034c9190612d71565b60405180910390f35b348015610360575f80fd5b506103696109d6565b005b348015610376575f80fd5b5061037f610a70565b60405161038c9190612d71565b60405180910390f35b3480156103a0575f80fd5b506103a9610a76565b6040516103b69190612df5565b60405180910390f35b3480156103ca575f80fd5b506103e560048036038101906103e09190612cf1565b610a7e565b6040516103f29190612d49565b60405180910390f35b348015610406575f80fd5b5061040f610ab4565b005b34801561041c575f80fd5b5061043760048036038101906104329190612e0e565b610cdb565b005b348015610444575f80fd5b5061044d610cef565b60405161045a9190612d71565b60405180910390f35b34801561046e575f80fd5b50610477610cf5565b6040516104849190612e48565b60405180910390f35b348015610498575f80fd5b506104b360048036038101906104ae9190612e61565b610d1a565b6040516104c09190612d49565b60405180910390f35b3480156104d4575f80fd5b506104ef60048036038101906104ea9190612e8c565b610d6c565b005b3480156104fc575f80fd5b50610505610d86565b6040516105129190612f25565b60405180910390f35b348015610526575f80fd5b50610541600480360381019061053c9190612f68565b610daa565b005b34801561054e575f80fd5b50610557610dcf565b6040516105649190612d49565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190612e61565b610de2565b6040516105a09190612d71565b60405180910390f35b3480156105b4575f80fd5b506105bd610e27565b005b3480156105ca575f80fd5b506105e560048036038101906105e09190612e0e565b610e3a565b005b3480156105f2575f80fd5b5061060d60048036038101906106089190612f93565b610ece565b005b34801561061a575f80fd5b50610623610f2e565b6040516106309190612e48565b60405180910390f35b348015610644575f80fd5b5061064d610f56565b60405161065a9190612c40565b60405180910390f35b34801561066e575f80fd5b5061068960048036038101906106849190612e0e565b610fe6565b005b348015610696575f80fd5b506106b160048036038101906106ac9190612f93565b610ff8565b005b3480156106be575f80fd5b506106c761109d565b005b3480156106d4575f80fd5b506106dd611110565b005b3480156106ea575f80fd5b5061070560048036038101906107009190612cf1565b6111f7565b6040516107129190612d49565b60405180910390f35b348015610726575f80fd5b50610741600480360381019061073c9190612cf1565b61126c565b60405161074e9190612d49565b60405180910390f35b348015610762575f80fd5b5061077d60048036038101906107789190612f93565b61128e565b005b34801561078a575f80fd5b5061079361133c565b6040516107a09190612d49565b60405180910390f35b3480156107b4575f80fd5b506107bd61134f565b6040516107ca9190612d71565b60405180910390f35b3480156107de575f80fd5b506107e7611355565b005b3480156107f4575f80fd5b5061080f600480360381019061080a9190612fd1565b611394565b60405161081c9190612d71565b60405180910390f35b348015610830575f80fd5b50610839611416565b6040516108469190612d71565b60405180910390f35b34801561085a575f80fd5b5061087560048036038101906108709190612e61565b61141c565b005b348015610882575f80fd5b5061088b61149e565b6040516108989190612d71565b60405180910390f35b3480156108ac575f80fd5b506108b56114a4565b6040516108c29190612d49565b60405180910390f35b6060600380546108da9061303c565b80601f01602080910402602001604051908101604052809291908181526020018280546109069061303c565b80156109515780601f1061092857610100808354040283529160200191610951565b820191905f5260205f20905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b5f806109656114b6565b90506109728185856114bd565b600191505092915050565b610985611680565b600954600d81905550600954600c81905550565b5f600254905090565b5f806109ac6114b6565b90506109b98582856116fe565b6109c4858585611789565b60019150509392505050565b600b5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a166114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610a35575f80fd5b5f610a3f30610de2565b9050610a6d3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611789565b50565b60095481565b5f6009905090565b5f80610a886114b6565b9050610aa9818585610a9a8589611394565b610aa49190613099565b6114bd565b600191505092915050565b610abc611680565b60115f9054906101000a900460ff1615610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290613116565b60405180910390fd5b610b38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6009546114bd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b7f30610de2565b5f80732960636ab93d53768dbd41e02f04716f9cda68c3426040518863ffffffff1660e01b8152600401610bb89695949392919061316d565b60606040518083038185885af1158015610bd4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bf991906131e0565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c98929190613230565b6020604051808303815f875af1158015610cb4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd8919061326b565b50565b610cec610ce66114b6565b82612371565b50565b600a5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610d74611680565b80600b8190555081600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610db2611680565b80601160016101000a81548160ff02191690831515021790555050565b601160019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e2f611680565b610e385f612534565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e7a6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614610e99575f80fd5b5f610ea330610de2565b90505f60648383610eb49190613296565b610ebe9190613304565b9050610ec9816125f7565b505050565b610ed6611680565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f659061303c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f919061303c565b8015610fdc5780601f10610fb357610100808354040283529160200191610fdc565b820191905f5260205f20905b815481529060010190602001808311610fbf57829003601f168201915b5050505050905090565b610fee611680565b8060108190555050565b611000611680565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906133a4565b60405180910390fd5b611099828261284b565b5050565b6110a5611680565b600e60019054906101000a900460ff166110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061340c565b60405180910390fd5b5f600e60016101000a81548160ff021916908315150217905550565b5f4711611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613474565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111926114b6565b73ffffffffffffffffffffffffffffffffffffffff16146111b1575f80fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156111f4573d5f803e3d5ffd5b50565b5f806112016114b6565b90505f61120e8286611394565b905083811015611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90613502565b60405180910390fd5b61126082868684036114bd565b60019250505092915050565b5f806112766114b6565b9050611283818585611789565b600191505092915050565b611296611680565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113309190612d49565b60405180910390a25050565b600e60019054906101000a900460ff1681565b600d5481565b61135d611680565b6001601160016101000a81548160ff021916908315150217905550600160115f6101000a81548160ff021916908315150217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b611424611680565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148990613590565b60405180910390fd5b61149b81612534565b50565b600c5481565b60115f9054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361152b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115229061361e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611590906136ac565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116739190612d71565b60405180910390a3505050565b6116886114b6565b73ffffffffffffffffffffffffffffffffffffffff166116a6610f2e565b73ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390613714565b60405180910390fd5b565b5f6117098484611394565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117835781811015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c9061377c565b60405180910390fd5b61178284848484036114bd565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee9061380a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613898565b60405180910390fd5b5f810361187c5761187783835f6128e9565b61236c565b611884610f2e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118f257506118c2610f2e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561192a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611964575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561197c5750600e5f9054906101000a900460ff16155b15611fff5760115f9054906101000a900460ff16611a6f5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a2f575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613900565b60405180910390fd5b5b600e60019054906101000a900460ff168015611ad2575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611b25575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d25577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611bd3575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d245743600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054108015611c60575043600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c969061398e565b60405180910390fd5b43600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611dc2575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611e6957600d54811115611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390613a1c565b60405180910390fd5b600c54611e1883610de2565b82611e239190613099565b1115611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b90613a84565b60405180910390fd5b611ffe565b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611f06575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611f5557600d54811115611f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4790613b12565b60405180910390fd5b611ffd565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ffc57600c54611faf83610de2565b82611fba9190613099565b1115611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff290613a84565b60405180910390fd5b5b5b5b5b5f61200930610de2565b90505f601054821015905080801561202d5750601160019054906101000a900460ff165b80156120455750600e5f9054906101000a900460ff16155b8015612098575060145f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120eb575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561213e575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612180576001600e5f6101000a81548160ff02191690831515021790555061216683612b55565b5f600e5f6101000a81548160ff0219169083151502179055505b5f600e5f9054906101000a900460ff161580156121e4575060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612237575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90505f811561235c5760145f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156122be576122b760646122a9600b5488612b9c90919063ffffffff16565b612bb190919063ffffffff16565b9050612339565b60145f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612338576123356064612327600a5488612b9c90919063ffffffff16565b612bb190919063ffffffff16565b90505b5b5f81111561234d5761234c8730836128e9565b5b80856123599190613b30565b94505b6123678787876128e9565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d690613bd3565b60405180910390fd5b6123ea825f83612bc6565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490613c61565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251c9190612d71565b60405180910390a361252f835f84612bcb565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561261357612612613c7f565b5b6040519080825280602002602001820160405280156126415781602001602082028036833780820191505090505b50905030815f8151811061265857612657613cac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061271f9190613ced565b8160018151811061273357612732613cac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612798307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114bd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161281a959493929190613dcf565b5f604051808303815f87803b158015612831575f80fd5b505af1158015612843573d5f803e3d5ffd5b505050505050565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e9061380a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90613898565b60405180910390fd5b6129d0838383612bc6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a90613e97565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b3c9190612d71565b60405180910390a3612b4f848484612bcb565b50505050565b5f612b5f30610de2565b90505f8103612b6e5750612b99565b5f819050600d548110612b8157600d5490505b82811115612b8d578290505b612b96816125f7565b50505b50565b5f8183612ba99190613296565b905092915050565b5f8183612bbe9190613304565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612c1282612bd0565b612c1c8185612bda565b9350612c2c818560208601612bea565b612c3581612bf8565b840191505092915050565b5f6020820190508181035f830152612c588184612c08565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c8d82612c64565b9050919050565b612c9d81612c83565b8114612ca7575f80fd5b50565b5f81359050612cb881612c94565b92915050565b5f819050919050565b612cd081612cbe565b8114612cda575f80fd5b50565b5f81359050612ceb81612cc7565b92915050565b5f8060408385031215612d0757612d06612c60565b5b5f612d1485828601612caa565b9250506020612d2585828601612cdd565b9150509250929050565b5f8115159050919050565b612d4381612d2f565b82525050565b5f602082019050612d5c5f830184612d3a565b92915050565b612d6b81612cbe565b82525050565b5f602082019050612d845f830184612d62565b92915050565b5f805f60608486031215612da157612da0612c60565b5b5f612dae86828701612caa565b9350506020612dbf86828701612caa565b9250506040612dd086828701612cdd565b9150509250925092565b5f60ff82169050919050565b612def81612dda565b82525050565b5f602082019050612e085f830184612de6565b92915050565b5f60208284031215612e2357612e22612c60565b5b5f612e3084828501612cdd565b91505092915050565b612e4281612c83565b82525050565b5f602082019050612e5b5f830184612e39565b92915050565b5f60208284031215612e7657612e75612c60565b5b5f612e8384828501612caa565b91505092915050565b5f8060408385031215612ea257612ea1612c60565b5b5f612eaf85828601612cdd565b9250506020612ec085828601612cdd565b9150509250929050565b5f819050919050565b5f612eed612ee8612ee384612c64565b612eca565b612c64565b9050919050565b5f612efe82612ed3565b9050919050565b5f612f0f82612ef4565b9050919050565b612f1f81612f05565b82525050565b5f602082019050612f385f830184612f16565b92915050565b612f4781612d2f565b8114612f51575f80fd5b50565b5f81359050612f6281612f3e565b92915050565b5f60208284031215612f7d57612f7c612c60565b5b5f612f8a84828501612f54565b91505092915050565b5f8060408385031215612fa957612fa8612c60565b5b5f612fb685828601612caa565b9250506020612fc785828601612f54565b9150509250929050565b5f8060408385031215612fe757612fe6612c60565b5b5f612ff485828601612caa565b925050602061300585828601612caa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061305357607f821691505b6020821081036130665761306561300f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6130a382612cbe565b91506130ae83612cbe565b92508282019050808211156130c6576130c561306c565b5b92915050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613100601783612bda565b915061310b826130cc565b602082019050919050565b5f6020820190508181035f83015261312d816130f4565b9050919050565b5f819050919050565b5f61315761315261314d84613134565b612eca565b612cbe565b9050919050565b6131678161313d565b82525050565b5f60c0820190506131805f830189612e39565b61318d6020830188612d62565b61319a604083018761315e565b6131a7606083018661315e565b6131b46080830185612e39565b6131c160a0830184612d62565b979650505050505050565b5f815190506131da81612cc7565b92915050565b5f805f606084860312156131f7576131f6612c60565b5b5f613204868287016131cc565b9350506020613215868287016131cc565b9250506040613226868287016131cc565b9150509250925092565b5f6040820190506132435f830185612e39565b6132506020830184612d62565b9392505050565b5f8151905061326581612f3e565b92915050565b5f602082840312156132805761327f612c60565b5b5f61328d84828501613257565b91505092915050565b5f6132a082612cbe565b91506132ab83612cbe565b92508282026132b981612cbe565b915082820484148315176132d0576132cf61306c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61330e82612cbe565b915061331983612cbe565b925082613329576133286132d7565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61338e603983612bda565b915061339982613334565b604082019050919050565b5f6020820190508181035f8301526133bb81613382565b9050919050565b7f416c72656164792064697361626c6564210000000000000000000000000000005f82015250565b5f6133f6601183612bda565b9150613401826133c2565b602082019050919050565b5f6020820190508181035f830152613423816133ea565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e74726163740000005f82015250565b5f61345e601d83612bda565b91506134698261342a565b602082019050919050565b5f6020820190508181035f83015261348b81613452565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6134ec602583612bda565b91506134f782613492565b604082019050919050565b5f6020820190508181035f830152613519816134e0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61357a602683612bda565b915061358582613520565b604082019050919050565b5f6020820190508181035f8301526135a78161356e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613608602483612bda565b9150613613826135ae565b604082019050919050565b5f6020820190508181035f830152613635816135fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613696602283612bda565b91506136a18261363c565b604082019050919050565b5f6020820190508181035f8301526136c38161368a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136fe602083612bda565b9150613709826136ca565b602082019050919050565b5f6020820190508181035f83015261372b816136f2565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613766601d83612bda565b915061377182613732565b602082019050919050565b5f6020820190508181035f8301526137938161375a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137f4602583612bda565b91506137ff8261379a565b604082019050919050565b5f6020820190508181035f830152613821816137e8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613882602383612bda565b915061388d82613828565b604082019050919050565b5f6020820190508181035f8301526138af81613876565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6138ea601683612bda565b91506138f5826138b6565b602082019050919050565b5f6020820190508181035f830152613917816138de565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b5f613978603583612bda565b91506139838261391e565b604082019050919050565b5f6020820190508181035f8301526139a58161396c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613a06603583612bda565b9150613a11826139ac565b604082019050919050565b5f6020820190508181035f830152613a33816139fa565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613a6e601383612bda565b9150613a7982613a3a565b602082019050919050565b5f6020820190508181035f830152613a9b81613a62565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613afc603683612bda565b9150613b0782613aa2565b604082019050919050565b5f6020820190508181035f830152613b2981613af0565b9050919050565b5f613b3a82612cbe565b9150613b4583612cbe565b9250828203905081811115613b5d57613b5c61306c565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbd602183612bda565b9150613bc882613b63565b604082019050919050565b5f6020820190508181035f830152613bea81613bb1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c4b602283612bda565b9150613c5682613bf1565b604082019050919050565b5f6020820190508181035f830152613c7881613c3f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613ce781612c94565b92915050565b5f60208284031215613d0257613d01612c60565b5b5f613d0f84828501613cd9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d4a81612c83565b82525050565b5f613d5b8383613d41565b60208301905092915050565b5f602082019050919050565b5f613d7d82613d18565b613d878185613d22565b9350613d9283613d32565b805f5b83811015613dc2578151613da98882613d50565b9750613db483613d67565b925050600181019050613d95565b5085935050505092915050565b5f60a082019050613de25f830188612d62565b613def602083018761315e565b8181036040830152613e018186613d73565b9050613e106060830185612e39565b613e1d6080830184612d62565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e81602683612bda565b9150613e8c82613e27565b604082019050919050565b5f6020820190508181035f830152613eae81613e75565b905091905056fea2646970667358221220296f5f5ecdc74c1d7f252d31650f212af1fb1e53428e65dfcad718c41ab0e89f64736f6c634300081a0033

Deployed Bytecode Sourcemap

14539:9631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9768:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10699:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22459:147;;;;;;;;;;;;;:::i;:::-;;10088:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10908:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14986:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23128:194;;;;;;;;;;;;;:::i;:::-;;14884:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9988:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11177:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17088:547;;;;;;;;;;;;;:::i;:::-;;17643:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14953:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14673:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18657:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22151:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14614:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23569:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15453:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10204:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;979:103;;;;;;;;;;;;;:::i;:::-;;22614:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17736:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;744:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9876:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23377:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18198:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22293:156;;;;;;;;;;;;;:::i;:::-;;22895:225;;;;;;;;;;;;;:::i;:::-;;11423:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10339:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18008:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15197:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15111:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17890:110;;;;;;;;;;;;;:::i;:::-;;10540:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15341:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1090:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15047:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15415:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9768:100;9822:13;9855:5;9848:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9768:100;:::o;10699:201::-;10782:4;10799:13;10815:12;:10;:12::i;:::-;10799:28;;10838:32;10847:5;10854:7;10863:6;10838:8;:32::i;:::-;10888:4;10881:11;;;10699:201;;;;:::o;22459:147::-;703:13;:11;:13::i;:::-;22539:18:::1;;22516:20;:41;;;;22580:18;;22568:9;:30;;;;22459:147::o:0;10088:108::-;10149:7;10176:12;;10169:19;;10088:108;:::o;10908:261::-;11005:4;11022:15;11040:12;:10;:12::i;:::-;11022:30;;11063:38;11079:4;11085:7;11094:6;11063:15;:38::i;:::-;11112:27;11122:4;11128:2;11132:6;11112:9;:27::i;:::-;11157:4;11150:11;;;10908:261;;;;;:::o;14986:27::-;;;;:::o;23128:194::-;23198:9;;;;;;;;;;;23182:25;;:12;:10;:12::i;:::-;:25;;;23174:34;;;;;;23219:14;23236:24;23254:4;23236:9;:24::i;:::-;23219:41;;23271:43;23289:4;23296:9;;;;;;;;;;;23307:6;23271:9;:43::i;:::-;23163:159;23128:194::o;14884:60::-;;;;:::o;9988:92::-;10046:5;10071:1;10064:8;;9988:92;:::o;11177:238::-;11265:4;11282:13;11298:12;:10;:12::i;:::-;11282:28;;11321:64;11330:5;11337:7;11374:10;11346:25;11356:5;11363:7;11346:9;:25::i;:::-;:38;;;;:::i;:::-;11321:8;:64::i;:::-;11403:4;11396:11;;;11177:238;;;;:::o;17088:547::-;703:13;:11;:13::i;:::-;17155:11:::1;;;;;;;;;;;17154:12;17146:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;17204:70;17221:4;17236:16;17255:18;;17204:8;:70::i;:::-;17285:16;:32;;;17325:21;17370:4;17390:24;17408:4;17390:9;:24::i;:::-;17429:1;17445::::0;17461:42:::1;17518:15;17285:259;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17562:13;;;;;;;;;;;17555:29;;;17593:16;17612:14;17555:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17088:547::o:0;17643:85::-;17693:27;17699:12;:10;:12::i;:::-;17713:6;17693:5;:27::i;:::-;17643:85;:::o;14953:26::-;;;;:::o;14673:28::-;;;;;;;;;;;;;:::o;18657:126::-;18723:4;18747:19;:28;18767:7;18747:28;;;;;;;;;;;;;;;;;;;;;;;;;18740:35;;18657:126;;;:::o;22151:134::-;703:13;:11;:13::i;:::-;22242:8:::1;22232:7;:18;;;;22270:7;22261:6;:16;;;;22151:134:::0;;:::o;14614:52::-;;;:::o;23569:101::-;703:13;:11;:13::i;:::-;23650:12:::1;23636:11;;:26;;;;;;;;;;;;;;;;;;23569:101:::0;:::o;15453:31::-;;;;;;;;;;;;;:::o;10204:127::-;10278:7;10305:9;:18;10315:7;10305:18;;;;;;;;;;;;;;;;10298:25;;10204:127;;;:::o;979:103::-;703:13;:11;:13::i;:::-;1044:30:::1;1071:1;1044:18;:30::i;:::-;979:103::o:0;22614:273::-;22700:15;;;;;;;;;;;22684:31;;:12;:10;:12::i;:::-;:31;;;22676:40;;;;;;22727:23;22753:24;22771:4;22753:9;:24::i;:::-;22727:50;;22788:18;22837:3;22827:7;22809:15;:25;;;;:::i;:::-;:31;;;;:::i;:::-;22788:52;;22851:28;22868:10;22851:16;:28::i;:::-;22665:222;;22614:273;:::o;17736:144::-;703:13;:11;:13::i;:::-;17868:4:::1;17826:31;:39;17858:6;17826:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17736:144:::0;;:::o;744:87::-;790:7;817:6;;;;;;;;;;;810:13;;744:87;:::o;9876:104::-;9932:13;9965:7;9958:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9876:104;:::o;23377:140::-;703:13;:11;:13::i;:::-;23490:19:::1;23469:18;:40;;;;23377:140:::0;:::o;18198:257::-;703:13;:11;:13::i;:::-;18320::::1;;;;;;;;;;;18312:21;;:4;:21;;::::0;18304:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18406:41;18435:4;18441:5;18406:28;:41::i;:::-;18198:257:::0;;:::o;22293:156::-;703:13;:11;:13::i;:::-;22360:20:::1;;;;;;;;;;;22352:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22436:5;22413:20;;:28;;;;;;;;;;;;;;;;;;22293:156::o:0;22895:225::-;22970:1;22946:21;:25;22938:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23040:9;;;;;;;;;;;23024:25;;:12;:10;:12::i;:::-;:25;;;23016:34;;;;;;23069:10;23061:28;;:51;23090:21;23061:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22895:225::o;11423:436::-;11516:4;11533:13;11549:12;:10;:12::i;:::-;11533:28;;11572:24;11599:25;11609:5;11616:7;11599:9;:25::i;:::-;11572:52;;11663:15;11643:16;:35;;11635:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11756:60;11765:5;11772:7;11800:15;11781:16;:34;11756:8;:60::i;:::-;11847:4;11840:11;;;;11423:436;;;;:::o;10339:193::-;10418:4;10435:13;10451:12;:10;:12::i;:::-;10435:28;;10474;10484:5;10491:2;10495:6;10474:9;:28::i;:::-;10520:4;10513:11;;;10339:193;;;;:::o;18008:182::-;703:13;:11;:13::i;:::-;18124:8:::1;18093:19;:28;18113:7;18093:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18164:7;18148:34;;;18173:8;18148:34;;;;;;:::i;:::-;;;;;;;;18008:182:::0;;:::o;15197:39::-;;;;;;;;;;;;;:::o;15111:47::-;;;;:::o;17890:110::-;703:13;:11;:13::i;:::-;17959:4:::1;17945:11;;:18;;;;;;;;;;;;;;;;;;17988:4;17974:11;;:18;;;;;;;;;;;;;;;;;;17890:110::o:0;10540:151::-;10629:7;10656:11;:18;10668:5;10656:18;;;;;;;;;;;;;;;:27;10675:7;10656:27;;;;;;;;;;;;;;;;10649:34;;10540:151;;;;:::o;15341:65::-;;;;:::o;1090:201::-;703:13;:11;:13::i;:::-;1199:1:::1;1179:22;;:8;:22;;::::0;1171:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1255:28;1274:8;1255:18;:28::i;:::-;1090:201:::0;:::o;15047:57::-;;;;:::o;15415:31::-;;;;;;;;;;;;;:::o;217:98::-;270:7;297:10;290:17;;217:98;:::o;13562:346::-;13681:1;13664:19;;:5;:19;;;13656:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13762:1;13743:21;;:7;:21;;;13735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13846:6;13816:11;:18;13828:5;13816:18;;;;;;;;;;;;;;;:27;13835:7;13816:27;;;;;;;;;;;;;;;:36;;;;13884:7;13868:32;;13877:5;13868:32;;;13893:6;13868:32;;;;;;:::i;:::-;;;;;;;;13562:346;;;:::o;839:132::-;914:12;:10;:12::i;:::-;903:23;;:7;:5;:7::i;:::-;:23;;;895:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;839:132::o;13916:419::-;14017:24;14044:25;14054:5;14061:7;14044:9;:25::i;:::-;14017:52;;14104:17;14084:16;:37;14080:248;;14166:6;14146:16;:26;;14138:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14250:51;14259:5;14266:7;14294:6;14275:16;:25;14250:8;:51::i;:::-;14080:248;14006:329;13916:419;;;:::o;18791:2868::-;18905:1;18889:18;;:4;:18;;;18881:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18982:1;18968:16;;:2;:16;;;18960:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19051:1;19041:6;:11;19037:93;;19069:28;19085:4;19091:2;19095:1;19069:15;:28::i;:::-;19112:7;;19037:93;19154:7;:5;:7::i;:::-;19146:15;;:4;:15;;;;:32;;;;;19171:7;:5;:7::i;:::-;19165:13;;:2;:13;;;;19146:32;:52;;;;;19196:1;19182:16;;:2;:16;;;;19146:52;:77;;;;;19216:6;19202:21;;:2;:21;;;;19146:77;:90;;;;;19228:8;;;;;;;;;;;19227:9;19146:90;19142:1545;;;19258:11;;;;;;;;;;;19253:140;;19298:19;:25;19318:4;19298:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19327:19;:23;19347:2;19327:23;;;;;;;;;;;;;;;;;;;;;;;;;19298:52;19290:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19253:140;19413:20;;;;;;;;;;;:50;;;;;19438:19;:25;19458:4;19438:25;;;;;;;;;;;;;;;;;;;;;;;;;19437:26;19413:50;:78;;;;;19468:19;:23;19488:2;19468:23;;;;;;;;;;;;;;;;;;;;;;;;;19467:24;19413:78;19409:566;;;19533:16;19519:31;;:2;:31;;;;:63;;;;;19568:13;;;;;;;;;;;19554:28;;:2;:28;;;;19519:63;19515:445;;;19660:12;19618:28;:39;19647:9;19618:39;;;;;;;;;;;;;;;;:54;:105;;;;;19711:12;19676:28;:32;19705:2;19676:32;;;;;;;;;;;;;;;;:47;19618:105;19610:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:12;19808:28;:39;19837:9;19808:39;;;;;;;;;;;;;;;:54;;;;19924:12;19889:28;:32;19918:2;19889:32;;;;;;;;;;;;;;;:47;;;;19515:445;19409:566;19995:25;:31;20021:4;19995:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20031:31;:35;20063:2;20031:35;;;;;;;;;;;;;;;;;;;;;;;;;20030:36;19995:71;19991:685;;;20105:20;;20095:6;:30;;20087:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;20236:9;;20219:13;20229:2;20219:9;:13::i;:::-;20210:6;:22;;;;:::i;:::-;:35;;20202:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19991:685;;;20308:25;:29;20334:2;20308:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;20342:31;:37;20374:4;20342:37;;;;;;;;;;;;;;;;;;;;;;;;;20341:38;20308:71;20304:372;;;20418:20;;20408:6;:30;;20400:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;20304:372;;;20537:31;:35;20569:2;20537:35;;;;;;;;;;;;;;;;;;;;;;;;;20532:144;;20627:9;;20610:13;20620:2;20610:9;:13::i;:::-;20601:6;:22;;;;:::i;:::-;:35;;20593:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20532:144;20304:372;19991:685;19142:1545;20699:28;20730:24;20748:4;20730:9;:24::i;:::-;20699:55;;20765:12;20804:18;;20780:20;:42;;20765:57;;20837:7;:22;;;;;20848:11;;;;;;;;;;;20837:22;:35;;;;;20864:8;;;;;;;;;;;20863:9;20837:35;:71;;;;;20877:25;:31;20903:4;20877:31;;;;;;;;;;;;;;;;;;;;;;;;;20876:32;20837:71;:101;;;;;20913:19;:25;20933:4;20913:25;;;;;;;;;;;;;;;;;;;;;;;;;20912:26;20837:101;:129;;;;;20943:19;:23;20963:2;20943:23;;;;;;;;;;;;;;;;;;;;;;;;;20942:24;20837:129;20833:239;;;20994:4;20983:8;;:15;;;;;;;;;;;;;;;;;;21013:16;21022:6;21013:8;:16::i;:::-;21055:5;21044:8;;:16;;;;;;;;;;;;;;;;;;20833:239;21084:12;21100:8;;;;;;;;;;;21099:9;:39;;;;;21113:19;:25;21133:4;21113:25;;;;;;;;;;;;;;;;;;;;;;;;;21112:26;21099:39;:67;;;;;21143:19;:23;21163:2;21143:23;;;;;;;;;;;;;;;;;;;;;;;;;21142:24;21099:67;21084:82;;21179:12;21210:7;21206:402;;;21238:25;:29;21264:2;21238:29;;;;;;;;;;;;;;;;;;;;;;;;;21234:229;;;21295:28;21319:3;21295:19;21306:7;;21295:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21288:35;;21234:229;;;21361:25;:31;21387:4;21361:31;;;;;;;;;;;;;;;;;;;;;;;;;21358:105;;;21420:27;21443:3;21420:18;21431:6;;21420;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;21413:34;;21358:105;21234:229;21488:1;21481:4;:8;21477:91;;;21510:42;21526:4;21540;21547;21510:15;:42::i;:::-;21477:91;21592:4;21582:14;;;;;:::i;:::-;;;21206:402;21618:33;21634:4;21640:2;21644:6;21618:15;:33::i;:::-;18870:2789;;;;18791:2868;;;;:::o;12959:595::-;13062:1;13043:21;;:7;:21;;;13035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13115:49;13136:7;13153:1;13157:6;13115:20;:49::i;:::-;13177:22;13202:9;:18;13212:7;13202:18;;;;;;;;;;;;;;;;13177:43;;13257:6;13239:14;:24;;13231:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13376:6;13359:14;:23;13338:9;:18;13348:7;13338:18;;;;;;;;;;;;;;;:44;;;;13413:6;13397:12;;:22;;;;;;;;;;;13474:1;13448:37;;13457:7;13448:37;;;13478:6;13448:37;;;;;;:::i;:::-;;;;;;;;13498:48;13518:7;13535:1;13539:6;13498:19;:48::i;:::-;13024:530;12959:595;;:::o;1299:191::-;1373:16;1392:6;;;;;;;;;;;1373:25;;1418:8;1409:6;;:17;;;;;;;;;;;;;;;;;;1473:8;1442:40;;1463:8;1442:40;;;;;;;;;;;;1362:128;1299:191;:::o;21667:476::-;21733:21;21771:1;21757:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21733:40;;21802:4;21784;21789:1;21784:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21828:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21818:4;21823:1;21818:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;21862:63;21879:4;21894:16;21913:11;21862:8;:63::i;:::-;21936:16;:67;;;22018:11;22044:1;22060:4;22079:15;;;;;;;;;;;22109;21936:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21722:421;21667:476;:::o;18463:186::-;18580:5;18546:25;:31;18572:4;18546:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18635:5;18601:40;;18629:4;18601:40;;;;;;;;;;;;18463:186;;:::o;11867:641::-;11980:1;11964:18;;:4;:18;;;11956:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12057:1;12043:16;;:2;:16;;;12035:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12112:38;12133:4;12139:2;12143:6;12112:20;:38::i;:::-;12163:19;12185:9;:15;12195:4;12185:15;;;;;;;;;;;;;;;;12163:37;;12234:6;12219:11;:21;;12211:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12351:6;12337:11;:20;12319:9;:15;12329:4;12319:15;;;;;;;;;;;;;;;:38;;;;12389:6;12372:9;:13;12382:2;12372:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12439:2;12424:26;;12433:4;12424:26;;;12443:6;12424:26;;;;;;:::i;:::-;;;;;;;;12463:37;12483:4;12489:2;12493:6;12463:19;:37::i;:::-;11945:563;11867:641;;;:::o;23678:489::-;23736:23;23762:24;23780:4;23762:9;:24::i;:::-;23736:50;;23820:1;23801:15;:20;23797:59;;23838:7;;;23797:59;23866:20;23889:15;23866:38;;23937:20;;23921:12;:36;23917:104;;23989:20;;23974:35;;23917:104;24051:11;24036:12;:26;24033:84;;;24094:11;24079:26;;24033:84;24129:30;24146:12;24129:16;:30::i;:::-;23725:442;;23678:489;;:::o;8225:98::-;8283:7;8314:1;8310;:5;;;;:::i;:::-;8303:12;;8225:98;;;;:::o;8331:::-;8389:7;8420:1;8416;:5;;;;:::i;:::-;8409:12;;8331:98;;;;:::o;14343:91::-;;;;:::o;14442:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:118::-;5168:24;5186:5;5168:24;:::i;:::-;5163:3;5156:37;5081:118;;:::o;5205:222::-;5298:4;5336:2;5325:9;5321:18;5313:26;;5349:71;5417:1;5406:9;5402:17;5393:6;5349:71;:::i;:::-;5205:222;;;;:::o;5433:329::-;5492:6;5541:2;5529:9;5520:7;5516:23;5512:32;5509:119;;;5547:79;;:::i;:::-;5509:119;5667:1;5692:53;5737:7;5728:6;5717:9;5713:22;5692:53;:::i;:::-;5682:63;;5638:117;5433:329;;;;:::o;5768:474::-;5836:6;5844;5893:2;5881:9;5872:7;5868:23;5864:32;5861:119;;;5899:79;;:::i;:::-;5861:119;6019:1;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5990:117;6146:2;6172:53;6217:7;6208:6;6197:9;6193:22;6172:53;:::i;:::-;6162:63;;6117:118;5768:474;;;;;:::o;6248:60::-;6276:3;6297:5;6290:12;;6248:60;;;:::o;6314:142::-;6364:9;6397:53;6415:34;6424:24;6442:5;6424:24;:::i;:::-;6415:34;:::i;:::-;6397:53;:::i;:::-;6384:66;;6314:142;;;:::o;6462:126::-;6512:9;6545:37;6576:5;6545:37;:::i;:::-;6532:50;;6462:126;;;:::o;6594:152::-;6670:9;6703:37;6734:5;6703:37;:::i;:::-;6690:50;;6594:152;;;:::o;6752:183::-;6865:63;6922:5;6865:63;:::i;:::-;6860:3;6853:76;6752:183;;:::o;6941:274::-;7060:4;7098:2;7087:9;7083:18;7075:26;;7111:97;7205:1;7194:9;7190:17;7181:6;7111:97;:::i;:::-;6941:274;;;;:::o;7221:116::-;7291:21;7306:5;7291:21;:::i;:::-;7284:5;7281:32;7271:60;;7327:1;7324;7317:12;7271:60;7221:116;:::o;7343:133::-;7386:5;7424:6;7411:20;7402:29;;7440:30;7464:5;7440:30;:::i;:::-;7343:133;;;;:::o;7482:323::-;7538:6;7587:2;7575:9;7566:7;7562:23;7558:32;7555:119;;;7593:79;;:::i;:::-;7555:119;7713:1;7738:50;7780:7;7771:6;7760:9;7756:22;7738:50;:::i;:::-;7728:60;;7684:114;7482:323;;;;:::o;7811:468::-;7876:6;7884;7933:2;7921:9;7912:7;7908:23;7904:32;7901:119;;;7939:79;;:::i;:::-;7901:119;8059:1;8084:53;8129:7;8120:6;8109:9;8105:22;8084:53;:::i;:::-;8074:63;;8030:117;8186:2;8212:50;8254:7;8245:6;8234:9;8230:22;8212:50;:::i;:::-;8202:60;;8157:115;7811:468;;;;;:::o;8285:474::-;8353:6;8361;8410:2;8398:9;8389:7;8385:23;8381:32;8378:119;;;8416:79;;:::i;:::-;8378:119;8536:1;8561:53;8606:7;8597:6;8586:9;8582:22;8561:53;:::i;:::-;8551:63;;8507:117;8663:2;8689:53;8734:7;8725:6;8714:9;8710:22;8689:53;:::i;:::-;8679:63;;8634:118;8285:474;;;;;:::o;8765:180::-;8813:77;8810:1;8803:88;8910:4;8907:1;8900:15;8934:4;8931:1;8924:15;8951:320;8995:6;9032:1;9026:4;9022:12;9012:22;;9079:1;9073:4;9069:12;9100:18;9090:81;;9156:4;9148:6;9144:17;9134:27;;9090:81;9218:2;9210:6;9207:14;9187:18;9184:38;9181:84;;9237:18;;:::i;:::-;9181:84;9002:269;8951:320;;;:::o;9277:180::-;9325:77;9322:1;9315:88;9422:4;9419:1;9412:15;9446:4;9443:1;9436:15;9463:191;9503:3;9522:20;9540:1;9522:20;:::i;:::-;9517:25;;9556:20;9574:1;9556:20;:::i;:::-;9551:25;;9599:1;9596;9592:9;9585:16;;9620:3;9617:1;9614:10;9611:36;;;9627:18;;:::i;:::-;9611:36;9463:191;;;;:::o;9660:173::-;9800:25;9796:1;9788:6;9784:14;9777:49;9660:173;:::o;9839:366::-;9981:3;10002:67;10066:2;10061:3;10002:67;:::i;:::-;9995:74;;10078:93;10167:3;10078:93;:::i;:::-;10196:2;10191:3;10187:12;10180:19;;9839:366;;;:::o;10211:419::-;10377:4;10415:2;10404:9;10400:18;10392:26;;10464:9;10458:4;10454:20;10450:1;10439:9;10435:17;10428:47;10492:131;10618:4;10492:131;:::i;:::-;10484:139;;10211:419;;;:::o;10636:85::-;10681:7;10710:5;10699:16;;10636:85;;;:::o;10727:158::-;10785:9;10818:61;10836:42;10845:32;10871:5;10845:32;:::i;:::-;10836:42;:::i;:::-;10818:61;:::i;:::-;10805:74;;10727:158;;;:::o;10891:147::-;10986:45;11025:5;10986:45;:::i;:::-;10981:3;10974:58;10891:147;;:::o;11044:807::-;11293:4;11331:3;11320:9;11316:19;11308:27;;11345:71;11413:1;11402:9;11398:17;11389:6;11345:71;:::i;:::-;11426:72;11494:2;11483:9;11479:18;11470:6;11426:72;:::i;:::-;11508:80;11584:2;11573:9;11569:18;11560:6;11508:80;:::i;:::-;11598;11674:2;11663:9;11659:18;11650:6;11598:80;:::i;:::-;11688:73;11756:3;11745:9;11741:19;11732:6;11688:73;:::i;:::-;11771;11839:3;11828:9;11824:19;11815:6;11771:73;:::i;:::-;11044:807;;;;;;;;;:::o;11857:143::-;11914:5;11945:6;11939:13;11930:22;;11961:33;11988:5;11961:33;:::i;:::-;11857:143;;;;:::o;12006:663::-;12094:6;12102;12110;12159:2;12147:9;12138:7;12134:23;12130:32;12127:119;;;12165:79;;:::i;:::-;12127:119;12285:1;12310:64;12366:7;12357:6;12346:9;12342:22;12310:64;:::i;:::-;12300:74;;12256:128;12423:2;12449:64;12505:7;12496:6;12485:9;12481:22;12449:64;:::i;:::-;12439:74;;12394:129;12562:2;12588:64;12644:7;12635:6;12624:9;12620:22;12588:64;:::i;:::-;12578:74;;12533:129;12006:663;;;;;:::o;12675:332::-;12796:4;12834:2;12823:9;12819:18;12811:26;;12847:71;12915:1;12904:9;12900:17;12891:6;12847:71;:::i;:::-;12928:72;12996:2;12985:9;12981:18;12972:6;12928:72;:::i;:::-;12675:332;;;;;:::o;13013:137::-;13067:5;13098:6;13092:13;13083:22;;13114:30;13138:5;13114:30;:::i;:::-;13013:137;;;;:::o;13156:345::-;13223:6;13272:2;13260:9;13251:7;13247:23;13243:32;13240:119;;;13278:79;;:::i;:::-;13240:119;13398:1;13423:61;13476:7;13467:6;13456:9;13452:22;13423:61;:::i;:::-;13413:71;;13369:125;13156:345;;;;:::o;13507:410::-;13547:7;13570:20;13588:1;13570:20;:::i;:::-;13565:25;;13604:20;13622:1;13604:20;:::i;:::-;13599:25;;13659:1;13656;13652:9;13681:30;13699:11;13681:30;:::i;:::-;13670:41;;13860:1;13851:7;13847:15;13844:1;13841:22;13821:1;13814:9;13794:83;13771:139;;13890:18;;:::i;:::-;13771:139;13555:362;13507:410;;;;:::o;13923:180::-;13971:77;13968:1;13961:88;14068:4;14065:1;14058:15;14092:4;14089:1;14082:15;14109:185;14149:1;14166:20;14184:1;14166:20;:::i;:::-;14161:25;;14200:20;14218:1;14200:20;:::i;:::-;14195:25;;14239:1;14229:35;;14244:18;;:::i;:::-;14229:35;14286:1;14283;14279:9;14274:14;;14109:185;;;;:::o;14300:244::-;14440:34;14436:1;14428:6;14424:14;14417:58;14509:27;14504:2;14496:6;14492:15;14485:52;14300:244;:::o;14550:366::-;14692:3;14713:67;14777:2;14772:3;14713:67;:::i;:::-;14706:74;;14789:93;14878:3;14789:93;:::i;:::-;14907:2;14902:3;14898:12;14891:19;;14550:366;;;:::o;14922:419::-;15088:4;15126:2;15115:9;15111:18;15103:26;;15175:9;15169:4;15165:20;15161:1;15150:9;15146:17;15139:47;15203:131;15329:4;15203:131;:::i;:::-;15195:139;;14922:419;;;:::o;15347:167::-;15487:19;15483:1;15475:6;15471:14;15464:43;15347:167;:::o;15520:366::-;15662:3;15683:67;15747:2;15742:3;15683:67;:::i;:::-;15676:74;;15759:93;15848:3;15759:93;:::i;:::-;15877:2;15872:3;15868:12;15861:19;;15520:366;;;:::o;15892:419::-;16058:4;16096:2;16085:9;16081:18;16073:26;;16145:9;16139:4;16135:20;16131:1;16120:9;16116:17;16109:47;16173:131;16299:4;16173:131;:::i;:::-;16165:139;;15892:419;;;:::o;16317:179::-;16457:31;16453:1;16445:6;16441:14;16434:55;16317:179;:::o;16502:366::-;16644:3;16665:67;16729:2;16724:3;16665:67;:::i;:::-;16658:74;;16741:93;16830:3;16741:93;:::i;:::-;16859:2;16854:3;16850:12;16843:19;;16502:366;;;:::o;16874:419::-;17040:4;17078:2;17067:9;17063:18;17055:26;;17127:9;17121:4;17117:20;17113:1;17102:9;17098:17;17091:47;17155:131;17281:4;17155:131;:::i;:::-;17147:139;;16874:419;;;:::o;17299:224::-;17439:34;17435:1;17427:6;17423:14;17416:58;17508:7;17503:2;17495:6;17491:15;17484:32;17299:224;:::o;17529:366::-;17671:3;17692:67;17756:2;17751:3;17692:67;:::i;:::-;17685:74;;17768:93;17857:3;17768:93;:::i;:::-;17886:2;17881:3;17877:12;17870:19;;17529:366;;;:::o;17901:419::-;18067:4;18105:2;18094:9;18090:18;18082:26;;18154:9;18148:4;18144:20;18140:1;18129:9;18125:17;18118:47;18182:131;18308:4;18182:131;:::i;:::-;18174:139;;17901:419;;;:::o;18326:225::-;18466:34;18462:1;18454:6;18450:14;18443:58;18535:8;18530:2;18522:6;18518:15;18511:33;18326:225;:::o;18557:366::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:419::-;19095:4;19133:2;19122:9;19118:18;19110:26;;19182:9;19176:4;19172:20;19168:1;19157:9;19153:17;19146:47;19210:131;19336:4;19210:131;:::i;:::-;19202:139;;18929:419;;;:::o;19354:223::-;19494:34;19490:1;19482:6;19478:14;19471:58;19563:6;19558:2;19550:6;19546:15;19539:31;19354:223;:::o;19583:366::-;19725:3;19746:67;19810:2;19805:3;19746:67;:::i;:::-;19739:74;;19822:93;19911:3;19822:93;:::i;:::-;19940:2;19935:3;19931:12;19924:19;;19583:366;;;:::o;19955:419::-;20121:4;20159:2;20148:9;20144:18;20136:26;;20208:9;20202:4;20198:20;20194:1;20183:9;20179:17;20172:47;20236:131;20362:4;20236:131;:::i;:::-;20228:139;;19955:419;;;:::o;20380:221::-;20520:34;20516:1;20508:6;20504:14;20497:58;20589:4;20584:2;20576:6;20572:15;20565:29;20380:221;:::o;20607:366::-;20749:3;20770:67;20834:2;20829:3;20770:67;:::i;:::-;20763:74;;20846:93;20935:3;20846:93;:::i;:::-;20964:2;20959:3;20955:12;20948:19;;20607:366;;;:::o;20979:419::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21232:9;21226:4;21222:20;21218:1;21207:9;21203:17;21196:47;21260:131;21386:4;21260:131;:::i;:::-;21252:139;;20979:419;;;:::o;21404:182::-;21544:34;21540:1;21532:6;21528:14;21521:58;21404:182;:::o;21592:366::-;21734:3;21755:67;21819:2;21814:3;21755:67;:::i;:::-;21748:74;;21831:93;21920:3;21831:93;:::i;:::-;21949:2;21944:3;21940:12;21933:19;;21592:366;;;:::o;21964:419::-;22130:4;22168:2;22157:9;22153:18;22145:26;;22217:9;22211:4;22207:20;22203:1;22192:9;22188:17;22181:47;22245:131;22371:4;22245:131;:::i;:::-;22237:139;;21964:419;;;:::o;22389:179::-;22529:31;22525:1;22517:6;22513:14;22506:55;22389:179;:::o;22574:366::-;22716:3;22737:67;22801:2;22796:3;22737:67;:::i;:::-;22730:74;;22813:93;22902:3;22813:93;:::i;:::-;22931:2;22926:3;22922:12;22915:19;;22574:366;;;:::o;22946:419::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;22946:419;;;:::o;23371:224::-;23511:34;23507:1;23499:6;23495:14;23488:58;23580:7;23575:2;23567:6;23563:15;23556:32;23371:224;:::o;23601:366::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:419::-;24139:4;24177:2;24166:9;24162:18;24154:26;;24226:9;24220:4;24216:20;24212:1;24201:9;24197:17;24190:47;24254:131;24380:4;24254:131;:::i;:::-;24246:139;;23973:419;;;:::o;24398:222::-;24538:34;24534:1;24526:6;24522:14;24515:58;24607:5;24602:2;24594:6;24590:15;24583:30;24398:222;:::o;24626:366::-;24768:3;24789:67;24853:2;24848:3;24789:67;:::i;:::-;24782:74;;24865:93;24954:3;24865:93;:::i;:::-;24983:2;24978:3;24974:12;24967:19;;24626:366;;;:::o;24998:419::-;25164:4;25202:2;25191:9;25187:18;25179:26;;25251:9;25245:4;25241:20;25237:1;25226:9;25222:17;25215:47;25279:131;25405:4;25279:131;:::i;:::-;25271:139;;24998:419;;;:::o;25423:172::-;25563:24;25559:1;25551:6;25547:14;25540:48;25423:172;:::o;25601:366::-;25743:3;25764:67;25828:2;25823:3;25764:67;:::i;:::-;25757:74;;25840:93;25929:3;25840:93;:::i;:::-;25958:2;25953:3;25949:12;25942:19;;25601:366;;;:::o;25973:419::-;26139:4;26177:2;26166:9;26162:18;26154:26;;26226:9;26220:4;26216:20;26212:1;26201:9;26197:17;26190:47;26254:131;26380:4;26254:131;:::i;:::-;26246:139;;25973:419;;;:::o;26398:240::-;26538:34;26534:1;26526:6;26522:14;26515:58;26607:23;26602:2;26594:6;26590:15;26583:48;26398:240;:::o;26644:366::-;26786:3;26807:67;26871:2;26866:3;26807:67;:::i;:::-;26800:74;;26883:93;26972:3;26883:93;:::i;:::-;27001:2;26996:3;26992:12;26985:19;;26644:366;;;:::o;27016:419::-;27182:4;27220:2;27209:9;27205:18;27197:26;;27269:9;27263:4;27259:20;27255:1;27244:9;27240:17;27233:47;27297:131;27423:4;27297:131;:::i;:::-;27289:139;;27016:419;;;:::o;27441:240::-;27581:34;27577:1;27569:6;27565:14;27558:58;27650:23;27645:2;27637:6;27633:15;27626:48;27441:240;:::o;27687:366::-;27829:3;27850:67;27914:2;27909:3;27850:67;:::i;:::-;27843:74;;27926:93;28015:3;27926:93;:::i;:::-;28044:2;28039:3;28035:12;28028:19;;27687:366;;;:::o;28059:419::-;28225:4;28263:2;28252:9;28248:18;28240:26;;28312:9;28306:4;28302:20;28298:1;28287:9;28283:17;28276:47;28340:131;28466:4;28340:131;:::i;:::-;28332:139;;28059:419;;;:::o;28484:169::-;28624:21;28620:1;28612:6;28608:14;28601:45;28484:169;:::o;28659:366::-;28801:3;28822:67;28886:2;28881:3;28822:67;:::i;:::-;28815:74;;28898:93;28987:3;28898:93;:::i;:::-;29016:2;29011:3;29007:12;29000:19;;28659:366;;;:::o;29031:419::-;29197:4;29235:2;29224:9;29220:18;29212:26;;29284:9;29278:4;29274:20;29270:1;29259:9;29255:17;29248:47;29312:131;29438:4;29312:131;:::i;:::-;29304:139;;29031:419;;;:::o;29456:241::-;29596:34;29592:1;29584:6;29580:14;29573:58;29665:24;29660:2;29652:6;29648:15;29641:49;29456:241;:::o;29703:366::-;29845:3;29866:67;29930:2;29925:3;29866:67;:::i;:::-;29859:74;;29942:93;30031:3;29942:93;:::i;:::-;30060:2;30055:3;30051:12;30044:19;;29703:366;;;:::o;30075:419::-;30241:4;30279:2;30268:9;30264:18;30256:26;;30328:9;30322:4;30318:20;30314:1;30303:9;30299:17;30292:47;30356:131;30482:4;30356:131;:::i;:::-;30348:139;;30075:419;;;:::o;30500:194::-;30540:4;30560:20;30578:1;30560:20;:::i;:::-;30555:25;;30594:20;30612:1;30594:20;:::i;:::-;30589:25;;30638:1;30635;30631:9;30623:17;;30662:1;30656:4;30653:11;30650:37;;;30667:18;;:::i;:::-;30650:37;30500:194;;;;:::o;30700:220::-;30840:34;30836:1;30828:6;30824:14;30817:58;30909:3;30904:2;30896:6;30892:15;30885:28;30700:220;:::o;30926:366::-;31068:3;31089:67;31153:2;31148:3;31089:67;:::i;:::-;31082:74;;31165:93;31254:3;31165:93;:::i;:::-;31283:2;31278:3;31274:12;31267:19;;30926:366;;;:::o;31298:419::-;31464:4;31502:2;31491:9;31487:18;31479:26;;31551:9;31545:4;31541:20;31537:1;31526:9;31522:17;31515:47;31579:131;31705:4;31579:131;:::i;:::-;31571:139;;31298:419;;;:::o;31723:221::-;31863:34;31859:1;31851:6;31847:14;31840:58;31932:4;31927:2;31919:6;31915:15;31908:29;31723:221;:::o;31950:366::-;32092:3;32113:67;32177:2;32172:3;32113:67;:::i;:::-;32106:74;;32189:93;32278:3;32189:93;:::i;:::-;32307:2;32302:3;32298:12;32291:19;;31950:366;;;:::o;32322:419::-;32488:4;32526:2;32515:9;32511:18;32503:26;;32575:9;32569:4;32565:20;32561:1;32550:9;32546:17;32539:47;32603:131;32729:4;32603:131;:::i;:::-;32595:139;;32322:419;;;:::o;32747:180::-;32795:77;32792:1;32785:88;32892:4;32889:1;32882:15;32916:4;32913:1;32906:15;32933:180;32981:77;32978:1;32971:88;33078:4;33075:1;33068:15;33102:4;33099:1;33092:15;33119:143;33176:5;33207:6;33201:13;33192:22;;33223:33;33250:5;33223:33;:::i;:::-;33119:143;;;;:::o;33268:351::-;33338:6;33387:2;33375:9;33366:7;33362:23;33358:32;33355:119;;;33393:79;;:::i;:::-;33355:119;33513:1;33538:64;33594:7;33585:6;33574:9;33570:22;33538:64;:::i;:::-;33528:74;;33484:128;33268:351;;;;:::o;33625:114::-;33692:6;33726:5;33720:12;33710:22;;33625:114;;;:::o;33745:184::-;33844:11;33878:6;33873:3;33866:19;33918:4;33913:3;33909:14;33894:29;;33745:184;;;;:::o;33935:132::-;34002:4;34025:3;34017:11;;34055:4;34050:3;34046:14;34038:22;;33935:132;;;:::o;34073:108::-;34150:24;34168:5;34150:24;:::i;:::-;34145:3;34138:37;34073:108;;:::o;34187:179::-;34256:10;34277:46;34319:3;34311:6;34277:46;:::i;:::-;34355:4;34350:3;34346:14;34332:28;;34187:179;;;;:::o;34372:113::-;34442:4;34474;34469:3;34465:14;34457:22;;34372:113;;;:::o;34521:732::-;34640:3;34669:54;34717:5;34669:54;:::i;:::-;34739:86;34818:6;34813:3;34739:86;:::i;:::-;34732:93;;34849:56;34899:5;34849:56;:::i;:::-;34928:7;34959:1;34944:284;34969:6;34966:1;34963:13;34944:284;;;35045:6;35039:13;35072:63;35131:3;35116:13;35072:63;:::i;:::-;35065:70;;35158:60;35211:6;35158:60;:::i;:::-;35148:70;;35004:224;34991:1;34988;34984:9;34979:14;;34944:284;;;34948:14;35244:3;35237:10;;34645:608;;;34521:732;;;;:::o;35259:831::-;35522:4;35560:3;35549:9;35545:19;35537:27;;35574:71;35642:1;35631:9;35627:17;35618:6;35574:71;:::i;:::-;35655:80;35731:2;35720:9;35716:18;35707:6;35655:80;:::i;:::-;35782:9;35776:4;35772:20;35767:2;35756:9;35752:18;35745:48;35810:108;35913:4;35904:6;35810:108;:::i;:::-;35802:116;;35928:72;35996:2;35985:9;35981:18;35972:6;35928:72;:::i;:::-;36010:73;36078:3;36067:9;36063:19;36054:6;36010:73;:::i;:::-;35259:831;;;;;;;;:::o;36096:225::-;36236:34;36232:1;36224:6;36220:14;36213:58;36305:8;36300:2;36292:6;36288:15;36281:33;36096:225;:::o;36327:366::-;36469:3;36490:67;36554:2;36549:3;36490:67;:::i;:::-;36483:74;;36566:93;36655:3;36566:93;:::i;:::-;36684:2;36679:3;36675:12;36668:19;;36327:366;;;:::o;36699:419::-;36865:4;36903:2;36892:9;36888:18;36880:26;;36952:9;36946:4;36942:20;36938:1;36927:9;36923:17;36916:47;36980:131;37106:4;36980:131;:::i;:::-;36972:139;;36699:419;;;:::o

Swarm Source

ipfs://296f5f5ecdc74c1d7f252d31650f212af1fb1e53428e65dfcad718c41ab0e89f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.