ETH Price: $3,401.72 (+3.24%)
Gas: 11.4 Gwei

Contract

0x327aA24Bf5458279145515e3EC8a906BE16907a4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019742024-10-19 20:21:5935 days ago1729369319IN
0x327aA24B...BE16907a4
0 ETH0.0005609411.4394961
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019732024-10-19 20:21:4735 days ago1729369307IN
0x327aA24B...BE16907a4
0 ETH0.0005644311.51055665
Transfer210019722024-10-19 20:21:3535 days ago1729369295IN
0x327aA24B...BE16907a4
0 ETH0.0005673211.56962879
Transfer210019722024-10-19 20:21:3535 days ago1729369295IN
0x327aA24B...BE16907a4
0 ETH0.0005673211.56962879
Transfer210019722024-10-19 20:21:3535 days ago1729369295IN
0x327aA24B...BE16907a4
0 ETH0.0005673211.56962879
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
210019672024-10-19 20:20:3535 days ago1729369235
0x327aA24B...BE16907a4
0.00190503 ETH
210019672024-10-19 20:20:3535 days ago1729369235
0x327aA24B...BE16907a4
0.00190503 ETH
209574332024-10-13 15:05:2341 days ago1728831923
0x327aA24B...BE16907a4
0.00405255 ETH
209574332024-10-13 15:05:2341 days ago1728831923
0x327aA24B...BE16907a4
0.00405255 ETH
209360872024-10-10 15:24:2344 days ago1728573863
0x327aA24B...BE16907a4
0.00115851 ETH
209360872024-10-10 15:24:2344 days ago1728573863
0x327aA24B...BE16907a4
0.00115851 ETH
209287112024-10-09 14:44:2345 days ago1728485063
0x327aA24B...BE16907a4
0.00108467 ETH
209287112024-10-09 14:44:2345 days ago1728485063
0x327aA24B...BE16907a4
0.00108467 ETH
209262732024-10-09 6:34:3545 days ago1728455675
0x327aA24B...BE16907a4
0.00116332 ETH
209262732024-10-09 6:34:3545 days ago1728455675
0x327aA24B...BE16907a4
0.00116332 ETH
209236842024-10-08 21:55:2345 days ago1728424523
0x327aA24B...BE16907a4
0.00162338 ETH
209236842024-10-08 21:55:2345 days ago1728424523
0x327aA24B...BE16907a4
0.00162338 ETH
209220382024-10-08 16:24:3546 days ago1728404675
0x327aA24B...BE16907a4
0.0058534 ETH
209220382024-10-08 16:24:3546 days ago1728404675
0x327aA24B...BE16907a4
0.0058534 ETH
209220282024-10-08 16:22:3546 days ago1728404555
0x327aA24B...BE16907a4
0.00596599 ETH
209220282024-10-08 16:22:3546 days ago1728404555
0x327aA24B...BE16907a4
0.00596599 ETH
209217822024-10-08 15:33:2346 days ago1728401603
0x327aA24B...BE16907a4
0.00679407 ETH
209217822024-10-08 15:33:2346 days ago1728401603
0x327aA24B...BE16907a4
0.00679407 ETH
209217762024-10-08 15:32:1146 days ago1728401531
0x327aA24B...BE16907a4
0.00885839 ETH
209217762024-10-08 15:32:1146 days ago1728401531
0x327aA24B...BE16907a4
0.00885839 ETH
209216212024-10-08 15:00:5946 days ago1728399659
0x327aA24B...BE16907a4
0.00533037 ETH
209216212024-10-08 15:00:5946 days ago1728399659
0x327aA24B...BE16907a4
0.00533037 ETH
209209472024-10-08 12:45:5946 days ago1728391559
0x327aA24B...BE16907a4
0.00186821 ETH
209209472024-10-08 12:45:5946 days ago1728391559
0x327aA24B...BE16907a4
0.00186821 ETH
209206672024-10-08 11:49:3546 days ago1728388175
0x327aA24B...BE16907a4
0.00252315 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Encro

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
london EvmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*

Encro - Quantum-Resistant Security for Crypto Assets

Website: https://encro.io
Twitter: https://twitter.com/encro_io
Telegram: https://t.me/encro_io

*/
pragma solidity 0.8.12;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, 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);
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

