ETH Price: $2,403.32 (+1.06%)

Contract

0x2480B7f578cB4Ad7de5582DdDE1Af6D19F7e675e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve184628622023-10-30 12:05:35310 days ago1698667535IN
0x2480B7f5...19F7e675e
0 ETH0.0007438415.77577342
Approve184044082023-10-22 7:39:47318 days ago1697960387IN
0x2480B7f5...19F7e675e
0 ETH0.000336117.12857
Approve183756512023-10-18 7:07:35322 days ago1697612855IN
0x2480B7f5...19F7e675e
0 ETH0.0004921610.42474096
Approve183724882023-10-17 20:30:59323 days ago1697574659IN
0x2480B7f5...19F7e675e
0 ETH0.0005502611.65539005
Approve183724642023-10-17 20:26:11323 days ago1697574371IN
0x2480B7f5...19F7e675e
0 ETH0.000241088.09024659
Approve183723602023-10-17 20:05:23323 days ago1697573123IN
0x2480B7f5...19F7e675e
0 ETH0.0005687212.114195
Approve183723392023-10-17 20:01:11323 days ago1697572871IN
0x2480B7f5...19F7e675e
0 ETH0.0004846910.27960552
Approve183723272023-10-17 19:58:47323 days ago1697572727IN
0x2480B7f5...19F7e675e
0 ETH0.0004926210.44791809
Transfer183723192023-10-17 19:57:11323 days ago1697572631IN
0x2480B7f5...19F7e675e
0 ETH0.0008788511.23312313
Transfer183723032023-10-17 19:53:59323 days ago1697572439IN
0x2480B7f5...19F7e675e
0 ETH0.0026742911.78938969
Approve183722372023-10-17 19:40:23323 days ago1697571623IN
0x2480B7f5...19F7e675e
0 ETH0.0007305815.47497144
Approve183721782023-10-17 19:28:11323 days ago1697570891IN
0x2480B7f5...19F7e675e
0 ETH0.0004908210.3964424
Approve183721702023-10-17 19:26:35323 days ago1697570795IN
0x2480B7f5...19F7e675e
0 ETH0.0006326913.40137414
Approve183720362023-10-17 18:59:35323 days ago1697569175IN
0x2480B7f5...19F7e675e
0 ETH0.0009029719.12626835
Approve183720292023-10-17 18:58:11323 days ago1697569091IN
0x2480B7f5...19F7e675e
0 ETH0.0009054619.17915878
Transfer183719892023-10-17 18:50:11323 days ago1697568611IN
0x2480B7f5...19F7e675e
0 ETH0.0008148710.30217619
Approve183719502023-10-17 18:42:23323 days ago1697568143IN
0x2480B7f5...19F7e675e
0 ETH0.0010969623.24119843
Approve183719482023-10-17 18:41:59323 days ago1697568119IN
0x2480B7f5...19F7e675e
0 ETH0.0006112312.96329837
Approve183719252023-10-17 18:37:23323 days ago1697567843IN
0x2480B7f5...19F7e675e
0 ETH0.0006858914.52835375
Approve183719212023-10-17 18:36:35323 days ago1697567795IN
0x2480B7f5...19F7e675e
0 ETH0.0006728614.25232452
Approve183719042023-10-17 18:33:11323 days ago1697567591IN
0x2480B7f5...19F7e675e
0 ETH0.0009497920.11818722
Approve183718802023-10-17 18:28:23323 days ago1697567303IN
0x2480B7f5...19F7e675e
0 ETH0.000437169.32131729
Approve183718272023-10-17 18:17:47323 days ago1697566667IN
0x2480B7f5...19F7e675e
0 ETH0.0018263238.6843348
Approve183718262023-10-17 18:17:35323 days ago1697566655IN
0x2480B7f5...19F7e675e
0 ETH0.0005747412.17387058
Approve183718172023-10-17 18:15:47323 days ago1697566547IN
0x2480B7f5...19F7e675e
0 ETH0.0006048412.81156949
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
184044142023-10-22 7:41:11318 days ago1697960471
0x2480B7f5...19F7e675e
0.00032485 ETH
184044142023-10-22 7:41:11318 days ago1697960471
0x2480B7f5...19F7e675e
0.00032485 ETH
184015012023-10-21 21:55:35319 days ago1697925335
0x2480B7f5...19F7e675e
0.0009162 ETH
184015012023-10-21 21:55:35319 days ago1697925335
0x2480B7f5...19F7e675e
0.0009162 ETH
183788472023-10-18 17:53:11322 days ago1697651591
0x2480B7f5...19F7e675e
0.00178269 ETH
183788472023-10-18 17:53:11322 days ago1697651591
0x2480B7f5...19F7e675e
0.00178269 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00028415 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00028415 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00043923 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00043923 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00097557 ETH
183740362023-10-18 1:42:23323 days ago1697593343
0x2480B7f5...19F7e675e
0.00097557 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00034236 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00034236 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00036022 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00036022 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00124642 ETH
183740322023-10-18 1:41:35323 days ago1697593295
0x2480B7f5...19F7e675e
0.00124642 ETH
183725272023-10-17 20:38:47323 days ago1697575127
0x2480B7f5...19F7e675e
0.00076941 ETH
183725272023-10-17 20:38:47323 days ago1697575127
0x2480B7f5...19F7e675e
0.00076941 ETH
183724992023-10-17 20:33:11323 days ago1697574791
0x2480B7f5...19F7e675e
0.00091607 ETH
183724992023-10-17 20:33:11323 days ago1697574791
0x2480B7f5...19F7e675e
0.00091607 ETH
183724912023-10-17 20:31:35323 days ago1697574695
0x2480B7f5...19F7e675e
0.00076213 ETH
183724912023-10-17 20:31:35323 days ago1697574695
0x2480B7f5...19F7e675e
0.00076213 ETH
183724902023-10-17 20:31:23323 days ago1697574683
0x2480B7f5...19F7e675e
0.00089475 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeMama

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-17
*/

