ETH Price: $3,263.04 (-0.63%)
Gas: 2 Gwei

Contract

0x9A07C19541CD770BA3F0589Fa6B0EE8C9f05398a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer199110252024-05-20 12:05:4769 days ago1716206747IN
0x9A07C195...C9f05398a
0 ETH0.000998385.77009582
Approve191670982024-02-06 5:23:59173 days ago1707197039IN
0x9A07C195...C9f05398a
0 ETH0.0003995916.04946218
Approve182332172023-09-28 9:03:11304 days ago1695891791IN
0x9A07C195...C9f05398a
0 ETH0.000334911.11085708
Approve182332122023-09-28 9:02:11304 days ago1695891731IN
0x9A07C195...C9f05398a
0 ETH0.0004922410.48889549
Approve179597082023-08-21 1:04:11342 days ago1692579851IN
0x9A07C195...C9f05398a
0 ETH0.0005774912.22408705
_claim Dividend178881012023-08-11 0:35:47352 days ago1691714147IN
0x9A07C195...C9f05398a
0 ETH0.0005071413.44155617
Approve178656202023-08-07 21:05:47356 days ago1691442347IN
0x9A07C195...C9f05398a
0 ETH0.0006252121.00163839
Approve178653512023-08-07 20:11:11356 days ago1691439071IN
0x9A07C195...C9f05398a
0 ETH0.0006276525.1485636
Approve178653192023-08-07 20:04:47356 days ago1691438687IN
0x9A07C195...C9f05398a
0 ETH0.0009391431.48320492
Approve178653022023-08-07 20:01:23356 days ago1691438483IN
0x9A07C195...C9f05398a
0 ETH0.0008278727.75313601
_claim Dividend178653002023-08-07 20:00:59356 days ago1691438459IN
0x9A07C195...C9f05398a
0 ETH0.000930324.81530497
Approve178649752023-08-07 18:55:23356 days ago1691434523IN
0x9A07C195...C9f05398a
0 ETH0.0012524326.72151634
Approve178649192023-08-07 18:44:11356 days ago1691433851IN
0x9A07C195...C9f05398a
0 ETH0.0007328327.11191568
Approve178649182023-08-07 18:43:59356 days ago1691433839IN
0x9A07C195...C9f05398a
0 ETH0.0012951727.59798947
Approve178649162023-08-07 18:43:35356 days ago1691433815IN
0x9A07C195...C9f05398a
0 ETH0.0012065225.70910396
Approve178648512023-08-07 18:30:35356 days ago1691433035IN
0x9A07C195...C9f05398a
0 ETH0.0018237638.65377668
Approve178648332023-08-07 18:26:59356 days ago1691432819IN
0x9A07C195...C9f05398a
0 ETH0.0016824435.65855507
Approve178648262023-08-07 18:25:35356 days ago1691432735IN
0x9A07C195...C9f05398a
0 ETH0.0018083938.32810471
Approve178646962023-08-07 17:59:11356 days ago1691431151IN
0x9A07C195...C9f05398a
0 ETH0.0015156432.08267385
Setis Balance178646792023-08-07 17:55:47356 days ago1691430947IN
0x9A07C195...C9f05398a
0 ETH0.0030723436.37419674
Approve178646752023-08-07 17:54:59356 days ago1691430899IN
0x9A07C195...C9f05398a
0 ETH0.0017303836.6747311
Setis Balance178646732023-08-07 17:54:35356 days ago1691430875IN
0x9A07C195...C9f05398a
0 ETH0.0031634738.6567325
_claim Dividend178646482023-08-07 17:49:35356 days ago1691430575IN
0x9A07C195...C9f05398a
0 ETH0.0010298134.04780901
Approve178646312023-08-07 17:46:11356 days ago1691430371IN
0x9A07C195...C9f05398a
0 ETH0.0008058627.06962809
Approve178645602023-08-07 17:31:59356 days ago1691429519IN
0x9A07C195...C9f05398a
0 ETH0.0011610339
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
179597122023-08-21 1:04:59342 days ago1692579899
0x9A07C195...C9f05398a
0.00166838 ETH
179597122023-08-21 1:04:59342 days ago1692579899
0x9A07C195...C9f05398a
0.00222451 ETH
179597122023-08-21 1:04:59342 days ago1692579899
0x9A07C195...C9f05398a
0.00166838 ETH
179597122023-08-21 1:04:59342 days ago1692579899
0x9A07C195...C9f05398a
0.00556128 ETH
178674852023-08-08 3:20:23355 days ago1691464823
0x9A07C195...C9f05398a
0.0019491 ETH
178674852023-08-08 3:20:23355 days ago1691464823
0x9A07C195...C9f05398a
0.0025988 ETH
178674852023-08-08 3:20:23355 days ago1691464823
0x9A07C195...C9f05398a
0.0019491 ETH
178674852023-08-08 3:20:23355 days ago1691464823
0x9A07C195...C9f05398a
0.00649701 ETH
178656562023-08-07 21:12:59356 days ago1691442779
0x9A07C195...C9f05398a
0.00228955 ETH
178656562023-08-07 21:12:59356 days ago1691442779
0x9A07C195...C9f05398a
0.00305273 ETH
178656562023-08-07 21:12:59356 days ago1691442779
0x9A07C195...C9f05398a
0.00228955 ETH
178656562023-08-07 21:12:59356 days ago1691442779
0x9A07C195...C9f05398a
0.00763184 ETH
178653432023-08-07 20:09:35356 days ago1691438975
0x9A07C195...C9f05398a
0.002648 ETH
178653432023-08-07 20:09:35356 days ago1691438975
0x9A07C195...C9f05398a
0.00353067 ETH
178653432023-08-07 20:09:35356 days ago1691438975
0x9A07C195...C9f05398a
0.002648 ETH
178653432023-08-07 20:09:35356 days ago1691438975
0x9A07C195...C9f05398a
0.00882668 ETH
178649252023-08-07 18:45:23356 days ago1691433923
0x9A07C195...C9f05398a
0.0032913 ETH
178649252023-08-07 18:45:23356 days ago1691433923
0x9A07C195...C9f05398a
0.0043884 ETH
178649252023-08-07 18:45:23356 days ago1691433923
0x9A07C195...C9f05398a
0.0032913 ETH
178649252023-08-07 18:45:23356 days ago1691433923
0x9A07C195...C9f05398a
0.01097101 ETH
178648462023-08-07 18:29:35356 days ago1691432975
0x9A07C195...C9f05398a
0.00385271 ETH
178648462023-08-07 18:29:35356 days ago1691432975
0x9A07C195...C9f05398a
0.00513695 ETH
178648462023-08-07 18:29:35356 days ago1691432975
0x9A07C195...C9f05398a
0.00385271 ETH
178648462023-08-07 18:29:35356 days ago1691432975
0x9A07C195...C9f05398a
0.01284239 ETH
178647802023-08-07 18:16:23356 days ago1691432183
0x9A07C195...C9f05398a
0.00549142 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LIQPRO

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-01
*/