contract Encro is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public TreasuryAddress;
    address public RewardsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public deadBlocks = 1;

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

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyRewardsFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellRewardsFee;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForRewards;


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

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

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

    event EnabledTrading(bool tradingActive, uint256 deadBlocks);
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedRewardsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

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

    event TransferForeignToken(address token, uint256 amount);


    constructor() ERC20("ENCRO", "ENC") {

        address newOwner = msg.sender; 

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 totalSupply = 500000000 * 1e18;

        maxBuyAmount = totalSupply *  10 / 1000;
        maxSellAmount = totalSupply *  5 / 1000;
        maxWalletAmount = totalSupply * 10 / 1000;
        swapTokensAtAmount = totalSupply * 50 / 100000; 

        buyTreasuryFee = 10;
        buyLiquidityFee = 0;
        buyRewardsFee = 15;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;

        sellTreasuryFee = 30;
        sellLiquidityFee = 10;
        sellRewardsFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        TreasuryAddress = address(0xD920236De7a46575c647A7dFf9B9BcCE7bf5D507);
        RewardsAddress = address(0xC2EF7C5e6FFB13Ce0adbf2Ba0AA6623A8c8a0743);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(RewardsAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }


    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateSwapThreshold(uint256 newAmount) public  {
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        swapTokensAtAmount = newAmount* (10**18);
    }


    function transferForeignToken(address _token, address _to) public returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() public {
        bool success;
        require(msg.sender==TreasuryAddress,"only TreasuryAddress can withdraw");
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyRewardsFee = _rewardsFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyRewardsFee;
        require(buyTotalFees <= 30, "Fees must be 30%  or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _rewardsFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellRewardsFee = _rewardsFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellRewardsFee;
        require(sellTotalFees <= 30, "Fees must be 30%  or less");
    }

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


    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");


        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                    require(from == owner(), "Trading is not enabled");
                }
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        uint256 fees = 0;
        uint256 penaltyAmount = 0;

        // only take fees on Trades, not on wallet transfers
        if(takeFee && tradingActiveBlock>0 && (block.number>tradingActiveBlock)){          
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees /100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensForRewards += fees * sellRewardsFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForRewards += fees * buyRewardsFee / buyTotalFees;
            }
            
            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

            amount -= fees + penaltyAmount;
        }

        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 setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function setTreasuryAddress(address _TreasuryAddress) external onlyOwner {
        require(_TreasuryAddress != address(0), "_TreasuryAddress address cannot be 0");
        TreasuryAddress = payable(_TreasuryAddress);
        emit UpdatedTreasuryAddress(_TreasuryAddress);
    }

    function setRewardsAddress(address _RewardsAddress) external onlyOwner {
        require(_RewardsAddress != address(0), "_RewardsAddress address cannot be 0");
        RewardsAddress = payable(_RewardsAddress);
        emit UpdatedRewardsAddress(_RewardsAddress);
    }
   
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury + tokensForRewards;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 5){
            contractBalance = swapTokensAtAmount * 5;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForRewards = ethBalance * tokensForRewards / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury + ethForRewards;

        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForRewards = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(RewardsAddress).call{value: ethForRewards}("");

        (success,) = address(TreasuryAddress).call{value: address(this).balance}("");
    }


    // once enabled, can never be turned off
    function enableTrading(bool _status, uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = _status;
        swapEnabled = true;
        emit EnabledTrading(tradingActive, _deadBlocks);

        if (tradingActive && tradingActiveBlock == 0) {
            tradingActiveBlock = block.number;
            deadBlocks = _deadBlocks;
        }
    }


}

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":false,"internalType":"bool","name":"tradingActive","type":"bool"},{"indexed":false,"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":[],"name":"RemovedLimits","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedRewardsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"RewardsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","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":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_RewardsAddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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 IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600d556001600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff0219169083151502179055503480156200006c57600080fd5b506040518060400160405280600581526020017f454e43524f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f454e4300000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000f192919062000c35565b5080600490805190602001906200010a92919062000c35565b50505060006200011f6200067160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ef8160016200067960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000295919062000d4f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000d4f565b6040518363ffffffff1660e01b81526004016200034292919062000d92565b6020604051808303816000875af115801562000362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000388919062000d4f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d060a05160016200070f60201b60201c565b60006b019d971e4fe8401e7400000090506103e8600a82620003f3919062000df8565b620003ff919062000e88565b6006819055506103e860058262000417919062000df8565b62000423919062000e88565b6007819055506103e8600a826200043b919062000df8565b62000447919062000e88565b600881905550620186a060328262000460919062000df8565b6200046c919062000e88565b600a81905550600a6011819055506000601281905550600f6013819055506013546012546011546200049f919062000ec0565b620004ab919062000ec0565b601081905550601e601581905550600a6016819055506000601781905550601754601654601554620004de919062000ec0565b620004ea919062000ec0565b601481905550620005038360016200067960201b60201c565b620005163060016200067960201b60201c565b6200052b61dead60016200067960201b60201c565b73d920236de7a46575c647a7dff9b9bcce7bf5d507600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c2ef7c5e6ffb13ce0adbf2ba0aa6623a8c8a0743600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005e8836001620007c260201b60201c565b620005fb306001620007c260201b60201c565b6200061061dead6001620007c260201b60201c565b62000645600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007c260201b60201c565b6200065783826200090f60201b60201c565b620006688362000a6060201b60201c565b505050620011a4565b600033905090565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674682826040516200070392919062000f3a565b60405180910390a15050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200077882826200067960201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620007d26200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085b9062000fc8565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000903919062000fea565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009799062001057565b60405180910390fd5b806002600082825462000996919062000ec0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009ed919062000ec0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a5491906200108a565b60405180910390a35050565b62000a706200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af99062000fc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6c906200111d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b82805462000c43906200116e565b90600052602060002090601f01602090048101928262000c67576000855562000cb3565b82601f1062000c8257805160ff191683800117855562000cb3565b8280016001018555821562000cb3579182015b8281111562000cb257825182559160200191906001019062000c95565b5b50905062000cc2919062000cc6565b5090565b5b8082111562000ce157600081600090555060010162000cc7565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d178262000cea565b9050919050565b62000d298162000d0a565b811462000d3557600080fd5b50565b60008151905062000d498162000d1e565b92915050565b60006020828403121562000d685762000d6762000ce5565b5b600062000d788482850162000d38565b91505092915050565b62000d8c8162000d0a565b82525050565b600060408201905062000da9600083018562000d81565b62000db8602083018462000d81565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e058262000dbf565b915062000e128362000dbf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e4e5762000e4d62000dc9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e958262000dbf565b915062000ea28362000dbf565b92508262000eb55762000eb462000e59565b5b828204905092915050565b600062000ecd8262000dbf565b915062000eda8362000dbf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f125762000f1162000dc9565b5b828201905092915050565b60008115159050919050565b62000f348162000f1d565b82525050565b600060408201905062000f51600083018562000d81565b62000f60602083018462000f29565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fb060208362000f67565b915062000fbd8262000f78565b602082019050919050565b6000602082019050818103600083015262000fe38162000fa1565b9050919050565b600060208201905062001001600083018462000f29565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200103f601f8362000f67565b91506200104c8262001007565b602082019050919050565b60006020820190508181036000830152620010728162001030565b9050919050565b620010848162000dbf565b82525050565b6000602082019050620010a1600083018462001079565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200110560268362000f67565b91506200111282620010a7565b604082019050919050565b600060208201905081810360008301526200113881620010f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200118757607f821691505b602082108114156200119e576200119d6200113f565b5b50919050565b60805160a05161599b620011fb60003960008181611111015281816117dd0152611f0e015260008181610dcd01528181613ec701528181613fa801528181613fcf0152818161406b0152614092015261599b6000f3fe6080604052600436106103545760003560e01c806388e765ff116101c6578063c18bc195116100f7578063ee40166e11610095578063f54afa781161006f578063f54afa7814610c63578063f5648a4f14610c8e578063f637434214610ca5578063fabb0b4f14610cd05761035b565b8063ee40166e14610be4578063f11a24d314610c0f578063f2fde38b14610c3a5761035b565b8063d85ba063116100d1578063d85ba06314610b28578063dc3f0d0f14610b53578063dd62ed3e14610b7c578063e2f4560514610bb95761035b565b8063c18bc19514610aab578063cc274b2914610ad4578063cc2ffe7c14610afd5761035b565b8063aa4bde2811610164578063bbc0c7421161013e578063bbc0c74214610a03578063c024666814610a2e578063c054f2f414610a57578063c17b5b8c14610a825761035b565b8063aa4bde2814610970578063b62496f51461099b578063bb8d5131146109d85761035b565b806395d89b41116101a057806395d89b41146108a25780639a7a23d6146108cd578063a457c2d7146108f6578063a9059cbb146109335761035b565b806388e765ff146108235780638906758d1461084e5780638da5cb5b146108775761035b565b80635c068a8c116102a057806370a082311161023e5780637571336a116102185780637571336a1461076957806377a3b609146107925780638095d564146107bd5780638366e79a146107e65761035b565b806370a08231146106fe578063715018a61461073b578063751039fc146107525761035b565b806366d602ae1161027a57806366d602ae146106525780636a486a8e1461067d5780636b2fb124146106a85780636ddd1713146106d35761035b565b80635c068a8c146105d55780635e83ae76146106005780636605bfda146106295761035b565b806323b872dd1161030d57806339509351116102e7578063395093511461051757806349bd5a5e146105545780634a62bb651461057f5780635b5c251f146105aa5761035b565b806323b872dd146104865780632be32b61146104c3578063313ce567146104ec5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e1461040557806318160ddd146104305780631a8145bb1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610cfb565b60405161038291906141df565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad919061429a565b610d8d565b6040516103bf91906142f5565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190614310565b610dab565b6040516103fc91906142f5565b60405180910390f35b34801561041157600080fd5b5061041a610dcb565b604051610427919061439c565b60405180910390f35b34801561043c57600080fd5b50610445610def565b60405161045291906143c6565b60405180910390f35b34801561046757600080fd5b50610470610df9565b60405161047d91906143c6565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906143e1565b610dff565b6040516104ba91906142f5565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614434565b610ef7565b005b3480156104f857600080fd5b5061050161105a565b60405161050e919061447d565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061429a565b611063565b60405161054b91906142f5565b60405180910390f35b34801561056057600080fd5b5061056961110f565b60405161057691906144a7565b60405180910390f35b34801561058b57600080fd5b50610594611133565b6040516105a191906142f5565b60405180910390f35b3480156105b657600080fd5b506105bf611146565b6040516105cc91906144a7565b60405180910390f35b3480156105e157600080fd5b506105ea61116c565b6040516105f791906143c6565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906144ee565b611172565b005b34801561063557600080fd5b50610650600480360381019061064b9190614310565b61130c565b005b34801561065e57600080fd5b5061066761149a565b60405161067491906143c6565b60405180910390f35b34801561068957600080fd5b506106926114a0565b60405161069f91906143c6565b60405180910390f35b3480156106b457600080fd5b506106bd6114a6565b6040516106ca91906143c6565b60405180910390f35b3480156106df57600080fd5b506106e86114ac565b6040516106f591906142f5565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614310565b6114bf565b60405161073291906143c6565b60405180910390f35b34801561074757600080fd5b50610750611507565b005b34801561075e57600080fd5b5061076761165f565b005b34801561077557600080fd5b50610790600480360381019061078b919061452e565b61173f565b005b34801561079e57600080fd5b506107a76118c6565b6040516107b491906143c6565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061456e565b6118cc565b005b3480156107f257600080fd5b5061080d600480360381019061080891906145c1565b6119e6565b60405161081a91906142f5565b60405180910390f35b34801561082f57600080fd5b50610838611c25565b60405161084591906143c6565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190614310565b611c2b565b005b34801561088357600080fd5b5061088c611db9565b60405161089991906144a7565b60405180910390f35b3480156108ae57600080fd5b506108b7611de3565b6040516108c491906141df565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef919061452e565b611e75565b005b34801561090257600080fd5b5061091d6004803603810190610918919061429a565b611fa9565b60405161092a91906142f5565b60405180910390f35b34801561093f57600080fd5b5061095a6004803603810190610955919061429a565b612094565b60405161096791906142f5565b60405180910390f35b34801561097c57600080fd5b506109856120b2565b60405161099291906143c6565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190614310565b6120b8565b6040516109cf91906142f5565b60405180910390f35b3480156109e457600080fd5b506109ed6120d8565b6040516109fa91906143c6565b60405180910390f35b348015610a0f57600080fd5b50610a186120de565b604051610a2591906142f5565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a50919061452e565b6120f1565b005b348015610a6357600080fd5b50610a6c612231565b604051610a7991906144a7565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa4919061456e565b612257565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614434565b612371565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614434565b6124d4565b005b348015610b0957600080fd5b50610b12612581565b604051610b1f91906143c6565b60405180910390f35b348015610b3457600080fd5b50610b3d612587565b604051610b4a91906143c6565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190614434565b61258d565b005b348015610b8857600080fd5b50610ba36004803603810190610b9e91906145c1565b6126f0565b604051610bb091906143c6565b60405180910390f35b348015610bc557600080fd5b50610bce612777565b604051610bdb91906143c6565b60405180910390f35b348015610bf057600080fd5b50610bf961277d565b604051610c0691906143c6565b60405180910390f35b348015610c1b57600080fd5b50610c24612783565b604051610c3191906143c6565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614310565b612789565b005b348015610c6f57600080fd5b50610c78612950565b604051610c8591906143c6565b60405180910390f35b348015610c9a57600080fd5b50610ca3612956565b005b348015610cb157600080fd5b50610cba612a57565b604051610cc791906143c6565b60405180910390f35b348015610cdc57600080fd5b50610ce5612a5d565b604051610cf291906143c6565b60405180910390f35b606060038054610d0a90614630565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690614630565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b5050505050905090565b6000610da1610d9a612a63565b8484612a6b565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60195481565b6000610e0c848484612c36565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e57612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece906146d4565b60405180910390fd5b610eeb85610ee3612a63565b858403612a6b565b60019150509392505050565b610eff612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590614740565b60405180910390fd5b670de0b6b3a76400006103e86001610fa4610def565b610fae919061478f565b610fb89190614818565b610fc29190614818565b811015611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906148bb565b60405180910390fd5b670de0b6b3a764000081611018919061478f565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100960065460405161104f91906143c6565b60405180910390a150565b60006012905090565b6000611105611070612a63565b84846001600061107e612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110091906148db565b612a6b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61117a612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614740565b60405180910390fd5b600f60019054906101000a900460ff1615611259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112509061497d565b60405180910390fd5b81600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055507fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea8138812600f60019054906101000a900460ff16826040516112ce92919061499d565b60405180910390a1600f60019054906101000a900460ff1680156112f457506000600d54145b156113085743600d8190555080600e819055505b5050565b611314612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90614a38565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f60405160405180910390a250565b60075481565b60145481565b60155481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61150f612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611667612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90614740565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611747612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614740565b60405180910390fd5b8061186b577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190614aca565b60405180910390fd5b5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6118d4612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614740565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461198b91906148db565b61199591906148db565b601081905550601e60105411156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614b36565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90614ba2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614c34565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b2291906144a7565b602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190614c69565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611ba0929190614c96565b6020604051808303816000875af1158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be39190614cd4565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611c16929190614c96565b60405180910390a15092915050565b60065481565b611c33612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614d73565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc7860405160405180910390a250565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611df290614630565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1e90614630565b8015611e6b5780601f10611e4057610100808354040283529160200191611e6b565b820191906000526020600020905b815481529060010190602001808311611e4e57829003601f168201915b5050505050905090565b611e7d612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614740565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9290614e05565b60405180910390fd5b611fa582826137e1565b5050565b60008060016000611fb8612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614e97565b60405180910390fd5b612089612080612a63565b85858403612a6b565b600191505092915050565b60006120a86120a1612a63565b8484612c36565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600f60019054906101000a900460ff1681565b6120f9612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614740565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161222591906142f5565b60405180910390a25050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61225f612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e590614740565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461231691906148db565b61232091906148db565b601481905550601e601454111561236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614b36565b60405180910390fd5b505050565b612379612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff90614740565b60405180910390fd5b670de0b6b3a76400006103e8600361241e610def565b612428919061478f565b6124329190614818565b61243c9190614818565b81101561247e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247590614f29565b60405180910390fd5b670de0b6b3a764000081612492919061478f565b6008819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc6008546040516124c991906143c6565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90614c34565b60405180910390fd5b670de0b6b3a764000081612578919061478f565b600a8190555050565b60185481565b60105481565b612595612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614740565b60405180910390fd5b670de0b6b3a76400006103e8600161263a610def565b612644919061478f565b61264e9190614818565b6126589190614818565b81101561269a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269190614fbb565b60405180910390fd5b670de0b6b3a7640000816126ae919061478f565b6007819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e6007546040516126e591906143c6565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600d5481565b60125481565b612791612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061504d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df90614c34565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1647604051612a0c9061509e565b60006040518083038185875af1925050503d8060008114612a49576040519150601f19603f3d011682016040523d82523d6000602084013e612a4e565b606091505b50508091505050565b60165481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290615125565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b42906151b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2991906143c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9d90615249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d906152db565b60405180910390fd5b60008111612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090615347565b60405180910390fd5b600f60009054906101000a900460ff161561330857612d76611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612de45750612db4611db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e1d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e57575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561330757600f60019054906101000a900460ff16612fc657601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f115750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f47906153b3565b60405180910390fd5b612f58611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9061541f565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130695750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613110576006548111156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa906154b1565b60405180910390fd5b6008546130bf836114bf565b826130ca91906148db565b111561310b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131029061551d565b60405180910390fd5b613306565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b35750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202576007548111156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f4906155af565b60405180910390fd5b613305565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132a65750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613304576008546132b7836114bf565b826132c291906148db565b1115613303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fa9061551d565b60405180910390fd5b5b5b5b5b5b6000613313306114bf565b90506000600a5482101590508080156133385750600f60029054906101000a900460ff165b80156133515750600960009054906101000a900460ff16155b80156133a75750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600960006101000a81548160ff02191690831515021790555061347b61388c565b6000600960006101000a81548160ff0219169083151502179055505b600060019050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061353e5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561354857600090505b60008082801561355a57506000600d54115b80156135675750600d5443115b156137cc57601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c757506000601454115b15613686576064601454876135dc919061478f565b6135e69190614818565b9150601454601654836135f9919061478f565b6136039190614818565b6019600082825461361491906148db565b925050819055506014546015548361362c919061478f565b6136369190614818565b6018600082825461364791906148db565b925050819055506014546017548361365f919061478f565b6136699190614818565b601a600082825461367a91906148db565b9250508190555061379d565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136e157506000601054115b1561379c576064601054876136f6919061478f565b6137009190614818565b915060105460125483613713919061478f565b61371d9190614818565b6019600082825461372e91906148db565b9250508190555060105460115483613746919061478f565b6137509190614818565b6018600082825461376191906148db565b9250508190555060105460135483613779919061478f565b6137839190614818565b601a600082825461379491906148db565b925050819055505b5b60008211156137b2576137b1883084613b29565b5b80826137be91906148db565b866137c991906155cf565b95505b6137d7888888613b29565b5050505050505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506138428282613d94565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613897306114bf565b90506000601a546018546019546138ae91906148db565b6138b891906148db565b905060008214806138c95750600081145b156138d5575050613b27565b6005600a546138e4919061478f565b8211156138fd576005600a546138fa919061478f565b91505b60008060028360195486613911919061478f565b61391b9190614818565b6139259190614818565b905061393b818561393691906155cf565b613e28565b60004790506000819050600060026019546139569190614818565b8661396191906155cf565b6018548461396f919061478f565b6139799190614818565b90506000600260195461398c9190614818565b8761399791906155cf565b601a54856139a5919061478f565b6139af9190614818565b905080826139bd91906148db565b836139c891906155cf565b9250600060198190555060006018819055506000601a819055506000851180156139f25750600083115b15613a0257613a018584614065565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a489061509e565b60006040518083038185875af1925050503d8060008114613a85576040519150601f19603f3d011682016040523d82523d6000602084013e613a8a565b606091505b505080965050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad69061509e565b60006040518083038185875af1925050503d8060008114613b13576040519150601f19603f3d011682016040523d82523d6000602084013e613b18565b606091505b50508096505050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090615249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c00906152db565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8690615675565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d2291906148db565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d8691906143c6565b60405180910390a350505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613e1c929190615695565b60405180910390a15050565b6000600267ffffffffffffffff811115613e4557613e446156be565b5b604051908082528060200260200182016040528015613e735781602001602082028036833780820191505090505b5090503081600081518110613e8b57613e8a6156ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f549190615731565b81600181518110613f6857613f676156ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fcd307f000000000000000000000000000000000000000000000000000000000000000084612a6b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161402f959493929190615857565b600060405180830381600087803b15801561404957600080fd5b505af115801561405d573d6000803e3d6000fd5b505050505050565b614090307f000000000000000000000000000000000000000000000000000000000000000084612a6b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140da611db9565b426040518863ffffffff1660e01b81526004016140fc969594939291906158b1565b60606040518083038185885af115801561411a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061413f9190615912565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614180578082015181840152602081019050614165565b8381111561418f576000848401525b50505050565b6000601f19601f8301169050919050565b60006141b182614146565b6141bb8185614151565b93506141cb818560208601614162565b6141d481614195565b840191505092915050565b600060208201905081810360008301526141f981846141a6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061423182614206565b9050919050565b61424181614226565b811461424c57600080fd5b50565b60008135905061425e81614238565b92915050565b6000819050919050565b61427781614264565b811461428257600080fd5b50565b6000813590506142948161426e565b92915050565b600080604083850312156142b1576142b0614201565b5b60006142bf8582860161424f565b92505060206142d085828601614285565b9150509250929050565b60008115159050919050565b6142ef816142da565b82525050565b600060208201905061430a60008301846142e6565b92915050565b60006020828403121561432657614325614201565b5b60006143348482850161424f565b91505092915050565b6000819050919050565b600061436261435d61435884614206565b61433d565b614206565b9050919050565b600061437482614347565b9050919050565b600061438682614369565b9050919050565b6143968161437b565b82525050565b60006020820190506143b1600083018461438d565b92915050565b6143c081614264565b82525050565b60006020820190506143db60008301846143b7565b92915050565b6000806000606084860312156143fa576143f9614201565b5b60006144088682870161424f565b93505060206144198682870161424f565b925050604061442a86828701614285565b9150509250925092565b60006020828403121561444a57614449614201565b5b600061445884828501614285565b91505092915050565b600060ff82169050919050565b61447781614461565b82525050565b6000602082019050614492600083018461446e565b92915050565b6144a181614226565b82525050565b60006020820190506144bc6000830184614498565b92915050565b6144cb816142da565b81146144d657600080fd5b50565b6000813590506144e8816144c2565b92915050565b6000806040838503121561450557614504614201565b5b6000614513858286016144d9565b925050602061452485828601614285565b9150509250929050565b6000806040838503121561454557614544614201565b5b60006145538582860161424f565b9250506020614564858286016144d9565b9150509250929050565b60008060006060848603121561458757614586614201565b5b600061459586828701614285565b93505060206145a686828701614285565b92505060406145b786828701614285565b9150509250925092565b600080604083850312156145d8576145d7614201565b5b60006145e68582860161424f565b92505060206145f78582860161424f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464857607f821691505b6020821081141561465c5761465b614601565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006146be602883614151565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061472a602083614151565b9150614735826146f4565b602082019050919050565b600060208201905081810360008301526147598161471d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061479a82614264565b91506147a583614264565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147de576147dd614760565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482382614264565b915061482e83614264565b92508261483e5761483d6147e9565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006148a5602983614151565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b60006148e682614264565b91506148f183614264565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561492657614925614760565b5b828201905092915050565b7f43616e6e6f7420726520656e61626c652074726164696e670000000000000000600082015250565b6000614967601883614151565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b60006040820190506149b260008301856142e6565b6149bf60208301846143b7565b9392505050565b7f5f54726561737572794164647265737320616464726573732063616e6e6f742060008201527f6265203000000000000000000000000000000000000000000000000000000000602082015250565b6000614a22602483614151565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000614ab4602783614151565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f46656573206d7573742062652033302520206f72206c65737300000000000000600082015250565b6000614b20601983614151565b9150614b2b82614aea565b602082019050919050565b60006020820190508181036000830152614b4f81614b13565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614b8c601a83614151565b9150614b9782614b56565b602082019050919050565b60006020820190508181036000830152614bbb81614b7f565b9050919050565b7f6f6e6c79205472656173757279416464726573732063616e207769746864726160008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c1e602183614151565b9150614c2982614bc2565b604082019050919050565b60006020820190508181036000830152614c4d81614c11565b9050919050565b600081519050614c638161426e565b92915050565b600060208284031215614c7f57614c7e614201565b5b6000614c8d84828501614c54565b91505092915050565b6000604082019050614cab6000830185614498565b614cb860208301846143b7565b9392505050565b600081519050614cce816144c2565b92915050565b600060208284031215614cea57614ce9614201565b5b6000614cf884828501614cbf565b91505092915050565b7f5f526577617264734164647265737320616464726573732063616e6e6f74206260008201527f6520300000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5d602383614151565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614def603983614151565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614e81602583614151565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e33250000000000000000000000000000000000000000602082015250565b6000614f13602c83614151565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614fa5602a83614151565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615037602683614151565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b600081905092915050565b50565b600061508860008361506d565b915061509382615078565b600082019050919050565b60006150a98261507b565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061510f602483614151565b915061511a826150b3565b604082019050919050565b6000602082019050818103600083015261513e81615102565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151a1602283614151565b91506151ac82615145565b604082019050919050565b600060208201905081810360008301526151d081615194565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615233602583614151565b915061523e826151d7565b604082019050919050565b6000602082019050818103600083015261526281615226565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152c5602383614151565b91506152d082615269565b604082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000615331601d83614151565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061539d601683614151565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000615409601683614151565b9150615414826153d3565b602082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b600061549b602883614151565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b6000615507601883614151565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b6000615599602a83614151565b91506155a48261553d565b604082019050919050565b600060208201905081810360008301526155c88161558c565b9050919050565b60006155da82614264565b91506155e583614264565b9250828210156155f8576155f7614760565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061565f602683614151565b915061566a82615603565b604082019050919050565b6000602082019050818103600083015261568e81615652565b9050919050565b60006040820190506156aa6000830185614498565b6156b760208301846142e6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061572b81614238565b92915050565b60006020828403121561574757615746614201565b5b60006157558482850161571c565b91505092915050565b6000819050919050565b600061578361577e6157798461575e565b61433d565b614264565b9050919050565b61579381615768565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157ce81614226565b82525050565b60006157e083836157c5565b60208301905092915050565b6000602082019050919050565b600061580482615799565b61580e81856157a4565b9350615819836157b5565b8060005b8381101561584a57815161583188826157d4565b975061583c836157ec565b92505060018101905061581d565b5085935050505092915050565b600060a08201905061586c60008301886143b7565b615879602083018761578a565b818103604083015261588b81866157f9565b905061589a6060830185614498565b6158a760808301846143b7565b9695505050505050565b600060c0820190506158c66000830189614498565b6158d360208301886143b7565b6158e0604083018761578a565b6158ed606083018661578a565b6158fa6080830185614498565b61590760a08301846143b7565b979650505050505050565b60008060006060848603121561592b5761592a614201565b5b600061593986828701614c54565b935050602061594a86828701614c54565b925050604061595b86828701614c54565b915050925092509256fea2646970667358221220a1805006b0f757d4231c9055ad423aec0be230095ef73fa40b861a983ee8c98864736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806388e765ff116101c6578063c18bc195116100f7578063ee40166e11610095578063f54afa781161006f578063f54afa7814610c63578063f5648a4f14610c8e578063f637434214610ca5578063fabb0b4f14610cd05761035b565b8063ee40166e14610be4578063f11a24d314610c0f578063f2fde38b14610c3a5761035b565b8063d85ba063116100d1578063d85ba06314610b28578063dc3f0d0f14610b53578063dd62ed3e14610b7c578063e2f4560514610bb95761035b565b8063c18bc19514610aab578063cc274b2914610ad4578063cc2ffe7c14610afd5761035b565b8063aa4bde2811610164578063bbc0c7421161013e578063bbc0c74214610a03578063c024666814610a2e578063c054f2f414610a57578063c17b5b8c14610a825761035b565b8063aa4bde2814610970578063b62496f51461099b578063bb8d5131146109d85761035b565b806395d89b41116101a057806395d89b41146108a25780639a7a23d6146108cd578063a457c2d7146108f6578063a9059cbb146109335761035b565b806388e765ff146108235780638906758d1461084e5780638da5cb5b146108775761035b565b80635c068a8c116102a057806370a082311161023e5780637571336a116102185780637571336a1461076957806377a3b609146107925780638095d564146107bd5780638366e79a146107e65761035b565b806370a08231146106fe578063715018a61461073b578063751039fc146107525761035b565b806366d602ae1161027a57806366d602ae146106525780636a486a8e1461067d5780636b2fb124146106a85780636ddd1713146106d35761035b565b80635c068a8c146105d55780635e83ae76146106005780636605bfda146106295761035b565b806323b872dd1161030d57806339509351116102e7578063395093511461051757806349bd5a5e146105545780634a62bb651461057f5780635b5c251f146105aa5761035b565b806323b872dd146104865780632be32b61146104c3578063313ce567146104ec5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e1461040557806318160ddd146104305780631a8145bb1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610cfb565b60405161038291906141df565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad919061429a565b610d8d565b6040516103bf91906142f5565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190614310565b610dab565b6040516103fc91906142f5565b60405180910390f35b34801561041157600080fd5b5061041a610dcb565b604051610427919061439c565b60405180910390f35b34801561043c57600080fd5b50610445610def565b60405161045291906143c6565b60405180910390f35b34801561046757600080fd5b50610470610df9565b60405161047d91906143c6565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906143e1565b610dff565b6040516104ba91906142f5565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614434565b610ef7565b005b3480156104f857600080fd5b5061050161105a565b60405161050e919061447d565b60405180910390f35b34801561052357600080fd5b5061053e6004803603810190610539919061429a565b611063565b60405161054b91906142f5565b60405180910390f35b34801561056057600080fd5b5061056961110f565b60405161057691906144a7565b60405180910390f35b34801561058b57600080fd5b50610594611133565b6040516105a191906142f5565b60405180910390f35b3480156105b657600080fd5b506105bf611146565b6040516105cc91906144a7565b60405180910390f35b3480156105e157600080fd5b506105ea61116c565b6040516105f791906143c6565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906144ee565b611172565b005b34801561063557600080fd5b50610650600480360381019061064b9190614310565b61130c565b005b34801561065e57600080fd5b5061066761149a565b60405161067491906143c6565b60405180910390f35b34801561068957600080fd5b506106926114a0565b60405161069f91906143c6565b60405180910390f35b3480156106b457600080fd5b506106bd6114a6565b6040516106ca91906143c6565b60405180910390f35b3480156106df57600080fd5b506106e86114ac565b6040516106f591906142f5565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614310565b6114bf565b60405161073291906143c6565b60405180910390f35b34801561074757600080fd5b50610750611507565b005b34801561075e57600080fd5b5061076761165f565b005b34801561077557600080fd5b50610790600480360381019061078b919061452e565b61173f565b005b34801561079e57600080fd5b506107a76118c6565b6040516107b491906143c6565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061456e565b6118cc565b005b3480156107f257600080fd5b5061080d600480360381019061080891906145c1565b6119e6565b60405161081a91906142f5565b60405180910390f35b34801561082f57600080fd5b50610838611c25565b60405161084591906143c6565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190614310565b611c2b565b005b34801561088357600080fd5b5061088c611db9565b60405161089991906144a7565b60405180910390f35b3480156108ae57600080fd5b506108b7611de3565b6040516108c491906141df565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef919061452e565b611e75565b005b34801561090257600080fd5b5061091d6004803603810190610918919061429a565b611fa9565b60405161092a91906142f5565b60405180910390f35b34801561093f57600080fd5b5061095a6004803603810190610955919061429a565b612094565b60405161096791906142f5565b60405180910390f35b34801561097c57600080fd5b506109856120b2565b60405161099291906143c6565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd9190614310565b6120b8565b6040516109cf91906142f5565b60405180910390f35b3480156109e457600080fd5b506109ed6120d8565b6040516109fa91906143c6565b60405180910390f35b348015610a0f57600080fd5b50610a186120de565b604051610a2591906142f5565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a50919061452e565b6120f1565b005b348015610a6357600080fd5b50610a6c612231565b604051610a7991906144a7565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa4919061456e565b612257565b005b348015610ab757600080fd5b50610ad26004803603810190610acd9190614434565b612371565b005b348015610ae057600080fd5b50610afb6004803603810190610af69190614434565b6124d4565b005b348015610b0957600080fd5b50610b12612581565b604051610b1f91906143c6565b60405180910390f35b348015610b3457600080fd5b50610b3d612587565b604051610b4a91906143c6565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190614434565b61258d565b005b348015610b8857600080fd5b50610ba36004803603810190610b9e91906145c1565b6126f0565b604051610bb091906143c6565b60405180910390f35b348015610bc557600080fd5b50610bce612777565b604051610bdb91906143c6565b60405180910390f35b348015610bf057600080fd5b50610bf961277d565b604051610c0691906143c6565b60405180910390f35b348015610c1b57600080fd5b50610c24612783565b604051610c3191906143c6565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c9190614310565b612789565b005b348015610c6f57600080fd5b50610c78612950565b604051610c8591906143c6565b60405180910390f35b348015610c9a57600080fd5b50610ca3612956565b005b348015610cb157600080fd5b50610cba612a57565b604051610cc791906143c6565b60405180910390f35b348015610cdc57600080fd5b50610ce5612a5d565b604051610cf291906143c6565b60405180910390f35b606060038054610d0a90614630565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690614630565b8015610d835780601f10610d5857610100808354040283529160200191610d83565b820191906000526020600020905b815481529060010190602001808311610d6657829003601f168201915b5050505050905090565b6000610da1610d9a612a63565b8484612a6b565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60195481565b6000610e0c848484612c36565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e57612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece906146d4565b60405180910390fd5b610eeb85610ee3612a63565b858403612a6b565b60019150509392505050565b610eff612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590614740565b60405180910390fd5b670de0b6b3a76400006103e86001610fa4610def565b610fae919061478f565b610fb89190614818565b610fc29190614818565b811015611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906148bb565b60405180910390fd5b670de0b6b3a764000081611018919061478f565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100960065460405161104f91906143c6565b60405180910390a150565b60006012905090565b6000611105611070612a63565b84846001600061107e612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110091906148db565b612a6b565b6001905092915050565b7f000000000000000000000000c06ab7003c5000ba7d8e72e7d398c44446997c7581565b600f60009054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61117a612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614740565b60405180910390fd5b600f60019054906101000a900460ff1615611259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112509061497d565b60405180910390fd5b81600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055507fe185248899f361d51a48833938ab33493ebd7272d195abf7f51a833ea8138812600f60019054906101000a900460ff16826040516112ce92919061499d565b60405180910390a1600f60019054906101000a900460ff1680156112f457506000600d54145b156113085743600d8190555080600e819055505b5050565b611314612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90614a38565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f60405160405180910390a250565b60075481565b60145481565b60155481565b600f60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61150f612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611667612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90614740565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b611747612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90614740565b60405180910390fd5b8061186b577f000000000000000000000000c06ab7003c5000ba7d8e72e7d398c44446997c7573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190614aca565b60405180910390fd5b5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6118d4612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90614740565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461198b91906148db565b61199591906148db565b601081905550601e60105411156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614b36565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90614ba2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614c34565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b2291906144a7565b602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190614c69565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611ba0929190614c96565b6020604051808303816000875af1158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be39190614cd4565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611c16929190614c96565b60405180910390a15092915050565b60065481565b611c33612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990614d73565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f647cd1cbe5341aa880069f5c966ac6cf0ed473b7c0bf494fb7fc7ca46dc4cc7860405160405180910390a250565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611df290614630565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1e90614630565b8015611e6b5780601f10611e4057610100808354040283529160200191611e6b565b820191906000526020600020905b815481529060010190602001808311611e4e57829003601f168201915b5050505050905090565b611e7d612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614740565b60405180910390fd5b7f000000000000000000000000c06ab7003c5000ba7d8e72e7d398c44446997c7573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9290614e05565b60405180910390fd5b611fa582826137e1565b5050565b60008060016000611fb8612a63565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90614e97565b60405180910390fd5b612089612080612a63565b85858403612a6b565b600191505092915050565b60006120a86120a1612a63565b8484612c36565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600f60019054906101000a900460ff1681565b6120f9612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614740565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161222591906142f5565b60405180910390a25050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61225f612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e590614740565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461231691906148db565b61232091906148db565b601481905550601e601454111561236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614b36565b60405180910390fd5b505050565b612379612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff90614740565b60405180910390fd5b670de0b6b3a76400006103e8600361241e610def565b612428919061478f565b6124329190614818565b61243c9190614818565b81101561247e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247590614f29565b60405180910390fd5b670de0b6b3a764000081612492919061478f565b6008819055507fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc6008546040516124c991906143c6565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90614c34565b60405180910390fd5b670de0b6b3a764000081612578919061478f565b600a8190555050565b60185481565b60105481565b612595612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90614740565b60405180910390fd5b670de0b6b3a76400006103e8600161263a610def565b612644919061478f565b61264e9190614818565b6126589190614818565b81101561269a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269190614fbb565b60405180910390fd5b670de0b6b3a7640000816126ae919061478f565b6007819055507f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e6007546040516126e591906143c6565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600d5481565b60125481565b612791612a63565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790614740565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128879061504d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df90614c34565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1647604051612a0c9061509e565b60006040518083038185875af1925050503d8060008114612a49576040519150601f19603f3d011682016040523d82523d6000602084013e612a4e565b606091505b50508091505050565b60165481565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290615125565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b42906151b7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2991906143c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9d90615249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d906152db565b60405180910390fd5b60008111612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090615347565b60405180910390fd5b600f60009054906101000a900460ff161561330857612d76611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612de45750612db4611db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e1d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e57575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561330757600f60019054906101000a900460ff16612fc657601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f115750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f47906153b3565b60405180910390fd5b612f58611db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9061541f565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130695750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613110576006548111156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa906154b1565b60405180910390fd5b6008546130bf836114bf565b826130ca91906148db565b111561310b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131029061551d565b60405180910390fd5b613306565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b35750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613202576007548111156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f4906155af565b60405180910390fd5b613305565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132a65750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613304576008546132b7836114bf565b826132c291906148db565b1115613303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fa9061551d565b60405180910390fd5b5b5b5b5b5b6000613313306114bf565b90506000600a5482101590508080156133385750600f60029054906101000a900460ff165b80156133515750600960009054906101000a900460ff16155b80156133a75750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600960006101000a81548160ff02191690831515021790555061347b61388c565b6000600960006101000a81548160ff0219169083151502179055505b600060019050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061353e5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561354857600090505b60008082801561355a57506000600d54115b80156135675750600d5443115b156137cc57601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c757506000601454115b15613686576064601454876135dc919061478f565b6135e69190614818565b9150601454601654836135f9919061478f565b6136039190614818565b6019600082825461361491906148db565b925050819055506014546015548361362c919061478f565b6136369190614818565b6018600082825461364791906148db565b925050819055506014546017548361365f919061478f565b6136699190614818565b601a600082825461367a91906148db565b9250508190555061379d565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136e157506000601054115b1561379c576064601054876136f6919061478f565b6137009190614818565b915060105460125483613713919061478f565b61371d9190614818565b6019600082825461372e91906148db565b9250508190555060105460115483613746919061478f565b6137509190614818565b6018600082825461376191906148db565b9250508190555060105460135483613779919061478f565b6137839190614818565b601a600082825461379491906148db565b925050819055505b5b60008211156137b2576137b1883084613b29565b5b80826137be91906148db565b866137c991906155cf565b95505b6137d7888888613b29565b5050505050505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506138428282613d94565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613897306114bf565b90506000601a546018546019546138ae91906148db565b6138b891906148db565b905060008214806138c95750600081145b156138d5575050613b27565b6005600a546138e4919061478f565b8211156138fd576005600a546138fa919061478f565b91505b60008060028360195486613911919061478f565b61391b9190614818565b6139259190614818565b905061393b818561393691906155cf565b613e28565b60004790506000819050600060026019546139569190614818565b8661396191906155cf565b6018548461396f919061478f565b6139799190614818565b90506000600260195461398c9190614818565b8761399791906155cf565b601a54856139a5919061478f565b6139af9190614818565b905080826139bd91906148db565b836139c891906155cf565b9250600060198190555060006018819055506000601a819055506000851180156139f25750600083115b15613a0257613a018584614065565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a489061509e565b60006040518083038185875af1925050503d8060008114613a85576040519150601f19603f3d011682016040523d82523d6000602084013e613a8a565b606091505b505080965050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad69061509e565b60006040518083038185875af1925050503d8060008114613b13576040519150601f19603f3d011682016040523d82523d6000602084013e613b18565b606091505b50508096505050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9090615249565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c00906152db565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8690615675565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d2291906148db565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d8691906143c6565b60405180910390a350505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613e1c929190615695565b60405180910390a15050565b6000600267ffffffffffffffff811115613e4557613e446156be565b5b604051908082528060200260200182016040528015613e735781602001602082028036833780820191505090505b5090503081600081518110613e8b57613e8a6156ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f549190615731565b81600181518110613f6857613f676156ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613fcd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a6b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161402f959493929190615857565b600060405180830381600087803b15801561404957600080fd5b505af115801561405d573d6000803e3d6000fd5b505050505050565b614090307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a6b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806140da611db9565b426040518863ffffffff1660e01b81526004016140fc969594939291906158b1565b60606040518083038185885af115801561411a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061413f9190615912565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614180578082015181840152602081019050614165565b8381111561418f576000848401525b50505050565b6000601f19601f8301169050919050565b60006141b182614146565b6141bb8185614151565b93506141cb818560208601614162565b6141d481614195565b840191505092915050565b600060208201905081810360008301526141f981846141a6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061423182614206565b9050919050565b61424181614226565b811461424c57600080fd5b50565b60008135905061425e81614238565b92915050565b6000819050919050565b61427781614264565b811461428257600080fd5b50565b6000813590506142948161426e565b92915050565b600080604083850312156142b1576142b0614201565b5b60006142bf8582860161424f565b92505060206142d085828601614285565b9150509250929050565b60008115159050919050565b6142ef816142da565b82525050565b600060208201905061430a60008301846142e6565b92915050565b60006020828403121561432657614325614201565b5b60006143348482850161424f565b91505092915050565b6000819050919050565b600061436261435d61435884614206565b61433d565b614206565b9050919050565b600061437482614347565b9050919050565b600061438682614369565b9050919050565b6143968161437b565b82525050565b60006020820190506143b1600083018461438d565b92915050565b6143c081614264565b82525050565b60006020820190506143db60008301846143b7565b92915050565b6000806000606084860312156143fa576143f9614201565b5b60006144088682870161424f565b93505060206144198682870161424f565b925050604061442a86828701614285565b9150509250925092565b60006020828403121561444a57614449614201565b5b600061445884828501614285565b91505092915050565b600060ff82169050919050565b61447781614461565b82525050565b6000602082019050614492600083018461446e565b92915050565b6144a181614226565b82525050565b60006020820190506144bc6000830184614498565b92915050565b6144cb816142da565b81146144d657600080fd5b50565b6000813590506144e8816144c2565b92915050565b6000806040838503121561450557614504614201565b5b6000614513858286016144d9565b925050602061452485828601614285565b9150509250929050565b6000806040838503121561454557614544614201565b5b60006145538582860161424f565b9250506020614564858286016144d9565b9150509250929050565b60008060006060848603121561458757614586614201565b5b600061459586828701614285565b93505060206145a686828701614285565b92505060406145b786828701614285565b9150509250925092565b600080604083850312156145d8576145d7614201565b5b60006145e68582860161424f565b92505060206145f78582860161424f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061464857607f821691505b6020821081141561465c5761465b614601565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006146be602883614151565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061472a602083614151565b9150614735826146f4565b602082019050919050565b600060208201905081810360008301526147598161471d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061479a82614264565b91506147a583614264565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147de576147dd614760565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482382614264565b915061482e83614264565b92508261483e5761483d6147e9565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006148a5602983614151565b91506148b082614849565b604082019050919050565b600060208201905081810360008301526148d481614898565b9050919050565b60006148e682614264565b91506148f183614264565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561492657614925614760565b5b828201905092915050565b7f43616e6e6f7420726520656e61626c652074726164696e670000000000000000600082015250565b6000614967601883614151565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b60006040820190506149b260008301856142e6565b6149bf60208301846143b7565b9392505050565b7f5f54726561737572794164647265737320616464726573732063616e6e6f742060008201527f6265203000000000000000000000000000000000000000000000000000000000602082015250565b6000614a22602483614151565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000614ab4602783614151565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f46656573206d7573742062652033302520206f72206c65737300000000000000600082015250565b6000614b20601983614151565b9150614b2b82614aea565b602082019050919050565b60006020820190508181036000830152614b4f81614b13565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614b8c601a83614151565b9150614b9782614b56565b602082019050919050565b60006020820190508181036000830152614bbb81614b7f565b9050919050565b7f6f6e6c79205472656173757279416464726573732063616e207769746864726160008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c1e602183614151565b9150614c2982614bc2565b604082019050919050565b60006020820190508181036000830152614c4d81614c11565b9050919050565b600081519050614c638161426e565b92915050565b600060208284031215614c7f57614c7e614201565b5b6000614c8d84828501614c54565b91505092915050565b6000604082019050614cab6000830185614498565b614cb860208301846143b7565b9392505050565b600081519050614cce816144c2565b92915050565b600060208284031215614cea57614ce9614201565b5b6000614cf884828501614cbf565b91505092915050565b7f5f526577617264734164647265737320616464726573732063616e6e6f74206260008201527f6520300000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5d602383614151565b9150614d6882614d01565b604082019050919050565b60006020820190508181036000830152614d8c81614d50565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614def603983614151565b9150614dfa82614d93565b604082019050919050565b60006020820190508181036000830152614e1e81614de2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614e81602583614151565b9150614e8c82614e25565b604082019050919050565b60006020820190508181036000830152614eb081614e74565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e33250000000000000000000000000000000000000000602082015250565b6000614f13602c83614151565b9150614f1e82614eb7565b604082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b6000614fa5602a83614151565b9150614fb082614f49565b604082019050919050565b60006020820190508181036000830152614fd481614f98565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615037602683614151565b915061504282614fdb565b604082019050919050565b600060208201905081810360008301526150668161502a565b9050919050565b600081905092915050565b50565b600061508860008361506d565b915061509382615078565b600082019050919050565b60006150a98261507b565b9150819050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061510f602483614151565b915061511a826150b3565b604082019050919050565b6000602082019050818103600083015261513e81615102565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151a1602283614151565b91506151ac82615145565b604082019050919050565b600060208201905081810360008301526151d081615194565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615233602583614151565b915061523e826151d7565b604082019050919050565b6000602082019050818103600083015261526281615226565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152c5602383614151565b91506152d082615269565b604082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000615331601d83614151565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061539d601683614151565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000615409601683614151565b9150615414826153d3565b602082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b600061549b602883614151565b91506154a68261543f565b604082019050919050565b600060208201905081810360008301526154ca8161548e565b9050919050565b7f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000600082015250565b6000615507601883614151565b9150615512826154d1565b602082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b6000615599602a83614151565b91506155a48261553d565b604082019050919050565b600060208201905081810360008301526155c88161558c565b9050919050565b60006155da82614264565b91506155e583614264565b9250828210156155f8576155f7614760565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061565f602683614151565b915061566a82615603565b604082019050919050565b6000602082019050818103600083015261568e81615652565b9050919050565b60006040820190506156aa6000830185614498565b6156b760208301846142e6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061572b81614238565b92915050565b60006020828403121561574757615746614201565b5b60006157558482850161571c565b91505092915050565b6000819050919050565b600061578361577e6157798461575e565b61433d565b614264565b9050919050565b61579381615768565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157ce81614226565b82525050565b60006157e083836157c5565b60208301905092915050565b6000602082019050919050565b600061580482615799565b61580e81856157a4565b9350615819836157b5565b8060005b8381101561584a57815161583188826157d4565b975061583c836157ec565b92505060018101905061581d565b5085935050505092915050565b600060a08201905061586c60008301886143b7565b615879602083018761578a565b818103604083015261588b81866157f9565b905061589a6060830185614498565b6158a760808301846143b7565b9695505050505050565b600060c0820190506158c66000830189614498565b6158d360208301886143b7565b6158e0604083018761578a565b6158ed606083018661578a565b6158fa6080830185614498565b61590760a08301846143b7565b979650505050505050565b60008060006060848603121561592b5761592a614201565b5b600061593986828701614c54565b935050602061594a86828701614c54565b925050604061595b86828701614c54565b915050925092509256fea2646970667358221220a1805006b0f757d4231c9055ad423aec0be230095ef73fa40b861a983ee8c98864736f6c634300080c0033