/*

Telegram -  https://t.me/JoeMamaCoinPortal
Twitter -   https://twitter.com/JoeMamaCoinETH
Website -   https://joemama.wtf

Who's Joe?

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;

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

pragma solidity ^0.8.21;

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

    function WETH() external pure returns (address);

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

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

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

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

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

pragma solidity ^0.8.21;

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;


interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

pragma solidity ^0.8.21;

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

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

pragma solidity ^0.8.21;


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

pragma solidity ^0.8.21;


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.21;

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

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

    bool private swapping;

    address private marketingWallet;

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

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public blocks;

    uint256 public buyTotalFees;

    uint256 public sellTotalFees;

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

    mapping(address => bool) public automatedMarketMakerPairs;

    mapping(uint256 => uint256) private blockSwaps;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

    constructor() ERC20("Joe Mama Coin", "MAMA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18;
        maxWallet = 20_000_000 * 1e18;
        swapTokensAtAmount = 100_000 * 1e18;
        maxSwapAmount = 5_000_000 * 1e18;

        marketingWallet = msg.sender;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function joeMama(uint256 _blocks) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);

        blocks = _blocks;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function limitsAreJoever() external onlyOwner {
        limitsInEffect = true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount * (10 ** 18);
    }

    function updateMaxSwap(uint256 newAmount) external onlyOwner {
        maxSwapAmount = newAmount * (10 ** 18);
    }

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

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

    function whitelistContract(address _whitelist, bool isWL) public onlyOwner {
        _isExcludedMaxTransactionAmount[_whitelist] = isWL;

        _isExcludedFromFees[_whitelist] = isWL;
    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    function manualswap(uint256 amount) external {
        require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        bool success;
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    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 updateBuyFees(uint256 _marketingFee) external onlyOwner {
        buyTotalFees = _marketingFee;
    }

    function updateSellFees(uint256 _marketingFee) external onlyOwner {
        sellTotalFees = _marketingFee;
    }

    function updateFees(uint256 _buy, uint256 _sell) external onlyOwner {
        buyTotalFees = _buy;
        sellTotalFees = _sell;
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(from, addresses[i], amounts[i] * (10 ** 18));
        }
    }

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

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

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if ((launchedAt + blocks) >= block.number) {
                    // Starting Taxes = 33/33
                    sellTotalFees = 33;
                    buyTotalFees = 33;
                }

                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from]
                && !_isExcludedFromFees[to]
        ) {
            // Limit swaps per block
            if (blockSwaps[block.number] < 3) {
                swapping = true;

                swapBack();

                swapping = false;

                blockSwaps[block.number] = blockSwaps[block.number] + 1;
            }
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > maxSwapAmount) {
            contractBalance = maxSwapAmount;
        }

        // Halve the amount of liquidity tokens

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 totalETH = address(this).balance;

        (success,) = address(marketingWallet).call{value: totalETH}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"joeMama","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"limitsAreJoever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600d81526020017f4a6f65204d616d6120436f696e000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d414d41000000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000bfc565b508060049081620000ee919062000bfc565b50505062000111620001056200047060201b60201c565b6200047760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c8160016200053a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000d45565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000d45565b6040518363ffffffff1660e01b81526004016200028b92919062000d86565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000d45565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a05160016200053a60201b60201c565b6200032b60a05160016200062160201b60201c565b5f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006007819055506a108b2a2c2802909400000060098190555069152d02c7e14af68000006008819055506a0422ca8b0a00a425000000600a819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e4620003d6620006bf60201b60201c565b6001620006e760201b60201c565b620003f7306001620006e760201b60201c565b6200040c61dead6001620006e760201b60201c565b6200042e62000420620006bf60201b60201c565b60016200053a60201b60201c565b620004413060016200053a60201b60201c565b6200045661dead60016200053a60201b60201c565b6200046833826200081e60201b60201c565b505062000f67565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200054a6200047060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000570620006bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c09062000e0f565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006f76200047060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071d620006bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000776576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076d9062000e0f565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000812919062000e4b565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200088f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008869062000eb4565b60405180910390fd5b620008a25f83836200098e60201b60201c565b8060025f828254620008b5919062000f01565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000909919062000f01565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200096f919062000f4c565b60405180910390a36200098a5f83836200099360201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a1457607f821691505b60208210810362000a2a5762000a29620009cf565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a51565b62000a9a868362000a51565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ae462000ade62000ad88462000ab2565b62000abb565b62000ab2565b9050919050565b5f819050919050565b62000aff8362000ac4565b62000b1762000b0e8262000aeb565b84845462000a5d565b825550505050565b5f90565b62000b2d62000b1f565b62000b3a81848462000af4565b505050565b5b8181101562000b615762000b555f8262000b23565b60018101905062000b40565b5050565b601f82111562000bb05762000b7a8162000a30565b62000b858462000a42565b8101602085101562000b95578190505b62000bad62000ba48562000a42565b83018262000b3f565b50505b505050565b5f82821c905092915050565b5f62000bd25f198460080262000bb5565b1980831691505092915050565b5f62000bec838362000bc1565b9150826002028217905092915050565b62000c078262000998565b67ffffffffffffffff81111562000c235762000c22620009a2565b5b62000c2f8254620009fc565b62000c3c82828562000b65565b5f60209050601f83116001811462000c72575f841562000c5d578287015190505b62000c69858262000bdf565b86555062000cd8565b601f19841662000c828662000a30565b5f5b8281101562000cab5784890151825560018201915060208501945060208101905062000c84565b8683101562000ccb578489015162000cc7601f89168262000bc1565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000d0f8262000ce4565b9050919050565b62000d218162000d03565b811462000d2c575f80fd5b50565b5f8151905062000d3f8162000d16565b92915050565b5f6020828403121562000d5d5762000d5c62000ce0565b5b5f62000d6c8482850162000d2f565b91505092915050565b62000d808162000d03565b82525050565b5f60408201905062000d9b5f83018562000d75565b62000daa602083018462000d75565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000df760208362000db1565b915062000e048262000dc1565b602082019050919050565b5f6020820190508181035f83015262000e288162000de9565b9050919050565b5f8115159050919050565b62000e458162000e2f565b82525050565b5f60208201905062000e605f83018462000e3a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000e9c601f8362000db1565b915062000ea98262000e66565b602082019050919050565b5f6020820190508181035f83015262000ecd8162000e8e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f0d8262000ab2565b915062000f1a8362000ab2565b925082820190508082111562000f355762000f3462000ed4565b5b92915050565b62000f468162000ab2565b82525050565b5f60208201905062000f615f83018462000f3b565b92915050565b60805160a05161484062000fc15f395f8181610ecc0152818161159a0152611e0c01525f8181610be901528181611d2701528181611d5501528181611e4801528181612ed901528181612fb80152612fdf01526148405ff3fe60806040526004361061028b575f3560e01c80638da5cb5b11610159578063c18bc195116100c0578063da11badb11610079578063da11badb1461098e578063dd62ed3e146109a4578063e2f45605146109e0578063eba4c33314610a0a578063f2fde38b14610a32578063f8b45b0514610a5a57610292565b8063c18bc195146108a4578063c8c8ebe4146108cc578063cce987d4146108f6578063d257b34f14610920578063d85ba06314610948578063d902e5b81461097257610292565b8063a672990c11610112578063a672990c1461078a578063a9059cbb146107b2578063aacebbe3146107ee578063b62496f514610816578063bbc0c74214610852578063c02466681461087c57610292565b80638da5cb5b14610680578063924de9b7146106aa57806395d89b41146106d2578063967ff23e146106fc5780639a7a23d614610726578063a457c2d71461074e57610292565b806349bd5a5e116101fd5780636fc3eaec116101b65780636fc3eaec146105a057806370a08231146105b6578063715018a6146105f257806371fc4688146106085780637571336a14610630578063881dce601461065857610292565b806349bd5a5e146104a85780634a62bb65146104d257806367243482146104fc5780636a486a8e146105245780636db794371461054e5780636ddd17131461057657610292565b806318160ddd1161024f57806318160ddd1461038a578063203e727e146103b457806323b872dd146103dc57806327c8f83514610418578063313ce56714610442578063395093511461046c57610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc578063150074a3146103385780631694505e1461036057610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a84565b6040516102b7919061350d565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e191906135c2565b610b14565b6040516102f3919061361a565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613633565b610b31565b60405161032f919061361a565b60405180910390f35b348015610343575f80fd5b5061035e6004803603810190610359919061365e565b610b4e565b005b34801561036b575f80fd5b50610374610be7565b60405161038191906136e4565b60405180910390f35b348015610395575f80fd5b5061039e610c0b565b6040516103ab919061370c565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061365e565b610c14565b005b3480156103e7575f80fd5b5061040260048036038101906103fd9190613725565b610d23565b60405161040f919061361a565b60405180910390f35b348015610423575f80fd5b5061042c610e15565b6040516104399190613784565b60405180910390f35b34801561044d575f80fd5b50610456610e1b565b60405161046391906137b8565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d91906135c2565b610e23565b60405161049f919061361a565b60405180910390f35b3480156104b3575f80fd5b506104bc610eca565b6040516104c99190613784565b60405180910390f35b3480156104dd575f80fd5b506104e6610eee565b6040516104f3919061361a565b60405180910390f35b348015610507575f80fd5b50610522600480360381019061051d9190613887565b610f00565b005b34801561052f575f80fd5b50610538610fa9565b604051610545919061370c565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190613905565b610faf565b005b348015610581575f80fd5b5061058a61103d565b604051610597919061361a565b60405180910390f35b3480156105ab575f80fd5b506105b4611050565b005b3480156105c1575f80fd5b506105dc60048036038101906105d79190613633565b6110de565b6040516105e9919061370c565b60405180910390f35b3480156105fd575f80fd5b50610606611123565b005b348015610613575f80fd5b5061062e6004803603810190610629919061365e565b6111aa565b005b34801561063b575f80fd5b506106566004803603810190610651919061396d565b611230565b005b348015610663575f80fd5b5061067e6004803603810190610679919061365e565b611304565b005b34801561068b575f80fd5b506106946113c5565b6040516106a19190613784565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb91906139ab565b6113ed565b005b3480156106dd575f80fd5b506106e6611486565b6040516106f3919061350d565b60405180910390f35b348015610707575f80fd5b50610710611516565b60405161071d919061370c565b60405180910390f35b348015610731575f80fd5b5061074c6004803603810190610747919061396d565b61151c565b005b348015610759575f80fd5b50610774600480360381019061076f91906135c2565b611634565b604051610781919061361a565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab919061396d565b61171a565b005b3480156107bd575f80fd5b506107d860048036038101906107d391906135c2565b611842565b6040516107e5919061361a565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190613633565b61185f565b005b348015610821575f80fd5b5061083c60048036038101906108379190613633565b611999565b604051610849919061361a565b60405180910390f35b34801561085d575f80fd5b506108666119b6565b604051610873919061361a565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d919061396d565b6119c9565b005b3480156108af575f80fd5b506108ca60048036038101906108c5919061365e565b611aeb565b005b3480156108d7575f80fd5b506108e0611bfa565b6040516108ed919061370c565b60405180910390f35b348015610901575f80fd5b5061090a611c00565b604051610917919061370c565b60405180910390f35b34801561092b575f80fd5b506109466004803603810190610941919061365e565b611c06565b005b348015610953575f80fd5b5061095c611c9f565b604051610969919061370c565b60405180910390f35b61098c6004803603810190610987919061365e565b611ca5565b005b348015610999575f80fd5b506109a2611f34565b005b3480156109af575f80fd5b506109ca60048036038101906109c591906139d6565b611fcc565b6040516109d7919061370c565b60405180910390f35b3480156109eb575f80fd5b506109f461204e565b604051610a01919061370c565b60405180910390f35b348015610a15575f80fd5b50610a306004803603810190610a2b919061365e565b612054565b005b348015610a3d575f80fd5b50610a586004803603810190610a539190613633565b6120da565b005b348015610a65575f80fd5b50610a6e6121d0565b604051610a7b919061370c565b60405180910390f35b606060038054610a9390613a41565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90613a41565b8015610b0a5780601f10610ae157610100808354040283529160200191610b0a565b820191905f5260205f20905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b5f610b27610b206121d6565b84846121dd565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b566121d6565b73ffffffffffffffffffffffffffffffffffffffff16610b746113c5565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190613abb565b60405180910390fd5b670de0b6b3a764000081610bde9190613b06565b600a8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610c1c6121d6565b73ffffffffffffffffffffffffffffffffffffffff16610c3a6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613abb565b60405180910390fd5b670de0b6b3a76400006103e86001610ca6610c0b565b610cb09190613b06565b610cba9190613b74565b610cc49190613b74565b811015610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613c14565b60405180910390fd5b670de0b6b3a764000081610d1a9190613b06565b60078190555050565b5f610d2f8484846123a0565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d766121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613ca2565b60405180910390fd5b610e0985610e016121d6565b8584036121dd565b60019150509392505050565b61dead81565b5f6012905090565b5f610ec0610e2f6121d6565b848460015f610e3c6121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ebb9190613cc0565b6121dd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f84849050118015610f1757508383905082829050145b610f1f575f80fd5b5f3390505f5b85859050811015610fa157610f8e82878784818110610f4757610f46613cf3565b5b9050602002016020810190610f5c9190613633565b670de0b6b3a7640000878786818110610f7857610f77613cf3565b5b90506020020135610f899190613b06565b6123a0565b8080610f9990613d20565b915050610f25565b505050505050565b60105481565b610fb76121d6565b73ffffffffffffffffffffffffffffffffffffffff16610fd56113c5565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613abb565b60405180910390fd5b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161109690613d94565b5f6040518083038185875af1925050503d805f81146110d0576040519150601f19603f3d011682016040523d82523d5f602084013e6110d5565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61112b6121d6565b73ffffffffffffffffffffffffffffffffffffffff166111496113c5565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613abb565b60405180910390fd5b6111a85f612d79565b565b6111b26121d6565b73ffffffffffffffffffffffffffffffffffffffff166111d06113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613abb565b60405180910390fd5b80600f8190555050565b6112386121d6565b73ffffffffffffffffffffffffffffffffffffffff166112566113c5565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613abb565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113446121d6565b73ffffffffffffffffffffffffffffffffffffffff1614611363575f80fd5b61136c306110de565b811115801561137a57505f81115b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613df2565b60405180910390fd5b6113c281612e3c565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f56121d6565b73ffffffffffffffffffffffffffffffffffffffff166114136113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613abb565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461149590613a41565b80601f01602080910402602001604051908101604052809291908181526020018280546114c190613a41565b801561150c5780601f106114e35761010080835404028352916020019161150c565b820191905f5260205f20905b8154815290600101906020018083116114ef57829003601f168201915b5050505050905090565b600e5481565b6115246121d6565b73ffffffffffffffffffffffffffffffffffffffff166115426113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613abb565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613e80565b60405180910390fd5b611630828261306f565b5050565b5f8060015f6116416121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613f0e565b60405180910390fd5b61170f6117066121d6565b858584036121dd565b600191505092915050565b6117226121d6565b73ffffffffffffffffffffffffffffffffffffffff166117406113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90613abb565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61185561184e6121d6565b84846123a0565b6001905092915050565b6118676121d6565b73ffffffffffffffffffffffffffffffffffffffff166118856113c5565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613abb565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119d16121d6565b73ffffffffffffffffffffffffffffffffffffffff166119ef6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90613abb565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611adf919061361a565b60405180910390a25050565b611af36121d6565b73ffffffffffffffffffffffffffffffffffffffff16611b116113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613abb565b60405180910390fd5b670de0b6b3a76400006103e86005611b7d610c0b565b611b879190613b06565b611b919190613b74565b611b9b9190613b74565b811015611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613f9c565b60405180910390fd5b670de0b6b3a764000081611bf19190613b06565b60098190555050565b60075481565b600a5481565b611c0e6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611c2c6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613abb565b60405180910390fd5b670de0b6b3a764000081611c969190613b06565b60088190555050565b600f5481565b611cad6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611ccb6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613abb565b60405180910390fd5b611d53307f0000000000000000000000000000000000000000000000000000000000000000611d4e610c0b565b6121dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611d9a306110de565b5f80611da46113c5565b426040518863ffffffff1660e01b8152600401611dc696959493929190613ff3565b60606040518083038185885af1158015611de2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e079190614066565b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ea59291906140b6565b6020604051808303815f875af1158015611ec1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee591906140f1565b5080600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d8190555050565b611f3c6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611f5a6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613abb565b60405180910390fd5b6001600b5f6101000a81548160ff021916908315150217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61205c6121d6565b73ffffffffffffffffffffffffffffffffffffffff1661207a6113c5565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790613abb565b60405180910390fd5b8060108190555050565b6120e26121d6565b73ffffffffffffffffffffffffffffffffffffffff166121006113c5565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90613abb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061418c565b60405180910390fd5b6121cd81612d79565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061421a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906142a8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612393919061370c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612473906143c4565b60405180910390fd5b5f81036124935761248e83835f61310d565b612d74565b600b5f9054906101000a900460ff161561299e576124af6113c5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251d57506124ed6113c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561258f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a85750600560149054906101000a900460ff16155b1561299d5743600e54600c546125be9190613cc0565b106125d45760216010819055506021600f819055505b600b60019054906101000a900460ff166126c35760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612683575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b99061442c565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612807576007548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a1906144ba565b60405180910390fd5b6009546127b6836110de565b826127c19190613cc0565b1115612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990614522565b60405180910390fd5b61299c565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128a4575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128f3576007548111156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e5906145b0565b60405180910390fd5b61299b565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661299a5760095461294d836110de565b826129589190613cc0565b1115612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614522565b60405180910390fd5b5b5b5b5b5b5f6129a8306110de565b90505f60085482101590508080156129cc5750600b60029054906101000a900460ff165b80156129e55750600560149054906101000a900460ff16155b8015612a38575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a8b575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ade575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6f57600360145f4381526020019081526020015f20541015612b6e576001600560146101000a81548160ff021916908315150217905550612b20613382565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b589190613cc0565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c1e575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c27575f90505b5f8115612d645760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c8557505f601054115b15612cb957612cb26064612ca46010548861344f90919063ffffffff16565b61346490919063ffffffff16565b9050612d41565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d1057505f600f54115b15612d4057612d3d6064612d2f600f548861344f90919063ffffffff16565b61346490919063ffffffff16565b90505b5b5f811115612d5557612d5487308361310d565b5b8085612d6191906145ce565b94505b612d6f87878761310d565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612e5857612e57614601565b5b604051908082528060200260200182016040528015612e865781602001602082028036833780820191505090505b50905030815f81518110612e9d57612e9c613cf3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614642565b81600181518110612f7857612f77613cf3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fdd307f0000000000000000000000000000000000000000000000000000000000000000846121dd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161303e959493929190614724565b5f604051808303815f87803b158015613055575f80fd5b505af1158015613067573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e0906143c4565b60405180910390fd5b6131f4838383613479565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e906147ec565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546133059190613cc0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613369919061370c565b60405180910390a361337c84848461347e565b50505050565b5f61338c306110de565b90505f80820361339d57505061344d565b600a548211156133ad57600a5491505b5f8290506133ba81612e3c565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161340390613d94565b5f6040518083038185875af1925050503d805f811461343d576040519150601f19603f3d011682016040523d82523d5f602084013e613442565b606091505b505080935050505050505b565b5f818361345c9190613b06565b905092915050565b5f81836134719190613b74565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134ba57808201518184015260208101905061349f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134df82613483565b6134e9818561348d565b93506134f981856020860161349d565b613502816134c5565b840191505092915050565b5f6020820190508181035f83015261352581846134d5565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61355e82613535565b9050919050565b61356e81613554565b8114613578575f80fd5b50565b5f8135905061358981613565565b92915050565b5f819050919050565b6135a18161358f565b81146135ab575f80fd5b50565b5f813590506135bc81613598565b92915050565b5f80604083850312156135d8576135d761352d565b5b5f6135e58582860161357b565b92505060206135f6858286016135ae565b9150509250929050565b5f8115159050919050565b61361481613600565b82525050565b5f60208201905061362d5f83018461360b565b92915050565b5f602082840312156136485761364761352d565b5b5f6136558482850161357b565b91505092915050565b5f602082840312156136735761367261352d565b5b5f613680848285016135ae565b91505092915050565b5f819050919050565b5f6136ac6136a76136a284613535565b613689565b613535565b9050919050565b5f6136bd82613692565b9050919050565b5f6136ce826136b3565b9050919050565b6136de816136c4565b82525050565b5f6020820190506136f75f8301846136d5565b92915050565b6137068161358f565b82525050565b5f60208201905061371f5f8301846136fd565b92915050565b5f805f6060848603121561373c5761373b61352d565b5b5f6137498682870161357b565b935050602061375a8682870161357b565b925050604061376b868287016135ae565b9150509250925092565b61377e81613554565b82525050565b5f6020820190506137975f830184613775565b92915050565b5f60ff82169050919050565b6137b28161379d565b82525050565b5f6020820190506137cb5f8301846137a9565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126137f2576137f16137d1565b5b8235905067ffffffffffffffff81111561380f5761380e6137d5565b5b60208301915083602082028301111561382b5761382a6137d9565b5b9250929050565b5f8083601f840112613847576138466137d1565b5b8235905067ffffffffffffffff811115613864576138636137d5565b5b6020830191508360208202830111156138805761387f6137d9565b5b9250929050565b5f805f806040858703121561389f5761389e61352d565b5b5f85013567ffffffffffffffff8111156138bc576138bb613531565b5b6138c8878288016137dd565b9450945050602085013567ffffffffffffffff8111156138eb576138ea613531565b5b6138f787828801613832565b925092505092959194509250565b5f806040838503121561391b5761391a61352d565b5b5f613928858286016135ae565b9250506020613939858286016135ae565b9150509250929050565b61394c81613600565b8114613956575f80fd5b50565b5f8135905061396781613943565b92915050565b5f80604083850312156139835761398261352d565b5b5f6139908582860161357b565b92505060206139a185828601613959565b9150509250929050565b5f602082840312156139c0576139bf61352d565b5b5f6139cd84828501613959565b91505092915050565b5f80604083850312156139ec576139eb61352d565b5b5f6139f98582860161357b565b9250506020613a0a8582860161357b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a5857607f821691505b602082108103613a6b57613a6a613a14565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aa560208361348d565b9150613ab082613a71565b602082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b108261358f565b9150613b1b8361358f565b9250828202613b298161358f565b91508282048414831517613b4057613b3f613ad9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b7e8261358f565b9150613b898361358f565b925082613b9957613b98613b47565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613bfe602f8361348d565b9150613c0982613ba4565b604082019050919050565b5f6020820190508181035f830152613c2b81613bf2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613c8c60288361348d565b9150613c9782613c32565b604082019050919050565b5f6020820190508181035f830152613cb981613c80565b9050919050565b5f613cca8261358f565b9150613cd58361358f565b9250828201905080821115613ced57613cec613ad9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613d2a8261358f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d5c57613d5b613ad9565b5b600182019050919050565b5f81905092915050565b50565b5f613d7f5f83613d67565b9150613d8a82613d71565b5f82019050919050565b5f613d9e82613d74565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613ddc600c8361348d565b9150613de782613da8565b602082019050919050565b5f6020820190508181035f830152613e0981613dd0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e6a60398361348d565b9150613e7582613e10565b604082019050919050565b5f6020820190508181035f830152613e9781613e5e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613ef860258361348d565b9150613f0382613e9e565b604082019050919050565b5f6020820190508181035f830152613f2581613eec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613f8660248361348d565b9150613f9182613f2c565b604082019050919050565b5f6020820190508181035f830152613fb381613f7a565b9050919050565b5f819050919050565b5f613fdd613fd8613fd384613fba565b613689565b61358f565b9050919050565b613fed81613fc3565b82525050565b5f60c0820190506140065f830189613775565b61401360208301886136fd565b6140206040830187613fe4565b61402d6060830186613fe4565b61403a6080830185613775565b61404760a08301846136fd565b979650505050505050565b5f8151905061406081613598565b92915050565b5f805f6060848603121561407d5761407c61352d565b5b5f61408a86828701614052565b935050602061409b86828701614052565b92505060406140ac86828701614052565b9150509250925092565b5f6040820190506140c95f830185613775565b6140d660208301846136fd565b9392505050565b5f815190506140eb81613943565b92915050565b5f602082840312156141065761410561352d565b5b5f614113848285016140dd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61417660268361348d565b91506141818261411c565b604082019050919050565b5f6020820190508181035f8301526141a38161416a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61420460248361348d565b915061420f826141aa565b604082019050919050565b5f6020820190508181035f830152614231816141f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61429260228361348d565b915061429d82614238565b604082019050919050565b5f6020820190508181035f8301526142bf81614286565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61432060258361348d565b915061432b826142c6565b604082019050919050565b5f6020820190508181035f83015261434d81614314565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ae60238361348d565b91506143b982614354565b604082019050919050565b5f6020820190508181035f8301526143db816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61441660168361348d565b9150614421826143e2565b602082019050919050565b5f6020820190508181035f8301526144438161440a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144a460358361348d565b91506144af8261444a565b604082019050919050565b5f6020820190508181035f8301526144d181614498565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61450c60138361348d565b9150614517826144d8565b602082019050919050565b5f6020820190508181035f83015261453981614500565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61459a60368361348d565b91506145a582614540565b604082019050919050565b5f6020820190508181035f8301526145c78161458e565b9050919050565b5f6145d88261358f565b91506145e38361358f565b92508282039050818111156145fb576145fa613ad9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061463c81613565565b92915050565b5f602082840312156146575761465661352d565b5b5f6146648482850161462e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61469f81613554565b82525050565b5f6146b08383614696565b60208301905092915050565b5f602082019050919050565b5f6146d28261466d565b6146dc8185614677565b93506146e783614687565b805f5b838110156147175781516146fe88826146a5565b9750614709836146bc565b9250506001810190506146ea565b5085935050505092915050565b5f60a0820190506147375f8301886136fd565b6147446020830187613fe4565b818103604083015261475681866146c8565b90506147656060830185613775565b61477260808301846136fd565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147d660268361348d565b91506147e18261477c565b604082019050919050565b5f6020820190508181035f830152614803816147ca565b905091905056fea2646970667358221220e30f7ee732692037c2ffc30fc3f5c308268b0a0471b98dbc5432bccdc509d51f64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061028b575f3560e01c80638da5cb5b11610159578063c18bc195116100c0578063da11badb11610079578063da11badb1461098e578063dd62ed3e146109a4578063e2f45605146109e0578063eba4c33314610a0a578063f2fde38b14610a32578063f8b45b0514610a5a57610292565b8063c18bc195146108a4578063c8c8ebe4146108cc578063cce987d4146108f6578063d257b34f14610920578063d85ba06314610948578063d902e5b81461097257610292565b8063a672990c11610112578063a672990c1461078a578063a9059cbb146107b2578063aacebbe3146107ee578063b62496f514610816578063bbc0c74214610852578063c02466681461087c57610292565b80638da5cb5b14610680578063924de9b7146106aa57806395d89b41146106d2578063967ff23e146106fc5780639a7a23d614610726578063a457c2d71461074e57610292565b806349bd5a5e116101fd5780636fc3eaec116101b65780636fc3eaec146105a057806370a08231146105b6578063715018a6146105f257806371fc4688146106085780637571336a14610630578063881dce601461065857610292565b806349bd5a5e146104a85780634a62bb65146104d257806367243482146104fc5780636a486a8e146105245780636db794371461054e5780636ddd17131461057657610292565b806318160ddd1161024f57806318160ddd1461038a578063203e727e146103b457806323b872dd146103dc57806327c8f83514610418578063313ce56714610442578063395093511461046c57610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc578063150074a3146103385780631694505e1461036057610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a84565b6040516102b7919061350d565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e191906135c2565b610b14565b6040516102f3919061361a565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190613633565b610b31565b60405161032f919061361a565b60405180910390f35b348015610343575f80fd5b5061035e6004803603810190610359919061365e565b610b4e565b005b34801561036b575f80fd5b50610374610be7565b60405161038191906136e4565b60405180910390f35b348015610395575f80fd5b5061039e610c0b565b6040516103ab919061370c565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061365e565b610c14565b005b3480156103e7575f80fd5b5061040260048036038101906103fd9190613725565b610d23565b60405161040f919061361a565b60405180910390f35b348015610423575f80fd5b5061042c610e15565b6040516104399190613784565b60405180910390f35b34801561044d575f80fd5b50610456610e1b565b60405161046391906137b8565b60405180910390f35b348015610477575f80fd5b50610492600480360381019061048d91906135c2565b610e23565b60405161049f919061361a565b60405180910390f35b3480156104b3575f80fd5b506104bc610eca565b6040516104c99190613784565b60405180910390f35b3480156104dd575f80fd5b506104e6610eee565b6040516104f3919061361a565b60405180910390f35b348015610507575f80fd5b50610522600480360381019061051d9190613887565b610f00565b005b34801561052f575f80fd5b50610538610fa9565b604051610545919061370c565b60405180910390f35b348015610559575f80fd5b50610574600480360381019061056f9190613905565b610faf565b005b348015610581575f80fd5b5061058a61103d565b604051610597919061361a565b60405180910390f35b3480156105ab575f80fd5b506105b4611050565b005b3480156105c1575f80fd5b506105dc60048036038101906105d79190613633565b6110de565b6040516105e9919061370c565b60405180910390f35b3480156105fd575f80fd5b50610606611123565b005b348015610613575f80fd5b5061062e6004803603810190610629919061365e565b6111aa565b005b34801561063b575f80fd5b506106566004803603810190610651919061396d565b611230565b005b348015610663575f80fd5b5061067e6004803603810190610679919061365e565b611304565b005b34801561068b575f80fd5b506106946113c5565b6040516106a19190613784565b60405180910390f35b3480156106b5575f80fd5b506106d060048036038101906106cb91906139ab565b6113ed565b005b3480156106dd575f80fd5b506106e6611486565b6040516106f3919061350d565b60405180910390f35b348015610707575f80fd5b50610710611516565b60405161071d919061370c565b60405180910390f35b348015610731575f80fd5b5061074c6004803603810190610747919061396d565b61151c565b005b348015610759575f80fd5b50610774600480360381019061076f91906135c2565b611634565b604051610781919061361a565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab919061396d565b61171a565b005b3480156107bd575f80fd5b506107d860048036038101906107d391906135c2565b611842565b6040516107e5919061361a565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190613633565b61185f565b005b348015610821575f80fd5b5061083c60048036038101906108379190613633565b611999565b604051610849919061361a565b60405180910390f35b34801561085d575f80fd5b506108666119b6565b604051610873919061361a565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d919061396d565b6119c9565b005b3480156108af575f80fd5b506108ca60048036038101906108c5919061365e565b611aeb565b005b3480156108d7575f80fd5b506108e0611bfa565b6040516108ed919061370c565b60405180910390f35b348015610901575f80fd5b5061090a611c00565b604051610917919061370c565b60405180910390f35b34801561092b575f80fd5b506109466004803603810190610941919061365e565b611c06565b005b348015610953575f80fd5b5061095c611c9f565b604051610969919061370c565b60405180910390f35b61098c6004803603810190610987919061365e565b611ca5565b005b348015610999575f80fd5b506109a2611f34565b005b3480156109af575f80fd5b506109ca60048036038101906109c591906139d6565b611fcc565b6040516109d7919061370c565b60405180910390f35b3480156109eb575f80fd5b506109f461204e565b604051610a01919061370c565b60405180910390f35b348015610a15575f80fd5b50610a306004803603810190610a2b919061365e565b612054565b005b348015610a3d575f80fd5b50610a586004803603810190610a539190613633565b6120da565b005b348015610a65575f80fd5b50610a6e6121d0565b604051610a7b919061370c565b60405180910390f35b606060038054610a9390613a41565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90613a41565b8015610b0a5780601f10610ae157610100808354040283529160200191610b0a565b820191905f5260205f20905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b5f610b27610b206121d6565b84846121dd565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b566121d6565b73ffffffffffffffffffffffffffffffffffffffff16610b746113c5565b73ffffffffffffffffffffffffffffffffffffffff1614610bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc190613abb565b60405180910390fd5b670de0b6b3a764000081610bde9190613b06565b600a8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610c1c6121d6565b73ffffffffffffffffffffffffffffffffffffffff16610c3a6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613abb565b60405180910390fd5b670de0b6b3a76400006103e86001610ca6610c0b565b610cb09190613b06565b610cba9190613b74565b610cc49190613b74565b811015610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613c14565b60405180910390fd5b670de0b6b3a764000081610d1a9190613b06565b60078190555050565b5f610d2f8484846123a0565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d766121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90613ca2565b60405180910390fd5b610e0985610e016121d6565b8584036121dd565b60019150509392505050565b61dead81565b5f6012905090565b5f610ec0610e2f6121d6565b848460015f610e3c6121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ebb9190613cc0565b6121dd565b6001905092915050565b7f0000000000000000000000009e0b3f75bf0842b6bea8dfd169a6af231732421f81565b600b5f9054906101000a900460ff1681565b5f84849050118015610f1757508383905082829050145b610f1f575f80fd5b5f3390505f5b85859050811015610fa157610f8e82878784818110610f4757610f46613cf3565b5b9050602002016020810190610f5c9190613633565b670de0b6b3a7640000878786818110610f7857610f77613cf3565b5b90506020020135610f899190613b06565b6123a0565b8080610f9990613d20565b915050610f25565b505050505050565b60105481565b610fb76121d6565b73ffffffffffffffffffffffffffffffffffffffff16610fd56113c5565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290613abb565b60405180910390fd5b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161109690613d94565b5f6040518083038185875af1925050503d805f81146110d0576040519150601f19603f3d011682016040523d82523d5f602084013e6110d5565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61112b6121d6565b73ffffffffffffffffffffffffffffffffffffffff166111496113c5565b73ffffffffffffffffffffffffffffffffffffffff161461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690613abb565b60405180910390fd5b6111a85f612d79565b565b6111b26121d6565b73ffffffffffffffffffffffffffffffffffffffff166111d06113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613abb565b60405180910390fd5b80600f8190555050565b6112386121d6565b73ffffffffffffffffffffffffffffffffffffffff166112566113c5565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613abb565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113446121d6565b73ffffffffffffffffffffffffffffffffffffffff1614611363575f80fd5b61136c306110de565b811115801561137a57505f81115b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613df2565b60405180910390fd5b6113c281612e3c565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f56121d6565b73ffffffffffffffffffffffffffffffffffffffff166114136113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090613abb565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461149590613a41565b80601f01602080910402602001604051908101604052809291908181526020018280546114c190613a41565b801561150c5780601f106114e35761010080835404028352916020019161150c565b820191905f5260205f20905b8154815290600101906020018083116114ef57829003601f168201915b5050505050905090565b600e5481565b6115246121d6565b73ffffffffffffffffffffffffffffffffffffffff166115426113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158f90613abb565b60405180910390fd5b7f0000000000000000000000009e0b3f75bf0842b6bea8dfd169a6af231732421f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613e80565b60405180910390fd5b611630828261306f565b5050565b5f8060015f6116416121d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613f0e565b60405180910390fd5b61170f6117066121d6565b858584036121dd565b600191505092915050565b6117226121d6565b73ffffffffffffffffffffffffffffffffffffffff166117406113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90613abb565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61185561184e6121d6565b84846123a0565b6001905092915050565b6118676121d6565b73ffffffffffffffffffffffffffffffffffffffff166118856113c5565b73ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613abb565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119d16121d6565b73ffffffffffffffffffffffffffffffffffffffff166119ef6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3c90613abb565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611adf919061361a565b60405180910390a25050565b611af36121d6565b73ffffffffffffffffffffffffffffffffffffffff16611b116113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613abb565b60405180910390fd5b670de0b6b3a76400006103e86005611b7d610c0b565b611b879190613b06565b611b919190613b74565b611b9b9190613b74565b811015611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613f9c565b60405180910390fd5b670de0b6b3a764000081611bf19190613b06565b60098190555050565b60075481565b600a5481565b611c0e6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611c2c6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613abb565b60405180910390fd5b670de0b6b3a764000081611c969190613b06565b60088190555050565b600f5481565b611cad6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611ccb6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1890613abb565b60405180910390fd5b611d53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d611d4e610c0b565b6121dd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611d9a306110de565b5f80611da46113c5565b426040518863ffffffff1660e01b8152600401611dc696959493929190613ff3565b60606040518083038185885af1158015611de2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e079190614066565b5050507f0000000000000000000000009e0b3f75bf0842b6bea8dfd169a6af231732421f73ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ea59291906140b6565b6020604051808303815f875af1158015611ec1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee591906140f1565b5080600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d8190555050565b611f3c6121d6565b73ffffffffffffffffffffffffffffffffffffffff16611f5a6113c5565b73ffffffffffffffffffffffffffffffffffffffff1614611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613abb565b60405180910390fd5b6001600b5f6101000a81548160ff021916908315150217905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61205c6121d6565b73ffffffffffffffffffffffffffffffffffffffff1661207a6113c5565b73ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790613abb565b60405180910390fd5b8060108190555050565b6120e26121d6565b73ffffffffffffffffffffffffffffffffffffffff166121006113c5565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90613abb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061418c565b60405180910390fd5b6121cd81612d79565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061421a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b0906142a8565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612393919061370c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612473906143c4565b60405180910390fd5b5f81036124935761248e83835f61310d565b612d74565b600b5f9054906101000a900460ff161561299e576124af6113c5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251d57506124ed6113c5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561255557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561258f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a85750600560149054906101000a900460ff16155b1561299d5743600e54600c546125be9190613cc0565b106125d45760216010819055506021600f819055505b600b60019054906101000a900460ff166126c35760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612683575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b99061442c565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612760575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612807576007548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a1906144ba565b60405180910390fd5b6009546127b6836110de565b826127c19190613cc0565b1115612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990614522565b60405180910390fd5b61299c565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128a4575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128f3576007548111156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e5906145b0565b60405180910390fd5b61299b565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661299a5760095461294d836110de565b826129589190613cc0565b1115612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614522565b60405180910390fd5b5b5b5b5b5b5f6129a8306110de565b90505f60085482101590508080156129cc5750600b60029054906101000a900460ff165b80156129e55750600560149054906101000a900460ff16155b8015612a38575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612a8b575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ade575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b6f57600360145f4381526020019081526020015f20541015612b6e576001600560146101000a81548160ff021916908315150217905550612b20613382565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f2054612b589190613cc0565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c1e575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c27575f90505b5f8115612d645760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c8557505f601054115b15612cb957612cb26064612ca46010548861344f90919063ffffffff16565b61346490919063ffffffff16565b9050612d41565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d1057505f600f54115b15612d4057612d3d6064612d2f600f548861344f90919063ffffffff16565b61346490919063ffffffff16565b90505b5b5f811115612d5557612d5487308361310d565b5b8085612d6191906145ce565b94505b612d6f87878761310d565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612e5857612e57614601565b5b604051908082528060200260200182016040528015612e865781602001602082028036833780820191505090505b50905030815f81518110612e9d57612e9c613cf3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f649190614642565b81600181518110612f7857612f77613cf3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fdd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121dd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161303e959493929190614724565b5f604051808303815f87803b158015613055575f80fd5b505af1158015613067573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290614336565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e0906143c4565b60405180910390fd5b6131f4838383613479565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e906147ec565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546133059190613cc0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613369919061370c565b60405180910390a361337c84848461347e565b50505050565b5f61338c306110de565b90505f80820361339d57505061344d565b600a548211156133ad57600a5491505b5f8290506133ba81612e3c565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161340390613d94565b5f6040518083038185875af1925050503d805f811461343d576040519150601f19603f3d011682016040523d82523d5f602084013e613442565b606091505b505080935050505050505b565b5f818361345c9190613b06565b905092915050565b5f81836134719190613b74565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156134ba57808201518184015260208101905061349f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6134df82613483565b6134e9818561348d565b93506134f981856020860161349d565b613502816134c5565b840191505092915050565b5f6020820190508181035f83015261352581846134d5565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61355e82613535565b9050919050565b61356e81613554565b8114613578575f80fd5b50565b5f8135905061358981613565565b92915050565b5f819050919050565b6135a18161358f565b81146135ab575f80fd5b50565b5f813590506135bc81613598565b92915050565b5f80604083850312156135d8576135d761352d565b5b5f6135e58582860161357b565b92505060206135f6858286016135ae565b9150509250929050565b5f8115159050919050565b61361481613600565b82525050565b5f60208201905061362d5f83018461360b565b92915050565b5f602082840312156136485761364761352d565b5b5f6136558482850161357b565b91505092915050565b5f602082840312156136735761367261352d565b5b5f613680848285016135ae565b91505092915050565b5f819050919050565b5f6136ac6136a76136a284613535565b613689565b613535565b9050919050565b5f6136bd82613692565b9050919050565b5f6136ce826136b3565b9050919050565b6136de816136c4565b82525050565b5f6020820190506136f75f8301846136d5565b92915050565b6137068161358f565b82525050565b5f60208201905061371f5f8301846136fd565b92915050565b5f805f6060848603121561373c5761373b61352d565b5b5f6137498682870161357b565b935050602061375a8682870161357b565b925050604061376b868287016135ae565b9150509250925092565b61377e81613554565b82525050565b5f6020820190506137975f830184613775565b92915050565b5f60ff82169050919050565b6137b28161379d565b82525050565b5f6020820190506137cb5f8301846137a9565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126137f2576137f16137d1565b5b8235905067ffffffffffffffff81111561380f5761380e6137d5565b5b60208301915083602082028301111561382b5761382a6137d9565b5b9250929050565b5f8083601f840112613847576138466137d1565b5b8235905067ffffffffffffffff811115613864576138636137d5565b5b6020830191508360208202830111156138805761387f6137d9565b5b9250929050565b5f805f806040858703121561389f5761389e61352d565b5b5f85013567ffffffffffffffff8111156138bc576138bb613531565b5b6138c8878288016137dd565b9450945050602085013567ffffffffffffffff8111156138eb576138ea613531565b5b6138f787828801613832565b925092505092959194509250565b5f806040838503121561391b5761391a61352d565b5b5f613928858286016135ae565b9250506020613939858286016135ae565b9150509250929050565b61394c81613600565b8114613956575f80fd5b50565b5f8135905061396781613943565b92915050565b5f80604083850312156139835761398261352d565b5b5f6139908582860161357b565b92505060206139a185828601613959565b9150509250929050565b5f602082840312156139c0576139bf61352d565b5b5f6139cd84828501613959565b91505092915050565b5f80604083850312156139ec576139eb61352d565b5b5f6139f98582860161357b565b9250506020613a0a8582860161357b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a5857607f821691505b602082108103613a6b57613a6a613a14565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aa560208361348d565b9150613ab082613a71565b602082019050919050565b5f6020820190508181035f830152613ad281613a99565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613b108261358f565b9150613b1b8361358f565b9250828202613b298161358f565b91508282048414831517613b4057613b3f613ad9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613b7e8261358f565b9150613b898361358f565b925082613b9957613b98613b47565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613bfe602f8361348d565b9150613c0982613ba4565b604082019050919050565b5f6020820190508181035f830152613c2b81613bf2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613c8c60288361348d565b9150613c9782613c32565b604082019050919050565b5f6020820190508181035f830152613cb981613c80565b9050919050565b5f613cca8261358f565b9150613cd58361358f565b9250828201905080821115613ced57613cec613ad9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613d2a8261358f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d5c57613d5b613ad9565b5b600182019050919050565b5f81905092915050565b50565b5f613d7f5f83613d67565b9150613d8a82613d71565b5f82019050919050565b5f613d9e82613d74565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613ddc600c8361348d565b9150613de782613da8565b602082019050919050565b5f6020820190508181035f830152613e0981613dd0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613e6a60398361348d565b9150613e7582613e10565b604082019050919050565b5f6020820190508181035f830152613e9781613e5e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613ef860258361348d565b9150613f0382613e9e565b604082019050919050565b5f6020820190508181035f830152613f2581613eec565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613f8660248361348d565b9150613f9182613f2c565b604082019050919050565b5f6020820190508181035f830152613fb381613f7a565b9050919050565b5f819050919050565b5f613fdd613fd8613fd384613fba565b613689565b61358f565b9050919050565b613fed81613fc3565b82525050565b5f60c0820190506140065f830189613775565b61401360208301886136fd565b6140206040830187613fe4565b61402d6060830186613fe4565b61403a6080830185613775565b61404760a08301846136fd565b979650505050505050565b5f8151905061406081613598565b92915050565b5f805f6060848603121561407d5761407c61352d565b5b5f61408a86828701614052565b935050602061409b86828701614052565b92505060406140ac86828701614052565b9150509250925092565b5f6040820190506140c95f830185613775565b6140d660208301846136fd565b9392505050565b5f815190506140eb81613943565b92915050565b5f602082840312156141065761410561352d565b5b5f614113848285016140dd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61417660268361348d565b91506141818261411c565b604082019050919050565b5f6020820190508181035f8301526141a38161416a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61420460248361348d565b915061420f826141aa565b604082019050919050565b5f6020820190508181035f830152614231816141f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61429260228361348d565b915061429d82614238565b604082019050919050565b5f6020820190508181035f8301526142bf81614286565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61432060258361348d565b915061432b826142c6565b604082019050919050565b5f6020820190508181035f83015261434d81614314565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ae60238361348d565b91506143b982614354565b604082019050919050565b5f6020820190508181035f8301526143db816143a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61441660168361348d565b9150614421826143e2565b602082019050919050565b5f6020820190508181035f8301526144438161440a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6144a460358361348d565b91506144af8261444a565b604082019050919050565b5f6020820190508181035f8301526144d181614498565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61450c60138361348d565b9150614517826144d8565b602082019050919050565b5f6020820190508181035f83015261453981614500565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61459a60368361348d565b91506145a582614540565b604082019050919050565b5f6020820190508181035f8301526145c78161458e565b9050919050565b5f6145d88261358f565b91506145e38361358f565b92508282039050818111156145fb576145fa613ad9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061463c81613565565b92915050565b5f602082840312156146575761465661352d565b5b5f6146648482850161462e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61469f81613554565b82525050565b5f6146b08383614696565b60208301905092915050565b5f602082019050919050565b5f6146d28261466d565b6146dc8185614677565b93506146e783614687565b805f5b838110156147175781516146fe88826146a5565b9750614709836146bc565b9250506001810190506146ea565b5085935050505092915050565b5f60a0820190506147375f8301886136fd565b6147446020830187613fe4565b818103604083015261475681866146c8565b90506147656060830185613775565b61477260808301846136fd565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6147d660268361348d565b91506147e18261477c565b604082019050919050565b5f6020820190508181035f830152614803816147ca565b905091905056fea2646970667358221220e30f7ee732692037c2ffc30fc3f5c308268b0a0471b98dbc5432bccdc509d51f64736f6c63430008150033

Deployed Bytecode Sourcemap

11872:10960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7380:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8294:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12684:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15308:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11949:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7701:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15434:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8471:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12052:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7600:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8937:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12007:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12334:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18092:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12588:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17730:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12414:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16883:149;;;;;;;;;;;;;:::i;:::-;;7817:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6426:103;;;;;;;;;;;;;:::i;:::-;;17488:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16114:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16652:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6203:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16354:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7488:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12522:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17040:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9160:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15911:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7952:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17876:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12756:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12374:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16462:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15682:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12184:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12297:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15166:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12552:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14532:532;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15072:86;;;;;;;;;;;;;:::i;:::-;;8135:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12226:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17608:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6537:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12266:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7380:100;7434:13;7467:5;7460:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7380:100;:::o;8294:169::-;8377:4;8394:39;8403:12;:10;:12::i;:::-;8417:7;8426:6;8394:8;:39::i;:::-;8451:4;8444:11;;8294:169;;;;:::o;12684:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15308:118::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15409:8:::1;15396:9;:22;;;;:::i;:::-;15380:13;:38;;;;15308:118:::0;:::o;11949:51::-;;;:::o;7701:108::-;7762:7;7789:12;;7782:19;;7701:108;:::o;15434:240::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15557:4:::1;15549;15544:1;15528:13;:11;:13::i;:::-;:17;;;;:::i;:::-;15527:26;;;;:::i;:::-;15526:35;;;;:::i;:::-;15516:6;:45;;15508:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;15657:8;15647:6;:19;;;;:::i;:::-;15624:20;:42;;;;15434:240:::0;:::o;8471:458::-;8577:4;8594:36;8604:6;8612:9;8623:6;8594:9;:36::i;:::-;8643:24;8670:11;:19;8682:6;8670:19;;;;;;;;;;;;;;;:33;8690:12;:10;:12::i;:::-;8670:33;;;;;;;;;;;;;;;;8643:60;;8742:6;8722:16;:26;;8714:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8829:57;8838:6;8846:12;:10;:12::i;:::-;8879:6;8860:16;:25;8829:8;:57::i;:::-;8917:4;8910:11;;;8471:458;;;;;:::o;12052:53::-;12098:6;12052:53;:::o;7600:93::-;7658:5;7683:2;7676:9;;7600:93;:::o;8937:215::-;9025:4;9042:80;9051:12;:10;:12::i;:::-;9065:7;9111:10;9074:11;:25;9086:12;:10;:12::i;:::-;9074:25;;;;;;;;;;;;;;;:34;9100:7;9074:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9042:8;:80::i;:::-;9140:4;9133:11;;8937:215;;;;:::o;12007:38::-;;;:::o;12334:33::-;;;;;;;;;;;;;:::o;18092:346::-;18214:1;18195:9;;:16;;:20;:58;;;;;18237:9;;:16;;18219:7;;:14;;:34;18195:58;18187:67;;;;;;18265:12;18280:10;18265:25;;18308:9;18303:128;18327:9;;:16;;18323:1;:20;18303:128;;;18365:54;18375:4;18381:9;;18391:1;18381:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18409:8;18395:7;;18403:1;18395:10;;;;;;;:::i;:::-;;;;;;;;:23;;;;:::i;:::-;18365:9;:54::i;:::-;18345:3;;;;;:::i;:::-;;;;18303:128;;;;18176:262;18092:346;;;;:::o;12588:28::-;;;;:::o;17730:138::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17824:4:::1;17809:12;:19;;;;17855:5;17839:13;:21;;;;17730:138:::0;;:::o;12414:31::-;;;;;;;;;;;;;:::o;16883:149::-;16925:12;16969:15;;;;;;;;;;;16961:29;;16998:21;16961:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16948:76;;;;;16914:118;16883:149::o;7817:127::-;7891:7;7918:9;:18;7928:7;7918:18;;;;;;;;;;;;;;;;7911:25;;7817:127;;;:::o;6426:103::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6491:30:::1;6518:1;6491:18;:30::i;:::-;6426:103::o:0;17488:112::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17579:13:::1;17564:12;:28;;;;17488:112:::0;:::o;16114:144::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16246:4:::1;16204:31;:39;16236:6;16204:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16114:144:::0;;:::o;16652:223::-;16732:15;;;;;;;;;;;16716:31;;:12;:10;:12::i;:::-;:31;;;16708:40;;;;;;16777:24;16795:4;16777:9;:24::i;:::-;16767:6;:34;;:48;;;;;16814:1;16805:6;:10;16767:48;16759:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16843:24;16860:6;16843:16;:24::i;:::-;16652:223;:::o;6203:87::-;6249:7;6276:6;;;;;;;;;;;6269:13;;6203:87;:::o;16354:100::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16439:7:::1;16425:11;;:21;;;;;;;;;;;;;;;;;;16354:100:::0;:::o;7488:104::-;7544:13;7577:7;7570:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7488:104;:::o;12522:21::-;;;;:::o;17040:244::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17147:13:::1;17139:21;;:4;:21;;::::0;17131:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17235:41;17264:4;17270:5;17235:28;:41::i;:::-;17040:244:::0;;:::o;9160:413::-;9253:4;9270:24;9297:11;:25;9309:12;:10;:12::i;:::-;9297:25;;;;;;;;;;;;;;;:34;9323:7;9297:34;;;;;;;;;;;;;;;;9270:61;;9370:15;9350:16;:35;;9342:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9463:67;9472:12;:10;:12::i;:::-;9486:7;9514:15;9495:16;:34;9463:8;:67::i;:::-;9561:4;9554:11;;;9160:413;;;;:::o;15911:195::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16043:4:::1;15997:31;:43;16029:10;15997:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;16094:4;16060:19;:31;16080:10;16060:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;15911:195:::0;;:::o;7952:175::-;8038:4;8055:42;8065:12;:10;:12::i;:::-;8079:9;8090:6;8055:9;:42::i;:::-;8115:4;8108:11;;7952:175;;;;:::o;17876:208::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18013:15:::1;;;;;;;;;;;17970:59;;17993:18;17970:59;;;;;;;;;;;;18058:18;18040:15;;:36;;;;;;;;;;;;;;;;;;17876:208:::0;:::o;12756:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12374:33::-;;;;;;;;;;;;;:::o;16462:182::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16578:8:::1;16547:19;:28;16567:7;16547:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16618:7;16602:34;;;16627:8;16602:34;;;;;;:::i;:::-;;;;;;;;16462:182:::0;;:::o;15682:221::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15808:4:::1;15800;15795:1;15779:13;:11;:13::i;:::-;:17;;;;:::i;:::-;15778:26;;;;:::i;:::-;15777:35;;;;:::i;:::-;15767:6;:45;;15759:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;15886:8;15876:6;:19;;;;:::i;:::-;15864:9;:31;;;;15682:221:::0;:::o;12184:35::-;;;;:::o;12297:28::-;;;;:::o;15166:134::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15283:8:::1;15270:9;:22;;;;:::i;:::-;15249:18;:43;;;;15166:134:::0;:::o;12552:27::-;;;;:::o;14532:532::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14604:64:::1;14621:4;14636:15;14654:13;:11;:13::i;:::-;14604:8;:64::i;:::-;14679:15;:31;;;14718:21;14749:4;14755:24;14773:4;14755:9;:24::i;:::-;14780:1;14782::::0;14784:7:::1;:5;:7::i;:::-;14792:15;14679:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14826:13;14819:29;;;14857:15;14875:14;14819:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14912:7;14903:6;:16;;;;14946:4;14930:13;;:20;;;;;;;;;;;;;;;;;;14975:4;14961:11;;:18;;;;;;;;;;;;;;;;;;15003:12;14990:10;:25;;;;15041:15;15026:12;:30;;;;14532:532:::0;:::o;15072:86::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15146:4:::1;15129:14;;:21;;;;;;;;;;;;;;;;;;15072:86::o:0;8135:151::-;8224:7;8251:11;:18;8263:5;8251:18;;;;;;;;;;;;;;;:27;8270:7;8251:27;;;;;;;;;;;;;;;;8244:34;;8135:151;;;;:::o;12226:33::-;;;;:::o;17608:114::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17701:13:::1;17685;:29;;;;17608:114:::0;:::o;6537:201::-;6349:12;:10;:12::i;:::-;6338:23;;:7;:5;:7::i;:::-;:23;;;6330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6646:1:::1;6626:22;;:8;:22;;::::0;6618:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6702:28;6721:8;6702:18;:28::i;:::-;6537:201:::0;:::o;12266:24::-;;;;:::o;5719:98::-;5772:7;5799:10;5792:17;;5719:98;:::o;11294:346::-;11413:1;11396:19;;:5;:19;;;11388:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11494:1;11475:21;;:7;:21;;;11467:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11578:6;11548:11;:18;11560:5;11548:18;;;;;;;;;;;;;;;:27;11567:7;11548:27;;;;;;;;;;;;;;;:36;;;;11616:7;11600:32;;11609:5;11600:32;;;11625:6;11600:32;;;;;;:::i;:::-;;;;;;;;11294:346;;;:::o;18446:3194::-;18560:1;18544:18;;:4;:18;;;18536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18637:1;18623:16;;:2;:16;;;18615:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18706:1;18696:6;:11;18692:93;;18724:28;18740:4;18746:2;18750:1;18724:15;:28::i;:::-;18767:7;;18692:93;18801:14;;;;;;;;;;;18797:1318;;;18844:7;:5;:7::i;:::-;18836:15;;:4;:15;;;;:32;;;;;18861:7;:5;:7::i;:::-;18855:13;;:2;:13;;;;18836:32;:52;;;;;18886:1;18872:16;;:2;:16;;;;18836:52;:77;;;;;18906:6;18892:21;;:2;:21;;;;18836:77;:90;;;;;18918:8;;;;;;;;;;;18917:9;18836:90;18832:1272;;;18976:12;18965:6;;18952:10;;:19;;;;:::i;:::-;18951:37;18947:191;;19076:2;19060:13;:18;;;;19116:2;19101:12;:17;;;;18947:191;19163:13;;;;;;;;;;;19158:150;;19209:19;:25;19229:4;19209:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19238:19;:23;19258:2;19238:23;;;;;;;;;;;;;;;;;;;;;;;;;19209:52;19201:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19158:150;19360:25;:31;19386:4;19360:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19396:31;:35;19428:2;19396:35;;;;;;;;;;;;;;;;;;;;;;;;;19395:36;19360:71;19356:733;;;19474:20;;19464:6;:30;;19456:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19609:9;;19592:13;19602:2;19592:9;:13::i;:::-;19583:6;:22;;;;:::i;:::-;:35;;19575:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19356:733;;;19718:25;:29;19744:2;19718:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;19752:31;:37;19784:4;19752:37;;;;;;;;;;;;;;;;;;;;;;;;;19751:38;19718:71;19714:375;;;19832:20;;19822:6;:30;;19814:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;19714:375;;;19942:31;:35;19974:2;19942:35;;;;;;;;;;;;;;;;;;;;;;;;;19937:152;;20036:9;;20019:13;20029:2;20019:9;:13::i;:::-;20010:6;:22;;;;:::i;:::-;:35;;20002:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19937:152;19714:375;19356:733;18832:1272;18797:1318;20127:28;20158:24;20176:4;20158:9;:24::i;:::-;20127:55;;20195:12;20234:18;;20210:20;:42;;20195:57;;20283:7;:22;;;;;20294:11;;;;;;;;;;;20283:22;:35;;;;;20310:8;;;;;;;;;;;20309:9;20283:35;:71;;;;;20323:25;:31;20349:4;20323:31;;;;;;;;;;;;;;;;;;;;;;;;;20322:32;20283:71;:101;;;;;20359:19;:25;20379:4;20359:25;;;;;;;;;;;;;;;;;;;;;;;;;20358:26;20283:101;:146;;;;;20406:19;:23;20426:2;20406:23;;;;;;;;;;;;;;;;;;;;;;;;;20405:24;20283:146;20265:468;;;20525:1;20498:10;:24;20509:12;20498:24;;;;;;;;;;;;:28;20494:228;;;20558:4;20547:8;;:15;;;;;;;;;;;;;;;;;;20583:10;:8;:10::i;:::-;20625:5;20614:8;;:16;;;;;;;;;;;;;;;;;;20705:1;20678:10;:24;20689:12;20678:24;;;;;;;;;;;;:28;;;;:::i;:::-;20651:10;:24;20662:12;20651:24;;;;;;;;;;;:55;;;;20494:228;20265:468;20745:12;20761:8;;;;;;;;;;;20760:9;20745:24;;20871:19;:25;20891:4;20871:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20900:19;:23;20920:2;20900:23;;;;;;;;;;;;;;;;;;;;;;;;;20871:52;20867:100;;;20950:5;20940:15;;20867:100;20979:12;21084:7;21080:507;;;21136:25;:29;21162:2;21136:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;21185:1;21169:13;;:17;21136:50;21132:306;;;21214:34;21244:3;21214:25;21225:13;;21214:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;21207:41;;21132:306;;;21310:25;:31;21336:4;21310:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;21360:1;21345:12;;:16;21310:51;21306:132;;;21389:33;21418:3;21389:24;21400:12;;21389:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;21382:40;;21306:132;21132:306;21465:1;21458:4;:8;21454:91;;;21487:42;21503:4;21517;21524;21487:15;:42::i;:::-;21454:91;21571:4;21561:14;;;;;:::i;:::-;;;21080:507;21599:33;21615:4;21621:2;21625:6;21599:15;:33::i;:::-;18525:3115;;;;18446:3194;;;;:::o;6746:191::-;6820:16;6839:6;;;;;;;;;;;6820:25;;6865:8;6856:6;;:17;;;;;;;;;;;;;;;;;;6920:8;6889:40;;6910:8;6889:40;;;;;;;;;;;;6809:128;6746:191;:::o;21648:589::-;21774:21;21812:1;21798:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21774:40;;21843:4;21825;21830:1;21825:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21869:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21859:4;21864:1;21859:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21904:62;21921:4;21936:15;21954:11;21904:8;:62::i;:::-;22005:15;:66;;;22086:11;22112:1;22156:4;22183;22203:15;22005:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21703:534;21648:589;:::o;17292:188::-;17409:5;17375:25;:31;17401:4;17375:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17466:5;17432:40;;17460:4;17432:40;;;;;;;;;;;;17292:188;;:::o;9581:699::-;9705:1;9687:20;;:6;:20;;;9679:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9789:1;9768:23;;:9;:23;;;9760:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9844:47;9865:6;9873:9;9884:6;9844:20;:47::i;:::-;9904:21;9928:9;:17;9938:6;9928:17;;;;;;;;;;;;;;;;9904:41;;9981:6;9964:13;:23;;9956:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10102:6;10086:13;:22;10066:9;:17;10076:6;10066:17;;;;;;;;;;;;;;;:42;;;;10154:6;10130:9;:20;10140:9;10130:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10195:9;10178:35;;10187:6;10178:35;;;10206:6;10178:35;;;;;;:::i;:::-;;;;;;;;10226:46;10246:6;10254:9;10265:6;10226:19;:46::i;:::-;9668:612;9581:699;;;:::o;22245:584::-;22284:23;22310:24;22328:4;22310:9;:24::i;:::-;22284:50;;22345:12;22393:1;22374:15;:20;22370:59;;22411:7;;;;22370:59;22463:13;;22445:15;:31;22441:95;;;22511:13;;22493:31;;22441:95;22599:26;22628:15;22599:44;;22656:36;22673:18;22656:16;:36::i;:::-;22705:16;22724:21;22705:40;;22779:15;;;;;;;;;;;22771:29;;22808:8;22771:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22758:63;;;;;22273:556;;;;22245:584;:::o;3727:98::-;3785:7;3816:1;3812;:5;;;;:::i;:::-;3805:12;;3727:98;;;;:::o;3833:::-;3891:7;3922:1;3918;:5;;;;:::i;:::-;3911:12;;3833:98;;;;:::o;11648:91::-;;;;:::o;11747: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:152::-;4538:9;4571:37;4602:5;4571:37;:::i;:::-;4558:50;;4462:152;;;:::o;4620:183::-;4733:63;4790:5;4733:63;:::i;:::-;4728:3;4721:76;4620:183;;:::o;4809:274::-;4928:4;4966:2;4955:9;4951:18;4943:26;;4979:97;5073:1;5062:9;5058:17;5049:6;4979:97;:::i;:::-;4809:274;;;;:::o;5089:118::-;5176:24;5194:5;5176:24;:::i;:::-;5171:3;5164:37;5089:118;;:::o;5213:222::-;5306:4;5344:2;5333:9;5329:18;5321:26;;5357:71;5425:1;5414:9;5410:17;5401:6;5357:71;:::i;:::-;5213:222;;;;:::o;5441:619::-;5518:6;5526;5534;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:53;5779:7;5770:6;5759:9;5755:22;5734:53;:::i;:::-;5724:63;;5680:117;5836:2;5862:53;5907:7;5898:6;5887:9;5883:22;5862:53;:::i;:::-;5852:63;;5807:118;5964:2;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5935:118;5441:619;;;;;:::o;6066:118::-;6153:24;6171:5;6153:24;:::i;:::-;6148:3;6141:37;6066:118;;:::o;6190:222::-;6283:4;6321:2;6310:9;6306:18;6298:26;;6334:71;6402:1;6391:9;6387:17;6378:6;6334:71;:::i;:::-;6190:222;;;;:::o;6418:86::-;6453:7;6493:4;6486:5;6482:16;6471:27;;6418:86;;;:::o;6510:112::-;6593:22;6609:5;6593:22;:::i;:::-;6588:3;6581:35;6510:112;;:::o;6628:214::-;6717:4;6755:2;6744:9;6740:18;6732:26;;6768:67;6832:1;6821:9;6817:17;6808:6;6768:67;:::i;:::-;6628:214;;;;:::o;6848:117::-;6957:1;6954;6947:12;6971:117;7080:1;7077;7070:12;7094:117;7203:1;7200;7193:12;7234:568;7307:8;7317:6;7367:3;7360:4;7352:6;7348:17;7344:27;7334:122;;7375:79;;:::i;:::-;7334:122;7488:6;7475:20;7465:30;;7518:18;7510:6;7507:30;7504:117;;;7540:79;;:::i;:::-;7504:117;7654:4;7646:6;7642:17;7630:29;;7708:3;7700:4;7692:6;7688:17;7678:8;7674:32;7671:41;7668:128;;;7715:79;;:::i;:::-;7668:128;7234:568;;;;;:::o;7825:::-;7898:8;7908:6;7958:3;7951:4;7943:6;7939:17;7935:27;7925:122;;7966:79;;:::i;:::-;7925:122;8079:6;8066:20;8056:30;;8109:18;8101:6;8098:30;8095:117;;;8131:79;;:::i;:::-;8095:117;8245:4;8237:6;8233:17;8221:29;;8299:3;8291:4;8283:6;8279:17;8269:8;8265:32;8262:41;8259:128;;;8306:79;;:::i;:::-;8259:128;7825:568;;;;;:::o;8399:934::-;8521:6;8529;8537;8545;8594:2;8582:9;8573:7;8569:23;8565:32;8562:119;;;8600:79;;:::i;:::-;8562:119;8748:1;8737:9;8733:17;8720:31;8778:18;8770:6;8767:30;8764:117;;;8800:79;;:::i;:::-;8764:117;8913:80;8985:7;8976:6;8965:9;8961:22;8913:80;:::i;:::-;8895:98;;;;8691:312;9070:2;9059:9;9055:18;9042:32;9101:18;9093:6;9090:30;9087:117;;;9123:79;;:::i;:::-;9087:117;9236:80;9308:7;9299:6;9288:9;9284:22;9236:80;:::i;:::-;9218:98;;;;9013:313;8399:934;;;;;;;:::o;9339:474::-;9407:6;9415;9464:2;9452:9;9443:7;9439:23;9435:32;9432:119;;;9470:79;;:::i;:::-;9432:119;9590:1;9615:53;9660:7;9651:6;9640:9;9636:22;9615:53;:::i;:::-;9605:63;;9561:117;9717:2;9743:53;9788:7;9779:6;9768:9;9764:22;9743:53;:::i;:::-;9733:63;;9688:118;9339:474;;;;;:::o;9819:116::-;9889:21;9904:5;9889:21;:::i;:::-;9882:5;9879:32;9869:60;;9925:1;9922;9915:12;9869:60;9819:116;:::o;9941:133::-;9984:5;10022:6;10009:20;10000:29;;10038:30;10062:5;10038:30;:::i;:::-;9941:133;;;;:::o;10080:468::-;10145:6;10153;10202:2;10190:9;10181:7;10177:23;10173:32;10170:119;;;10208:79;;:::i;:::-;10170:119;10328:1;10353:53;10398:7;10389:6;10378:9;10374:22;10353:53;:::i;:::-;10343:63;;10299:117;10455:2;10481:50;10523:7;10514:6;10503:9;10499:22;10481:50;:::i;:::-;10471:60;;10426:115;10080:468;;;;;:::o;10554:323::-;10610:6;10659:2;10647:9;10638:7;10634:23;10630:32;10627:119;;;10665:79;;:::i;:::-;10627:119;10785:1;10810:50;10852:7;10843:6;10832:9;10828:22;10810:50;:::i;:::-;10800:60;;10756:114;10554:323;;;;:::o;10883:474::-;10951:6;10959;11008:2;10996:9;10987:7;10983:23;10979:32;10976:119;;;11014:79;;:::i;:::-;10976:119;11134:1;11159:53;11204:7;11195:6;11184:9;11180:22;11159:53;:::i;:::-;11149:63;;11105:117;11261:2;11287:53;11332:7;11323:6;11312:9;11308:22;11287:53;:::i;:::-;11277:63;;11232:118;10883:474;;;;;:::o;11363:180::-;11411:77;11408:1;11401:88;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11549:320;11593:6;11630:1;11624:4;11620:12;11610:22;;11677:1;11671:4;11667:12;11698:18;11688:81;;11754:4;11746:6;11742:17;11732:27;;11688:81;11816:2;11808:6;11805:14;11785:18;11782:38;11779:84;;11835:18;;:::i;:::-;11779:84;11600:269;11549:320;;;:::o;11875:182::-;12015:34;12011:1;12003:6;11999:14;11992:58;11875:182;:::o;12063:366::-;12205:3;12226:67;12290:2;12285:3;12226:67;:::i;:::-;12219:74;;12302:93;12391:3;12302:93;:::i;:::-;12420:2;12415:3;12411:12;12404:19;;12063:366;;;:::o;12435:419::-;12601:4;12639:2;12628:9;12624:18;12616:26;;12688:9;12682:4;12678:20;12674:1;12663:9;12659:17;12652:47;12716:131;12842:4;12716:131;:::i;:::-;12708:139;;12435:419;;;:::o;12860:180::-;12908:77;12905:1;12898:88;13005:4;13002:1;12995:15;13029:4;13026:1;13019:15;13046:410;13086:7;13109:20;13127:1;13109:20;:::i;:::-;13104:25;;13143:20;13161:1;13143:20;:::i;:::-;13138:25;;13198:1;13195;13191:9;13220:30;13238:11;13220:30;:::i;:::-;13209:41;;13399:1;13390:7;13386:15;13383:1;13380:22;13360:1;13353:9;13333:83;13310:139;;13429:18;;:::i;:::-;13310:139;13094:362;13046:410;;;;:::o;13462:180::-;13510:77;13507:1;13500:88;13607:4;13604:1;13597:15;13631:4;13628:1;13621:15;13648:185;13688:1;13705:20;13723:1;13705:20;:::i;:::-;13700:25;;13739:20;13757:1;13739:20;:::i;:::-;13734:25;;13778:1;13768:35;;13783:18;;:::i;:::-;13768:35;13825:1;13822;13818:9;13813:14;;13648:185;;;;:::o;13839:234::-;13979:34;13975:1;13967:6;13963:14;13956:58;14048:17;14043:2;14035:6;14031:15;14024:42;13839:234;:::o;14079:366::-;14221:3;14242:67;14306:2;14301:3;14242:67;:::i;:::-;14235:74;;14318:93;14407:3;14318:93;:::i;:::-;14436:2;14431:3;14427:12;14420:19;;14079:366;;;:::o;14451:419::-;14617:4;14655:2;14644:9;14640:18;14632:26;;14704:9;14698:4;14694:20;14690:1;14679:9;14675:17;14668:47;14732:131;14858:4;14732:131;:::i;:::-;14724:139;;14451:419;;;:::o;14876:227::-;15016:34;15012:1;15004:6;15000:14;14993:58;15085:10;15080:2;15072:6;15068:15;15061:35;14876:227;:::o;15109:366::-;15251:3;15272:67;15336:2;15331:3;15272:67;:::i;:::-;15265:74;;15348:93;15437:3;15348:93;:::i;:::-;15466:2;15461:3;15457:12;15450:19;;15109:366;;;:::o;15481:419::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15734:9;15728:4;15724:20;15720:1;15709:9;15705:17;15698:47;15762:131;15888:4;15762:131;:::i;:::-;15754:139;;15481:419;;;:::o;15906:191::-;15946:3;15965:20;15983:1;15965:20;:::i;:::-;15960:25;;15999:20;16017:1;15999:20;:::i;:::-;15994:25;;16042:1;16039;16035:9;16028:16;;16063:3;16060:1;16057:10;16054:36;;;16070:18;;:::i;:::-;16054:36;15906:191;;;;:::o;16103:180::-;16151:77;16148:1;16141:88;16248:4;16245:1;16238:15;16272:4;16269:1;16262:15;16289:233;16328:3;16351:24;16369:5;16351:24;:::i;:::-;16342:33;;16397:66;16390:5;16387:77;16384:103;;16467:18;;:::i;:::-;16384:103;16514:1;16507:5;16503:13;16496:20;;16289:233;;;:::o;16528:147::-;16629:11;16666:3;16651:18;;16528:147;;;;:::o;16681:114::-;;:::o;16801:398::-;16960:3;16981:83;17062:1;17057:3;16981:83;:::i;:::-;16974:90;;17073:93;17162:3;17073:93;:::i;:::-;17191:1;17186:3;17182:11;17175:18;;16801:398;;;:::o;17205:379::-;17389:3;17411:147;17554:3;17411:147;:::i;:::-;17404:154;;17575:3;17568:10;;17205:379;;;:::o;17590:162::-;17730:14;17726:1;17718:6;17714:14;17707:38;17590:162;:::o;17758:366::-;17900:3;17921:67;17985:2;17980:3;17921:67;:::i;:::-;17914:74;;17997:93;18086:3;17997:93;:::i;:::-;18115:2;18110:3;18106:12;18099:19;;17758:366;;;:::o;18130:419::-;18296:4;18334:2;18323:9;18319:18;18311:26;;18383:9;18377:4;18373:20;18369:1;18358:9;18354:17;18347:47;18411:131;18537:4;18411:131;:::i;:::-;18403:139;;18130:419;;;:::o;18555:244::-;18695:34;18691:1;18683:6;18679:14;18672:58;18764:27;18759:2;18751:6;18747:15;18740:52;18555:244;:::o;18805:366::-;18947:3;18968:67;19032:2;19027:3;18968:67;:::i;:::-;18961:74;;19044:93;19133:3;19044:93;:::i;:::-;19162:2;19157:3;19153:12;19146:19;;18805:366;;;:::o;19177:419::-;19343:4;19381:2;19370:9;19366:18;19358:26;;19430:9;19424:4;19420:20;19416:1;19405:9;19401:17;19394:47;19458:131;19584:4;19458:131;:::i;:::-;19450:139;;19177:419;;;:::o;19602:224::-;19742:34;19738:1;19730:6;19726:14;19719:58;19811:7;19806:2;19798:6;19794:15;19787:32;19602:224;:::o;19832:366::-;19974:3;19995:67;20059:2;20054:3;19995:67;:::i;:::-;19988:74;;20071:93;20160:3;20071:93;:::i;:::-;20189:2;20184:3;20180:12;20173:19;;19832:366;;;:::o;20204:419::-;20370:4;20408:2;20397:9;20393:18;20385:26;;20457:9;20451:4;20447:20;20443:1;20432:9;20428:17;20421:47;20485:131;20611:4;20485:131;:::i;:::-;20477:139;;20204:419;;;:::o;20629:223::-;20769:34;20765:1;20757:6;20753:14;20746:58;20838:6;20833:2;20825:6;20821:15;20814:31;20629:223;:::o;20858:366::-;21000:3;21021:67;21085:2;21080:3;21021:67;:::i;:::-;21014:74;;21097:93;21186:3;21097:93;:::i;:::-;21215:2;21210:3;21206:12;21199:19;;20858:366;;;:::o;21230:419::-;21396:4;21434:2;21423:9;21419:18;21411:26;;21483:9;21477:4;21473:20;21469:1;21458:9;21454:17;21447:47;21511:131;21637:4;21511:131;:::i;:::-;21503:139;;21230:419;;;:::o;21655:85::-;21700:7;21729:5;21718:16;;21655:85;;;:::o;21746:158::-;21804:9;21837:61;21855:42;21864:32;21890:5;21864:32;:::i;:::-;21855:42;:::i;:::-;21837:61;:::i;:::-;21824:74;;21746:158;;;:::o;21910:147::-;22005:45;22044:5;22005:45;:::i;:::-;22000:3;21993:58;21910:147;;:::o;22063:807::-;22312:4;22350:3;22339:9;22335:19;22327:27;;22364:71;22432:1;22421:9;22417:17;22408:6;22364:71;:::i;:::-;22445:72;22513:2;22502:9;22498:18;22489:6;22445:72;:::i;:::-;22527:80;22603:2;22592:9;22588:18;22579:6;22527:80;:::i;:::-;22617;22693:2;22682:9;22678:18;22669:6;22617:80;:::i;:::-;22707:73;22775:3;22764:9;22760:19;22751:6;22707:73;:::i;:::-;22790;22858:3;22847:9;22843:19;22834:6;22790:73;:::i;:::-;22063:807;;;;;;;;;:::o;22876:143::-;22933:5;22964:6;22958:13;22949:22;;22980:33;23007:5;22980:33;:::i;:::-;22876:143;;;;:::o;23025:663::-;23113:6;23121;23129;23178:2;23166:9;23157:7;23153:23;23149:32;23146:119;;;23184:79;;:::i;:::-;23146:119;23304:1;23329:64;23385:7;23376:6;23365:9;23361:22;23329:64;:::i;:::-;23319:74;;23275:128;23442:2;23468:64;23524:7;23515:6;23504:9;23500:22;23468:64;:::i;:::-;23458:74;;23413:129;23581:2;23607:64;23663:7;23654:6;23643:9;23639:22;23607:64;:::i;:::-;23597:74;;23552:129;23025:663;;;;;:::o;23694:332::-;23815:4;23853:2;23842:9;23838:18;23830:26;;23866:71;23934:1;23923:9;23919:17;23910:6;23866:71;:::i;:::-;23947:72;24015:2;24004:9;24000:18;23991:6;23947:72;:::i;:::-;23694:332;;;;;:::o;24032:137::-;24086:5;24117:6;24111:13;24102:22;;24133:30;24157:5;24133:30;:::i;:::-;24032:137;;;;:::o;24175:345::-;24242:6;24291:2;24279:9;24270:7;24266:23;24262:32;24259:119;;;24297:79;;:::i;:::-;24259:119;24417:1;24442:61;24495:7;24486:6;24475:9;24471:22;24442:61;:::i;:::-;24432:71;;24388:125;24175:345;;;;:::o;24526:225::-;24666:34;24662:1;24654:6;24650:14;24643:58;24735:8;24730:2;24722:6;24718:15;24711:33;24526:225;:::o;24757:366::-;24899:3;24920:67;24984:2;24979:3;24920:67;:::i;:::-;24913:74;;24996:93;25085:3;24996:93;:::i;:::-;25114:2;25109:3;25105:12;25098:19;;24757:366;;;:::o;25129:419::-;25295:4;25333:2;25322:9;25318:18;25310:26;;25382:9;25376:4;25372:20;25368:1;25357:9;25353:17;25346:47;25410:131;25536:4;25410:131;:::i;:::-;25402:139;;25129:419;;;:::o;25554:223::-;25694:34;25690:1;25682:6;25678:14;25671:58;25763:6;25758:2;25750:6;25746:15;25739:31;25554:223;:::o;25783:366::-;25925:3;25946:67;26010:2;26005:3;25946:67;:::i;:::-;25939:74;;26022:93;26111:3;26022:93;:::i;:::-;26140:2;26135:3;26131:12;26124:19;;25783:366;;;:::o;26155:419::-;26321:4;26359:2;26348:9;26344:18;26336:26;;26408:9;26402:4;26398:20;26394:1;26383:9;26379:17;26372:47;26436:131;26562:4;26436:131;:::i;:::-;26428:139;;26155:419;;;:::o;26580:221::-;26720:34;26716:1;26708:6;26704:14;26697:58;26789:4;26784:2;26776:6;26772:15;26765:29;26580:221;:::o;26807:366::-;26949:3;26970:67;27034:2;27029:3;26970:67;:::i;:::-;26963:74;;27046:93;27135:3;27046:93;:::i;:::-;27164:2;27159:3;27155:12;27148:19;;26807:366;;;:::o;27179:419::-;27345:4;27383:2;27372:9;27368:18;27360:26;;27432:9;27426:4;27422:20;27418:1;27407:9;27403:17;27396:47;27460:131;27586:4;27460:131;:::i;:::-;27452:139;;27179:419;;;:::o;27604:224::-;27744:34;27740:1;27732:6;27728:14;27721:58;27813:7;27808:2;27800:6;27796:15;27789:32;27604:224;:::o;27834:366::-;27976:3;27997:67;28061:2;28056:3;27997:67;:::i;:::-;27990:74;;28073:93;28162:3;28073:93;:::i;:::-;28191:2;28186:3;28182:12;28175:19;;27834:366;;;:::o;28206:419::-;28372:4;28410:2;28399:9;28395:18;28387:26;;28459:9;28453:4;28449:20;28445:1;28434:9;28430:17;28423:47;28487:131;28613:4;28487:131;:::i;:::-;28479:139;;28206:419;;;:::o;28631:222::-;28771:34;28767:1;28759:6;28755:14;28748:58;28840:5;28835:2;28827:6;28823:15;28816:30;28631:222;:::o;28859:366::-;29001:3;29022:67;29086:2;29081:3;29022:67;:::i;:::-;29015:74;;29098:93;29187:3;29098:93;:::i;:::-;29216:2;29211:3;29207:12;29200:19;;28859:366;;;:::o;29231:419::-;29397:4;29435:2;29424:9;29420:18;29412:26;;29484:9;29478:4;29474:20;29470:1;29459:9;29455:17;29448:47;29512:131;29638:4;29512:131;:::i;:::-;29504:139;;29231:419;;;:::o;29656:172::-;29796:24;29792:1;29784:6;29780:14;29773:48;29656:172;:::o;29834:366::-;29976:3;29997:67;30061:2;30056:3;29997:67;:::i;:::-;29990:74;;30073:93;30162:3;30073:93;:::i;:::-;30191:2;30186:3;30182:12;30175:19;;29834:366;;;:::o;30206:419::-;30372:4;30410:2;30399:9;30395:18;30387:26;;30459:9;30453:4;30449:20;30445:1;30434:9;30430:17;30423:47;30487:131;30613:4;30487:131;:::i;:::-;30479:139;;30206:419;;;:::o;30631:240::-;30771:34;30767:1;30759:6;30755:14;30748:58;30840:23;30835:2;30827:6;30823:15;30816:48;30631:240;:::o;30877:366::-;31019:3;31040:67;31104:2;31099:3;31040:67;:::i;:::-;31033:74;;31116:93;31205:3;31116:93;:::i;:::-;31234:2;31229:3;31225:12;31218:19;;30877:366;;;:::o;31249:419::-;31415:4;31453:2;31442:9;31438:18;31430:26;;31502:9;31496:4;31492:20;31488:1;31477:9;31473:17;31466:47;31530:131;31656:4;31530:131;:::i;:::-;31522:139;;31249:419;;;:::o;31674:169::-;31814:21;31810:1;31802:6;31798:14;31791:45;31674:169;:::o;31849:366::-;31991:3;32012:67;32076:2;32071:3;32012:67;:::i;:::-;32005:74;;32088:93;32177:3;32088:93;:::i;:::-;32206:2;32201:3;32197:12;32190:19;;31849:366;;;:::o;32221:419::-;32387:4;32425:2;32414:9;32410:18;32402:26;;32474:9;32468:4;32464:20;32460:1;32449:9;32445:17;32438:47;32502:131;32628:4;32502:131;:::i;:::-;32494:139;;32221:419;;;:::o;32646:241::-;32786:34;32782:1;32774:6;32770:14;32763:58;32855:24;32850:2;32842:6;32838:15;32831:49;32646:241;:::o;32893:366::-;33035:3;33056:67;33120:2;33115:3;33056:67;:::i;:::-;33049:74;;33132:93;33221:3;33132:93;:::i;:::-;33250:2;33245:3;33241:12;33234:19;;32893:366;;;:::o;33265:419::-;33431:4;33469:2;33458:9;33454:18;33446:26;;33518:9;33512:4;33508:20;33504:1;33493:9;33489:17;33482:47;33546:131;33672:4;33546:131;:::i;:::-;33538:139;;33265:419;;;:::o;33690:194::-;33730:4;33750:20;33768:1;33750:20;:::i;:::-;33745:25;;33784:20;33802:1;33784:20;:::i;:::-;33779:25;;33828:1;33825;33821:9;33813:17;;33852:1;33846:4;33843:11;33840:37;;;33857:18;;:::i;:::-;33840:37;33690:194;;;;:::o;33890:180::-;33938:77;33935:1;33928:88;34035:4;34032:1;34025:15;34059:4;34056:1;34049:15;34076:143;34133:5;34164:6;34158:13;34149:22;;34180:33;34207:5;34180:33;:::i;:::-;34076:143;;;;:::o;34225:351::-;34295:6;34344:2;34332:9;34323:7;34319:23;34315:32;34312:119;;;34350:79;;:::i;:::-;34312:119;34470:1;34495:64;34551:7;34542:6;34531:9;34527:22;34495:64;:::i;:::-;34485:74;;34441:128;34225:351;;;;:::o;34582:114::-;34649:6;34683:5;34677:12;34667:22;;34582:114;;;:::o;34702:184::-;34801:11;34835:6;34830:3;34823:19;34875:4;34870:3;34866:14;34851:29;;34702:184;;;;:::o;34892:132::-;34959:4;34982:3;34974:11;;35012:4;35007:3;35003:14;34995:22;;34892:132;;;:::o;35030:108::-;35107:24;35125:5;35107:24;:::i;:::-;35102:3;35095:37;35030:108;;:::o;35144:179::-;35213:10;35234:46;35276:3;35268:6;35234:46;:::i;:::-;35312:4;35307:3;35303:14;35289:28;;35144:179;;;;:::o;35329:113::-;35399:4;35431;35426:3;35422:14;35414:22;;35329:113;;;:::o;35478:732::-;35597:3;35626:54;35674:5;35626:54;:::i;:::-;35696:86;35775:6;35770:3;35696:86;:::i;:::-;35689:93;;35806:56;35856:5;35806:56;:::i;:::-;35885:7;35916:1;35901:284;35926:6;35923:1;35920:13;35901:284;;;36002:6;35996:13;36029:63;36088:3;36073:13;36029:63;:::i;:::-;36022:70;;36115:60;36168:6;36115:60;:::i;:::-;36105:70;;35961:224;35948:1;35945;35941:9;35936:14;;35901:284;;;35905:14;36201:3;36194:10;;35602:608;;;35478:732;;;;:::o;36216:831::-;36479:4;36517:3;36506:9;36502:19;36494:27;;36531:71;36599:1;36588:9;36584:17;36575:6;36531:71;:::i;:::-;36612:80;36688:2;36677:9;36673:18;36664:6;36612:80;:::i;:::-;36739:9;36733:4;36729:20;36724:2;36713:9;36709:18;36702:48;36767:108;36870:4;36861:6;36767:108;:::i;:::-;36759:116;;36885:72;36953:2;36942:9;36938:18;36929:6;36885:72;:::i;:::-;36967:73;37035:3;37024:9;37020:19;37011:6;36967:73;:::i;:::-;36216:831;;;;;;;;:::o;37053:225::-;37193:34;37189:1;37181:6;37177:14;37170:58;37262:8;37257:2;37249:6;37245:15;37238:33;37053:225;:::o;37284:366::-;37426:3;37447:67;37511:2;37506:3;37447:67;:::i;:::-;37440:74;;37523:93;37612:3;37523:93;:::i;:::-;37641:2;37636:3;37632:12;37625:19;;37284:366;;;:::o;37656:419::-;37822:4;37860:2;37849:9;37845:18;37837:26;;37909:9;37903:4;37899:20;37895:1;37884:9;37880:17;37873:47;37937:131;38063:4;37937:131;:::i;:::-;37929:139;;37656:419;;;:::o

Swarm Source

ipfs://e30f7ee732692037c2ffc30fc3f5c308268b0a0471b98dbc5432bccdc509d51f

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  ]
[ 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.