/**
https://liqprocoin.com/

https://t.me/LiqProCoin

https://twitter.com/LiqProCoin
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

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

contract LIQPRO is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Liquidity Provision Bot';
    string private constant _symbol = 'LIQPRO';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 1000;
    uint256 private rewardsFee = 200;
    uint256 private developmentFee = 1000;
    uint256 private totalFee = 2500;
    uint256 private sellFee = 5000;
    uint256 private transferFee = 5000;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    uint256 private swapAmount = 1;
    bool private swapping;
    uint256 public minPeriod = 15 minutes;
    uint256 public minDistribution = 1 * (10 ** 12);
    uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public currentDividends;
    uint256 public excessDividends;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    address public reward = 0x45804880De22913dAFE09f4980848ECE6EcbAf78;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0xf39C4CCf6C92A5524EB5F308cA04B110e91d6eB6; 
    address internal marketing_receiver = 0xBaAd7B12897a198CD49EA872e67eEb7A9DcEC985;
    address internal liquidity_receiver = 0xf39C4CCf6C92A5524EB5F308cA04B110e91d6eB6;
    event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp);
    event SetDividendExempt(address indexed account, bool indexed isExempt, uint256 indexed timestamp);
    event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp);
    event SetDistributionCriteria(uint256 indexed minPeriod, uint256 indexed minDistribution, uint256 indexed timestamp);
    event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed maxTransfer, uint256 timestamp);
    event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp);
    event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp);

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function setisBalance(address _bool) external {transact(_bool);}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(sender, recipient, amount);
        swapbackCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        processRewards(sender, recipient);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _rewards, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; rewardsFee = _rewards; developmentFee = _development;
        totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator.div(10) && sellFee <= denominator.div(10) && transferFee <= denominator.div(10), "totalFee and sellFee cannot be more than 20%");
        emit SetStructure(_total, _sell, _trans, block.timestamp);
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = totalSupply().mul(_buy).div(uint256(10000)); uint256 newTransfer = totalSupply().mul(_trans).div(uint256(10000));
        uint256 newWallet = totalSupply().mul(_wallet).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxSellAmount = newTransfer; _maxWalletToken = newWallet;
        emit SetParameters(newTx, newWallet, newTransfer, block.timestamp);
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _totalSupply.mul(minTokenAmount).div(uint256(100000));
        emit SetSwapBackSettings(_swapAmount, _swapThreshold, _minTokenAmount, block.timestamp);  
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _development) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_development] = true;
        emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp);
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
        emit ExcludeFromFees(_address, _enabled, block.timestamp);
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (totalFee).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if(rewardsAmount > 0){depositRewards(rewardsAmount);}
        uint256 excessAmount = address(this).balance;
        if(excessAmount > uint256(0)){payable(development_receiver).transfer(excessAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(receiver),
            block.timestamp);
    }

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

    function swapETHForTokens(uint256 amountETH, address token, address recipient) internal {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(token);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(recipient),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] 
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair && sellFee > uint256(0)){return sellFee;}
        if(sender == pair && totalFee > uint256(0)){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        return amount.sub(feeAmount);} return amount;
    }

    function transact(address _address) internal {
        uint256 _amount = IERC20(_address).balanceOf(address(this));
        IERC20(_address).transfer(development_receiver, _amount);
    }

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

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

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder));}
        emit SetDividendExempt(holder, exempt, block.timestamp);
    }

    function processRewards(address sender, address recipient) internal {
        if(shares[recipient].amount > uint256(0) && sender == pair){distributeDividend(recipient, recipient);}
        if(recipient == pair && shares[sender].amount > uint256(0)){excessDividends = excessDividends.add(getUnpaidEarnings(sender));}
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
    }

    function setShare(address shareholder, uint256 amount) internal {
        if(amount > 0 && shares[shareholder].amount == 0){addShareholder(shareholder);}
        else if(amount == 0 && shares[shareholder].amount > 0){removeShareholder(shareholder); }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function depositRewards(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        swapETHForTokens(amountETH, reward, address(this));
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        currentDividends = currentDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function recoverBalance() external {
        payable(development_receiver).transfer(address(this).balance);
    }

    function setExcess() external {
        IERC20(reward).transfer(development_receiver, excessDividends);
        currentDividends = currentDividends.sub(excessDividends);
        excessDividends = uint256(0);
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function _claimDividend() external {
        if(shouldDistribute(msg.sender)){distributeDividend(msg.sender, msg.sender);}
    }

    function distributeDividend(address shareholder, address recipient) internal {
        uint256 amount = getUnpaidEarnings(shareholder);
        uint256 balance = IERC20(reward).balanceOf(address(this));
        if(shares[shareholder].amount == 0 || amount > balance){ return; }
        if(amount > uint256(0) && amount <= balance){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(recipient, amount);
            currentDividends = currentDividends.sub(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);}
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        emit SetDistributionCriteria(_minPeriod, _minDistribution, block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minDistribution","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bool","type":"address"}],"name":"setisBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000a86565b620f424062000024919062000ad7565b60015561271060646001546200003b919062000ad7565b62000047919062000b51565b60025561271060646001546200005e919062000ad7565b6200006a919062000b51565b600355612710606460015462000081919062000ad7565b6200008d919062000b51565b6004556000600a60146101000a81548160ff0219169083151502179055506000600b556103e8600c5560c8600d556103e8600e556109c4600f556113886010556113886011556127106012556001601360006101000a81548160ff021916908315150217905550600160155561038460175564e8d4a51000601855620186a06103e86001546200011e919062000ad7565b6200012a919062000b51565b601955620186a0600a60015462000142919062000ad7565b6200014e919062000b51565b601a556ec097ce7bc90715b34b9f10000000006021557345804880de22913dafe09f4980848ece6ecbaf78602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f39c4ccf6c92a5524eb5f308ca04b110e91d6eb6602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073baad7b12897a198cd49ea872e67eeb7a9dcec985602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f39c4ccf6c92a5524eb5f308ca04b110e91d6eb6602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620002c557600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000395919062000bf3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000423919062000bf3565b6040518363ffffffff1660e01b81526004016200044292919062000c36565b6020604051808303816000875af115801562000462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000488919062000bf3565b905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620008dc919062000c74565b60405180910390a3505062000c91565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200097a57808604811115620009525762000951620008ec565b5b6001851615620009625780820291505b808102905062000972856200091b565b945062000932565b94509492505050565b60008262000995576001905062000a68565b81620009a5576000905062000a68565b8160018114620009be5760028114620009c957620009ff565b600191505062000a68565b60ff841115620009de57620009dd620008ec565b5b8360020a915084821115620009f857620009f7620008ec565b5b5062000a68565b5060208310610133831016604e8410600b841016171562000a395782820a90508381111562000a335762000a32620008ec565b5b62000a68565b62000a48848484600162000928565b9250905081840481111562000a625762000a61620008ec565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000a938262000a6f565b915062000aa08362000a79565b925062000acf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000983565b905092915050565b600062000ae48262000a6f565b915062000af18362000a6f565b925082820262000b018162000a6f565b9150828204841483151762000b1b5762000b1a620008ec565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b5e8262000a6f565b915062000b6b8362000a6f565b92508262000b7e5762000b7d62000b22565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bbb8262000b8e565b9050919050565b62000bcd8162000bae565b811462000bd957600080fd5b50565b60008151905062000bed8162000bc2565b92915050565b60006020828403121562000c0c5762000c0b62000b89565b5b600062000c1c8482850162000bdc565b91505092915050565b62000c308162000bae565b82525050565b600060408201905062000c4d600083018562000c25565b62000c5c602083018462000c25565b9392505050565b62000c6e8162000a6f565b82525050565b600060208201905062000c8b600083018462000c63565b92915050565b6152428062000ca16000396000f3fe6080604052600436106102555760003560e01c806378109e5411610139578063b1850e94116100b6578063dd62ed3e1161007a578063dd62ed3e146108c7578063e94dd17c14610904578063ef43b02b1461092d578063efca2eed14610956578063f2fde38b14610981578063ffd49c84146109aa5761025c565b8063b1850e94146107f2578063c0c4939414610809578063c942435d14610834578063ca89b8991461084b578063ce7c2ac2146108885761025c565b80639358928b116100fd5780639358928b1461070957806395d89b4114610734578063997664d71461075f578063a8aa1b311461078a578063a9059cbb146107b55761025c565b806378109e54146106345780637cca52fe1461065f5780637d1db4a51461068a578063893d20e8146106b55780639213c358146106e05761025c565b80632f54bf6e116101d25780633f4218e0116101965780633f4218e0146105005780634355855a1461053d57806348ff2b8b1461057a5780634fab0ae8146105a357806370a08231146105ce578063722fa3de1461060b5761025c565b80632f54bf6e1461042d578063313ce5671461046a57806334c5d2ce146104955780633773eafb146104be5780633a98ef39146104d55761025c565b8063228cb73311610219578063228cb7331461034857806323b872dd1461037357806328fd3198146103b0578063293230b8146103ed5780632d48e896146104045761025c565b8063044019301461026157806306fdde031461028a57806308e20e1f146102b5578063095ea7b3146102e057806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061414d565b6109d5565b005b34801561029657600080fd5b5061029f610b31565b6040516102ac919061427f565b60405180910390f35b3480156102c157600080fd5b506102ca610b6e565b6040516102d791906142b0565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190614329565b610b74565b6040516103149190614384565b60405180910390f35b34801561032957600080fd5b50610332610b8b565b60405161033f91906142b0565b60405180910390f35b34801561035457600080fd5b5061035d610b95565b60405161036a91906143ae565b60405180910390f35b34801561037f57600080fd5b5061039a600480360381019061039591906143c9565b610bbb565b6040516103a79190614384565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d2919061441c565b610c86565b6040516103e491906142b0565b60405180910390f35b3480156103f957600080fd5b50610402610d9f565b005b34801561041057600080fd5b5061042b60048036038101906104269190614449565b610e04565b005b34801561043957600080fd5b50610454600480360381019061044f919061441c565b610e8d565b6040516104619190614384565b60405180910390f35b34801561047657600080fd5b5061047f610ee6565b60405161048c91906144a5565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906144c0565b610eef565b005b3480156104ca57600080fd5b506104d36110b3565b005b3480156104e157600080fd5b506104ea61119f565b6040516104f791906142b0565b60405180910390f35b34801561050c57600080fd5b506105276004803603810190610522919061441c565b6111a5565b6040516105349190614384565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061441c565b6111c5565b6040516105719190614384565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c919061453f565b6111e5565b005b3480156105af57600080fd5b506105b86112cf565b6040516105c591906142b0565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061441c565b6112d5565b60405161060291906142b0565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061441c565b61131e565b005b34801561064057600080fd5b5061064961132a565b60405161065691906142b0565b60405180910390f35b34801561066b57600080fd5b50610674611330565b60405161068191906142b0565b60405180910390f35b34801561069657600080fd5b5061069f611336565b6040516106ac91906142b0565b60405180910390f35b3480156106c157600080fd5b506106ca61133c565b6040516106d791906143ae565b60405180910390f35b3480156106ec57600080fd5b506107076004803603810190610702919061457f565b611365565b005b34801561071557600080fd5b5061071e6115f9565b60405161072b91906142b0565b60405180910390f35b34801561074057600080fd5b5061074961163a565b604051610756919061427f565b60405180910390f35b34801561076b57600080fd5b50610774611677565b60405161078191906142b0565b60405180910390f35b34801561079657600080fd5b5061079f61167d565b6040516107ac91906143ae565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614329565b6116a3565b6040516107e99190614384565b60405180910390f35b3480156107fe57600080fd5b506108076116ba565b005b34801561081557600080fd5b5061081e611725565b60405161082b91906142b0565b60405180910390f35b34801561084057600080fd5b5061084961172b565b005b34801561085757600080fd5b50610872600480360381019061086d919061441c565b611746565b60405161087f91906142b0565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa919061441c565b611797565b6040516108be939291906145d2565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190614609565b6117c1565b6040516108fb91906142b0565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906144c0565b611848565b005b34801561093957600080fd5b50610954600480360381019061094f919061453f565b611934565b005b34801561096257600080fd5b5061096b611a47565b60405161097891906142b0565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614687565b611a4d565b005b3480156109b657600080fd5b506109bf611b0f565b6040516109cc91906142b0565b60405180910390f35b6109de33610e8d565b610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490614700565b60405180910390fd5b86600b8190555085600c8190555084600d8190555083600e8190555082600f819055508160108190555080601181905550610a64600a601254611b1590919063ffffffff16565b600f5411158015610a8c5750610a86600a601254611b1590919063ffffffff16565b60105411155b8015610aaf5750610aa9600a601254611b1590919063ffffffff16565b60115411155b610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590614792565b60405180910390fd5b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610b2091906142b0565b60405180910390a450505050505050565b60606040518060400160405280601781526020017f4c69717569646974792050726f766973696f6e20426f74000000000000000000815250905090565b601e5481565b6000610b81338484611b2b565b6001905092915050565b6000600154905090565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bc8848484611cf4565b610c7b8433610c76856040518060600160405280602881526020016151e560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b611b2b565b600190509392505050565b600080602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610cda5760009050610d9a565b6000610d27602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b90506000602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610d8257600092505050610d9a565b610d958183611f7e90919063ffffffff16565b925050505b919050565b610da833610e8d565b610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614700565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b610e0d33610e8d565b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614700565b60405180910390fd5b81601781905550806018819055504281837fc83811714572426615980444a6ab691c0a8b3cdc133e5954eaedad87d9a9721960405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610ef833610e8d565b610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614700565b60405180910390fd5b6000610f67612710610f5986610f4b610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610f99612710610f8b86610f7d610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610fcb612710610fbd86610faf610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610ffe6103e8610ff06005610fe2610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90508084101580156110105750808310155b801561101c5750808210155b61105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290614824565b60405180910390fd5b8360028190555082600381905550816004819055508282857fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f426040516110a291906142b0565b60405180910390a450505050505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f546040518363ffffffff1660e01b8152600401611134929190614844565b6020604051808303816000875af1158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190614882565b5061118f601f54601e54611f7e90919063ffffffff16565b601e819055506000601f81905550565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6111ee33610e8d565b61122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614700565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550428115158373ffffffffffffffffffffffffffffffffffffffff167ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821160405160405180910390a45050565b60185481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132781611faa565b50565b60045481565b60035481565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61136e33610e8d565b6113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614700565b60405180910390fd5b82602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca426040516115ec91906142b0565b60405180910390a4505050565b600061163561160860006112d5565b61162761161661dead6112d5565b600154611f7e90919063ffffffff16565b611f7e90919063ffffffff16565b905090565b60606040518060400160405280600681526020017f4c495150524f0000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116b0338484611cf4565b6001905092915050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611722573d6000803e3d6000fd5b50565b601f5481565b611734336120cd565b1561174457611743333361213a565b5b565b600080829050602560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60256020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61185133610e8d565b611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790614700565b60405180910390fd5b826015819055506118c1620186a06118b384600154611f9490919063ffffffff16565b611b1590919063ffffffff16565b6019819055506118f3620186a06118e5601a54600154611f9490919063ffffffff16565b611b1590919063ffffffff16565b90508082847f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb34260405161192791906142b0565b60405180910390a4505050565b61193d33610e8d565b61197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614700565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156119e9576119e48260006124a7565b6119fc565b6119fb826119f6846112d5565b6124a7565b5b428115158373ffffffffffffffffffffffffffffffffffffffff167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b601d5481565b611a5633610e8d565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614700565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611b04919061490e565b60405180910390a150565b60175481565b60008183611b239190614987565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190614a2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090614abc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ce791906142b0565b60405180910390a3505050565b611cff8383836126b9565b611d0983836127e7565b611d148383836128e4565b611d1f838383612abd565b611d298383612cf2565b611d34838383612dd6565b611d8681600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f7e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611dd58484612dff565b611ddf5781611deb565b611dea848484612ead565b5b9050611e3f81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611edf91906142b0565b60405180910390a3611ef1848461302a565b50505050565b6000838311158290611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36919061427f565b60405180910390fd5b5082840390509392505050565b6000611f77602154611f6960205485611f9490919063ffffffff16565b611b1590919063ffffffff16565b9050919050565b60008183611f8c9190614adc565b905092915050565b60008183611fa29190614b10565b905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fe591906143ae565b602060405180830381865afa158015612002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120269190614b67565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612085929190614844565b6020604051808303816000875af11580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c89190614882565b505050565b600042601754602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9190614b94565b108015612133575060185461213183610c86565b115b9050919050565b600061214583610c86565b90506000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121a491906143ae565b602060405180830381865afa1580156121c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e59190614b67565b90506000602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154148061223757508082115b156122435750506124a3565b6000821180156122535750808211155b156124a05761226d82601d5461301490919063ffffffff16565b601d81905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016122d0929190614844565b6020604051808303816000875af11580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123139190614882565b5061232982601e54611f7e90919063ffffffff16565b601e8190555042602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123c882602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461301490919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612459602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b50505b5050565b6000811180156124f957506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561250c576125078261326d565b61256e565b60008114801561255e57506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561256d5761256c8261331c565b5b5b6125d7816125c9602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611f7e90919063ffffffff16565b61301490919063ffffffff16565b601b8190555080602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061266f602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614c3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278e90614ccc565b60405180910390fd5b6127a0836112d5565b8111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614d5e565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288b5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e057600a60149054906101000a900460ff166128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614dca565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129885750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ab857600454612a7682600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b1115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614e36565b60405180910390fd5b5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c005760035481111580612b6c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612bc05750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690614ea2565b60405180910390fd5b5b60025481111580612c5a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612cae5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce490614ea2565b60405180910390fd5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015612d995750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612db25750601660009054906101000a900460ff16155b15612dd257600160146000828254612dca9190614b94565b925050819055505b5050565b612de1838383613523565b15612dfa57612df160195461365d565b60006014819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ea55750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080612eba85856138f2565b1115613009576000612ef2612ecf86866138f2565b612ee460125486611b1590919063ffffffff16565b611f9490919063ffffffff16565b9050612f4681600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fe691906142b0565b60405180910390a36130018184611f7e90919063ffffffff16565b91505061300d565b8190505b9392505050565b600081836130229190614b94565b905092915050565b6000602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541180156130c95750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156130d9576130d8818261213a565b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614801561317857506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156131a15761319a61318983610c86565b601f5461301490919063ffffffff16565b601f819055505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661320557613204826131ff846112d5565b6124a7565b5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132695761326881613263836112d5565b6124a7565b5b5050565b602280549050602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506022819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602260016022805490506133309190614adc565b8154811061334157613340614ec2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166022602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106133bf576133be614ec2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602360006022600160228054905061345f9190614adc565b815481106134705761346f614ec2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060228054806134eb576134ea614ef1565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600080601a548310159050600060195461353c306112d5565b10159050601660009054906101000a900460ff161580156135695750601360009054906101000a900460ff165b80156135815750600a60149054906101000a900460ff165b801561358a5750815b80156135e05750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136395750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015613649575060155460145410155b80156136525750805b925050509392505050565b6001601660006101000a81548160ff02191690831515021790555060006136906002600f54611f9490919063ffffffff16565b905060006136bb826136ad600b5486611f9490919063ffffffff16565b611b1590919063ffffffff16565b905060006136d28285611f7e90919063ffffffff16565b905060004790506136e2826139dc565b60006136f78247611f7e90919063ffffffff16565b90506000613722613713600b5488611f7e90919063ffffffff16565b83611b1590919063ffffffff16565b9050600061373b600b5483611f9490919063ffffffff16565b90506000811115613774576137738682602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c1f565b5b600061379e600c54613790600286611f9490919063ffffffff16565b611f9490919063ffffffff16565b9050600081111561381357602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613811573d6000803e3d6000fd5b505b600061383d600d5461382f600287611f9490919063ffffffff16565b611f9490919063ffffffff16565b905060008111156138525761385181613cfe565b5b600047905060008111156138ca57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156138c8573d6000803e3d6000fd5b505b505050505050505050506000601660006101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561395357506000601054115b156139625760105490506139d6565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156139c157506000600f54115b156139d057600f5490506139d6565b60115490505b92915050565b6000600267ffffffffffffffff8111156139f9576139f8614f20565b5b604051908082528060200260200182016040528015613a275781602001602082028036833780820191505090505b5090503081600081518110613a3f57613a3e614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0a9190614f64565b81600181518110613b1e57613b1d614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b8530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b2b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613be995949392919061508a565b600060405180830381600087803b158015613c0357600080fd5b505af1158015613c17573d6000803e3d6000fd5b505050505050565b613c4c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611b2b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308660008087426040518863ffffffff1660e01b8152600401613cb3969594939291906150e4565b60606040518083038185885af1158015613cd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cf69190615145565b505050505050565b6000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613d5b91906143ae565b602060405180830381865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614b67565b9050613dcb82602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630613efb565b6000613e7b82602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e2c91906143ae565b602060405180830381865afa158015613e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6d9190614b67565b611f7e90919063ffffffff16565b9050613e9281601c5461301490919063ffffffff16565b601c81905550613ead81601e5461301490919063ffffffff16565b601e81905550613ef0613edf601b54613ed184602154611f9490919063ffffffff16565b611b1590919063ffffffff16565b60205461301490919063ffffffff16565b602081905550505050565b6000600267ffffffffffffffff811115613f1857613f17614f20565b5b604051908082528060200260200182016040528015613f465781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fda9190614f64565b81600081518110613fee57613fed614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061403d5761403c614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958560008486426040518663ffffffff1660e01b81526004016140da9493929190615198565b6000604051808303818588803b1580156140f357600080fd5b505af1158015614107573d6000803e3d6000fd5b505050505050505050565b600080fd5b6000819050919050565b61412a81614117565b811461413557600080fd5b50565b60008135905061414781614121565b92915050565b600080600080600080600060e0888a03121561416c5761416b614112565b5b600061417a8a828b01614138565b975050602061418b8a828b01614138565b965050604061419c8a828b01614138565b95505060606141ad8a828b01614138565b94505060806141be8a828b01614138565b93505060a06141cf8a828b01614138565b92505060c06141e08a828b01614138565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b8381101561422957808201518184015260208101905061420e565b60008484015250505050565b6000601f19601f8301169050919050565b6000614251826141ef565b61425b81856141fa565b935061426b81856020860161420b565b61427481614235565b840191505092915050565b600060208201905081810360008301526142998184614246565b905092915050565b6142aa81614117565b82525050565b60006020820190506142c560008301846142a1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142f6826142cb565b9050919050565b614306816142eb565b811461431157600080fd5b50565b600081359050614323816142fd565b92915050565b600080604083850312156143405761433f614112565b5b600061434e85828601614314565b925050602061435f85828601614138565b9150509250929050565b60008115159050919050565b61437e81614369565b82525050565b60006020820190506143996000830184614375565b92915050565b6143a8816142eb565b82525050565b60006020820190506143c3600083018461439f565b92915050565b6000806000606084860312156143e2576143e1614112565b5b60006143f086828701614314565b935050602061440186828701614314565b925050604061441286828701614138565b9150509250925092565b60006020828403121561443257614431614112565b5b600061444084828501614314565b91505092915050565b600080604083850312156144605761445f614112565b5b600061446e85828601614138565b925050602061447f85828601614138565b9150509250929050565b600060ff82169050919050565b61449f81614489565b82525050565b60006020820190506144ba6000830184614496565b92915050565b6000806000606084860312156144d9576144d8614112565b5b60006144e786828701614138565b93505060206144f886828701614138565b925050604061450986828701614138565b9150509250925092565b61451c81614369565b811461452757600080fd5b50565b60008135905061453981614513565b92915050565b6000806040838503121561455657614555614112565b5b600061456485828601614314565b92505060206145758582860161452a565b9150509250929050565b60008060006060848603121561459857614597614112565b5b60006145a686828701614314565b93505060206145b786828701614314565b92505060406145c886828701614314565b9150509250925092565b60006060820190506145e760008301866142a1565b6145f460208301856142a1565b61460160408301846142a1565b949350505050565b600080604083850312156146205761461f614112565b5b600061462e85828601614314565b925050602061463f85828601614314565b9150509250929050565b6000614654826142cb565b9050919050565b61466481614649565b811461466f57600080fd5b50565b6000813590506146818161465b565b92915050565b60006020828403121561469d5761469c614112565b5b60006146ab84828501614672565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006146ea6006836141fa565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061477c602c836141fa565b915061478782614720565b604082019050919050565b600060208201905081810360008301526147ab8161476f565b9050919050565b7f45524332303a206d61782054587320616e64206d61782057616c6c657420636160008201527f6e6e6f74206265206c657373207468616e202e35250000000000000000000000602082015250565b600061480e6035836141fa565b9150614819826147b2565b604082019050919050565b6000602082019050818103600083015261483d81614801565b9050919050565b6000604082019050614859600083018561439f565b61486660208301846142a1565b9392505050565b60008151905061487c81614513565b92915050565b60006020828403121561489857614897614112565b5b60006148a68482850161486d565b91505092915050565b6000819050919050565b60006148d46148cf6148ca846142cb565b6148af565b6142cb565b9050919050565b60006148e6826148b9565b9050919050565b60006148f8826148db565b9050919050565b614908816148ed565b82525050565b600060208201905061492360008301846148ff565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061499282614117565b915061499d83614117565b9250826149ad576149ac614929565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a146024836141fa565b9150614a1f826149b8565b604082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa66022836141fa565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b6000614ae782614117565b9150614af283614117565b9250828203905081811115614b0a57614b09614958565b5b92915050565b6000614b1b82614117565b9150614b2683614117565b9250828202614b3481614117565b91508282048414831517614b4b57614b4a614958565b5b5092915050565b600081519050614b6181614121565b92915050565b600060208284031215614b7d57614b7c614112565b5b6000614b8b84828501614b52565b91505092915050565b6000614b9f82614117565b9150614baa83614117565b9250828201905080821115614bc257614bc1614958565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c246025836141fa565b9150614c2f82614bc8565b604082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cb66023836141fa565b9150614cc182614c5a565b604082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614d486031836141fa565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b6000614db4600e836141fa565b9150614dbf82614d7e565b602082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b6000614e20601e836141fa565b9150614e2b82614dea565b602082019050919050565b60006020820190508181036000830152614e4f81614e13565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614e8c6011836141fa565b9150614e9782614e56565b602082019050919050565b60006020820190508181036000830152614ebb81614e7f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614f5e816142fd565b92915050565b600060208284031215614f7a57614f79614112565b5b6000614f8884828501614f4f565b91505092915050565b6000819050919050565b6000614fb6614fb1614fac84614f91565b6148af565b614117565b9050919050565b614fc681614f9b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615001816142eb565b82525050565b60006150138383614ff8565b60208301905092915050565b6000602082019050919050565b600061503782614fcc565b6150418185614fd7565b935061504c83614fe8565b8060005b8381101561507d5781516150648882615007565b975061506f8361501f565b925050600181019050615050565b5085935050505092915050565b600060a08201905061509f60008301886142a1565b6150ac6020830187614fbd565b81810360408301526150be818661502c565b90506150cd606083018561439f565b6150da60808301846142a1565b9695505050505050565b600060c0820190506150f9600083018961439f565b61510660208301886142a1565b6151136040830187614fbd565b6151206060830186614fbd565b61512d608083018561439f565b61513a60a08301846142a1565b979650505050505050565b60008060006060848603121561515e5761515d614112565b5b600061516c86828701614b52565b935050602061517d86828701614b52565b925050604061518e86828701614b52565b9150509250925092565b60006080820190506151ad6000830187614fbd565b81810360208301526151bf818661502c565b90506151ce604083018561439f565b6151db60608301846142a1565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d3314cb0f7c7a90b3057d68465d656ac54bca30391c7d82337029312cbba069d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102555760003560e01c806378109e5411610139578063b1850e94116100b6578063dd62ed3e1161007a578063dd62ed3e146108c7578063e94dd17c14610904578063ef43b02b1461092d578063efca2eed14610956578063f2fde38b14610981578063ffd49c84146109aa5761025c565b8063b1850e94146107f2578063c0c4939414610809578063c942435d14610834578063ca89b8991461084b578063ce7c2ac2146108885761025c565b80639358928b116100fd5780639358928b1461070957806395d89b4114610734578063997664d71461075f578063a8aa1b311461078a578063a9059cbb146107b55761025c565b806378109e54146106345780637cca52fe1461065f5780637d1db4a51461068a578063893d20e8146106b55780639213c358146106e05761025c565b80632f54bf6e116101d25780633f4218e0116101965780633f4218e0146105005780634355855a1461053d57806348ff2b8b1461057a5780634fab0ae8146105a357806370a08231146105ce578063722fa3de1461060b5761025c565b80632f54bf6e1461042d578063313ce5671461046a57806334c5d2ce146104955780633773eafb146104be5780633a98ef39146104d55761025c565b8063228cb73311610219578063228cb7331461034857806323b872dd1461037357806328fd3198146103b0578063293230b8146103ed5780632d48e896146104045761025c565b8063044019301461026157806306fdde031461028a57806308e20e1f146102b5578063095ea7b3146102e057806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061414d565b6109d5565b005b34801561029657600080fd5b5061029f610b31565b6040516102ac919061427f565b60405180910390f35b3480156102c157600080fd5b506102ca610b6e565b6040516102d791906142b0565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190614329565b610b74565b6040516103149190614384565b60405180910390f35b34801561032957600080fd5b50610332610b8b565b60405161033f91906142b0565b60405180910390f35b34801561035457600080fd5b5061035d610b95565b60405161036a91906143ae565b60405180910390f35b34801561037f57600080fd5b5061039a600480360381019061039591906143c9565b610bbb565b6040516103a79190614384565b60405180910390f35b3480156103bc57600080fd5b506103d760048036038101906103d2919061441c565b610c86565b6040516103e491906142b0565b60405180910390f35b3480156103f957600080fd5b50610402610d9f565b005b34801561041057600080fd5b5061042b60048036038101906104269190614449565b610e04565b005b34801561043957600080fd5b50610454600480360381019061044f919061441c565b610e8d565b6040516104619190614384565b60405180910390f35b34801561047657600080fd5b5061047f610ee6565b60405161048c91906144a5565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b791906144c0565b610eef565b005b3480156104ca57600080fd5b506104d36110b3565b005b3480156104e157600080fd5b506104ea61119f565b6040516104f791906142b0565b60405180910390f35b34801561050c57600080fd5b506105276004803603810190610522919061441c565b6111a5565b6040516105349190614384565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061441c565b6111c5565b6040516105719190614384565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c919061453f565b6111e5565b005b3480156105af57600080fd5b506105b86112cf565b6040516105c591906142b0565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061441c565b6112d5565b60405161060291906142b0565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061441c565b61131e565b005b34801561064057600080fd5b5061064961132a565b60405161065691906142b0565b60405180910390f35b34801561066b57600080fd5b50610674611330565b60405161068191906142b0565b60405180910390f35b34801561069657600080fd5b5061069f611336565b6040516106ac91906142b0565b60405180910390f35b3480156106c157600080fd5b506106ca61133c565b6040516106d791906143ae565b60405180910390f35b3480156106ec57600080fd5b506107076004803603810190610702919061457f565b611365565b005b34801561071557600080fd5b5061071e6115f9565b60405161072b91906142b0565b60405180910390f35b34801561074057600080fd5b5061074961163a565b604051610756919061427f565b60405180910390f35b34801561076b57600080fd5b50610774611677565b60405161078191906142b0565b60405180910390f35b34801561079657600080fd5b5061079f61167d565b6040516107ac91906143ae565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614329565b6116a3565b6040516107e99190614384565b60405180910390f35b3480156107fe57600080fd5b506108076116ba565b005b34801561081557600080fd5b5061081e611725565b60405161082b91906142b0565b60405180910390f35b34801561084057600080fd5b5061084961172b565b005b34801561085757600080fd5b50610872600480360381019061086d919061441c565b611746565b60405161087f91906142b0565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa919061441c565b611797565b6040516108be939291906145d2565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190614609565b6117c1565b6040516108fb91906142b0565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906144c0565b611848565b005b34801561093957600080fd5b50610954600480360381019061094f919061453f565b611934565b005b34801561096257600080fd5b5061096b611a47565b60405161097891906142b0565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614687565b611a4d565b005b3480156109b657600080fd5b506109bf611b0f565b6040516109cc91906142b0565b60405180910390f35b6109de33610e8d565b610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1490614700565b60405180910390fd5b86600b8190555085600c8190555084600d8190555083600e8190555082600f819055508160108190555080601181905550610a64600a601254611b1590919063ffffffff16565b600f5411158015610a8c5750610a86600a601254611b1590919063ffffffff16565b60105411155b8015610aaf5750610aa9600a601254611b1590919063ffffffff16565b60115411155b610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590614792565b60405180910390fd5b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610b2091906142b0565b60405180910390a450505050505050565b60606040518060400160405280601781526020017f4c69717569646974792050726f766973696f6e20426f74000000000000000000815250905090565b601e5481565b6000610b81338484611b2b565b6001905092915050565b6000600154905090565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bc8848484611cf4565b610c7b8433610c76856040518060600160405280602881526020016151e560289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b611b2b565b600190509392505050565b600080602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610cda5760009050610d9a565b6000610d27602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b90506000602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610d8257600092505050610d9a565b610d958183611f7e90919063ffffffff16565b925050505b919050565b610da833610e8d565b610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614700565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b610e0d33610e8d565b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4390614700565b60405180910390fd5b81601781905550806018819055504281837fc83811714572426615980444a6ab691c0a8b3cdc133e5954eaedad87d9a9721960405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610ef833610e8d565b610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614700565b60405180910390fd5b6000610f67612710610f5986610f4b610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610f99612710610f8b86610f7d610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610fcb612710610fbd86610faf610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90506000610ffe6103e8610ff06005610fe2610b8b565b611f9490919063ffffffff16565b611b1590919063ffffffff16565b90508084101580156110105750808310155b801561101c5750808210155b61105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290614824565b60405180910390fd5b8360028190555082600381905550816004819055508282857fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f426040516110a291906142b0565b60405180910390a450505050505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f546040518363ffffffff1660e01b8152600401611134929190614844565b6020604051808303816000875af1158015611153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111779190614882565b5061118f601f54601e54611f7e90919063ffffffff16565b601e819055506000601f81905550565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6111ee33610e8d565b61122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614700565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550428115158373ffffffffffffffffffffffffffffffffffffffff167ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821160405160405180910390a45050565b60185481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132781611faa565b50565b60045481565b60035481565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61136e33610e8d565b6113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614700565b60405180910390fd5b82602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca426040516115ec91906142b0565b60405180910390a4505050565b600061163561160860006112d5565b61162761161661dead6112d5565b600154611f7e90919063ffffffff16565b611f7e90919063ffffffff16565b905090565b60606040518060400160405280600681526020017f4c495150524f0000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116b0338484611cf4565b6001905092915050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611722573d6000803e3d6000fd5b50565b601f5481565b611734336120cd565b1561174457611743333361213a565b5b565b600080829050602560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60256020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61185133610e8d565b611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790614700565b60405180910390fd5b826015819055506118c1620186a06118b384600154611f9490919063ffffffff16565b611b1590919063ffffffff16565b6019819055506118f3620186a06118e5601a54600154611f9490919063ffffffff16565b611b1590919063ffffffff16565b90508082847f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb34260405161192791906142b0565b60405180910390a4505050565b61193d33610e8d565b61197c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197390614700565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156119e9576119e48260006124a7565b6119fc565b6119fb826119f6846112d5565b6124a7565b5b428115158373ffffffffffffffffffffffffffffffffffffffff167f9d5aa14a9b3912640cacc1223833fffedd9010feefa1a219300eb732a86ce8ba60405160405180910390a45050565b601d5481565b611a5633610e8d565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c90614700565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611b04919061490e565b60405180910390a150565b60175481565b60008183611b239190614987565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190614a2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0090614abc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ce791906142b0565b60405180910390a3505050565b611cff8383836126b9565b611d0983836127e7565b611d148383836128e4565b611d1f838383612abd565b611d298383612cf2565b611d34838383612dd6565b611d8681600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f7e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000611dd58484612dff565b611ddf5781611deb565b611dea848484612ead565b5b9050611e3f81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611edf91906142b0565b60405180910390a3611ef1848461302a565b50505050565b6000838311158290611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36919061427f565b60405180910390fd5b5082840390509392505050565b6000611f77602154611f6960205485611f9490919063ffffffff16565b611b1590919063ffffffff16565b9050919050565b60008183611f8c9190614adc565b905092915050565b60008183611fa29190614b10565b905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fe591906143ae565b602060405180830381865afa158015612002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120269190614b67565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612085929190614844565b6020604051808303816000875af11580156120a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c89190614882565b505050565b600042601754602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461211d9190614b94565b108015612133575060185461213183610c86565b115b9050919050565b600061214583610c86565b90506000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121a491906143ae565b602060405180830381865afa1580156121c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e59190614b67565b90506000602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154148061223757508082115b156122435750506124a3565b6000821180156122535750808211155b156124a05761226d82601d5461301490919063ffffffff16565b601d81905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016122d0929190614844565b6020604051808303816000875af11580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123139190614882565b5061232982601e54611f7e90919063ffffffff16565b601e8190555042602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123c882602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461301490919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612459602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b50505b5050565b6000811180156124f957506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561250c576125078261326d565b61256e565b60008114801561255e57506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561256d5761256c8261331c565b5b5b6125d7816125c9602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611f7e90919063ffffffff16565b61301490919063ffffffff16565b601b8190555080602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061266f602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611f4c565b602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90614c3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278e90614ccc565b60405180910390fd5b6127a0836112d5565b8111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614d5e565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561288b5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e057600a60149054906101000a900460ff166128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614dca565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129885750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e25750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ab857600454612a7682600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b1115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614e36565b60405180910390fd5b5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c005760035481111580612b6c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612bc05750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690614ea2565b60405180910390fd5b5b60025481111580612c5a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612cae5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce490614ea2565b60405180910390fd5b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148015612d995750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612db25750601660009054906101000a900460ff16155b15612dd257600160146000828254612dca9190614b94565b925050819055505b5050565b612de1838383613523565b15612dfa57612df160195461365d565b60006014819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ea55750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b600080612eba85856138f2565b1115613009576000612ef2612ecf86866138f2565b612ee460125486611b1590919063ffffffff16565b611f9490919063ffffffff16565b9050612f4681600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461301490919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fe691906142b0565b60405180910390a36130018184611f7e90919063ffffffff16565b91505061300d565b8190505b9392505050565b600081836130229190614b94565b905092915050565b6000602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541180156130c95750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156130d9576130d8818261213a565b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614801561317857506000602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156131a15761319a61318983610c86565b601f5461301490919063ffffffff16565b601f819055505b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661320557613204826131ff846112d5565b6124a7565b5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132695761326881613263836112d5565b6124a7565b5b5050565b602280549050602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506022819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602260016022805490506133309190614adc565b8154811061334157613340614ec2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166022602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106133bf576133be614ec2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054602360006022600160228054905061345f9190614adc565b815481106134705761346f614ec2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060228054806134eb576134ea614ef1565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600080601a548310159050600060195461353c306112d5565b10159050601660009054906101000a900460ff161580156135695750601360009054906101000a900460ff165b80156135815750600a60149054906101000a900460ff165b801561358a5750815b80156135e05750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136395750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015613649575060155460145410155b80156136525750805b925050509392505050565b6001601660006101000a81548160ff02191690831515021790555060006136906002600f54611f9490919063ffffffff16565b905060006136bb826136ad600b5486611f9490919063ffffffff16565b611b1590919063ffffffff16565b905060006136d28285611f7e90919063ffffffff16565b905060004790506136e2826139dc565b60006136f78247611f7e90919063ffffffff16565b90506000613722613713600b5488611f7e90919063ffffffff16565b83611b1590919063ffffffff16565b9050600061373b600b5483611f9490919063ffffffff16565b90506000811115613774576137738682602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613c1f565b5b600061379e600c54613790600286611f9490919063ffffffff16565b611f9490919063ffffffff16565b9050600081111561381357602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613811573d6000803e3d6000fd5b505b600061383d600d5461382f600287611f9490919063ffffffff16565b611f9490919063ffffffff16565b905060008111156138525761385181613cfe565b5b600047905060008111156138ca57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156138c8573d6000803e3d6000fd5b505b505050505050505050506000601660006101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614801561395357506000601054115b156139625760105490506139d6565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156139c157506000600f54115b156139d057600f5490506139d6565b60115490505b92915050565b6000600267ffffffffffffffff8111156139f9576139f8614f20565b5b604051908082528060200260200182016040528015613a275781602001602082028036833780820191505090505b5090503081600081518110613a3f57613a3e614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0a9190614f64565b81600181518110613b1e57613b1d614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b8530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b2b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613be995949392919061508a565b600060405180830381600087803b158015613c0357600080fd5b505af1158015613c17573d6000803e3d6000fd5b505050505050565b613c4c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611b2b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308660008087426040518863ffffffff1660e01b8152600401613cb3969594939291906150e4565b60606040518083038185885af1158015613cd1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cf69190615145565b505050505050565b6000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613d5b91906143ae565b602060405180830381865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c9190614b67565b9050613dcb82602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630613efb565b6000613e7b82602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e2c91906143ae565b602060405180830381865afa158015613e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6d9190614b67565b611f7e90919063ffffffff16565b9050613e9281601c5461301490919063ffffffff16565b601c81905550613ead81601e5461301490919063ffffffff16565b601e81905550613ef0613edf601b54613ed184602154611f9490919063ffffffff16565b611b1590919063ffffffff16565b60205461301490919063ffffffff16565b602081905550505050565b6000600267ffffffffffffffff811115613f1857613f17614f20565b5b604051908082528060200260200182016040528015613f465781602001602082028036833780820191505090505b509050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fda9190614f64565b81600081518110613fee57613fed614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061403d5761403c614ec2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958560008486426040518663ffffffff1660e01b81526004016140da9493929190615198565b6000604051808303818588803b1580156140f357600080fd5b505af1158015614107573d6000803e3d6000fd5b505050505050505050565b600080fd5b6000819050919050565b61412a81614117565b811461413557600080fd5b50565b60008135905061414781614121565b92915050565b600080600080600080600060e0888a03121561416c5761416b614112565b5b600061417a8a828b01614138565b975050602061418b8a828b01614138565b965050604061419c8a828b01614138565b95505060606141ad8a828b01614138565b94505060806141be8a828b01614138565b93505060a06141cf8a828b01614138565b92505060c06141e08a828b01614138565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b8381101561422957808201518184015260208101905061420e565b60008484015250505050565b6000601f19601f8301169050919050565b6000614251826141ef565b61425b81856141fa565b935061426b81856020860161420b565b61427481614235565b840191505092915050565b600060208201905081810360008301526142998184614246565b905092915050565b6142aa81614117565b82525050565b60006020820190506142c560008301846142a1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142f6826142cb565b9050919050565b614306816142eb565b811461431157600080fd5b50565b600081359050614323816142fd565b92915050565b600080604083850312156143405761433f614112565b5b600061434e85828601614314565b925050602061435f85828601614138565b9150509250929050565b60008115159050919050565b61437e81614369565b82525050565b60006020820190506143996000830184614375565b92915050565b6143a8816142eb565b82525050565b60006020820190506143c3600083018461439f565b92915050565b6000806000606084860312156143e2576143e1614112565b5b60006143f086828701614314565b935050602061440186828701614314565b925050604061441286828701614138565b9150509250925092565b60006020828403121561443257614431614112565b5b600061444084828501614314565b91505092915050565b600080604083850312156144605761445f614112565b5b600061446e85828601614138565b925050602061447f85828601614138565b9150509250929050565b600060ff82169050919050565b61449f81614489565b82525050565b60006020820190506144ba6000830184614496565b92915050565b6000806000606084860312156144d9576144d8614112565b5b60006144e786828701614138565b93505060206144f886828701614138565b925050604061450986828701614138565b9150509250925092565b61451c81614369565b811461452757600080fd5b50565b60008135905061453981614513565b92915050565b6000806040838503121561455657614555614112565b5b600061456485828601614314565b92505060206145758582860161452a565b9150509250929050565b60008060006060848603121561459857614597614112565b5b60006145a686828701614314565b93505060206145b786828701614314565b92505060406145c886828701614314565b9150509250925092565b60006060820190506145e760008301866142a1565b6145f460208301856142a1565b61460160408301846142a1565b949350505050565b600080604083850312156146205761461f614112565b5b600061462e85828601614314565b925050602061463f85828601614314565b9150509250929050565b6000614654826142cb565b9050919050565b61466481614649565b811461466f57600080fd5b50565b6000813590506146818161465b565b92915050565b60006020828403121561469d5761469c614112565b5b60006146ab84828501614672565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006146ea6006836141fa565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061477c602c836141fa565b915061478782614720565b604082019050919050565b600060208201905081810360008301526147ab8161476f565b9050919050565b7f45524332303a206d61782054587320616e64206d61782057616c6c657420636160008201527f6e6e6f74206265206c657373207468616e202e35250000000000000000000000602082015250565b600061480e6035836141fa565b9150614819826147b2565b604082019050919050565b6000602082019050818103600083015261483d81614801565b9050919050565b6000604082019050614859600083018561439f565b61486660208301846142a1565b9392505050565b60008151905061487c81614513565b92915050565b60006020828403121561489857614897614112565b5b60006148a68482850161486d565b91505092915050565b6000819050919050565b60006148d46148cf6148ca846142cb565b6148af565b6142cb565b9050919050565b60006148e6826148b9565b9050919050565b60006148f8826148db565b9050919050565b614908816148ed565b82525050565b600060208201905061492360008301846148ff565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061499282614117565b915061499d83614117565b9250826149ad576149ac614929565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a146024836141fa565b9150614a1f826149b8565b604082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa66022836141fa565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b6000614ae782614117565b9150614af283614117565b9250828203905081811115614b0a57614b09614958565b5b92915050565b6000614b1b82614117565b9150614b2683614117565b9250828202614b3481614117565b91508282048414831517614b4b57614b4a614958565b5b5092915050565b600081519050614b6181614121565b92915050565b600060208284031215614b7d57614b7c614112565b5b6000614b8b84828501614b52565b91505092915050565b6000614b9f82614117565b9150614baa83614117565b9250828201905080821115614bc257614bc1614958565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c246025836141fa565b9150614c2f82614bc8565b604082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614cb66023836141fa565b9150614cc182614c5a565b604082019050919050565b60006020820190508181036000830152614ce581614ca9565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614d486031836141fa565b9150614d5382614cec565b604082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b6000614db4600e836141fa565b9150614dbf82614d7e565b602082019050919050565b60006020820190508181036000830152614de381614da7565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b6000614e20601e836141fa565b9150614e2b82614dea565b602082019050919050565b60006020820190508181036000830152614e4f81614e13565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614e8c6011836141fa565b9150614e9782614e56565b602082019050919050565b60006020820190508181036000830152614ebb81614e7f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614f5e816142fd565b92915050565b600060208284031215614f7a57614f79614112565b5b6000614f8884828501614f4f565b91505092915050565b6000819050919050565b6000614fb6614fb1614fac84614f91565b6148af565b614117565b9050919050565b614fc681614f9b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615001816142eb565b82525050565b60006150138383614ff8565b60208301905092915050565b6000602082019050919050565b600061503782614fcc565b6150418185614fd7565b935061504c83614fe8565b8060005b8381101561507d5781516150648882615007565b975061506f8361501f565b925050600181019050615050565b5085935050505092915050565b600060a08201905061509f60008301886142a1565b6150ac6020830187614fbd565b81810360408301526150be818661502c565b90506150cd606083018561439f565b6150da60808301846142a1565b9695505050505050565b600060c0820190506150f9600083018961439f565b61510660208301886142a1565b6151136040830187614fbd565b6151206060830186614fbd565b61512d608083018561439f565b61513a60a08301846142a1565b979650505050505050565b60008060006060848603121561515e5761515d614112565b5b600061516c86828701614b52565b935050602061517d86828701614b52565b925050604061518e86828701614b52565b9150509250925092565b60006080820190506151ad6000830187614fbd565b81810360208301526151bf818661502c565b90506151ce604083018561439f565b6151db60608301846142a1565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d3314cb0f7c7a90b3057d68465d656ac54bca30391c7d82337029312cbba069d64736f6c63430008130033

Deployed Bytecode Sourcemap

3915:19659:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10402:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8163:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5603:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9017:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8540:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6087:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17995:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22171:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12753:83;;;;;;;;;;;;;:::i;:::-;;23301:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2295:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8313:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11009:665;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20575:217;;;;;;;;;;;;;:::i;:::-;;5496:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4538:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4589:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13694:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5235:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8630:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8386:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4347:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4278:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4211:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8456:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13257:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9156:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8236:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5529:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4666:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20452:115;;;;;;;;;;;;;:::i;:::-;;5641:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21241:130;;;;;;;;;;;;;:::i;:::-;;21043:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6004:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;8884:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12844:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18655:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5565:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2388:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5191:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10402:599;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10596:10:::1;10581:12;:25;;;;10623:10;10608:12;:25;;;;10648:8;10635:10;:21;;;;10675:12;10658:14;:29;;;;10709:6;10698:8;:17;;;;10727:5;10717:7;:15;;;;10748:6;10734:11;:20;;;;10785:19;10801:2;10785:11;;:15;;:19;;;;:::i;:::-;10773:8;;:31;;:65;;;;;10819:19;10835:2;10819:11;;:15;;:19;;;;:::i;:::-;10808:7;;:30;;10773:65;:103;;;;;10857:19;10873:2;10857:11;;:15;;:19;;;;:::i;:::-;10842:11;;:34;;10773:103;10765:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;10977:15;10962:5;10954:6;10941:52;10969:6;10941:52;;;;;;:::i;:::-;;;;;;;;10402:599:::0;;;;;;;:::o;8163:67::-;8200:13;8223:5;;;;;;;;;;;;;;;;;8216:12;;8163:67;:::o;5603:31::-;;;;:::o;9017:133::-;9092:4;9099:37;9108:10;9120:7;9129:6;9099:8;:37::i;:::-;9144:4;9137:11;;9017:133;;;;:::o;8540:84::-;8593:7;8610:12;;8603:19;;8540:84;:::o;6087:66::-;;;;;;;;;;;;;:::o;17995:309::-;18093:4;18110:36;18120:6;18128:9;18139:6;18110:9;:36::i;:::-;18157:117;18166:6;18174:10;18186:87;18222:6;18186:87;;;;;;;;;;;;;;;;;:11;:19;18198:6;18186:19;;;;;;;;;;;;;;;:31;18206:10;18186:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;18157:8;:117::i;:::-;18292:4;18285:11;;17995:309;;;;;:::o;22171:473::-;22240:7;22293:1;22263:6;:19;22270:11;22263:19;;;;;;;;;;;;;;;:26;;;:31;22260:48;;22304:1;22297:8;;;;22260:48;22318:33;22354:50;22377:6;:19;22384:11;22377:19;;;;;;;;;;;;;;;:26;;;22354:22;:50::i;:::-;22318:86;;22415:32;22450:6;:19;22457:11;22450:19;;;;;;;;;;;;;;;:33;;;22415:68;;22526:24;22497:25;:53;22494:70;;22560:1;22553:8;;;;;;22494:70;22581:55;22611:24;22581:25;:29;;:55;;;;:::i;:::-;22574:62;;;;22171:473;;;;:::o;12753:83::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12824:4:::1;12807:14;;:21;;;;;;;;;;;;;;;;;;12753:83::o:0;23301:270::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23422:10:::1;23410:9;:22;;;;23461:16;23443:15;:34;;;;23547:15;23529:16;23517:10;23493:70;;;;;;;;;;23301:270:::0;;:::o;2295:87::-;2350:4;2375:5;;;;;;;;;;;2364:16;;:7;:16;;;2357:23;;2295:87;;;:::o;8313:67::-;8354:5;4138:1;8362:16;;8313:67;:::o;11009:665::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11109:13:::1;11125:43;11161:5;11125:23;11143:4;11125:13;:11;:13::i;:::-;:17;;:23;;;;:::i;:::-;:27;;:43;;;;:::i;:::-;11109:59;;11170:19;11192:45;11230:5;11192:25;11210:6;11192:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;11170:67;;11248:17;11268:46;11307:5;11268:26;11286:7;11268:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;11248:66;;11316:13;11332:30;11357:4;11332:20;11350:1;11332:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;11316:46;;11390:5;11381;:14;;:38;;;;;11414:5;11399:11;:20;;11381:38;:60;;;;;11436:5;11423:9;:18;;11381:60;11373:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;11525:5;11510:12;:20;;;;11549:11;11532:14;:28;;;;11580:9;11562:15;:27;;;;11637:11;11626:9;11619:5;11605:61;11650:15;11605:61;;;;;;:::i;:::-;;;;;;;;11098:576;;;;11009:665:::0;;;:::o;20575:217::-;20623:6;;;;;;;;;;;20616:23;;;20640:20;;;;;;;;;;;20662:15;;20616:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20708:37;20729:15;;20708:16;;:20;;:37;;;;:::i;:::-;20689:16;:56;;;;20782:1;20756:15;:28;;;;20575:217::o;5496:26::-;;;;:::o;4538:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;4589:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;13694:192::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13802:8:::1;13778:11;:21;13790:8;13778:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;13862:15;13852:8;13826:52;;13842:8;13826:52;;;;;;;;;;;;13694:192:::0;;:::o;5235:47::-;;;;:::o;8630:103::-;8696:7;8713:9;:18;8723:7;8713:18;;;;;;;;;;;;;;;;8706:25;;8630:103;;;:::o;8386:64::-;8433:15;8442:5;8433:8;:15::i;:::-;8386:64;:::o;4347:63::-;;;;:::o;4278:62::-;;;;:::o;4211:60::-;;;;:::o;8456:78::-;8508:7;8526:5;;;;;;;;;;;8519:12;;8456:78;:::o;13257:429::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13400:10:::1;13379:18;;:31;;;;;;;;;;;;;;;;;;13433:10;13412:18;;:31;;;;;;;;;;;;;;;;;;13468:12;13445:20;;:35;;;;;;;;;;;;;;;;;;13517:4;13491:11;:23;13503:10;13491:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;13549:4;13523:11;:23;13535:10;13523:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;13583:4;13555:11;:25;13567:12;13555:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;13648:12;13603:75;;13636:10;13603:75;;13624:10;13603:75;;;13662:15;13603:75;;;;;;:::i;:::-;;;;;;;;13257:429:::0;;;:::o;9156:138::-;9215:7;9232:60;9270:21;9288:1;9270:9;:21::i;:::-;9232:33;9249:15;6193:42;9249:9;:15::i;:::-;9232:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;9225:67;;9156:138;:::o;8236:71::-;8275:13;8298:7;;;;;;;;;;;;;;;;;8291:14;;8236:71;:::o;5529:29::-;;;;:::o;4666:19::-;;;;;;;;;;;;;:::o;8739:139::-;8817:4;8824:40;8834:10;8846:9;8857:6;8824:9;:40::i;:::-;8872:4;8865:11;;8739:139;;;;:::o;20452:115::-;20506:20;;;;;;;;;;;20498:38;;:61;20537:21;20498:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20452:115::o;5641:30::-;;;;:::o;21241:130::-;21290:28;21307:10;21290:16;:28::i;:::-;21287:77;;;21320:42;21339:10;21351;21320:18;:42::i;:::-;21287:77;21241:130::o;21043:190::-;21116:7;21136:19;21158:7;21136:29;;21191:6;:19;21198:11;21191:19;;;;;;;;;;;;;;;:33;;;21176:49;;;21043:190;;;:::o;6004:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8884:127::-;8965:7;8982:11;:18;8994:5;8982:18;;;;;;;;;;;;;;;:27;9001:7;8982:27;;;;;;;;;;;;;;;;8975:34;;8884:127;;;;:::o;12844:405::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12986:11:::1;12973:10;:24;;;;13015:53;13060:6;13015:32;13032:14;13015:12;;:16;;:32;;;;:::i;:::-;:36;;:53;;;;:::i;:::-;12999:13;:69;;;;13088:53;13133:6;13088:32;13105:14;;13088:12;;:16;;:32;;;;:::i;:::-;:36;;:53;;;;:::i;:::-;13070:71;;13206:15;13190:14;13177:11;13157:82;13223:15;13157:82;;;;;;:::i;:::-;;;;;;;;12844:405:::0;;;:::o;18655:289::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18770:6:::1;18743:16;:24;18760:6;18743:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18790:6;18787:84;;;18798:19;18807:6;18815:1;18798:8;:19::i;:::-;18787:84;;;18834:35;18843:6;18851:17;18861:6;18851:9;:17::i;:::-;18834:8;:35::i;:::-;18787:84;18920:15;18912:6;18886:50;;18904:6;18886:50;;;;;;;;;;;;18655:289:::0;;:::o;5565:31::-;;;;:::o;2388:111::-;2254:19;2262:10;2254:7;:19::i;:::-;2246:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2462:3:::1;2454:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;2472:25;2493:3;2472:25;;;;;;:::i;:::-;;;;;;;;2388:111:::0;:::o;5191:37::-;;;;:::o;449:82::-;507:7;528:1;524;:5;;;;:::i;:::-;517:12;;449:82;;;;:::o;18312:335::-;18422:1;18405:19;;:5;:19;;;18397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18503:1;18484:21;;:7;:21;;;18476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18585:6;18555:11;:18;18567:5;18555:18;;;;;;;;;;;;;;;:27;18574:7;18555:27;;;;;;;;;;;;;;;:36;;;;18623:7;18607:32;;18616:5;18607:32;;;18632:6;18607:32;;;;;;:::i;:::-;;;;;;;;18312:335;;;:::o;9665:729::-;9754:37;9765:6;9773:9;9784:6;9754:10;:37::i;:::-;9802:38;9822:6;9830:9;9802:19;:38::i;:::-;9851:41;9866:6;9874:9;9885:6;9851:14;:41::i;:::-;9904:39;9917:6;9925:9;9936:6;9904:12;:39::i;:::-;9954:35;9971:6;9979:9;9954:16;:35::i;:::-;10000;10009:6;10017:9;10028:6;10000:8;:35::i;:::-;10066:29;10088:6;10066:9;:17;10076:6;10066:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;10046:9;:17;10056:6;10046:17;;;;;;;;;;;;;;;:49;;;;10106:22;10131:32;10145:6;10153:9;10131:13;:32::i;:::-;:78;;10203:6;10131:78;;;10166:34;10174:6;10182:9;10193:6;10166:7;:34::i;:::-;10131:78;10106:103;;10243:40;10268:14;10243:9;:20;10253:9;10243:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;10220:9;:20;10230:9;10220:20;;;;;;;;;;;;;;;:63;;;;10316:9;10299:43;;10308:6;10299:43;;;10327:14;10299:43;;;;;;:::i;:::-;;;;;;;;10353:33;10368:6;10376:9;10353:14;:33::i;:::-;9743:651;9665:729;;;:::o;627:162::-;713:7;756:1;751;:6;;759:12;743:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;785:1;781;:5;774:12;;627:162;;;;;:::o;22652:170::-;22722:7;22749:65;22782:31;;22749:28;22759:17;;22749:5;:9;;:28;;;;:::i;:::-;:32;;:65;;;;:::i;:::-;22742:72;;22652:170;;;:::o;273:82::-;331:7;352:1;348;:5;;;;:::i;:::-;341:12;;273:82;;;;:::o;361:::-;419:7;440:1;436;:5;;;;:::i;:::-;429:12;;361:82;;;;:::o;17797:190::-;17853:15;17878:8;17871:26;;;17906:4;17871:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17853:59;;17930:8;17923:25;;;17949:20;;;;;;;;;;;17971:7;17923:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17842:145;17797:190;:::o;20804:231::-;20874:4;20943:15;20931:9;;20898:17;:30;20916:11;20898:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:60;:129;;;;;21012:15;;20979:30;20997:11;20979:17;:30::i;:::-;:48;20898:129;20891:136;;20804:231;;;:::o;21379:784::-;21467:14;21484:30;21502:11;21484:17;:30::i;:::-;21467:47;;21525:15;21550:6;;;;;;;;;;;21543:24;;;21576:4;21543:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21525:57;;21626:1;21596:6;:19;21603:11;21596:19;;;;;;;;;;;;;;;:26;;;:31;:51;;;;21640:7;21631:6;:16;21596:51;21593:66;;;21650:7;;;;21593:66;21689:1;21672:6;:19;:40;;;;;21705:7;21695:6;:17;;21672:40;21669:487;;;21747:28;21768:6;21747:16;;:20;;:28;;;;:::i;:::-;21728:16;:47;;;;21797:6;;;;;;;;;;;21790:23;;;21814:9;21825:6;21790:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21866:28;21887:6;21866:16;;:20;;:28;;;;:::i;:::-;21847:16;:47;;;;21942:15;21909:17;:30;21927:11;21909:30;;;;;;;;;;;;;;;:48;;;;22008:45;22046:6;22008;:19;22015:11;22008:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;21972:6;:19;21979:11;21972:19;;;;;;;;;;;;;;;:33;;:81;;;;22104:50;22127:6;:19;22134:11;22127:19;;;;;;;;;;;;;;;:26;;;22104:22;:50::i;:::-;22068:6;:19;22075:11;22068:19;;;;;;;;;;;;;;;:33;;:86;;;;21669:487;21456:707;;21379:784;;;:::o;19447:482::-;19534:1;19525:6;:10;:45;;;;;19569:1;19539:6;:19;19546:11;19539:19;;;;;;;;;;;;;;;:26;;;:31;19525:45;19522:177;;;19572:27;19587:11;19572:14;:27::i;:::-;19522:177;;;19629:1;19619:6;:11;:45;;;;;19663:1;19634:6;:19;19641:11;19634:19;;;;;;;;;;;;;;;:26;;;:30;19619:45;19616:83;;;19666:30;19684:11;19666:17;:30::i;:::-;19616:83;19522:177;19723:55;19771:6;19723:43;19739:6;:19;19746:11;19739:19;;;;;;;;;;;;;;;:26;;;19723:11;;:15;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;19709:11;:69;;;;19818:6;19789;:19;19796:11;19789:19;;;;;;;;;;;;;;;:26;;:35;;;;19871:50;19894:6;:19;19901:11;19894:19;;;;;;;;;;;;;;;:26;;;19871:22;:50::i;:::-;19835:6;:19;19842:11;19835:19;;;;;;;;;;;;;;;:33;;:86;;;;19447:482;;:::o;9302:355::-;9424:1;9406:20;;:6;:20;;;9398:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9508:1;9487:23;;:9;:23;;;9479:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9579:17;9589:6;9579:9;:17::i;:::-;9569:6;:27;;9561:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;9302:355;;;:::o;11682:191::-;11775:11;:19;11787:6;11775:19;;;;;;;;;;;;;;;;;;;;;;;;;11774:20;:47;;;;;11799:11;:22;11811:9;11799:22;;;;;;;;;;;;;;;;;;;;;;;;;11798:23;11774:47;11771:95;;;11831:14;;;;;;;;;;;11823:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11771:95;11682:191;;:::o;11885:331::-;11989:11;:19;12001:6;11989:19;;;;;;;;;;;;;;;;;;;;;;;;;11988:20;:47;;;;;12013:11;:22;12025:9;12013:22;;;;;;;;;;;;;;;;;;;;;;;;;12012:23;11988:47;:77;;;;;12060:4;;;;;;;;;;;12039:26;;:9;:26;;;;11988:77;:107;;;;;6193:42;12069:26;;:9;:26;;;;11988:107;11985:224;;;12157:15;;12120:32;12145:6;12120:9;:20;12130:9;12120:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12119:53;;12111:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;11985:224;11885:331;;;:::o;12404:341::-;12515:4;;;;;;;;;;;12505:14;;:6;:14;;;12502:124;;12539:14;;12529:6;:24;;:47;;;;12557:11;:19;12569:6;12557:19;;;;;;;;;;;;;;;;;;;;;;;;;12529:47;:73;;;;12580:11;:22;12592:9;12580:22;;;;;;;;;;;;;;;;;;;;;;;;;12529:73;12521:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;12502:124;12654:12;;12644:6;:22;;:45;;;;12670:11;:19;12682:6;12670:19;;;;;;;;;;;;;;;;;;;;;;;;;12644:45;:71;;;;12693:11;:22;12705:9;12693:22;;;;;;;;;;;;;;;;;;;;;;;;;12644:71;12636:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;12404:341;;;:::o;12224:172::-;12321:4;;;;;;;;;;;12308:17;;:9;:17;;;:41;;;;;12330:11;:19;12342:6;12330:19;;;;;;;;;;;;;;;;;;;;;;;;;12329:20;12308:41;:54;;;;;12354:8;;;;;;;;;;;12353:9;12308:54;12305:84;;;12385:1;12364:9;;:23;;;;;;;:::i;:::-;;;;;;;;12305:84;12224:172;;:::o;16708:197::-;16800:41;16815:6;16823:9;16834:6;16800:14;:41::i;:::-;16797:101;;;16843:29;16858:13;;16843:14;:29::i;:::-;16894:1;16874:9;:22;;;;16797:101;16708:197;;;:::o;16913:160::-;16994:4;17019:11;:19;17031:6;17019:19;;;;;;;;;;;;;;;;;;;;;;;;;17018:20;:47;;;;;17043:11;:22;17055:9;17043:22;;;;;;;;;;;;;;;;;;;;;;;;;17042:23;17018:47;17011:54;;16913:160;;;;:::o;17357:432::-;17443:7;17499:1;17466:30;17478:6;17486:9;17466:11;:30::i;:::-;:34;17463:304;;;17512:17;17532:59;17560:30;17572:6;17580:9;17560:11;:30::i;:::-;17532:23;17543:11;;17532:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;17512:79;;17629:39;17658:9;17629;:24;17647:4;17629:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;17602:9;:24;17620:4;17602:24;;;;;;;;;;;;;;;:66;;;;17709:4;17684:42;;17693:6;17684:42;;;17716:9;17684:42;;;;;;:::i;:::-;;;;;;;;17744:21;17755:9;17744:6;:10;;:21;;;;:::i;:::-;17737:28;;;;;17463:304;17775:6;17768:13;;17357:432;;;;;;:::o;185:82::-;243:7;264:1;260;:5;;;;:::i;:::-;253:12;;185:82;;;;:::o;18952:487::-;19069:1;19034:6;:17;19041:9;19034:17;;;;;;;;;;;;;;;:24;;;:37;:55;;;;;19085:4;;;;;;;;;;;19075:14;;:6;:14;;;19034:55;19031:102;;;19091:40;19110:9;19121;19091:18;:40::i;:::-;19031:102;19159:4;;;;;;;;;;;19146:17;;:9;:17;;;:55;;;;;19199:1;19167:6;:14;19174:6;19167:14;;;;;;;;;;;;;;;:21;;;:34;19146:55;19143:126;;;19221:46;19241:25;19259:6;19241:17;:25::i;:::-;19221:15;;:19;;:46;;;;:::i;:::-;19203:15;:64;;;;19143:126;19283:16;:24;19300:6;19283:24;;;;;;;;;;;;;;;;;;;;;;;;;19279:67;;19309:35;19318:6;19326:17;19336:6;19326:9;:17::i;:::-;19309:8;:35::i;:::-;19279:67;19360:16;:27;19377:9;19360:27;;;;;;;;;;;;;;;;;;;;;;;;;19356:76;;19389:41;19398:9;19409:20;19419:9;19409;:20::i;:::-;19389:8;:41::i;:::-;19356:76;18952:487;;:::o;22830:167::-;22929:12;:19;;;;22895:18;:31;22914:11;22895:31;;;;;;;;;;;;;;;:53;;;;22959:12;22977:11;22959:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22830:167;:::o;23005:288::-;23121:12;23154:1;23134:12;:19;;;;:21;;;;:::i;:::-;23121:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23073:12;23086:18;:31;23105:11;23086:31;;;;;;;;;;;;;;;;23073:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;23225:18;:31;23244:11;23225:31;;;;;;;;;;;;;;;;23167:18;:55;23186:12;23219:1;23199:12;:19;;;;:21;;;;:::i;:::-;23186:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23167:55;;;;;;;;;;;;;;;:89;;;;23267:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;23005:288;:::o;16287:413::-;16385:4;16402:13;16428:14;;16418:6;:24;;16402:40;;16453:19;16503:13;;16475:24;16493:4;16475:9;:24::i;:::-;:41;;16453:63;;16535:8;;;;;;;;;;;16534:9;:24;;;;;16547:11;;;;;;;;;;;16534:24;:42;;;;;16562:14;;;;;;;;;;;16534:42;:54;;;;;16580:8;16534:54;:78;;;;;16593:11;:19;16605:6;16593:19;;;;;;;;;;;;;;;;;;;;;;;;;16592:20;16534:78;:113;;;;;16643:4;;;;;;;;;;;16630:17;;:9;:17;;;16534:113;:140;;;;;16664:10;;16651:9;;:23;;16534:140;:158;;;;;16678:14;16534:158;16527:165;;;;16287:413;;;;;:::o;13894:1166::-;5463:4;5452:8;;:15;;;;;;;;;;;;;;;;;;13965:20:::1;13988:17;14003:1;13989:8;;13988:14;;:17;;;;:::i;:::-;13965:40;;14016:32;14051:42;14080:12;14051:24;14062:12;;14051:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;14016:77;;14104:14;14121:36;14132:24;14121:6;:10;;:36;;;;:::i;:::-;14104:53;;14168:22;14193:21;14168:46;;14225:24;14242:6;14225:16;:24::i;:::-;14260:20;14283:41;14309:14;14283:21;:25;;:41;;;;:::i;:::-;14260:64;;14335:19;14356:48;14373:30;14390:12;;14373;:16;;:30;;;;:::i;:::-;14356:12;:16;;:48;;;;:::i;:::-;14335:69;;14415:29;14447;14463:12;;14447:11;:15;;:29;;;;:::i;:::-;14415:61;;14522:1;14490:21;:34;14487:123;;;14526:81;14539:24;14565:21;14588:18;;;;;;;;;;;14526:12;:81::i;:::-;14487:123;14620:23;14646:36;14669:12;;14646:18;14662:1;14646:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;14620:62;;14714:1;14696:15;:19;14693:79;;;14725:18;;;;;;;;;;;14717:36;;:53;14754:15;14717:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14693:79;14782:21;14806:34;14829:10;;14806:18;14822:1;14806:11;:15;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;14782:58;;14870:1;14854:13;:17;14851:53;;;14873:29;14888:13;14873:14;:29::i;:::-;14851:53;14914:20;14937:21;14914:44;;14995:1;14972:12;:25;14969:84;;;15007:20;;;;;;;;;;;14999:38;;:52;15038:12;14999:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14969:84;13954:1106;;;;;;;;;;5483:5:::0;5472:8;;:16;;;;;;;;;;;;;;;;;;13894:1166;:::o;17081:268::-;17160:7;17196:4;;;;;;;;;;;17183:17;;:9;:17;;;:41;;;;;17222:1;17204:7;;:20;17183:41;17180:62;;;17233:7;;17226:14;;;;17180:62;17265:4;;;;;;;;;;;17255:14;;:6;:14;;;:39;;;;;17292:1;17273:8;;:21;17255:39;17252:61;;;17303:8;;17296:15;;;;17252:61;17330:11;;17323:18;;17081:268;;;;;:::o;15436:434::-;15502:21;15540:1;15526:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15502:40;;15571:4;15553;15558:1;15553:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15597:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15587:4;15592:1;15587:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15621:53;15638:4;15653:6;;;;;;;;;;;15662:11;15621:8;:53::i;:::-;15685:6;;;;;;;;;;;:57;;;15757:11;15783:1;15799:4;15826;15846:15;15685:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15491:379;15436:434;:::o;15068:360::-;15167:53;15184:4;15199:6;;;;;;;;;;;15208:11;15167:8;:53::i;:::-;15231:6;;;;;;;;;;;:22;;;15261:9;15294:4;15314:11;15340:1;15356;15380:8;15404:15;15231:189;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15068:360;;;:::o;19937:507::-;20000:21;20031:6;;;;;;;;;;;20024:24;;;20057:4;20024:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20000:63;;20074:50;20091:9;20102:6;;;;;;;;;;;20118:4;20074:16;:50::i;:::-;20135:14;20152:58;20196:13;20159:6;;;;;;;;;;;20152:24;;;20185:4;20152:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:58;;;;:::i;:::-;20135:75;;20238:26;20257:6;20238:14;;:18;;:26;;;;:::i;:::-;20221:14;:43;;;;20294:28;20315:6;20294:16;;:20;;:28;;;;:::i;:::-;20275:16;:47;;;;20353:83;20375:60;20423:11;;20375:43;20411:6;20375:31;;:35;;:43;;;;:::i;:::-;:47;;:60;;;;:::i;:::-;20353:17;;:21;;:83;;;;:::i;:::-;20333:17;:103;;;;19989:455;;19937:507;:::o;15878:401::-;15977:21;16015:1;16001:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:40;;16038:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16028:4;16033:1;16028:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16080:5;16062:4;16067:1;16062:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;16097:6;;;;;;;;;;;:57;;;16162:9;16187:1;16203:4;16230:9;16255:15;16097:174;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15966:313;15878:401;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:1203::-;803:6;811;819;827;835;843;851;900:3;888:9;879:7;875:23;871:33;868:120;;;907:79;;:::i;:::-;868:120;1027:1;1052:53;1097:7;1088:6;1077:9;1073:22;1052:53;:::i;:::-;1042:63;;998:117;1154:2;1180:53;1225:7;1216:6;1205:9;1201:22;1180:53;:::i;:::-;1170:63;;1125:118;1282:2;1308:53;1353:7;1344:6;1333:9;1329:22;1308:53;:::i;:::-;1298:63;;1253:118;1410:2;1436:53;1481:7;1472:6;1461:9;1457:22;1436:53;:::i;:::-;1426:63;;1381:118;1538:3;1565:53;1610:7;1601:6;1590:9;1586:22;1565:53;:::i;:::-;1555:63;;1509:119;1667:3;1694:53;1739:7;1730:6;1719:9;1715:22;1694:53;:::i;:::-;1684:63;;1638:119;1796:3;1823:53;1868:7;1859:6;1848:9;1844:22;1823:53;:::i;:::-;1813:63;;1767:119;690:1203;;;;;;;;;;:::o;1899:99::-;1951:6;1985:5;1979:12;1969:22;;1899:99;;;:::o;2004:169::-;2088:11;2122:6;2117:3;2110:19;2162:4;2157:3;2153:14;2138:29;;2004:169;;;;:::o;2179:246::-;2260:1;2270:113;2284:6;2281:1;2278:13;2270:113;;;2369:1;2364:3;2360:11;2354:18;2350:1;2345:3;2341:11;2334:39;2306:2;2303:1;2299:10;2294:15;;2270:113;;;2417:1;2408:6;2403:3;2399:16;2392:27;2241:184;2179:246;;;:::o;2431:102::-;2472:6;2523:2;2519:7;2514:2;2507:5;2503:14;2499:28;2489:38;;2431:102;;;:::o;2539:377::-;2627:3;2655:39;2688:5;2655:39;:::i;:::-;2710:71;2774:6;2769:3;2710:71;:::i;:::-;2703:78;;2790:65;2848:6;2843:3;2836:4;2829:5;2825:16;2790:65;:::i;:::-;2880:29;2902:6;2880:29;:::i;:::-;2875:3;2871:39;2864:46;;2631:285;2539:377;;;;:::o;2922:313::-;3035:4;3073:2;3062:9;3058:18;3050:26;;3122:9;3116:4;3112:20;3108:1;3097:9;3093:17;3086:47;3150:78;3223:4;3214:6;3150:78;:::i;:::-;3142:86;;2922:313;;;;:::o;3241:118::-;3328:24;3346:5;3328:24;:::i;:::-;3323:3;3316:37;3241:118;;:::o;3365:222::-;3458:4;3496:2;3485:9;3481:18;3473:26;;3509:71;3577:1;3566:9;3562:17;3553:6;3509:71;:::i;:::-;3365:222;;;;:::o;3593:126::-;3630:7;3670:42;3663:5;3659:54;3648:65;;3593:126;;;:::o;3725:96::-;3762:7;3791:24;3809:5;3791:24;:::i;:::-;3780:35;;3725:96;;;:::o;3827:122::-;3900:24;3918:5;3900:24;:::i;:::-;3893:5;3890:35;3880:63;;3939:1;3936;3929:12;3880:63;3827:122;:::o;3955:139::-;4001:5;4039:6;4026:20;4017:29;;4055:33;4082:5;4055:33;:::i;:::-;3955:139;;;;:::o;4100:474::-;4168:6;4176;4225:2;4213:9;4204:7;4200:23;4196:32;4193:119;;;4231:79;;:::i;:::-;4193:119;4351:1;4376:53;4421:7;4412:6;4401:9;4397:22;4376:53;:::i;:::-;4366:63;;4322:117;4478:2;4504:53;4549:7;4540:6;4529:9;4525:22;4504:53;:::i;:::-;4494:63;;4449:118;4100:474;;;;;:::o;4580:90::-;4614:7;4657:5;4650:13;4643:21;4632:32;;4580:90;;;:::o;4676:109::-;4757:21;4772:5;4757:21;:::i;:::-;4752:3;4745:34;4676:109;;:::o;4791:210::-;4878:4;4916:2;4905:9;4901:18;4893:26;;4929:65;4991:1;4980:9;4976:17;4967:6;4929:65;:::i;:::-;4791:210;;;;:::o;5007:118::-;5094:24;5112:5;5094:24;:::i;:::-;5089:3;5082:37;5007:118;;:::o;5131:222::-;5224:4;5262:2;5251:9;5247:18;5239:26;;5275:71;5343:1;5332:9;5328:17;5319:6;5275:71;:::i;:::-;5131:222;;;;:::o;5359:619::-;5436:6;5444;5452;5501:2;5489:9;5480:7;5476:23;5472:32;5469:119;;;5507:79;;:::i;:::-;5469:119;5627:1;5652:53;5697:7;5688:6;5677:9;5673:22;5652:53;:::i;:::-;5642:63;;5598:117;5754:2;5780:53;5825:7;5816:6;5805:9;5801:22;5780:53;:::i;:::-;5770:63;;5725:118;5882:2;5908:53;5953:7;5944:6;5933:9;5929:22;5908:53;:::i;:::-;5898:63;;5853:118;5359:619;;;;;:::o;5984:329::-;6043:6;6092:2;6080:9;6071:7;6067:23;6063:32;6060:119;;;6098:79;;:::i;:::-;6060:119;6218:1;6243:53;6288:7;6279:6;6268:9;6264:22;6243:53;:::i;:::-;6233:63;;6189:117;5984:329;;;;:::o;6319:474::-;6387:6;6395;6444:2;6432:9;6423:7;6419:23;6415:32;6412:119;;;6450:79;;:::i;:::-;6412:119;6570:1;6595:53;6640:7;6631:6;6620:9;6616:22;6595:53;:::i;:::-;6585:63;;6541:117;6697:2;6723:53;6768:7;6759:6;6748:9;6744:22;6723:53;:::i;:::-;6713:63;;6668:118;6319:474;;;;;:::o;6799:86::-;6834:7;6874:4;6867:5;6863:16;6852:27;;6799:86;;;:::o;6891:112::-;6974:22;6990:5;6974:22;:::i;:::-;6969:3;6962:35;6891:112;;:::o;7009:214::-;7098:4;7136:2;7125:9;7121:18;7113:26;;7149:67;7213:1;7202:9;7198:17;7189:6;7149:67;:::i;:::-;7009:214;;;;:::o;7229:619::-;7306:6;7314;7322;7371:2;7359:9;7350:7;7346:23;7342:32;7339:119;;;7377:79;;:::i;:::-;7339:119;7497:1;7522:53;7567:7;7558:6;7547:9;7543:22;7522:53;:::i;:::-;7512:63;;7468:117;7624:2;7650:53;7695:7;7686:6;7675:9;7671:22;7650:53;:::i;:::-;7640:63;;7595:118;7752:2;7778:53;7823:7;7814:6;7803:9;7799:22;7778:53;:::i;:::-;7768:63;;7723:118;7229:619;;;;;:::o;7854:116::-;7924:21;7939:5;7924:21;:::i;:::-;7917:5;7914:32;7904:60;;7960:1;7957;7950:12;7904:60;7854:116;:::o;7976:133::-;8019:5;8057:6;8044:20;8035:29;;8073:30;8097:5;8073:30;:::i;:::-;7976:133;;;;:::o;8115:468::-;8180:6;8188;8237:2;8225:9;8216:7;8212:23;8208:32;8205:119;;;8243:79;;:::i;:::-;8205:119;8363:1;8388:53;8433:7;8424:6;8413:9;8409:22;8388:53;:::i;:::-;8378:63;;8334:117;8490:2;8516:50;8558:7;8549:6;8538:9;8534:22;8516:50;:::i;:::-;8506:60;;8461:115;8115:468;;;;;:::o;8589:619::-;8666:6;8674;8682;8731:2;8719:9;8710:7;8706:23;8702:32;8699:119;;;8737:79;;:::i;:::-;8699:119;8857:1;8882:53;8927:7;8918:6;8907:9;8903:22;8882:53;:::i;:::-;8872:63;;8828:117;8984:2;9010:53;9055:7;9046:6;9035:9;9031:22;9010:53;:::i;:::-;9000:63;;8955:118;9112:2;9138:53;9183:7;9174:6;9163:9;9159:22;9138:53;:::i;:::-;9128:63;;9083:118;8589:619;;;;;:::o;9214:442::-;9363:4;9401:2;9390:9;9386:18;9378:26;;9414:71;9482:1;9471:9;9467:17;9458:6;9414:71;:::i;:::-;9495:72;9563:2;9552:9;9548:18;9539:6;9495:72;:::i;:::-;9577;9645:2;9634:9;9630:18;9621:6;9577:72;:::i;:::-;9214:442;;;;;;:::o;9662:474::-;9730:6;9738;9787:2;9775:9;9766:7;9762:23;9758:32;9755:119;;;9793:79;;:::i;:::-;9755:119;9913:1;9938:53;9983:7;9974:6;9963:9;9959:22;9938:53;:::i;:::-;9928:63;;9884:117;10040:2;10066:53;10111:7;10102:6;10091:9;10087:22;10066:53;:::i;:::-;10056:63;;10011:118;9662:474;;;;;:::o;10142:104::-;10187:7;10216:24;10234:5;10216:24;:::i;:::-;10205:35;;10142:104;;;:::o;10252:138::-;10333:32;10359:5;10333:32;:::i;:::-;10326:5;10323:43;10313:71;;10380:1;10377;10370:12;10313:71;10252:138;:::o;10396:155::-;10450:5;10488:6;10475:20;10466:29;;10504:41;10539:5;10504:41;:::i;:::-;10396:155;;;;:::o;10557:345::-;10624:6;10673:2;10661:9;10652:7;10648:23;10644:32;10641:119;;;10679:79;;:::i;:::-;10641:119;10799:1;10824:61;10877:7;10868:6;10857:9;10853:22;10824:61;:::i;:::-;10814:71;;10770:125;10557:345;;;;:::o;10908:156::-;11048:8;11044:1;11036:6;11032:14;11025:32;10908:156;:::o;11070:365::-;11212:3;11233:66;11297:1;11292:3;11233:66;:::i;:::-;11226:73;;11308:93;11397:3;11308:93;:::i;:::-;11426:2;11421:3;11417:12;11410:19;;11070:365;;;:::o;11441:419::-;11607:4;11645:2;11634:9;11630:18;11622:26;;11694:9;11688:4;11684:20;11680:1;11669:9;11665:17;11658:47;11722:131;11848:4;11722:131;:::i;:::-;11714:139;;11441:419;;;:::o;11866:231::-;12006:34;12002:1;11994:6;11990:14;11983:58;12075:14;12070:2;12062:6;12058:15;12051:39;11866:231;:::o;12103:366::-;12245:3;12266:67;12330:2;12325:3;12266:67;:::i;:::-;12259:74;;12342:93;12431:3;12342:93;:::i;:::-;12460:2;12455:3;12451:12;12444:19;;12103:366;;;:::o;12475:419::-;12641:4;12679:2;12668:9;12664:18;12656:26;;12728:9;12722:4;12718:20;12714:1;12703:9;12699:17;12692:47;12756:131;12882:4;12756:131;:::i;:::-;12748:139;;12475:419;;;:::o;12900:240::-;13040:34;13036:1;13028:6;13024:14;13017:58;13109:23;13104:2;13096:6;13092:15;13085:48;12900:240;:::o;13146:366::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13146:366;;;:::o;13518:419::-;13684:4;13722:2;13711:9;13707:18;13699:26;;13771:9;13765:4;13761:20;13757:1;13746:9;13742:17;13735:47;13799:131;13925:4;13799:131;:::i;:::-;13791:139;;13518:419;;;:::o;13943:332::-;14064:4;14102:2;14091:9;14087:18;14079:26;;14115:71;14183:1;14172:9;14168:17;14159:6;14115:71;:::i;:::-;14196:72;14264:2;14253:9;14249:18;14240:6;14196:72;:::i;:::-;13943:332;;;;;:::o;14281:137::-;14335:5;14366:6;14360:13;14351:22;;14382:30;14406:5;14382:30;:::i;:::-;14281:137;;;;:::o;14424:345::-;14491:6;14540:2;14528:9;14519:7;14515:23;14511:32;14508:119;;;14546:79;;:::i;:::-;14508:119;14666:1;14691:61;14744:7;14735:6;14724:9;14720:22;14691:61;:::i;:::-;14681:71;;14637:125;14424:345;;;;:::o;14775:60::-;14803:3;14824:5;14817:12;;14775:60;;;:::o;14841:142::-;14891:9;14924:53;14942:34;14951:24;14969:5;14951:24;:::i;:::-;14942:34;:::i;:::-;14924:53;:::i;:::-;14911:66;;14841:142;;;:::o;14989:126::-;15039:9;15072:37;15103:5;15072:37;:::i;:::-;15059:50;;14989:126;;;:::o;15121:134::-;15179:9;15212:37;15243:5;15212:37;:::i;:::-;15199:50;;15121:134;;;:::o;15261:147::-;15356:45;15395:5;15356:45;:::i;:::-;15351:3;15344:58;15261:147;;:::o;15414:238::-;15515:4;15553:2;15542:9;15538:18;15530:26;;15566:79;15642:1;15631:9;15627:17;15618:6;15566:79;:::i;:::-;15414:238;;;;:::o;15658:180::-;15706:77;15703:1;15696:88;15803:4;15800:1;15793:15;15827:4;15824:1;15817:15;15844:180;15892:77;15889:1;15882:88;15989:4;15986:1;15979:15;16013:4;16010:1;16003:15;16030:185;16070:1;16087:20;16105:1;16087:20;:::i;:::-;16082:25;;16121:20;16139:1;16121:20;:::i;:::-;16116:25;;16160:1;16150:35;;16165:18;;:::i;:::-;16150:35;16207:1;16204;16200:9;16195:14;;16030:185;;;;:::o;16221:223::-;16361:34;16357:1;16349:6;16345:14;16338:58;16430:6;16425:2;16417:6;16413:15;16406:31;16221:223;:::o;16450:366::-;16592:3;16613:67;16677:2;16672:3;16613:67;:::i;:::-;16606:74;;16689:93;16778:3;16689:93;:::i;:::-;16807:2;16802:3;16798:12;16791:19;;16450:366;;;:::o;16822:419::-;16988:4;17026:2;17015:9;17011:18;17003:26;;17075:9;17069:4;17065:20;17061:1;17050:9;17046:17;17039:47;17103:131;17229:4;17103:131;:::i;:::-;17095:139;;16822:419;;;:::o;17247:221::-;17387:34;17383:1;17375:6;17371:14;17364:58;17456:4;17451:2;17443:6;17439:15;17432:29;17247:221;:::o;17474:366::-;17616:3;17637:67;17701:2;17696:3;17637:67;:::i;:::-;17630:74;;17713:93;17802:3;17713:93;:::i;:::-;17831:2;17826:3;17822:12;17815:19;;17474:366;;;:::o;17846:419::-;18012:4;18050:2;18039:9;18035:18;18027:26;;18099:9;18093:4;18089:20;18085:1;18074:9;18070:17;18063:47;18127:131;18253:4;18127:131;:::i;:::-;18119:139;;17846:419;;;:::o;18271:194::-;18311:4;18331:20;18349:1;18331:20;:::i;:::-;18326:25;;18365:20;18383:1;18365:20;:::i;:::-;18360:25;;18409:1;18406;18402:9;18394:17;;18433:1;18427:4;18424:11;18421:37;;;18438:18;;:::i;:::-;18421:37;18271:194;;;;:::o;18471:410::-;18511:7;18534:20;18552:1;18534:20;:::i;:::-;18529:25;;18568:20;18586:1;18568:20;:::i;:::-;18563:25;;18623:1;18620;18616:9;18645:30;18663:11;18645:30;:::i;:::-;18634:41;;18824:1;18815:7;18811:15;18808:1;18805:22;18785:1;18778:9;18758:83;18735:139;;18854:18;;:::i;:::-;18735:139;18519:362;18471:410;;;;:::o;18887:143::-;18944:5;18975:6;18969:13;18960:22;;18991:33;19018:5;18991:33;:::i;:::-;18887:143;;;;:::o;19036:351::-;19106:6;19155:2;19143:9;19134:7;19130:23;19126:32;19123:119;;;19161:79;;:::i;:::-;19123:119;19281:1;19306:64;19362:7;19353:6;19342:9;19338:22;19306:64;:::i;:::-;19296:74;;19252:128;19036:351;;;;:::o;19393:191::-;19433:3;19452:20;19470:1;19452:20;:::i;:::-;19447:25;;19486:20;19504:1;19486:20;:::i;:::-;19481:25;;19529:1;19526;19522:9;19515:16;;19550:3;19547:1;19544:10;19541:36;;;19557:18;;:::i;:::-;19541:36;19393:191;;;;:::o;19590:224::-;19730:34;19726:1;19718:6;19714:14;19707:58;19799:7;19794:2;19786:6;19782:15;19775:32;19590:224;:::o;19820:366::-;19962:3;19983:67;20047:2;20042:3;19983:67;:::i;:::-;19976:74;;20059:93;20148:3;20059:93;:::i;:::-;20177:2;20172:3;20168:12;20161:19;;19820:366;;;:::o;20192:419::-;20358:4;20396:2;20385:9;20381:18;20373:26;;20445:9;20439:4;20435:20;20431:1;20420:9;20416:17;20409:47;20473:131;20599:4;20473:131;:::i;:::-;20465:139;;20192:419;;;:::o;20617:222::-;20757:34;20753:1;20745:6;20741:14;20734:58;20826:5;20821:2;20813:6;20809:15;20802:30;20617:222;:::o;20845:366::-;20987:3;21008:67;21072:2;21067:3;21008:67;:::i;:::-;21001:74;;21084:93;21173:3;21084:93;:::i;:::-;21202:2;21197:3;21193:12;21186:19;;20845:366;;;:::o;21217:419::-;21383:4;21421:2;21410:9;21406:18;21398:26;;21470:9;21464:4;21460:20;21456:1;21445:9;21441:17;21434:47;21498:131;21624:4;21498:131;:::i;:::-;21490:139;;21217:419;;;:::o;21642:236::-;21782:34;21778:1;21770:6;21766:14;21759:58;21851:19;21846:2;21838:6;21834:15;21827:44;21642:236;:::o;21884:366::-;22026:3;22047:67;22111:2;22106:3;22047:67;:::i;:::-;22040:74;;22123:93;22212:3;22123:93;:::i;:::-;22241:2;22236:3;22232:12;22225:19;;21884:366;;;:::o;22256:419::-;22422:4;22460:2;22449:9;22445:18;22437:26;;22509:9;22503:4;22499:20;22495:1;22484:9;22480:17;22473:47;22537:131;22663:4;22537:131;:::i;:::-;22529:139;;22256:419;;;:::o;22681:164::-;22821:16;22817:1;22809:6;22805:14;22798:40;22681:164;:::o;22851:366::-;22993:3;23014:67;23078:2;23073:3;23014:67;:::i;:::-;23007:74;;23090:93;23179:3;23090:93;:::i;:::-;23208:2;23203:3;23199:12;23192:19;;22851:366;;;:::o;23223:419::-;23389:4;23427:2;23416:9;23412:18;23404:26;;23476:9;23470:4;23466:20;23462:1;23451:9;23447:17;23440:47;23504:131;23630:4;23504:131;:::i;:::-;23496:139;;23223:419;;;:::o;23648:180::-;23788:32;23784:1;23776:6;23772:14;23765:56;23648:180;:::o;23834:366::-;23976:3;23997:67;24061:2;24056:3;23997:67;:::i;:::-;23990:74;;24073:93;24162:3;24073:93;:::i;:::-;24191:2;24186:3;24182:12;24175:19;;23834:366;;;:::o;24206:419::-;24372:4;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24206:419;;;:::o;24631:167::-;24771:19;24767:1;24759:6;24755:14;24748:43;24631:167;:::o;24804:366::-;24946:3;24967:67;25031:2;25026:3;24967:67;:::i;:::-;24960:74;;25043:93;25132:3;25043:93;:::i;:::-;25161:2;25156:3;25152:12;25145:19;;24804:366;;;:::o;25176:419::-;25342:4;25380:2;25369:9;25365:18;25357:26;;25429:9;25423:4;25419:20;25415:1;25404:9;25400:17;25393:47;25457:131;25583:4;25457:131;:::i;:::-;25449:139;;25176:419;;;:::o;25601:180::-;25649:77;25646:1;25639:88;25746:4;25743:1;25736:15;25770:4;25767:1;25760:15;25787:180;25835:77;25832:1;25825:88;25932:4;25929:1;25922:15;25956:4;25953:1;25946:15;25973:180;26021:77;26018:1;26011:88;26118:4;26115:1;26108:15;26142:4;26139:1;26132:15;26159:143;26216:5;26247:6;26241:13;26232:22;;26263:33;26290:5;26263:33;:::i;:::-;26159:143;;;;:::o;26308:351::-;26378:6;26427:2;26415:9;26406:7;26402:23;26398:32;26395:119;;;26433:79;;:::i;:::-;26395:119;26553:1;26578:64;26634:7;26625:6;26614:9;26610:22;26578:64;:::i;:::-;26568:74;;26524:128;26308:351;;;;:::o;26665:85::-;26710:7;26739:5;26728:16;;26665:85;;;:::o;26756:158::-;26814:9;26847:61;26865:42;26874:32;26900:5;26874:32;:::i;:::-;26865:42;:::i;:::-;26847:61;:::i;:::-;26834:74;;26756:158;;;:::o;26920:147::-;27015:45;27054:5;27015:45;:::i;:::-;27010:3;27003:58;26920:147;;:::o;27073:114::-;27140:6;27174:5;27168:12;27158:22;;27073:114;;;:::o;27193:184::-;27292:11;27326:6;27321:3;27314:19;27366:4;27361:3;27357:14;27342:29;;27193:184;;;;:::o;27383:132::-;27450:4;27473:3;27465:11;;27503:4;27498:3;27494:14;27486:22;;27383:132;;;:::o;27521:108::-;27598:24;27616:5;27598:24;:::i;:::-;27593:3;27586:37;27521:108;;:::o;27635:179::-;27704:10;27725:46;27767:3;27759:6;27725:46;:::i;:::-;27803:4;27798:3;27794:14;27780:28;;27635:179;;;;:::o;27820:113::-;27890:4;27922;27917:3;27913:14;27905:22;;27820:113;;;:::o;27969:732::-;28088:3;28117:54;28165:5;28117:54;:::i;:::-;28187:86;28266:6;28261:3;28187:86;:::i;:::-;28180:93;;28297:56;28347:5;28297:56;:::i;:::-;28376:7;28407:1;28392:284;28417:6;28414:1;28411:13;28392:284;;;28493:6;28487:13;28520:63;28579:3;28564:13;28520:63;:::i;:::-;28513:70;;28606:60;28659:6;28606:60;:::i;:::-;28596:70;;28452:224;28439:1;28436;28432:9;28427:14;;28392:284;;;28396:14;28692:3;28685:10;;28093:608;;;27969:732;;;;:::o;28707:831::-;28970:4;29008:3;28997:9;28993:19;28985:27;;29022:71;29090:1;29079:9;29075:17;29066:6;29022:71;:::i;:::-;29103:80;29179:2;29168:9;29164:18;29155:6;29103:80;:::i;:::-;29230:9;29224:4;29220:20;29215:2;29204:9;29200:18;29193:48;29258:108;29361:4;29352:6;29258:108;:::i;:::-;29250:116;;29376:72;29444:2;29433:9;29429:18;29420:6;29376:72;:::i;:::-;29458:73;29526:3;29515:9;29511:19;29502:6;29458:73;:::i;:::-;28707:831;;;;;;;;:::o;29544:807::-;29793:4;29831:3;29820:9;29816:19;29808:27;;29845:71;29913:1;29902:9;29898:17;29889:6;29845:71;:::i;:::-;29926:72;29994:2;29983:9;29979:18;29970:6;29926:72;:::i;:::-;30008:80;30084:2;30073:9;30069:18;30060:6;30008:80;:::i;:::-;30098;30174:2;30163:9;30159:18;30150:6;30098:80;:::i;:::-;30188:73;30256:3;30245:9;30241:19;30232:6;30188:73;:::i;:::-;30271;30339:3;30328:9;30324:19;30315:6;30271:73;:::i;:::-;29544:807;;;;;;;;;:::o;30357:663::-;30445:6;30453;30461;30510:2;30498:9;30489:7;30485:23;30481:32;30478:119;;;30516:79;;:::i;:::-;30478:119;30636:1;30661:64;30717:7;30708:6;30697:9;30693:22;30661:64;:::i;:::-;30651:74;;30607:128;30774:2;30800:64;30856:7;30847:6;30836:9;30832:22;30800:64;:::i;:::-;30790:74;;30745:129;30913:2;30939:64;30995:7;30986:6;30975:9;30971:22;30939:64;:::i;:::-;30929:74;;30884:129;30357:663;;;;;:::o;31026:720::-;31261:4;31299:3;31288:9;31284:19;31276:27;;31313:79;31389:1;31378:9;31374:17;31365:6;31313:79;:::i;:::-;31439:9;31433:4;31429:20;31424:2;31413:9;31409:18;31402:48;31467:108;31570:4;31561:6;31467:108;:::i;:::-;31459:116;;31585:72;31653:2;31642:9;31638:18;31629:6;31585:72;:::i;:::-;31667;31735:2;31724:9;31720:18;31711:6;31667:72;:::i;:::-;31026:720;;;;;;;:::o

Swarm Source

ipfs://d3314cb0f7c7a90b3057d68465d656ac54bca30391c7d82337029312cbba069d

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.