Deployed Bytecode Sourcemap

7103:14967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1821:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2735:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8256:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7253:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2142:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2912:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11113:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3400:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7303:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7610:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7420:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7764:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21638:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19596:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7179:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7874;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7909:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7690:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2258:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5862:150;;;;;;;;;;;;;:::i;:::-;;11720:115;;;;;;;;;;;;;:::i;:::-;;12060:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7837:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13596:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12835:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7145:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19885:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5648:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18564:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3623:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2393:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7214:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8478:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7984:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7650:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14375:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7457:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13981:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12335:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12627:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8022:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11390:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2576:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7378:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7495:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7800:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6020:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8101:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13357:231;;;;;;;;;;;;;:::i;:::-;;7946:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7572:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1821:100;1875:13;1908:5;1901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1821:100;:::o;2735:169::-;2818:4;2835:39;2844:12;:10;:12::i;:::-;2858:7;2867:6;2835:8;:39::i;:::-;2892:4;2885:11;;2735:169;;;;:::o;8256:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;7253:43::-;;;:::o;2142:108::-;2203:7;2230:12;;2223:19;;2142:108;:::o;8061:33::-;;;;:::o;2912:480::-;3052:4;3069:36;3079:6;3087:9;3098:6;3069:9;:36::i;:::-;3118:24;3145:11;:19;3157:6;3145:19;;;;;;;;;;;;;;;:33;3165:12;:10;:12::i;:::-;3145:33;;;;;;;;;;;;;;;;3118:60;;3217:6;3197:16;:26;;3189:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3296:57;3305:6;3313:12;:10;:12::i;:::-;3346:6;3327:16;:25;3296:8;:57::i;:::-;3380:4;3373:11;;;2912:480;;;;;:::o;11113:269::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11232:4:::1;11226;11222:1;11206:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;11205:31;;;;:::i;:::-;11195:6;:41;;11187:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;11318:6;11308;:17;;;;:::i;:::-;11293:12;:32;;;;11341:33;11361:12;;11341:33;;;;;;:::i;:::-;;;;;;;;11113:269:::0;:::o;2041:93::-;2099:5;2124:2;2117:9;;2041:93;:::o;3400:215::-;3488:4;3505:80;3514:12;:10;:12::i;:::-;3528:7;3574:10;3537:11;:25;3549:12;:10;:12::i;:::-;3537:25;;;;;;;;;;;;;;;:34;3563:7;3537:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;3505:8;:80::i;:::-;3603:4;3596:11;;3400:215;;;;:::o;7303:38::-;;;:::o;7610:33::-;;;;;;;;;;;;;:::o;7420:30::-;;;;;;;;;;;;;:::o;7764:29::-;;;;:::o;21638:425::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21735:13:::1;;;;;;;;;;;21734:14;21726:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;21804:7;21788:13;;:23;;;;;;;;;;;;;;;;;;21836:4;21822:11;;:18;;;;;;;;;;;;;;;;;;21856:42;21871:13;;;;;;;;;;;21886:11;21856:42;;;;;;;:::i;:::-;;;;;;;;21915:13;;;;;;;;;;;:40;;;;;21954:1;21932:18;;:23;21915:40;21911:145;;;21993:12;21972:18;:33;;;;22033:11;22020:10;:24;;;;21911:145;21638:425:::0;;:::o;19596:281::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19716:1:::1;19688:30;;:16;:30;;;;19680:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19796:16;19770:15;;:43;;;;;;;;;;;;;;;;;;19852:16;19829:40;;;;;;;;;;;;19596:281:::0;:::o;7179:28::-;;;;:::o;7874:::-;;;;:::o;7909:30::-;;;;:::o;7690:31::-;;;;;;;;;;;;;:::o;2258:127::-;2332:7;2359:9;:18;2369:7;2359:18;;;;;;;;;;;;;;;;2352:25;;2258:127;;;:::o;5862:150::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5971:1:::1;5934:40;;5955:6;;;;;;;;;;;5934:40;;;;;;;;;;;;6002:1;5985:6;;:19;;;;;;;;;;;;;;;;;;5862:150::o:0;11720:115::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11791:5:::1;11774:14;;:22;;;;;;;;;;;;;;;;;;11812:15;;;;;;;;;;11720:115::o:0;12060:267::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12156:4:::1;12152:111;;12194:13;12184:23;;:6;:23;;;;12176:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12152:111;12315:4;12273:31;:39;12305:6;12273:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12060:267:::0;;:::o;7837:28::-;;;;:::o;13596:377::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13732:12:::1;13715:14;:29;;;;13773:13;13755:15;:31;;;;13813:11;13797:13;:27;;;;13885:13;;13867:15;;13850:14;;:32;;;;:::i;:::-;:48;;;;:::i;:::-;13835:12;:63;;;;13933:2;13917:12;;:18;;13909:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13596:377:::0;;;:::o;12835:452::-;12910:10;12959:1;12941:20;;:6;:20;;;;12933:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;13023:15;;;;;;;;;;;13011:27;;:10;:27;;;13003:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13086:24;13120:6;13113:24;;;13146:4;13113:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13086:66;;13178:6;13171:23;;;13195:3;13200:16;13171:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13163:54;;13233:46;13254:6;13262:16;13233:46;;;;;;;:::i;:::-;;;;;;;;12922:365;12835:452;;;;:::o;7145:27::-;;;;:::o;19885:273::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20002:1:::1;19975:29;;:15;:29;;;;19967:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20080:15;20055:14;;:41;;;;;;;;;;;;;;;;;;20134:15;20112:38;;;;;;;;;;;;19885:273:::0;:::o;5648:79::-;5686:7;5713:6;;;;;;;;;;;5706:13;;5648:79;:::o;1929:104::-;1985:13;2018:7;2011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1929:104;:::o;18564:246::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18673:13:::1;18665:21;;:4;:21;;;;18657:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;18761:41;18790:4;18796:5;18761:28;:41::i;:::-;18564:246:::0;;:::o;3623:401::-;3716:4;3733:24;3760:11;:25;3772:12;:10;:12::i;:::-;3760:25;;;;;;;;;;;;;;;:34;3786:7;3760:34;;;;;;;;;;;;;;;;3733:61;;3833:15;3813:16;:35;;3805:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3918:67;3927:12;:10;:12::i;:::-;3941:7;3969:15;3950:16;:34;3918:8;:67::i;:::-;4012:4;4005:11;;;3623:401;;;;:::o;2393:175::-;2479:4;2496:42;2506:12;:10;:12::i;:::-;2520:9;2531:6;2496:9;:42::i;:::-;2556:4;2549:11;;2393:175;;;;:::o;7214:30::-;;;;:::o;8478:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;7984:29::-;;;;:::o;7650:33::-;;;;;;;;;;;;;:::o;14375:182::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14491:8:::1;14460:19;:28;14480:7;14460:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;14531:7;14515:34;;;14540:8;14515:34;;;;;;:::i;:::-;;;;;;;;14375:182:::0;;:::o;7457:29::-;;;;;;;;;;;;;:::o;13981:386::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14119:12:::1;14101:15;:30;;;;14161:13;14142:16;:32;;;;14202:11;14185:14;:28;;;;14277:14;;14258:16;;14240:15;;:34;;;;:::i;:::-;:51;;;;:::i;:::-;14224:13;:67;;;;14327:2;14310:13;;:19;;14302:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13981:386:::0;;;:::o;12335:284::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12457:4:::1;12451;12447:1;12431:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;12430:31;;;;:::i;:::-;12420:6;:41;;12412:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;12549:6;12539;:17;;;;:::i;:::-;12521:15;:35;;;;12572:39;12595:15;;12572:39;;;;;;:::i;:::-;;;;;;;;12335:284:::0;:::o;12627:198::-;12714:15;;;;;;;;;;;12702:27;;:10;:27;;;12694:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12810:6;12798:9;:19;;;;:::i;:::-;12777:18;:40;;;;12627:198;:::o;8022:32::-;;;;:::o;7730:27::-;;;;:::o;11390:274::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11510:4:::1;11504;11500:1;11484:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;11483:31;;;;:::i;:::-;11473:6;:41;;11465:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;11598:6;11588;:17;;;;:::i;:::-;11572:13;:33;;;;11621:35;11642:13;;11621:35;;;;;;:::i;:::-;;;;;;;;11390:274:::0;:::o;2576:151::-;2665:7;2692:11;:18;2704:5;2692:18;;;;;;;;;;;;;;;:27;2711:7;2692:27;;;;;;;;;;;;;;;;2685:34;;2576:151;;;;:::o;7378:33::-;;;;:::o;7495:37::-;;;;:::o;7800:30::-;;;;:::o;6020:244::-;5785:12;:10;:12::i;:::-;5775:22;;:6;;;;;;;;;;;:22;;;5767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6129:1:::1;6109:22;;:8;:22;;;;6101:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6219:8;6190:38;;6211:6;;;;;;;;;;;6190:38;;;;;;;;;;;;6248:8;6239:6;;:17;;;;;;;;;;;;;;;;;;6020:244:::0;:::o;8101:31::-;;;;:::o;13357:231::-;13403:12;13446:15;;;;;;;;;;;13434:27;;:10;:27;;;13426:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13530:10;13522:24;;13554:21;13522:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13509:71;;;;;13392:196;13357:231::o;7946:31::-;;;;:::o;7572:29::-;;;;:::o;260:98::-;313:7;340:10;333:17;;260:98;:::o;4941:380::-;5094:1;5077:19;;:5;:19;;;;5069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5175:1;5156:21;;:7;:21;;;;5148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5259:6;5229:11;:18;5241:5;5229:18;;;;;;;;;;;;;;;:27;5248:7;5229:27;;;;;;;;;;;;;;;:36;;;;5297:7;5281:32;;5290:5;5281:32;;;5306:6;5281:32;;;;;;:::i;:::-;;;;;;;;4941:380;;;:::o;14567:3390::-;14683:1;14667:18;;:4;:18;;;;14659:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14760:1;14746:16;;:2;:16;;;;14738:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14830:1;14821:6;:10;14813:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14883:14;;;;;;;;;;;14880:1224;;;14925:7;:5;:7::i;:::-;14917:15;;:4;:15;;;;:32;;;;;14942:7;:5;:7::i;:::-;14936:13;;:2;:13;;;;14917:32;:52;;;;;14967:1;14953:16;;:2;:16;;;;14917:52;:77;;;;;14987:6;14973:21;;:2;:21;;;;14917:77;14913:1180;;;15018:13;;;;;;;;;;;15014:245;;15063:31;:37;15095:4;15063:37;;;;;;;;;;;;;;;;;;;;;;;;;:76;;;;15104:31;:35;15136:2;15104:35;;;;;;;;;;;;;;;;;;;;;;;;;15063:76;15055:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15205:7;:5;:7::i;:::-;15197:15;;:4;:15;;;15189:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;15014:245;15309:25;:31;15335:4;15309:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;15345:31;:35;15377:2;15345:35;;;;;;;;;;;;;;;;;;;;;;;;;15344:36;15309:71;15305:773;;;15423:12;;15413:6;:22;;15405:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;15537:15;;15520:13;15530:2;15520:9;:13::i;:::-;15511:6;:22;;;;:::i;:::-;:41;;15503:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;15305:773;;;15657:25;:29;15683:2;15657:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;15691:31;:37;15723:4;15691:37;;;;;;;;;;;;;;;;;;;;;;;;;15690:38;15657:71;15653:425;;;15771:13;;15761:6;:23;;15753:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;15653:425;;;15879:31;:35;15911:2;15879:35;;;;;;;;;;;;;;;;;;;;;;;;;15878:36;:78;;;;;15919:31;:37;15951:4;15919:37;;;;;;;;;;;;;;;;;;;;;;;;;15918:38;15878:78;15874:204;;;16014:15;;15997:13;16007:2;15997:9;:13::i;:::-;15988:6;:22;;;;:::i;:::-;:41;;15980:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;15874:204;15653:425;15305:773;14913:1180;14880:1224;16116:28;16147:24;16165:4;16147:9;:24::i;:::-;16116:55;;16184:12;16223:18;;16199:20;:42;;16184:57;;16257:7;:22;;;;;16268:11;;;;;;;;;;;16257:22;:35;;;;;16284:8;;;;;;;;;;;16283:9;16257:35;:71;;;;;16297:25;:31;16323:4;16297:31;;;;;;;;;;;;;;;;;;;;;;;;;16296:32;16257:71;:101;;;;;16333:19;:25;16353:4;16333:25;;;;;;;;;;;;;;;;;;;;;;;;;16332:26;16257:101;:129;;;;;16363:19;:23;16383:2;16363:23;;;;;;;;;;;;;;;;;;;;;;;;;16362:24;16257:129;16254:236;;;16414:4;16403:8;;:15;;;;;;;;;;;;;;;;;;16435:10;:8;:10::i;:::-;16473:5;16462:8;;:16;;;;;;;;;;;;;;;;;;16254:236;16502:12;16517:4;16502:19;;16620;:25;16640:4;16620:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;16649:19;:23;16669:2;16649:23;;;;;;;;;;;;;;;;;;;;;;;;;16620:52;16617:99;;;16699:5;16689:15;;16617:99;16728:12;16755:21;16858:7;:31;;;;;16888:1;16869:18;;:20;16858:31;:68;;;;;16907:18;;16894:12;:31;16858:68;16855:1049;;;16980:25;:29;17006:2;16980:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;17029:1;17013:13;;:17;16980:50;16976:753;;;17081:3;17066:13;;17057:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;17050:34;;17151:13;;17132:16;;17125:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;17103:18;;:61;;;;;;;:::i;:::-;;;;;;;;17229:13;;17211:15;;17204:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;17183:17;;:59;;;;;;;:::i;:::-;;;;;;;;17305:13;;17288:14;;17281:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;17261:16;;:57;;;;;;;:::i;:::-;;;;;;;;16976:753;;;17379:25;:31;17405:4;17379:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;17429:1;17414:12;;:16;17379:51;17376:353;;;17482:3;17467:12;;17458:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;17451:34;;17551:12;;17533:15;;17526:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;17504:18;;:59;;;;;;;:::i;:::-;;;;;;;;17627:12;;17610:14;;17603:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;17582:17;;:57;;;;;;;:::i;:::-;;;;;;;;17701:12;;17685:13;;17678:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;17658:16;;:55;;;;;;;:::i;:::-;;;;;;;;17376:353;16976:753;17767:1;17760:4;:8;17757:89;;;17788:42;17804:4;17818;17825;17788:15;:42::i;:::-;17757:89;17879:13;17872:4;:20;;;;:::i;:::-;17862:30;;;;;:::i;:::-;;;16855:1049;17916:33;17932:4;17938:2;17942:6;17916:15;:33::i;:::-;14646:3311;;;;;14567:3390;;;:::o;18818:240::-;18935:5;18901:25;:31;18927:4;18901:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18953;18980:4;18986:5;18953:26;:39::i;:::-;19044:5;19010:40;;19038:4;19010:40;;;;;;;;;;;;18818:240;;:::o;20169:1413::-;20208:23;20234:24;20252:4;20234:9;:24::i;:::-;20208:50;;20269:25;20338:16;;20318:17;;20297:18;;:38;;;;:::i;:::-;:57;;;;:::i;:::-;20269:85;;20389:1;20370:15;:20;:46;;;;20415:1;20394:17;:22;20370:46;20367:60;;;20419:7;;;;20367:60;20481:1;20460:18;;:22;;;;:::i;:::-;20442:15;:40;20439:111;;;20537:1;20516:18;;:22;;;;:::i;:::-;20498:40;;20439:111;20562:12;20636:23;20721:1;20701:17;20680:18;;20662:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;20636:86;;20735:51;20770:15;20752;:33;;;;:::i;:::-;20735:16;:51::i;:::-;20799:18;20820:21;20799:42;;20852:23;20878:10;20852:36;;20901:22;21000:1;20981:18;;:20;;;;:::i;:::-;20960:17;:42;;;;:::i;:::-;20939:17;;20926:10;:30;;;;:::i;:::-;:77;;;;:::i;:::-;20901:102;;21014:21;21111:1;21092:18;;:20;;;;:::i;:::-;21071:17;:42;;;;:::i;:::-;21051:16;;21038:10;:29;;;;:::i;:::-;:76;;;;:::i;:::-;21014:100;;21163:13;21146:14;:30;;;;:::i;:::-;21127:49;;;;;:::i;:::-;;;21210:1;21189:18;:22;;;;21242:1;21222:17;:21;;;;21273:1;21254:16;:20;;;;21308:1;21290:15;:19;:42;;;;;21331:1;21313:15;:19;21290:42;21287:119;;;21348:46;21361:15;21378;21348:12;:46::i;:::-;21287:119;21439:14;;;;;;;;;;;21431:28;;21467:13;21431:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21418:67;;;;;21519:15;;;;;;;;;;;21511:29;;21548:21;21511:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21498:76;;;;;20197:1385;;;;;;;;20169:1413;:::o;4032:602::-;4190:1;4172:20;;:6;:20;;;;4164:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4274:1;4253:23;;:9;:23;;;;4245:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4329:21;4353:9;:17;4363:6;4353:17;;;;;;;;;;;;;;;;4329:41;;4406:6;4389:13;:23;;4381:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;4519:6;4503:13;:22;4483:9;:17;4493:6;4483:17;;;;;;;;;;;;;;;:42;;;;4567:6;4543:9;:20;4553:9;4543:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4608:9;4591:35;;4600:6;4591:35;;;4619:6;4591:35;;;;;;:::i;:::-;;;;;;;;4153:481;4032:602;;;:::o;11845:207::-;11975:10;11933:31;:39;11965:6;11933:39;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;12001:43;12025:6;12033:10;12001:43;;;;;;;:::i;:::-;;;;;;;;11845:207;;:::o;17965:591::-;18093:21;18131:1;18117:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18093:40;;18162:4;18144;18149:1;18144:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18188:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18178:4;18183:1;18178:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;18223:62;18240:4;18255:15;18273:11;18223:8;:62::i;:::-;18324:15;:66;;;18405:11;18431:1;18475:4;18502;18522:15;18324:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18020:536;17965:591;:::o;19066:522::-;19214:62;19231:4;19246:15;19264:11;19214:8;:62::i;:::-;19319:15;:31;;;19358:9;19391:4;19411:11;19437:1;19480;19531:7;:5;:7::i;:::-;19554:15;19319:261;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19066:522;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:144::-;4243:9;4276:37;4307:5;4276:37;:::i;:::-;4263:50;;4175:144;;;:::o;4325:167::-;4430:55;4479:5;4430:55;:::i;:::-;4425:3;4418:68;4325:167;;:::o;4498:258::-;4609:4;4647:2;4636:9;4632:18;4624:26;;4660:89;4746:1;4735:9;4731:17;4722:6;4660:89;:::i;:::-;4498:258;;;;:::o;4762:118::-;4849:24;4867:5;4849:24;:::i;:::-;4844:3;4837:37;4762:118;;:::o;4886:222::-;4979:4;5017:2;5006:9;5002:18;4994:26;;5030:71;5098:1;5087:9;5083:17;5074:6;5030:71;:::i;:::-;4886:222;;;;:::o;5114:619::-;5191:6;5199;5207;5256:2;5244:9;5235:7;5231:23;5227:32;5224:119;;;5262:79;;:::i;:::-;5224:119;5382:1;5407:53;5452:7;5443:6;5432:9;5428:22;5407:53;:::i;:::-;5397:63;;5353:117;5509:2;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5480:118;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5114:619;;;;;:::o;5739:329::-;5798:6;5847:2;5835:9;5826:7;5822:23;5818:32;5815:119;;;5853:79;;:::i;:::-;5815:119;5973:1;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5944:117;5739:329;;;;:::o;6074:86::-;6109:7;6149:4;6142:5;6138:16;6127:27;;6074:86;;;:::o;6166:112::-;6249:22;6265:5;6249:22;:::i;:::-;6244:3;6237:35;6166:112;;:::o;6284:214::-;6373:4;6411:2;6400:9;6396:18;6388:26;;6424:67;6488:1;6477:9;6473:17;6464:6;6424:67;:::i;:::-;6284:214;;;;:::o;6504:118::-;6591:24;6609:5;6591:24;:::i;:::-;6586:3;6579:37;6504:118;;:::o;6628:222::-;6721:4;6759:2;6748:9;6744:18;6736:26;;6772:71;6840:1;6829:9;6825:17;6816:6;6772:71;:::i;:::-;6628:222;;;;:::o;6856:116::-;6926:21;6941:5;6926:21;:::i;:::-;6919:5;6916:32;6906:60;;6962:1;6959;6952:12;6906:60;6856:116;:::o;6978:133::-;7021:5;7059:6;7046:20;7037:29;;7075:30;7099:5;7075:30;:::i;:::-;6978:133;;;;:::o;7117:468::-;7182:6;7190;7239:2;7227:9;7218:7;7214:23;7210:32;7207:119;;;7245:79;;:::i;:::-;7207:119;7365:1;7390:50;7432:7;7423:6;7412:9;7408:22;7390:50;:::i;:::-;7380:60;;7336:114;7489:2;7515:53;7560:7;7551:6;7540:9;7536:22;7515:53;:::i;:::-;7505:63;;7460:118;7117:468;;;;;:::o;7591:::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:50;8034:7;8025:6;8014:9;8010:22;7992:50;:::i;:::-;7982:60;;7937:115;7591:468;;;;;:::o;8065:619::-;8142:6;8150;8158;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8333:1;8358:53;8403:7;8394:6;8383:9;8379:22;8358:53;:::i;:::-;8348:63;;8304:117;8460:2;8486:53;8531:7;8522:6;8511:9;8507:22;8486:53;:::i;:::-;8476:63;;8431:118;8588:2;8614:53;8659:7;8650:6;8639:9;8635:22;8614:53;:::i;:::-;8604:63;;8559:118;8065:619;;;;;:::o;8690:474::-;8758:6;8766;8815:2;8803:9;8794:7;8790:23;8786:32;8783:119;;;8821:79;;:::i;:::-;8783:119;8941:1;8966:53;9011:7;9002:6;8991:9;8987:22;8966:53;:::i;:::-;8956:63;;8912:117;9068:2;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9039:118;8690:474;;;;;:::o;9170:180::-;9218:77;9215:1;9208:88;9315:4;9312:1;9305:15;9339:4;9336:1;9329:15;9356:320;9400:6;9437:1;9431:4;9427:12;9417:22;;9484:1;9478:4;9474:12;9505:18;9495:81;;9561:4;9553:6;9549:17;9539:27;;9495:81;9623:2;9615:6;9612:14;9592:18;9589:38;9586:84;;;9642:18;;:::i;:::-;9586:84;9407:269;9356:320;;;:::o;9682:227::-;9822:34;9818:1;9810:6;9806:14;9799:58;9891:10;9886:2;9878:6;9874:15;9867:35;9682:227;:::o;9915:366::-;10057:3;10078:67;10142:2;10137:3;10078:67;:::i;:::-;10071:74;;10154:93;10243:3;10154:93;:::i;:::-;10272:2;10267:3;10263:12;10256:19;;9915:366;;;:::o;10287:419::-;10453:4;10491:2;10480:9;10476:18;10468:26;;10540:9;10534:4;10530:20;10526:1;10515:9;10511:17;10504:47;10568:131;10694:4;10568:131;:::i;:::-;10560:139;;10287:419;;;:::o;10712:182::-;10852:34;10848:1;10840:6;10836:14;10829:58;10712:182;:::o;10900:366::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:419::-;11438:4;11476:2;11465:9;11461:18;11453:26;;11525:9;11519:4;11515:20;11511:1;11500:9;11496:17;11489:47;11553:131;11679:4;11553:131;:::i;:::-;11545:139;;11272:419;;;:::o;11697:180::-;11745:77;11742:1;11735:88;11842:4;11839:1;11832:15;11866:4;11863:1;11856:15;11883:348;11923:7;11946:20;11964:1;11946:20;:::i;:::-;11941:25;;11980:20;11998:1;11980:20;:::i;:::-;11975:25;;12168:1;12100:66;12096:74;12093:1;12090:81;12085:1;12078:9;12071:17;12067:105;12064:131;;;12175:18;;:::i;:::-;12064:131;12223:1;12220;12216:9;12205:20;;11883:348;;;;:::o;12237:180::-;12285:77;12282:1;12275:88;12382:4;12379:1;12372:15;12406:4;12403:1;12396:15;12423:185;12463:1;12480:20;12498:1;12480:20;:::i;:::-;12475:25;;12514:20;12532:1;12514:20;:::i;:::-;12509:25;;12553:1;12543:35;;12558:18;;:::i;:::-;12543:35;12600:1;12597;12593:9;12588:14;;12423:185;;;;:::o;12614:228::-;12754:34;12750:1;12742:6;12738:14;12731:58;12823:11;12818:2;12810:6;12806:15;12799:36;12614:228;:::o;12848:366::-;12990:3;13011:67;13075:2;13070:3;13011:67;:::i;:::-;13004:74;;13087:93;13176:3;13087:93;:::i;:::-;13205:2;13200:3;13196:12;13189:19;;12848:366;;;:::o;13220:419::-;13386:4;13424:2;13413:9;13409:18;13401:26;;13473:9;13467:4;13463:20;13459:1;13448:9;13444:17;13437:47;13501:131;13627:4;13501:131;:::i;:::-;13493:139;;13220:419;;;:::o;13645:305::-;13685:3;13704:20;13722:1;13704:20;:::i;:::-;13699:25;;13738:20;13756:1;13738:20;:::i;:::-;13733:25;;13892:1;13824:66;13820:74;13817:1;13814:81;13811:107;;;13898:18;;:::i;:::-;13811:107;13942:1;13939;13935:9;13928:16;;13645:305;;;;:::o;13956:174::-;14096:26;14092:1;14084:6;14080:14;14073:50;13956:174;:::o;14136:366::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:419::-;14674:4;14712:2;14701:9;14697:18;14689:26;;14761:9;14755:4;14751:20;14747:1;14736:9;14732:17;14725:47;14789:131;14915:4;14789:131;:::i;:::-;14781:139;;14508:419;;;:::o;14933:320::-;15048:4;15086:2;15075:9;15071:18;15063:26;;15099:65;15161:1;15150:9;15146:17;15137:6;15099:65;:::i;:::-;15174:72;15242:2;15231:9;15227:18;15218:6;15174:72;:::i;:::-;14933:320;;;;;:::o;15259:223::-;15399:34;15395:1;15387:6;15383:14;15376:58;15468:6;15463:2;15455:6;15451:15;15444:31;15259:223;:::o;15488:366::-;15630:3;15651:67;15715:2;15710:3;15651:67;:::i;:::-;15644:74;;15727:93;15816:3;15727:93;:::i;:::-;15845:2;15840:3;15836:12;15829:19;;15488:366;;;:::o;15860:419::-;16026:4;16064:2;16053:9;16049:18;16041:26;;16113:9;16107:4;16103:20;16099:1;16088:9;16084:17;16077:47;16141:131;16267:4;16141:131;:::i;:::-;16133:139;;15860:419;;;:::o;16285:226::-;16425:34;16421:1;16413:6;16409:14;16402:58;16494:9;16489:2;16481:6;16477:15;16470:34;16285:226;:::o;16517:366::-;16659:3;16680:67;16744:2;16739:3;16680:67;:::i;:::-;16673:74;;16756:93;16845:3;16756:93;:::i;:::-;16874:2;16869:3;16865:12;16858:19;;16517:366;;;:::o;16889:419::-;17055:4;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;16889:419;;;:::o;17314:175::-;17454:27;17450:1;17442:6;17438:14;17431:51;17314:175;:::o;17495:366::-;17637:3;17658:67;17722:2;17717:3;17658:67;:::i;:::-;17651:74;;17734:93;17823:3;17734:93;:::i;:::-;17852:2;17847:3;17843:12;17836:19;;17495:366;;;:::o;17867:419::-;18033:4;18071:2;18060:9;18056:18;18048:26;;18120:9;18114:4;18110:20;18106:1;18095:9;18091:17;18084:47;18148:131;18274:4;18148:131;:::i;:::-;18140:139;;17867:419;;;:::o;18292:176::-;18432:28;18428:1;18420:6;18416:14;18409:52;18292:176;:::o;18474:366::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:419::-;19012:4;19050:2;19039:9;19035:18;19027:26;;19099:9;19093:4;19089:20;19085:1;19074:9;19070:17;19063:47;19127:131;19253:4;19127:131;:::i;:::-;19119:139;;18846:419;;;:::o;19271:220::-;19411:34;19407:1;19399:6;19395:14;19388:58;19480:3;19475:2;19467:6;19463:15;19456:28;19271:220;:::o;19497:366::-;19639:3;19660:67;19724:2;19719:3;19660:67;:::i;:::-;19653:74;;19736:93;19825:3;19736:93;:::i;:::-;19854:2;19849:3;19845:12;19838:19;;19497:366;;;:::o;19869:419::-;20035:4;20073:2;20062:9;20058:18;20050:26;;20122:9;20116:4;20112:20;20108:1;20097:9;20093:17;20086:47;20150:131;20276:4;20150:131;:::i;:::-;20142:139;;19869:419;;;:::o;20294:143::-;20351:5;20382:6;20376:13;20367:22;;20398:33;20425:5;20398:33;:::i;:::-;20294:143;;;;:::o;20443:351::-;20513:6;20562:2;20550:9;20541:7;20537:23;20533:32;20530:119;;;20568:79;;:::i;:::-;20530:119;20688:1;20713:64;20769:7;20760:6;20749:9;20745:22;20713:64;:::i;:::-;20703:74;;20659:128;20443:351;;;;:::o;20800:332::-;20921:4;20959:2;20948:9;20944:18;20936:26;;20972:71;21040:1;21029:9;21025:17;21016:6;20972:71;:::i;:::-;21053:72;21121:2;21110:9;21106:18;21097:6;21053:72;:::i;:::-;20800:332;;;;;:::o;21138:137::-;21192:5;21223:6;21217:13;21208:22;;21239:30;21263:5;21239:30;:::i;:::-;21138:137;;;;:::o;21281:345::-;21348:6;21397:2;21385:9;21376:7;21372:23;21368:32;21365:119;;;21403:79;;:::i;:::-;21365:119;21523:1;21548:61;21601:7;21592:6;21581:9;21577:22;21548:61;:::i;:::-;21538:71;;21494:125;21281:345;;;;:::o;21632:222::-;21772:34;21768:1;21760:6;21756:14;21749:58;21841:5;21836:2;21828:6;21824:15;21817:30;21632:222;:::o;21860:366::-;22002:3;22023:67;22087:2;22082:3;22023:67;:::i;:::-;22016:74;;22099:93;22188:3;22099:93;:::i;:::-;22217:2;22212:3;22208:12;22201:19;;21860:366;;;:::o;22232:419::-;22398:4;22436:2;22425:9;22421:18;22413:26;;22485:9;22479:4;22475:20;22471:1;22460:9;22456:17;22449:47;22513:131;22639:4;22513:131;:::i;:::-;22505:139;;22232:419;;;:::o;22657:244::-;22797:34;22793:1;22785:6;22781:14;22774:58;22866:27;22861:2;22853:6;22849:15;22842:52;22657:244;:::o;22907:366::-;23049:3;23070:67;23134:2;23129:3;23070:67;:::i;:::-;23063:74;;23146:93;23235:3;23146:93;:::i;:::-;23264:2;23259:3;23255:12;23248:19;;22907:366;;;:::o;23279:419::-;23445:4;23483:2;23472:9;23468:18;23460:26;;23532:9;23526:4;23522:20;23518:1;23507:9;23503:17;23496:47;23560:131;23686:4;23560:131;:::i;:::-;23552:139;;23279:419;;;:::o;23704:224::-;23844:34;23840:1;23832:6;23828:14;23821:58;23913:7;23908:2;23900:6;23896:15;23889:32;23704:224;:::o;23934:366::-;24076:3;24097:67;24161:2;24156:3;24097:67;:::i;:::-;24090:74;;24173:93;24262:3;24173:93;:::i;:::-;24291:2;24286:3;24282:12;24275:19;;23934:366;;;:::o;24306:419::-;24472:4;24510:2;24499:9;24495:18;24487:26;;24559:9;24553:4;24549:20;24545:1;24534:9;24530:17;24523:47;24587:131;24713:4;24587:131;:::i;:::-;24579:139;;24306:419;;;:::o;24731:231::-;24871:34;24867:1;24859:6;24855:14;24848:58;24940:14;24935:2;24927:6;24923:15;24916:39;24731:231;:::o;24968:366::-;25110:3;25131:67;25195:2;25190:3;25131:67;:::i;:::-;25124:74;;25207:93;25296:3;25207:93;:::i;:::-;25325:2;25320:3;25316:12;25309:19;;24968:366;;;:::o;25340:419::-;25506:4;25544:2;25533:9;25529:18;25521:26;;25593:9;25587:4;25583:20;25579:1;25568:9;25564:17;25557:47;25621:131;25747:4;25621:131;:::i;:::-;25613:139;;25340:419;;;:::o;25765:229::-;25905:34;25901:1;25893:6;25889:14;25882:58;25974:12;25969:2;25961:6;25957:15;25950:37;25765:229;:::o;26000:366::-;26142:3;26163:67;26227:2;26222:3;26163:67;:::i;:::-;26156:74;;26239:93;26328:3;26239:93;:::i;:::-;26357:2;26352:3;26348:12;26341:19;;26000:366;;;:::o;26372:419::-;26538:4;26576:2;26565:9;26561:18;26553:26;;26625:9;26619:4;26615:20;26611:1;26600:9;26596:17;26589:47;26653:131;26779:4;26653:131;:::i;:::-;26645:139;;26372:419;;;:::o;26797:225::-;26937:34;26933:1;26925:6;26921:14;26914:58;27006:8;27001:2;26993:6;26989:15;26982:33;26797:225;:::o;27028:366::-;27170:3;27191:67;27255:2;27250:3;27191:67;:::i;:::-;27184:74;;27267:93;27356:3;27267:93;:::i;:::-;27385:2;27380:3;27376:12;27369:19;;27028:366;;;:::o;27400:419::-;27566:4;27604:2;27593:9;27589:18;27581:26;;27653:9;27647:4;27643:20;27639:1;27628:9;27624:17;27617:47;27681:131;27807:4;27681:131;:::i;:::-;27673:139;;27400:419;;;:::o;27825:147::-;27926:11;27963:3;27948:18;;27825:147;;;;:::o;27978:114::-;;:::o;28098:398::-;28257:3;28278:83;28359:1;28354:3;28278:83;:::i;:::-;28271:90;;28370:93;28459:3;28370:93;:::i;:::-;28488:1;28483:3;28479:11;28472:18;;28098:398;;;:::o;28502:379::-;28686:3;28708:147;28851:3;28708:147;:::i;:::-;28701:154;;28872:3;28865:10;;28502:379;;;:::o;28887:223::-;29027:34;29023:1;29015:6;29011:14;29004:58;29096:6;29091:2;29083:6;29079:15;29072:31;28887:223;:::o;29116:366::-;29258:3;29279:67;29343:2;29338:3;29279:67;:::i;:::-;29272:74;;29355:93;29444:3;29355:93;:::i;:::-;29473:2;29468:3;29464:12;29457:19;;29116:366;;;:::o;29488:419::-;29654:4;29692:2;29681:9;29677:18;29669:26;;29741:9;29735:4;29731:20;29727:1;29716:9;29712:17;29705:47;29769:131;29895:4;29769:131;:::i;:::-;29761:139;;29488:419;;;:::o;29913:221::-;30053:34;30049:1;30041:6;30037:14;30030:58;30122:4;30117:2;30109:6;30105:15;30098:29;29913:221;:::o;30140:366::-;30282:3;30303:67;30367:2;30362:3;30303:67;:::i;:::-;30296:74;;30379:93;30468:3;30379:93;:::i;:::-;30497:2;30492:3;30488:12;30481:19;;30140:366;;;:::o;30512:419::-;30678:4;30716:2;30705:9;30701:18;30693:26;;30765:9;30759:4;30755:20;30751:1;30740:9;30736:17;30729:47;30793:131;30919:4;30793:131;:::i;:::-;30785:139;;30512:419;;;:::o;30937:224::-;31077:34;31073:1;31065:6;31061:14;31054:58;31146:7;31141:2;31133:6;31129:15;31122:32;30937:224;:::o;31167:366::-;31309:3;31330:67;31394:2;31389:3;31330:67;:::i;:::-;31323:74;;31406:93;31495:3;31406:93;:::i;:::-;31524:2;31519:3;31515:12;31508:19;;31167:366;;;:::o;31539:419::-;31705:4;31743:2;31732:9;31728:18;31720:26;;31792:9;31786:4;31782:20;31778:1;31767:9;31763:17;31756:47;31820:131;31946:4;31820:131;:::i;:::-;31812:139;;31539:419;;;:::o;31964:222::-;32104:34;32100:1;32092:6;32088:14;32081:58;32173:5;32168:2;32160:6;32156:15;32149:30;31964:222;:::o;32192:366::-;32334:3;32355:67;32419:2;32414:3;32355:67;:::i;:::-;32348:74;;32431:93;32520:3;32431:93;:::i;:::-;32549:2;32544:3;32540:12;32533:19;;32192:366;;;:::o;32564:419::-;32730:4;32768:2;32757:9;32753:18;32745:26;;32817:9;32811:4;32807:20;32803:1;32792:9;32788:17;32781:47;32845:131;32971:4;32845:131;:::i;:::-;32837:139;;32564:419;;;:::o;32989:179::-;33129:31;33125:1;33117:6;33113:14;33106:55;32989:179;:::o;33174:366::-;33316:3;33337:67;33401:2;33396:3;33337:67;:::i;:::-;33330:74;;33413:93;33502:3;33413:93;:::i;:::-;33531:2;33526:3;33522:12;33515:19;;33174:366;;;:::o;33546:419::-;33712:4;33750:2;33739:9;33735:18;33727:26;;33799:9;33793:4;33789:20;33785:1;33774:9;33770:17;33763:47;33827:131;33953:4;33827:131;:::i;:::-;33819:139;;33546:419;;;:::o;33971:172::-;34111:24;34107:1;34099:6;34095:14;34088:48;33971:172;:::o;34149:366::-;34291:3;34312:67;34376:2;34371:3;34312:67;:::i;:::-;34305:74;;34388:93;34477:3;34388:93;:::i;:::-;34506:2;34501:3;34497:12;34490:19;;34149:366;;;:::o;34521:419::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34521:419;;;:::o;34946:172::-;35086:24;35082:1;35074:6;35070:14;35063:48;34946:172;:::o;35124:366::-;35266:3;35287:67;35351:2;35346:3;35287:67;:::i;:::-;35280:74;;35363:93;35452:3;35363:93;:::i;:::-;35481:2;35476:3;35472:12;35465:19;;35124:366;;;:::o;35496:419::-;35662:4;35700:2;35689:9;35685:18;35677:26;;35749:9;35743:4;35739:20;35735:1;35724:9;35720:17;35713:47;35777:131;35903:4;35777:131;:::i;:::-;35769:139;;35496:419;;;:::o;35921:227::-;36061:34;36057:1;36049:6;36045:14;36038:58;36130:10;36125:2;36117:6;36113:15;36106:35;35921:227;:::o;36154:366::-;36296:3;36317:67;36381:2;36376:3;36317:67;:::i;:::-;36310:74;;36393:93;36482:3;36393:93;:::i;:::-;36511:2;36506:3;36502:12;36495:19;;36154:366;;;:::o;36526:419::-;36692:4;36730:2;36719:9;36715:18;36707:26;;36779:9;36773:4;36769:20;36765:1;36754:9;36750:17;36743:47;36807:131;36933:4;36807:131;:::i;:::-;36799:139;;36526:419;;;:::o;36951:174::-;37091:26;37087:1;37079:6;37075:14;37068:50;36951:174;:::o;37131:366::-;37273:3;37294:67;37358:2;37353:3;37294:67;:::i;:::-;37287:74;;37370:93;37459:3;37370:93;:::i;:::-;37488:2;37483:3;37479:12;37472:19;;37131:366;;;:::o;37503:419::-;37669:4;37707:2;37696:9;37692:18;37684:26;;37756:9;37750:4;37746:20;37742:1;37731:9;37727:17;37720:47;37784:131;37910:4;37784:131;:::i;:::-;37776:139;;37503:419;;;:::o;37928:229::-;38068:34;38064:1;38056:6;38052:14;38045:58;38137:12;38132:2;38124:6;38120:15;38113:37;37928:229;:::o;38163:366::-;38305:3;38326:67;38390:2;38385:3;38326:67;:::i;:::-;38319:74;;38402:93;38491:3;38402:93;:::i;:::-;38520:2;38515:3;38511:12;38504:19;;38163:366;;;:::o;38535:419::-;38701:4;38739:2;38728:9;38724:18;38716:26;;38788:9;38782:4;38778:20;38774:1;38763:9;38759:17;38752:47;38816:131;38942:4;38816:131;:::i;:::-;38808:139;;38535:419;;;:::o;38960:191::-;39000:4;39020:20;39038:1;39020:20;:::i;:::-;39015:25;;39054:20;39072:1;39054:20;:::i;:::-;39049:25;;39093:1;39090;39087:8;39084:34;;;39098:18;;:::i;:::-;39084:34;39143:1;39140;39136:9;39128:17;;38960:191;;;;:::o;39157:225::-;39297:34;39293:1;39285:6;39281:14;39274:58;39366:8;39361:2;39353:6;39349:15;39342:33;39157:225;:::o;39388:366::-;39530:3;39551:67;39615:2;39610:3;39551:67;:::i;:::-;39544:74;;39627:93;39716:3;39627:93;:::i;:::-;39745:2;39740:3;39736:12;39729:19;;39388:366;;;:::o;39760:419::-;39926:4;39964:2;39953:9;39949:18;39941:26;;40013:9;40007:4;40003:20;39999:1;39988:9;39984:17;39977:47;40041:131;40167:4;40041:131;:::i;:::-;40033:139;;39760:419;;;:::o;40185:320::-;40300:4;40338:2;40327:9;40323:18;40315:26;;40351:71;40419:1;40408:9;40404:17;40395:6;40351:71;:::i;:::-;40432:66;40494:2;40483:9;40479:18;40470:6;40432:66;:::i;:::-;40185:320;;;;;:::o;40511:180::-;40559:77;40556:1;40549:88;40656:4;40653:1;40646:15;40680:4;40677:1;40670:15;40697:180;40745:77;40742:1;40735:88;40842:4;40839:1;40832:15;40866:4;40863:1;40856:15;40883:143;40940:5;40971:6;40965:13;40956:22;;40987:33;41014:5;40987:33;:::i;:::-;40883:143;;;;:::o;41032:351::-;41102:6;41151:2;41139:9;41130:7;41126:23;41122:32;41119:119;;;41157:79;;:::i;:::-;41119:119;41277:1;41302:64;41358:7;41349:6;41338:9;41334:22;41302:64;:::i;:::-;41292:74;;41248:128;41032:351;;;;:::o;41389:85::-;41434:7;41463:5;41452:16;;41389:85;;;:::o;41480:158::-;41538:9;41571:61;41589:42;41598:32;41624:5;41598:32;:::i;:::-;41589:42;:::i;:::-;41571:61;:::i;:::-;41558:74;;41480:158;;;:::o;41644:147::-;41739:45;41778:5;41739:45;:::i;:::-;41734:3;41727:58;41644:147;;:::o;41797:114::-;41864:6;41898:5;41892:12;41882:22;;41797:114;;;:::o;41917:184::-;42016:11;42050:6;42045:3;42038:19;42090:4;42085:3;42081:14;42066:29;;41917:184;;;;:::o;42107:132::-;42174:4;42197:3;42189:11;;42227:4;42222:3;42218:14;42210:22;;42107:132;;;:::o;42245:108::-;42322:24;42340:5;42322:24;:::i;:::-;42317:3;42310:37;42245:108;;:::o;42359:179::-;42428:10;42449:46;42491:3;42483:6;42449:46;:::i;:::-;42527:4;42522:3;42518:14;42504:28;;42359:179;;;;:::o;42544:113::-;42614:4;42646;42641:3;42637:14;42629:22;;42544:113;;;:::o;42693:732::-;42812:3;42841:54;42889:5;42841:54;:::i;:::-;42911:86;42990:6;42985:3;42911:86;:::i;:::-;42904:93;;43021:56;43071:5;43021:56;:::i;:::-;43100:7;43131:1;43116:284;43141:6;43138:1;43135:13;43116:284;;;43217:6;43211:13;43244:63;43303:3;43288:13;43244:63;:::i;:::-;43237:70;;43330:60;43383:6;43330:60;:::i;:::-;43320:70;;43176:224;43163:1;43160;43156:9;43151:14;;43116:284;;;43120:14;43416:3;43409:10;;42817:608;;;42693:732;;;;:::o;43431:831::-;43694:4;43732:3;43721:9;43717:19;43709:27;;43746:71;43814:1;43803:9;43799:17;43790:6;43746:71;:::i;:::-;43827:80;43903:2;43892:9;43888:18;43879:6;43827:80;:::i;:::-;43954:9;43948:4;43944:20;43939:2;43928:9;43924:18;43917:48;43982:108;44085:4;44076:6;43982:108;:::i;:::-;43974:116;;44100:72;44168:2;44157:9;44153:18;44144:6;44100:72;:::i;:::-;44182:73;44250:3;44239:9;44235:19;44226:6;44182:73;:::i;:::-;43431:831;;;;;;;;:::o;44268:807::-;44517:4;44555:3;44544:9;44540:19;44532:27;;44569:71;44637:1;44626:9;44622:17;44613:6;44569:71;:::i;:::-;44650:72;44718:2;44707:9;44703:18;44694:6;44650:72;:::i;:::-;44732:80;44808:2;44797:9;44793:18;44784:6;44732:80;:::i;:::-;44822;44898:2;44887:9;44883:18;44874:6;44822:80;:::i;:::-;44912:73;44980:3;44969:9;44965:19;44956:6;44912:73;:::i;:::-;44995;45063:3;45052:9;45048:19;45039:6;44995:73;:::i;:::-;44268:807;;;;;;;;;:::o;45081:663::-;45169:6;45177;45185;45234:2;45222:9;45213:7;45209:23;45205:32;45202:119;;;45240:79;;:::i;:::-;45202:119;45360:1;45385:64;45441:7;45432:6;45421:9;45417:22;45385:64;:::i;:::-;45375:74;;45331:128;45498:2;45524:64;45580:7;45571:6;45560:9;45556:22;45524:64;:::i;:::-;45514:74;;45469:129;45637:2;45663:64;45719:7;45710:6;45699:9;45695:22;45663:64;:::i;:::-;45653:74;;45608:129;45081:663;;;;;:::o

Swarm Source

ipfs://a1805006b0f757d4231c9055ad423aec0be230095ef73fa40b861a983ee8c988

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.