ETH Price: $2,576.06 (+2.94%)

Contract

0x5332c07EBb5deDFEBf29F7EE500F6b1230dC8a6E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve179036702023-08-13 4:51:59382 days ago1691902319IN
0x5332c07E...230dC8a6E
0 ETH0.0003102111.51416191
Approve179036552023-08-13 4:48:59382 days ago1691902139IN
0x5332c07E...230dC8a6E
0 ETH0.0005260211.20682761
Approve178106562023-07-31 4:39:11395 days ago1690778351IN
0x5332c07E...230dC8a6E
0 ETH0.0006545813.87830862
Approve177947832023-07-28 23:20:11397 days ago1690586411IN
0x5332c07E...230dC8a6E
0 ETH0.0010461222.30450179
Approve177947702023-07-28 23:17:35397 days ago1690586255IN
0x5332c07E...230dC8a6E
0 ETH0.0010403822.15370684
Approve176711732023-07-11 15:09:59415 days ago1689088199IN
0x5332c07E...230dC8a6E
0 ETH0.0018697839.8148481
Approve176630882023-07-10 11:53:35416 days ago1688990015IN
0x5332c07E...230dC8a6E
0 ETH0.0008319517.74267042
Approve176219172023-07-04 17:03:59422 days ago1688490239IN
0x5332c07E...230dC8a6E
0 ETH0.0005771123.13811866
Approve176155172023-07-03 19:29:11422 days ago1688412551IN
0x5332c07E...230dC8a6E
0 ETH0.0009283219.68215609
Approve176097982023-07-03 0:09:47423 days ago1688342987IN
0x5332c07E...230dC8a6E
0 ETH0.0007475615.91853318
Approve175828502023-06-29 5:22:23427 days ago1688016143IN
0x5332c07E...230dC8a6E
0 ETH0.0006933414.7
Approve175812242023-06-28 23:54:11427 days ago1687996451IN
0x5332c07E...230dC8a6E
0 ETH0.0008305717.70869023
Approve175763222023-06-28 7:26:11428 days ago1687937171IN
0x5332c07E...230dC8a6E
0 ETH0.0007868816.75581545
Approve175761832023-06-28 6:58:11428 days ago1687935491IN
0x5332c07E...230dC8a6E
0 ETH0.0005893312.55560853
Approve175730852023-06-27 20:33:11428 days ago1687897991IN
0x5332c07E...230dC8a6E
0 ETH0.0009348319.91637837
Approve175730702023-06-27 20:30:11428 days ago1687897811IN
0x5332c07E...230dC8a6E
0 ETH0.000950320.23560217
Approve175712882023-06-27 14:29:59429 days ago1687876199IN
0x5332c07E...230dC8a6E
0 ETH0.0008266517.52650048
Approve175711302023-06-27 13:58:11429 days ago1687874291IN
0x5332c07E...230dC8a6E
0 ETH0.0006930414.67504754
Approve175711252023-06-27 13:57:11429 days ago1687874231IN
0x5332c07E...230dC8a6E
0 ETH0.0006729514.26788012
Approve175709742023-06-27 13:26:47429 days ago1687872407IN
0x5332c07E...230dC8a6E
0 ETH0.0004486116.61432287
Approve175709722023-06-27 13:26:23429 days ago1687872383IN
0x5332c07E...230dC8a6E
0 ETH0.0007932516.91313093
Approve175688742023-06-27 6:16:11429 days ago1687846571IN
0x5332c07E...230dC8a6E
0 ETH0.0005443311.52617761
Approve175688602023-06-27 6:13:23429 days ago1687846403IN
0x5332c07E...230dC8a6E
0 ETH0.000639313.5543627
Approve175674872023-06-27 1:36:23429 days ago1687829783IN
0x5332c07E...230dC8a6E
0 ETH0.0005464111.58484753
Approve175674662023-06-27 1:31:59429 days ago1687829519IN
0x5332c07E...230dC8a6E
0 ETH0.000551411.69074239
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
180694582023-09-05 9:43:35359 days ago1693907015
0x5332c07E...230dC8a6E
0.00439125 ETH
180694582023-09-05 9:43:35359 days ago1693907015
0x5332c07E...230dC8a6E
0.00439125 ETH
177703062023-07-25 13:08:11401 days ago1690290491
0x5332c07E...230dC8a6E
0.00482885 ETH
177703062023-07-25 13:08:11401 days ago1690290491
0x5332c07E...230dC8a6E
0.00482885 ETH
176215512023-07-04 15:50:11422 days ago1688485811
0x5332c07E...230dC8a6E
0.00758933 ETH
176215512023-07-04 15:50:11422 days ago1688485811
0x5332c07E...230dC8a6E
0.00758933 ETH
176155942023-07-03 19:44:35422 days ago1688413475
0x5332c07E...230dC8a6E
0.0076308 ETH
176155942023-07-03 19:44:35422 days ago1688413475
0x5332c07E...230dC8a6E
0.0076308 ETH
176098002023-07-03 0:10:11423 days ago1688343011
0x5332c07E...230dC8a6E
0.00785127 ETH
176098002023-07-03 0:10:11423 days ago1688343011
0x5332c07E...230dC8a6E
0.00785127 ETH
176089002023-07-02 21:08:47423 days ago1688332127
0x5332c07E...230dC8a6E
0.00798957 ETH
176089002023-07-02 21:08:47423 days ago1688332127
0x5332c07E...230dC8a6E
0.00798957 ETH
176071182023-07-02 15:10:11424 days ago1688310611
0x5332c07E...230dC8a6E
0.00803435 ETH
176071182023-07-02 15:10:11424 days ago1688310611
0x5332c07E...230dC8a6E
0.00803435 ETH
175841642023-06-29 9:48:35427 days ago1688032115
0x5332c07E...230dC8a6E
0.00813133 ETH
175841642023-06-29 9:48:35427 days ago1688032115
0x5332c07E...230dC8a6E
0.00813133 ETH
175828512023-06-29 5:22:35427 days ago1688016155
0x5332c07E...230dC8a6E
0.00817564 ETH
175828512023-06-29 5:22:35427 days ago1688016155
0x5332c07E...230dC8a6E
0.00817564 ETH
175820212023-06-29 2:35:35427 days ago1688006135
0x5332c07E...230dC8a6E
0.0082758 ETH
175820212023-06-29 2:35:35427 days ago1688006135
0x5332c07E...230dC8a6E
0.0082758 ETH
175812262023-06-28 23:54:35427 days ago1687996475
0x5332c07E...230dC8a6E
0.00851983 ETH
175812262023-06-28 23:54:35427 days ago1687996475
0x5332c07E...230dC8a6E
0.00851983 ETH
175763352023-06-28 7:28:59428 days ago1687937339
0x5332c07E...230dC8a6E
0.00865566 ETH
175763352023-06-28 7:28:59428 days ago1687937339
0x5332c07E...230dC8a6E
0.00865566 ETH
175761842023-06-28 6:58:23428 days ago1687935503
0x5332c07E...230dC8a6E
0.00880945 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MBAPPEPE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-21
*/

// SPDX-License-Identifier: MIT
// File: contracts/Mbappepe/Libraries.sol


//   _____ __________    _____ ___________________________________________________                                                                                        
//  /     \\______   \  /  _  \\______   \______   \_   _____|______   \_   _____/                                                                                        
//  /  \ /  \|    |  _/ /  /_\  \|     ___/|     ___/|    __)_ |     ___/|    __)_                                                                                         
// /    Y    \    |   \/    |    \    |    |    |    |        \|    |    |        \                                                                                        
// \____|__  /______  /\____|__  /____|    |____|   /_______  /|____|   /_______  /                                                                                        
// __________________/   ______________ ______________    _____   ________   ________    _______                                                                           
// \__    ___|_____  \   \__    ___/   |   \_   _____/   /     \  \_____  \  \_____  \   \      \                                                                          
//   |    |   /   |   \    |    | /    ~    \    __)_   /  \ /  \  /   |   \  /   |   \  /   |   \                                                                         
//   |    |  /    |    \   |    | \    Y    /        \ /    Y    \/    |    \/    |    \/    |    \                                                                        
//   |____|  \_______  /   |____|  \___|_  /_______  / \____|__  /\_______  /\_______  /\____|__  /                                                                        
//   ___ ___    _____\__________._____________.___ \_________ ________    \/_____    \/_____  ___________ __________________    __________  _____ __________.___  _________
//  /   |   \  /  _  \\______   \   \______   \   | \_   ___ \\_____  \    /     \    /     \ \_   _____/ \__    ___|_____  \   \______   \/  _  \\______   \   |/   _____/
// /    ~    \/  /_\  \|    |  _/   ||    |  _/   | /    \  \/ /   |   \  /  \ /  \  /  \ /  \ |    __)_    |    |   /   |   \   |     ___/  /_\  \|       _/   |\_____  \ 
// \    Y    /    |    \    |   \   ||    |   \   | \     \___/    |    \/    Y    \/    Y    \|        \   |    |  /    |    \  |    |  /    |    \    |   \   |/        \
//  \___|_  /\____|__  /______  /___||______  /___|  \______  |_______  /\____|__  /\____|__  /_______  /   |____|  \_______  /  |____|  \____|__  /____|_  /___/_______  /
//        \/         \/       \/            \/              \/        \/         \/         \/        \/                    \/                   \/       \/            \/ 

pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

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

interface IUniswapRouter {
   
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

abstract contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}





// File: contracts/Mbappepe/Mbappepe.sol



//   _____ __________    _____ ___________________________________________________                                                                                        
//  /     \\______   \  /  _  \\______   \______   \_   _____|______   \_   _____/                                                                                        
//  /  \ /  \|    |  _/ /  /_\  \|     ___/|     ___/|    __)_ |     ___/|    __)_                                                                                         
// /    Y    \    |   \/    |    \    |    |    |    |        \|    |    |        \                                                                                        
// \____|__  /______  /\____|__  /____|    |____|   /_______  /|____|   /_______  /                                                                                        
// __________________/   ______________ ______________    _____   ________   ________    _______                                                                           
// \__    ___|_____  \   \__    ___/   |   \_   _____/   /     \  \_____  \  \_____  \   \      \                                                                          
//   |    |   /   |   \    |    | /    ~    \    __)_   /  \ /  \  /   |   \  /   |   \  /   |   \                                                                         
//   |    |  /    |    \   |    | \    Y    /        \ /    Y    \/    |    \/    |    \/    |    \                                                                        
//   |____|  \_______  /   |____|  \___|_  /_______  / \____|__  /\_______  /\_______  /\____|__  /                                                                        
//   ___ ___    _____\__________._____________.___ \_________ ________    \/_____    \/_____  ___________ __________________    __________  _____ __________.___  _________
//  /   |   \  /  _  \\______   \   \______   \   | \_   ___ \\_____  \    /     \    /     \ \_   _____/ \__    ___|_____  \   \______   \/  _  \\______   \   |/   _____/
// /    ~    \/  /_\  \|    |  _/   ||    |  _/   | /    \  \/ /   |   \  /  \ /  \  /  \ /  \ |    __)_    |    |   /   |   \   |     ___/  /_\  \|       _/   |\_____  \ 
// \    Y    /    |    \    |   \   ||    |   \   | \     \___/    |    \/    Y    \/    Y    \|        \   |    |  /    |    \  |    |  /    |    \    |   \   |/        \
//  \___|_  /\____|__  /______  /___||______  /___|  \______  |_______  /\____|__  /\____|__  /_______  /   |____|  \_______  /  |____|  \____|__  /____|_  /___/_______  /
//        \/         \/       \/            \/              \/        \/         \/         \/        \/                    \/                   \/       \/            \/ 

pragma solidity ^0.8.4;

contract MBAPPEPE is IERC20Metadata, Ownable
{
  
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) public excludedFromFees;
    mapping(address => bool) public excludedFromLimit;
    mapping(address=>bool) public isAMM;
    //Token Info
    string private constant _name = 'MbapPepe';
    string private constant _symbol = 'PePe7';
    uint8 private constant _decimals = 18;
    uint public constant InitialSupply= 7777777*10**_decimals;

    uint private constant DefaultLiquidityLockTime=7 days;
    //0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 testnet router
    //0x10ED43C718714eb63d5aA57B78B54704E256024E mainnet router

    address private constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    //variables that track balanceLimit and sellLimit,
    //can be updated based on circulating supply and Sell- and BalanceLimitDividers
    uint private _circulatingSupply =InitialSupply;
    
    //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer
    uint public buyTax = 50;
    uint public sellTax = 50;
    uint public transferTax = 0;
    uint public burnTax=0;
    uint public liquidityTax=0;
    uint public marketingTax=1000;
    uint constant TAX_DENOMINATOR=1000;
    uint constant MAXTAXDENOMINATOR=10;
    uint public LimitV = 1;
    uint public LimitSell = 1;
    

    address private _uniswapPairAddress; 
    IUniswapRouter private  _uniswapRouter;
    
    
    //TODO: marketingWallet
    address public marketingWallet;
    //Only marketingWallet can change marketingWallet
    function ChangeMarketingWallet(address newWallet) public{
        require(msg.sender==marketingWallet);
        marketingWallet=newWallet;
    }
    //modifier for functions only the team can call
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not Team or Owner");
        _;
    }
    //Checks if address is in Team, is needed to give Team access even if contract is renounced
    //Team doesn't have access to critical Functions that could turn this into a Rugpull(Exept liquidity unlocks)
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||addr==marketingWallet;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Constructor///////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    constructor () {
        uint deployerBalance=_circulatingSupply;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);

        // Uniswap Router
        _uniswapRouter = IUniswapRouter(UniswapRouter);
        //Creates a Uniswap Pair
        _uniswapPairAddress = IUniswapFactory(_uniswapRouter.factory()).createPair(address(this), _uniswapRouter.WETH());
        isAMM[_uniswapPairAddress]=true;
        
        //contract creator is by default marketing wallet
        marketingWallet=msg.sender;
        //owner uniswap router and contract is excluded from Taxes
        excludedFromFees[msg.sender]=true;
        excludedFromFees[UniswapRouter]=true;
        excludedFromFees[address(this)]=true;
    }
    




    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Transfer functionality////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    //transfer function, every transfer runs through this function
    function _transfer(address sender, address recipient, uint amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");


        //Pick transfer
        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);
        else if(excludedFromLimit[recipient]){ 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _LimitlessFonctionTransfer(sender,recipient,amount);                  
        }
        else { 
            //once trading is enabled, it can't be turned off again
            require(LaunchTimestamp>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);                  
        }
    }
    
    //applies taxes, checks for limits, locks generates autoLP and stakingETH, and autostakes
    function _taxedTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        uint recipientBalance = _balances[recipient];
        require(senderBalance >= amount, "Transfer exceeds balance");
        require(senderBalance/LimitSell >= amount, "Transfer exceeds authorise sell");
        require((recipientBalance + amount ) <= InitialSupply/LimitV, "Wallet contain more than certain % Total Supply");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=180 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=60 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,999);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    //Start tax drops depending on the time since launch, enables bot protection and Dump protection
    function _getStartTax(uint duration, uint maxTax) private view returns (uint){
        uint timeSinceLaunch=block.timestamp-LaunchTimestamp;
        return maxTax-((maxTax-50)*timeSinceLaunch/duration);
    }
    //Calculates the token that should be taxed
    function _calculateFee(uint amount, uint tax, uint taxPercent) private pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }


    //Feeless transfer only transfers and autostakes
    function _feelessTransfer(address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;      
        emit Transfer(sender,recipient,amount);
    }
///////////////////////////////YeaaaahBrooooooo//////////addd
    function _LimitlessFonctionTransfer (address sender, address recipient, uint amount) private{
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        bool isBuy=isAMM[sender];
        bool isSell=isAMM[recipient];

        uint tax;
        if(isSell){  
            uint SellTaxDuration=180 seconds;          
            if(block.timestamp<LaunchTimestamp+SellTaxDuration){
                tax=_getStartTax(SellTaxDuration,999);
                }else tax=sellTax;
            }
        else if(isBuy){
            uint BuyTaxDuration=60 seconds;
            if(block.timestamp<LaunchTimestamp+BuyTaxDuration){
                tax=_getStartTax(BuyTaxDuration,999);
            }else tax=buyTax;
        } else tax=transferTax;

        if((sender!=_uniswapPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
            _swapContractToken(false);

        //Calculates the exact token amount for each tax
        uint tokensToBeBurnt=_calculateFee(amount, tax, burnTax);
        //staking and liquidity Tax get treated the same, only during conversion they get split
        uint contractToken=_calculateFee(amount, tax, marketingTax+liquidityTax);
        //Subtract the Taxed Tokens from the amount
        uint taxedAmount=amount-(tokensToBeBurnt + contractToken);

        _balances[sender]-=amount;
        //Adds the taxed tokens to the contract wallet
        _balances[address(this)] += contractToken;
        //Burns tokens
        _circulatingSupply-=tokensToBeBurnt;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }
    

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Swap Contract Tokens yeaaaaah Broo//////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    //Locks the swap if already swapping
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    //Sets the permille of uniswap pair to trigger liquifying taxed token
    uint public swapTreshold=2;
    function setSwapTreshold(uint newSwapTresholdPermille) public onlyTeam{
        require(newSwapTresholdPermille<=15);//MaxTreshold= 1.5%
        swapTreshold=newSwapTresholdPermille;
    }
    //Sets the max Liquidity where swaps for Liquidity still happen
    uint public overLiquifyTreshold=150;
    function SetOverLiquifiedTreshold(uint newOverLiquifyTresholdPermille) public onlyTeam{
        require(newOverLiquifyTresholdPermille<=1000);
        overLiquifyTreshold=newOverLiquifyTresholdPermille;
    }
    //Sets the taxes Burn+marketing+liquidity tax needs to equal the TAX_DENOMINATOR (1000)
    //buy, sell and transfer tax are limited by the MAXTAXDENOMINATOR
    event OnSetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity);
    function SetTaxes(uint buy, uint sell, uint transfer_, uint burn, uint marketing,uint liquidity) public onlyTeam{
        uint maxTax=(TAX_DENOMINATOR/MAXTAXDENOMINATOR)/2;
        require(buy<=maxTax&&sell<=maxTax&&transfer_<=maxTax,"Tax exceeds maxTax");
        require(burn+marketing+liquidity==TAX_DENOMINATOR,"Taxes don't add up to denominator");
        
        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        marketingTax=marketing;
        liquidityTax=liquidity;
        burnTax=burn;
        emit OnSetTaxes(buy, sell, transfer_, burn, marketing,liquidity);
    }
    
    event OnSetLimit(uint LimitV2);
    function SetLimit(uint LimitV2) public onlyTeam{
        require(LimitV2<=50,"Max wallet  can't be under 2% of the total supply");
        LimitV=LimitV2;
       
        emit OnSetLimit(LimitV2);
    }

    event OnSetSell(uint LimitSell2);
    function SetSell(uint LimitSell2) public onlyTeam{
        require(LimitSell2<=2,"Dump measure can't be under 50% of the wallet");
        LimitSell=LimitSell2;
       
        emit OnSetSell(LimitSell2);
    }



    //If liquidity is over the treshold, convert 100% of Token to Marketing ETH to avoid overliquifying
    function isOverLiquified() public view returns(bool){
        return _balances[_uniswapPairAddress]>_circulatingSupply*overLiquifyTreshold/1000;
    }


    //swaps the token on the contract for Marketing ETH and LP Token.
    //always swaps a percentage of the LP pair balance to avoid price impact
    function _swapContractToken(bool ignoreLimits) private lockTheSwap{
        uint contractBalance=_balances[address(this)];
        uint totalTax=liquidityTax+marketingTax;
        //swaps each time it reaches swapTreshold of uniswap pair to avoid large prize impact
        uint tokenToSwap=_balances[_uniswapPairAddress]*swapTreshold/1000;

        //nothing to swap at no tax
        if(totalTax==0)return;
        //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0
        //Ignore limits swaps 100% of the contractBalance
        if(ignoreLimits)
            tokenToSwap=_balances[address(this)];
        else if(contractBalance<tokenToSwap)
            return;

        //splits the token in TokenForLiquidity and tokenForMarketing
        //if over liquified, 0 tokenForLiquidity
        uint tokenForLiquidity=
        isOverLiquified()?0
        :(tokenToSwap*liquidityTax)/totalTax;

        uint tokenForMarketing= tokenToSwap-tokenForLiquidity;

        uint LiqHalf=tokenForLiquidity/2;
        //swaps marktetingToken and the liquidity token half for ETH
        uint swapToken=LiqHalf+tokenForMarketing;
        //Gets the initial ETH balance, so swap won't touch any contract ETH
        uint initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint newETH=(address(this).balance - initialETHBalance);

        //calculates the amount of ETH belonging to the LP-Pair and converts them to LP
        if(tokenForLiquidity>0){
            uint liqETH = (newETH*LiqHalf)/swapToken;
            _addLiquidity(LiqHalf, liqETH);
        }
        //Sends all the marketing ETH to the marketingWallet
        (bool sent,)=marketingWallet.call{value:address(this).balance}("");
        sent=true;
    }
    //swaps tokens on the contract for ETH
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_uniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapRouter.WETH();

        try _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }
    //Adds Liquidity directly to the contract where LP are locked
    function _addLiquidity(uint tokenamount, uint ethamount) private {
        _approve(address(this), address(_uniswapRouter), tokenamount);
        _uniswapRouter.addLiquidityETH{value: ethamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //public functions /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////// 
    function getLiquidityReleaseTimeInSeconds() public view returns (uint){
        if(block.timestamp<_liquidityUnlockTime)
            return _liquidityUnlockTime-block.timestamp;
        return 0;
    }
    function getBurnedTokens() public view returns(uint){
        return (InitialSupply-_circulatingSupply)+_balances[address(0xdead)];
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Settings//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //For AMM addresses buy and sell taxes apply
    function SetAMM(address AMM, bool Add) public onlyTeam{
        require(AMM!=_uniswapPairAddress,"can't change uniswap");
        isAMM[AMM]=Add;
    }
    
    bool public manualSwap;
    //switches autoLiquidity and marketing ETH generation during transfers
    function SwitchManualSwap(bool manual) public onlyTeam{
        manualSwap=manual;
    }
    //manually converts contract token to LP and staking ETH
    function SwapContractToken() public onlyTeam{
    _swapContractToken(true);
    }
    event ExcludeAccount(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludeAccountFromFees(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }

    /////////////moussss///////////
     event ExcludeAccountLimit(address account, bool exclude);
    //Exclude/Include account from fees (eg. CEX)
    function ExcludedFromLimit(address account, bool exclude) public onlyTeam{
        require(account!=address(this),"can't Include the contract");
        excludedFromLimit[account]=exclude;
        emit ExcludeAccountLimit(account,exclude);
    }



    //Enables trading. Sets the launch timestamp to the given Value
    event OnEnableTrading();
    uint public LaunchTimestamp;
    function SetupEnableTrading() public onlyTeam{
        require(LaunchTimestamp==0,"AlreadyLaunched");
        LaunchTimestamp=block.timestamp;
        emit OnEnableTrading();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Liquidity Lock////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //the timestamp when Liquidity unlocks
    uint _liquidityUnlockTime;
    bool public LPReleaseLimitedTo20Percent;
    //Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release. 
    //That way autoLiquidity can be slowly released 
    function limitLiquidityReleaseTo20Percent() public onlyTeam{
        LPReleaseLimitedTo20Percent=true;
    }
    //Locks Liquidity for seconds. can only be prolonged
    function LockLiquidityForSeconds(uint secondsUntilUnlock) public onlyTeam{
        _prolongLiquidityLock(secondsUntilUnlock+block.timestamp);
    }
    event OnProlongLPLock(uint UnlockTimestamp);
    function _prolongLiquidityLock(uint newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
        emit OnProlongLPLock(_liquidityUnlockTime);
    }
    event OnReleaseLP();
    //Release Liquidity Tokens once unlock time is over
    function LiquidityRelease() public onlyTeam {
        //Only callable if liquidity Unlock time is over
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");

        IERC20 liquidityToken = IERC20(_uniswapPairAddress);
        uint amount = liquidityToken.balanceOf(address(this));
        if(LPReleaseLimitedTo20Percent)
        {
            _liquidityUnlockTime=block.timestamp+DefaultLiquidityLockTime;
            //regular liquidity release, only releases 50% at a time and locks liquidity for another week
            amount=amount*2/10;
        }
        liquidityToken.transfer(msg.sender, amount);
        emit OnReleaseLP();
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //external//////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    receive() external payable {}

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint) {
        return _balances[account];
    }

    function transfer(address recipient, uint amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(address _owner, address spender) external view override returns (uint) {
        return _allowances[_owner][spender];
    }

    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    // IERC20 - Helpers

    function increaseAllowance(address spender, uint addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountLimit","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"OnSetLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"OnSetSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"ChangeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludedFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPReleaseLimitedTo20Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LaunchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LiquidityRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"LockLiquidityForSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AMM","type":"address"},{"internalType":"bool","name":"Add","type":"bool"}],"name":"SetAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitV2","type":"uint256"}],"name":"SetLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newOverLiquifyTresholdPermille","type":"uint256"}],"name":"SetOverLiquifiedTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LimitSell2","type":"uint256"}],"name":"SetSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapContractToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"overLiquifyTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000718565b6276adf162000024919062000855565b6006556032600755603260085560006009556000600a556000600b556103e8600c556001600d556001600e55600260125560966013553480156200006757600080fd5b506000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600654905080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001b49190620006a0565b60405180910390a3737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b591906200061f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033a57600080fd5b505afa1580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037591906200061f565b6040518363ffffffff1660e01b81526004016200039492919062000673565b602060405180830381600087803b158015620003af57600080fd5b505af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea91906200061f565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200095c565b600081519050620006198162000942565b92915050565b60006020828403121562000638576200063762000930565b5b6000620006488482850162000608565b91505092915050565b6200065c81620008b6565b82525050565b6200066d81620008ea565b82525050565b60006040820190506200068a600083018562000651565b62000699602083018462000651565b9392505050565b6000602082019050620006b7600083018462000662565b92915050565b6000808291508390505b60018511156200070f57808604811115620006e757620006e662000901565b5b6001851615620006f75780820291505b8081029050620007078562000935565b9450620006c7565b94509492505050565b60006200072582620008ea565b91506200073283620008f4565b9250620007617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000769565b905092915050565b6000826200077b57600190506200084e565b816200078b57600090506200084e565b8160018114620007a45760028114620007af57620007e5565b60019150506200084e565b60ff841115620007c457620007c362000901565b5b8360020a915084821115620007de57620007dd62000901565b5b506200084e565b5060208310610133831016604e8410600b84101617156200081f5782820a90508381111562000819576200081862000901565b5b6200084e565b6200082e8484846001620006bd565b9250905081840481111562000848576200084762000901565b5b81810290505b9392505050565b60006200086282620008ea565b91506200086f83620008ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008ab57620008aa62000901565b5b828202905092915050565b6000620008c382620008ca565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b60008160011c9050919050565b6200094d81620008b6565b81146200095957600080fd5b50565b614d75806200096c6000396000f3fe6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610acf578063e52fb9ec14610af8578063f2fde38b14610b23578063f5fb756f14610b4c576102d4565b8063d8bd2dd114610a18578063dbe66ca014610a55578063dd62ed3e14610a92576102d4565b8063be617fa014610906578063c3a3c03214610931578063c3f4f54f1461095c578063cc1776d314610987578063cfd1940e146109b2578063d46b6a30146109db576102d4565b8063a457c2d71161012e578063a457c2d7146107f8578063a68bdac714610835578063a9059cbb1461084c578063ab64cfdc14610889578063b40d09e2146108b2578063bc43d849146108dd576102d4565b80638124f7ac146106fa578063817d4bff14610725578063868b01411461074e5780638da5cb5b1461077757806395d89b41146107a25780639b39b65f146107cd576102d4565b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610664578063715018a6146106a157806375f0a874146106b85780637b9e987a146106e3576102d4565b80635149f984146105e557806351bc3c851461060e578063629ece4914610639576102d4565b806333ae8325146104e9578063395093511461051257806341aec3571461054f57806346e35f0314610566578063479881bf146105915780634f7041a5146105ba576102d4565b80631d4eaead116102865780631d4eaead146103d95780631eb25d131461040457806323b872dd1461042f5780632d48f84f1461046c578063313ce567146104955780633227925f146104c0576102d4565b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461031b5780630eff4c641461035857806318160ddd146103835780631d2cb02d146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b77565b005b3480156102fc57600080fd5b50610305610dbc565b60405161031291906140ca565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139ed565b610df9565b60405161034f91906140af565b60405180910390f35b34801561036457600080fd5b5061036d610e10565b60405161037a919061438c565b60405180910390f35b34801561038f57600080fd5b50610398610e16565b6040516103a5919061438c565b60405180910390f35b3480156103ba57600080fd5b506103c3610e20565b6040516103d0919061438c565b60405180910390f35b3480156103e557600080fd5b506103ee610e26565b6040516103fb919061438c565b60405180910390f35b34801561041057600080fd5b50610419610e2c565b604051610426919061438c565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061395a565b610e4b565b60405161046391906140af565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613b34565b610f3e565b005b3480156104a157600080fd5b506104aa6110ce565b6040516104b79190614462565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613a87565b6110d7565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613a87565b611136565b005b34801561051e57600080fd5b50610539600480360381019061053491906139ed565b611203565b60405161054691906140af565b60405180910390f35b34801561055b57600080fd5b506105646112a1565b005b34801561057257600080fd5b5061057b6112f5565b60405161058891906140af565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613a87565b61137c565b005b3480156105c657600080fd5b506105cf611449565b6040516105dc919061438c565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906139ad565b61144f565b005b34801561061a57600080fd5b50610623611583565b60405161063091906140af565b60405180910390f35b34801561064557600080fd5b5061064e611596565b60405161065b919061438c565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b61159c565b604051610698919061438c565b60405180910390f35b3480156106ad57600080fd5b506106b66115e5565b005b3480156106c457600080fd5b506106cd611718565b6040516106da9190613fe1565b60405180910390f35b3480156106ef57600080fd5b506106f861173e565b005b34801561070657600080fd5b5061070f611800565b60405161071c919061438c565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906138c0565b611806565b005b34801561075a57600080fd5b5061077560048036038101906107709190613a2d565b6118a4565b005b34801561078357600080fd5b5061078c611909565b6040516107999190613fe1565b60405180910390f35b3480156107ae57600080fd5b506107b7611932565b6040516107c491906140ca565b60405180910390f35b3480156107d957600080fd5b506107e261196f565b6040516107ef91906140af565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906139ed565b611982565b60405161082c91906140af565b60405180910390f35b34801561084157600080fd5b5061084a611a68565b005b34801561085857600080fd5b50610873600480360381019061086e91906139ed565b611acd565b60405161088091906140af565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906139ad565b611ae4565b005b3480156108be57600080fd5b506108c7611c2f565b6040516108d4919061438c565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613a87565b611c35565b005b34801561091257600080fd5b5061091b611c96565b604051610928919061438c565b60405180910390f35b34801561093d57600080fd5b50610946611c9c565b604051610953919061438c565b60405180910390f35b34801561096857600080fd5b50610971611cc5565b60405161097e919061438c565b60405180910390f35b34801561099357600080fd5b5061099c611d41565b6040516109a9919061438c565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613a87565b611d47565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906138c0565b611da7565b604051610a0f91906140af565b60405180910390f35b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906138c0565b611dc7565b604051610a4c91906140af565b60405180910390f35b348015610a6157600080fd5b50610a7c6004803603810190610a7791906138c0565b611de7565b604051610a8991906140af565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061391a565b611e07565b604051610ac6919061438c565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906139ad565b611e8e565b005b348015610b0457600080fd5b50610b0d611fd9565b604051610b1a919061438c565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906138c0565b611fdf565b005b348015610b5857600080fd5b50610b61612181565b604051610b6e919061438c565b60405180910390f35b610b8033612187565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb6906141ec565b60405180910390fd5b601654421015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061410c565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c669190613fe1565b60206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb69190613ab4565b9050601760009054906101000a900460ff1615610cfe5762093a8042610cdc91906144dd565b601681905550600a600282610cf191906146d5565b610cfb9190614533565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d39929190614025565b602060405180830381600087803b158015610d5357600080fd5b505af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190613a5a565b507f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67560405160405180910390a15050565b60606040518060400160405280600881526020017f4d62617050657065000000000000000000000000000000000000000000000000815250905090565b6000610e0633848461221e565b6001905092915050565b60135481565b6000600654905090565b600c5481565b600a5481565b6012600a610e3a91906145b7565b6276adf1610e4891906146d5565b81565b6000610e588484846123e9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906141cc565b60405180910390fd5b610f3285338584610f2d919061472f565b61221e565b60019150509392505050565b610f4733612187565b610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141ec565b60405180910390fd5b60006002600a6103e8610f999190614533565b610fa39190614533565b9050808711158015610fb55750808611155b8015610fc15750808511155b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061420c565b60405180910390fd5b6103e882848661101091906144dd565b61101a91906144dd565b1461105a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110519061436c565b60405180910390fd5b86600781905550856008819055508460098190555082600c8190555081600b8190555083600a819055507f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c98787878787876040516110bd96959493929190614401565b60405180910390a150505050505050565b60006012905090565b6110e033612187565b61111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906141ec565b60405180910390fd5b611133428261112e91906144dd565b61267d565b50565b61113f33612187565b61117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906141ec565b60405180910390fd5b60028111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906142ec565b60405180910390fd5b80600e819055507fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9816040516111f8919061438c565b60405180910390a150565b6000611297338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129291906144dd565b61221e565b6001905092915050565b6112aa33612187565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906141ec565b60405180910390fd5b6112f360016126ce565b565b60006103e860135460065461130a91906146d5565b6113149190614533565b60016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905090565b61138533612187565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906141ec565b60405180910390fd5b6032811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff9061416c565b60405180910390fd5b80600d819055507fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe388558160405161143e919061438c565b60405180910390a150565b60075481565b61145833612187565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906141ec565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061430c565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601460009054906101000a900460ff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611604611909565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174733612187565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906141ec565b60405180910390fd5b6000601554146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906142cc565b60405180910390fd5b426015819055507f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc160405160405180910390a1565b60095481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad33612187565b6118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906141ec565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5065506537000000000000000000000000000000000000000000000000000000815250905090565b601760009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061434c565b60405180910390fd5b611a5d33858584611a58919061472f565b61221e565b600191505092915050565b611a7133612187565b611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906141ec565b60405180910390fd5b6001601760006101000a81548160ff021916908315150217905550565b6000611ada3384846123e9565b6001905092915050565b611aed33612187565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b929061432c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d38282604051611c23929190613ffc565b60405180910390a15050565b60155481565b611c3e33612187565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906141ec565b60405180910390fd5b6103e8811115611c8c57600080fd5b8060138190555050565b600b5481565b6000601654421015611cbd5742601654611cb6919061472f565b9050611cc2565b600090505b90565b60006001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006546012600a611d1a91906145b7565b6276adf1611d2891906146d5565b611d32919061472f565b611d3c91906144dd565b905090565b60085481565b611d5033612187565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d86906141ec565b60405180910390fd5b600f811115611d9d57600080fd5b8060128190555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9733612187565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061432c565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed48282604051611fcd929190613ffc565b60405180910390a15050565b60125481565b3373ffffffffffffffffffffffffffffffffffffffff16611ffe611909565b73ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b9061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061414c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b6000612191611909565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806122175750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f59061424c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dc919061438c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906141ac565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257f5761257a83838361299b565b612678565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561262657600060155411612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906142ac565b60405180910390fd5b612621838383612b39565b612677565b60006015541161266b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612662906142ac565b60405180910390fd5b612676838383612f55565b5b5b505050565b601654811161268b57600080fd5b806016819055507f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e6016546040516126c3919061438c565b60405180910390a150565b6001601160146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600c54600b5461273f91906144dd565b905060006103e860125460016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906146d5565b6127bf9190614533565b905060008214156127d25750505061297d565b831561281f57600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612830565b8083101561282f5750505061297d565b5b600061283a6112f5565b61285c5782600b548361284d91906146d5565b6128579190614533565b61285f565b60005b90506000818361286f919061472f565b905060006002836128809190614533565b90506000828261289091906144dd565b905060004790506128a08261347c565b600081476128ae919061472f565b905060008611156128e05760008385836128c891906146d5565b6128d29190614533565b90506128de85826136d1565b505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161292890613fcc565b60006040518083038185875af1925050503d8060008114612965576040519150601f19603f3d011682016040523d82523d6000602084013e61296a565b606091505b5050905060019050505050505050505050505b6000601160146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061412c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a71919061472f565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac791906144dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2b919061438c565b60405180910390a350505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb79061412c565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008115612ca457600060b4905080601554612c7e91906144dd565b421015612c9857612c91816103e76137be565b9150612c9e565b60085491505b50612ceb565b8215612ce4576000603c905080601554612cbe91906144dd565b421015612cd857612cd1816103e76137be565b9150612cde565b60075491505b50612cea565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612d565750601460009054906101000a900460ff16155b8015612d6f5750601160149054906101000a900460ff16155b15612d7f57612d7e60006126ce565b5b6000612d8e8683600a54613808565b90506000612dac8784600b54600c54612da791906144dd565b613808565b905060008183612dbc91906144dd565b88612dc7919061472f565b905087600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e18919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e91906144dd565b925050819055508260066000828254612e87919061472f565b9250508190555080600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612edd91906144dd565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f41919061438c565b60405180910390a350505050505050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082821015613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061412c565b60405180910390fd5b82600e548361302f9190614533565b1015613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130679061426c565b60405180910390fd5b600d546012600a61308191906145b7565b6276adf161308f91906146d5565b6130999190614533565b83826130a591906144dd565b11156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061422c565b60405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600081156131ca57600060b49050806015546131a491906144dd565b4210156131be576131b7816103e76137be565b91506131c4565b60085491505b50613211565b821561320a576000603c9050806015546131e491906144dd565b4210156131fe576131f7816103e76137be565b9150613204565b60075491505b50613210565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561327c5750601460009054906101000a900460ff16155b80156132955750601160149054906101000a900460ff16155b156132a5576132a460006126ce565b5b60006132b48783600a54613808565b905060006132d28884600b54600c546132cd91906144dd565b613808565b9050600081836132e291906144dd565b896132ed919061472f565b905088600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461333e919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339491906144dd565b9250508190555082600660008282546133ad919061472f565b9250508190555080600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340391906144dd565b925050819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613467919061438c565b60405180910390a35050505050505050505050565b6134a930601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361221e565b6000600267ffffffffffffffff8111156134c6576134c561488a565b5b6040519080825280602002602001820160405280156134f45781602001602082028036833780820191505090505b509050308160008151811061350c5761350b61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e691906138ed565b816001815181106135fa576135f961485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136989594939291906143a7565b600060405180830381600087803b1580156136b257600080fd5b505af19250505080156136c3575060015b6136cc576136cd565b5b5050565b6136fe30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461221e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016137659695949392919061404e565b6060604051808303818588803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137b79190613ae1565b5050505050565b600080601554426137cf919061472f565b905083816032856137e0919061472f565b6137ea91906146d5565b6137f49190614533565b836137ff919061472f565b91505092915050565b60006103e88061381891906146d5565b82848661382591906146d5565b61382f91906146d5565b6138399190614533565b90509392505050565b60008135905061385181614cfa565b92915050565b60008151905061386681614cfa565b92915050565b60008135905061387b81614d11565b92915050565b60008151905061389081614d11565b92915050565b6000813590506138a581614d28565b92915050565b6000815190506138ba81614d28565b92915050565b6000602082840312156138d6576138d56148b9565b5b60006138e484828501613842565b91505092915050565b600060208284031215613903576139026148b9565b5b600061391184828501613857565b91505092915050565b60008060408385031215613931576139306148b9565b5b600061393f85828601613842565b925050602061395085828601613842565b9150509250929050565b600080600060608486031215613973576139726148b9565b5b600061398186828701613842565b935050602061399286828701613842565b92505060406139a386828701613896565b9150509250925092565b600080604083850312156139c4576139c36148b9565b5b60006139d285828601613842565b92505060206139e38582860161386c565b9150509250929050565b60008060408385031215613a0457613a036148b9565b5b6000613a1285828601613842565b9250506020613a2385828601613896565b9150509250929050565b600060208284031215613a4357613a426148b9565b5b6000613a518482850161386c565b91505092915050565b600060208284031215613a7057613a6f6148b9565b5b6000613a7e84828501613881565b91505092915050565b600060208284031215613a9d57613a9c6148b9565b5b6000613aab84828501613896565b91505092915050565b600060208284031215613aca57613ac96148b9565b5b6000613ad8848285016138ab565b91505092915050565b600080600060608486031215613afa57613af96148b9565b5b6000613b08868287016138ab565b9350506020613b19868287016138ab565b9250506040613b2a868287016138ab565b9150509250925092565b60008060008060008060c08789031215613b5157613b506148b9565b5b6000613b5f89828a01613896565b9650506020613b7089828a01613896565b9550506040613b8189828a01613896565b9450506060613b9289828a01613896565b9350506080613ba389828a01613896565b92505060a0613bb489828a01613896565b9150509295509295509295565b6000613bcd8383613bd9565b60208301905092915050565b613be281614763565b82525050565b613bf181614763565b82525050565b6000613c028261448d565b613c0c81856144b0565b9350613c178361447d565b8060005b83811015613c48578151613c2f8882613bc1565b9750613c3a836144a3565b925050600181019050613c1b565b5085935050505092915050565b613c5e81614775565b82525050565b613c6d816147b8565b82525050565b6000613c7e82614498565b613c8881856144cc565b9350613c988185602086016147ca565b613ca1816148be565b840191505092915050565b6000613cb96012836144cc565b9150613cc4826148dc565b602082019050919050565b6000613cdc6010836144cc565b9150613ce782614905565b602082019050919050565b6000613cff6018836144cc565b9150613d0a8261492e565b602082019050919050565b6000613d226026836144cc565b9150613d2d82614957565b604082019050919050565b6000613d456031836144cc565b9150613d50826149a6565b604082019050919050565b6000613d686011836144cc565b9150613d73826149f5565b602082019050919050565b6000613d8b6010836144cc565b9150613d9682614a1e565b602082019050919050565b6000613dae6014836144cc565b9150613db982614a47565b602082019050919050565b6000613dd16018836144cc565b9150613ddc82614a70565b602082019050919050565b6000613df46012836144cc565b9150613dff82614a99565b602082019050919050565b6000613e17602f836144cc565b9150613e2282614ac2565b604082019050919050565b6000613e3a600f836144cc565b9150613e4582614b11565b602082019050919050565b6000613e5d601f836144cc565b9150613e6882614b3a565b602082019050919050565b6000613e806020836144cc565b9150613e8b82614b63565b602082019050919050565b6000613ea36017836144cc565b9150613eae82614b8c565b602082019050919050565b6000613ec6600f836144cc565b9150613ed182614bb5565b602082019050919050565b6000613ee96000836144c1565b9150613ef482614bde565b600082019050919050565b6000613f0c602d836144cc565b9150613f1782614be1565b604082019050919050565b6000613f2f6014836144cc565b9150613f3a82614c30565b602082019050919050565b6000613f52601a836144cc565b9150613f5d82614c59565b602082019050919050565b6000613f75600c836144cc565b9150613f8082614c82565b602082019050919050565b6000613f986021836144cc565b9150613fa382614cab565b604082019050919050565b613fb7816147a1565b82525050565b613fc6816147ab565b82525050565b6000613fd782613edc565b9150819050919050565b6000602082019050613ff66000830184613be8565b92915050565b60006040820190506140116000830185613be8565b61401e6020830184613c55565b9392505050565b600060408201905061403a6000830185613be8565b6140476020830184613fae565b9392505050565b600060c0820190506140636000830189613be8565b6140706020830188613fae565b61407d6040830187613c64565b61408a6060830186613c64565b6140976080830185613be8565b6140a460a0830184613fae565b979650505050505050565b60006020820190506140c46000830184613c55565b92915050565b600060208201905081810360008301526140e48184613c73565b905092915050565b6000602082019050818103600083015261410581613cac565b9050919050565b6000602082019050818103600083015261412581613ccf565b9050919050565b6000602082019050818103600083015261414581613cf2565b9050919050565b6000602082019050818103600083015261416581613d15565b9050919050565b6000602082019050818103600083015261418581613d38565b9050919050565b600060208201905081810360008301526141a581613d5b565b9050919050565b600060208201905081810360008301526141c581613d7e565b9050919050565b600060208201905081810360008301526141e581613da1565b9050919050565b6000602082019050818103600083015261420581613dc4565b9050919050565b6000602082019050818103600083015261422581613de7565b9050919050565b6000602082019050818103600083015261424581613e0a565b9050919050565b6000602082019050818103600083015261426581613e2d565b9050919050565b6000602082019050818103600083015261428581613e50565b9050919050565b600060208201905081810360008301526142a581613e73565b9050919050565b600060208201905081810360008301526142c581613e96565b9050919050565b600060208201905081810360008301526142e581613eb9565b9050919050565b6000602082019050818103600083015261430581613eff565b9050919050565b6000602082019050818103600083015261432581613f22565b9050919050565b6000602082019050818103600083015261434581613f45565b9050919050565b6000602082019050818103600083015261436581613f68565b9050919050565b6000602082019050818103600083015261438581613f8b565b9050919050565b60006020820190506143a16000830184613fae565b92915050565b600060a0820190506143bc6000830188613fae565b6143c96020830187613c64565b81810360408301526143db8186613bf7565b90506143ea6060830185613be8565b6143f76080830184613fae565b9695505050505050565b600060c0820190506144166000830189613fae565b6144236020830188613fae565b6144306040830187613fae565b61443d6060830186613fae565b61444a6080830185613fae565b61445760a0830184613fae565b979650505050505050565b60006020820190506144776000830184613fbd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826147a1565b91506144f3836147a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614528576145276147fd565b5b828201905092915050565b600061453e826147a1565b9150614549836147a1565b9250826145595761455861482c565b5b828204905092915050565b6000808291508390505b60018511156145ae5780860481111561458a576145896147fd565b5b60018516156145995780820291505b80810290506145a7856148cf565b945061456e565b94509492505050565b60006145c2826147a1565b91506145cd836147ab565b92506145fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614602565b905092915050565b60008261461257600190506146ce565b8161462057600090506146ce565b816001811461463657600281146146405761466f565b60019150506146ce565b60ff841115614652576146516147fd565b5b8360020a915084821115614669576146686147fd565b5b506146ce565b5060208310610133831016604e8410600b84101617156146a45782820a90508381111561469f5761469e6147fd565b5b6146ce565b6146b18484846001614564565b925090508184048111156146c8576146c76147fd565b5b81810290505b9392505050565b60006146e0826147a1565b91506146eb836147a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614724576147236147fd565b5b828202905092915050565b600061473a826147a1565b9150614745836147a1565b925082821015614758576147576147fd565b5b828203905092915050565b600061476e82614781565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147c3826147a1565b9050919050565b60005b838110156147e85780820151818401526020810190506147cd565b838111156147f7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f5472616e736665722066726f6d207a65726f0000000000000000000000000000600082015250565b7f4e6f742079657420756e6c6f636b656400000000000000000000000000000000600082015250565b7f5472616e7366657220657863656564732062616c616e63650000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c6574202063616e277420626520756e646572203225206f6660008201527f2074686520746f74616c20737570706c79000000000000000000000000000000602082015250565b7f417070726f76652066726f6d207a65726f000000000000000000000000000000600082015250565b7f5472616e7366657220746f207a65726f00000000000000000000000000000000600082015250565b7f5472616e73666572203e20616c6c6f77616e6365000000000000000000000000600082015250565b7f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000600082015250565b7f5461782065786365656473206d61785461780000000000000000000000000000600082015250565b7f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60008201527f202520546f74616c20537570706c790000000000000000000000000000000000602082015250565b7f417070726f766520746f207a65726f0000000000000000000000000000000000600082015250565b7f5472616e73666572206578636565647320617574686f726973652073656c6c00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74726164696e67206e6f742079657420656e61626c6564000000000000000000600082015250565b7f416c72656164794c61756e636865640000000000000000000000000000000000600082015250565b50565b7f44756d70206d6561737572652063616e277420626520756e646572203530252060008201527f6f66207468652077616c6c657400000000000000000000000000000000000000602082015250565b7f63616e2774206368616e676520756e6973776170000000000000000000000000600082015250565b7f63616e277420496e636c7564652074686520636f6e7472616374000000000000600082015250565b7f3c3020616c6c6f77616e63650000000000000000000000000000000000000000600082015250565b7f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b614d0381614763565b8114614d0e57600080fd5b50565b614d1a81614775565b8114614d2557600080fd5b50565b614d31816147a1565b8114614d3c57600080fd5b5056fea2646970667358221220d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610acf578063e52fb9ec14610af8578063f2fde38b14610b23578063f5fb756f14610b4c576102d4565b8063d8bd2dd114610a18578063dbe66ca014610a55578063dd62ed3e14610a92576102d4565b8063be617fa014610906578063c3a3c03214610931578063c3f4f54f1461095c578063cc1776d314610987578063cfd1940e146109b2578063d46b6a30146109db576102d4565b8063a457c2d71161012e578063a457c2d7146107f8578063a68bdac714610835578063a9059cbb1461084c578063ab64cfdc14610889578063b40d09e2146108b2578063bc43d849146108dd576102d4565b80638124f7ac146106fa578063817d4bff14610725578063868b01411461074e5780638da5cb5b1461077757806395d89b41146107a25780639b39b65f146107cd576102d4565b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610664578063715018a6146106a157806375f0a874146106b85780637b9e987a146106e3576102d4565b80635149f984146105e557806351bc3c851461060e578063629ece4914610639576102d4565b806333ae8325146104e9578063395093511461051257806341aec3571461054f57806346e35f0314610566578063479881bf146105915780634f7041a5146105ba576102d4565b80631d4eaead116102865780631d4eaead146103d95780631eb25d131461040457806323b872dd1461042f5780632d48f84f1461046c578063313ce567146104955780633227925f146104c0576102d4565b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461031b5780630eff4c641461035857806318160ddd146103835780631d2cb02d146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b77565b005b3480156102fc57600080fd5b50610305610dbc565b60405161031291906140ca565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139ed565b610df9565b60405161034f91906140af565b60405180910390f35b34801561036457600080fd5b5061036d610e10565b60405161037a919061438c565b60405180910390f35b34801561038f57600080fd5b50610398610e16565b6040516103a5919061438c565b60405180910390f35b3480156103ba57600080fd5b506103c3610e20565b6040516103d0919061438c565b60405180910390f35b3480156103e557600080fd5b506103ee610e26565b6040516103fb919061438c565b60405180910390f35b34801561041057600080fd5b50610419610e2c565b604051610426919061438c565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061395a565b610e4b565b60405161046391906140af565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613b34565b610f3e565b005b3480156104a157600080fd5b506104aa6110ce565b6040516104b79190614462565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613a87565b6110d7565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613a87565b611136565b005b34801561051e57600080fd5b50610539600480360381019061053491906139ed565b611203565b60405161054691906140af565b60405180910390f35b34801561055b57600080fd5b506105646112a1565b005b34801561057257600080fd5b5061057b6112f5565b60405161058891906140af565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613a87565b61137c565b005b3480156105c657600080fd5b506105cf611449565b6040516105dc919061438c565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906139ad565b61144f565b005b34801561061a57600080fd5b50610623611583565b60405161063091906140af565b60405180910390f35b34801561064557600080fd5b5061064e611596565b60405161065b919061438c565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b61159c565b604051610698919061438c565b60405180910390f35b3480156106ad57600080fd5b506106b66115e5565b005b3480156106c457600080fd5b506106cd611718565b6040516106da9190613fe1565b60405180910390f35b3480156106ef57600080fd5b506106f861173e565b005b34801561070657600080fd5b5061070f611800565b60405161071c919061438c565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906138c0565b611806565b005b34801561075a57600080fd5b5061077560048036038101906107709190613a2d565b6118a4565b005b34801561078357600080fd5b5061078c611909565b6040516107999190613fe1565b60405180910390f35b3480156107ae57600080fd5b506107b7611932565b6040516107c491906140ca565b60405180910390f35b3480156107d957600080fd5b506107e261196f565b6040516107ef91906140af565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906139ed565b611982565b60405161082c91906140af565b60405180910390f35b34801561084157600080fd5b5061084a611a68565b005b34801561085857600080fd5b50610873600480360381019061086e91906139ed565b611acd565b60405161088091906140af565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906139ad565b611ae4565b005b3480156108be57600080fd5b506108c7611c2f565b6040516108d4919061438c565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613a87565b611c35565b005b34801561091257600080fd5b5061091b611c96565b604051610928919061438c565b60405180910390f35b34801561093d57600080fd5b50610946611c9c565b604051610953919061438c565b60405180910390f35b34801561096857600080fd5b50610971611cc5565b60405161097e919061438c565b60405180910390f35b34801561099357600080fd5b5061099c611d41565b6040516109a9919061438c565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613a87565b611d47565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906138c0565b611da7565b604051610a0f91906140af565b60405180910390f35b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906138c0565b611dc7565b604051610a4c91906140af565b60405180910390f35b348015610a6157600080fd5b50610a7c6004803603810190610a7791906138c0565b611de7565b604051610a8991906140af565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061391a565b611e07565b604051610ac6919061438c565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906139ad565b611e8e565b005b348015610b0457600080fd5b50610b0d611fd9565b604051610b1a919061438c565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906138c0565b611fdf565b005b348015610b5857600080fd5b50610b61612181565b604051610b6e919061438c565b60405180910390f35b610b8033612187565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb6906141ec565b60405180910390fd5b601654421015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061410c565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c669190613fe1565b60206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb69190613ab4565b9050601760009054906101000a900460ff1615610cfe5762093a8042610cdc91906144dd565b601681905550600a600282610cf191906146d5565b610cfb9190614533565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d39929190614025565b602060405180830381600087803b158015610d5357600080fd5b505af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190613a5a565b507f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67560405160405180910390a15050565b60606040518060400160405280600881526020017f4d62617050657065000000000000000000000000000000000000000000000000815250905090565b6000610e0633848461221e565b6001905092915050565b60135481565b6000600654905090565b600c5481565b600a5481565b6012600a610e3a91906145b7565b6276adf1610e4891906146d5565b81565b6000610e588484846123e9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906141cc565b60405180910390fd5b610f3285338584610f2d919061472f565b61221e565b60019150509392505050565b610f4733612187565b610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141ec565b60405180910390fd5b60006002600a6103e8610f999190614533565b610fa39190614533565b9050808711158015610fb55750808611155b8015610fc15750808511155b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061420c565b60405180910390fd5b6103e882848661101091906144dd565b61101a91906144dd565b1461105a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110519061436c565b60405180910390fd5b86600781905550856008819055508460098190555082600c8190555081600b8190555083600a819055507f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c98787878787876040516110bd96959493929190614401565b60405180910390a150505050505050565b60006012905090565b6110e033612187565b61111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906141ec565b60405180910390fd5b611133428261112e91906144dd565b61267d565b50565b61113f33612187565b61117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906141ec565b60405180910390fd5b60028111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906142ec565b60405180910390fd5b80600e819055507fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9816040516111f8919061438c565b60405180910390a150565b6000611297338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129291906144dd565b61221e565b6001905092915050565b6112aa33612187565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906141ec565b60405180910390fd5b6112f360016126ce565b565b60006103e860135460065461130a91906146d5565b6113149190614533565b60016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905090565b61138533612187565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906141ec565b60405180910390fd5b6032811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff9061416c565b60405180910390fd5b80600d819055507fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe388558160405161143e919061438c565b60405180910390a150565b60075481565b61145833612187565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906141ec565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061430c565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601460009054906101000a900460ff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611604611909565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174733612187565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906141ec565b60405180910390fd5b6000601554146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906142cc565b60405180910390fd5b426015819055507f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc160405160405180910390a1565b60095481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad33612187565b6118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906141ec565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5065506537000000000000000000000000000000000000000000000000000000815250905090565b601760009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061434c565b60405180910390fd5b611a5d33858584611a58919061472f565b61221e565b600191505092915050565b611a7133612187565b611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906141ec565b60405180910390fd5b6001601760006101000a81548160ff021916908315150217905550565b6000611ada3384846123e9565b6001905092915050565b611aed33612187565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b929061432c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d38282604051611c23929190613ffc565b60405180910390a15050565b60155481565b611c3e33612187565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906141ec565b60405180910390fd5b6103e8811115611c8c57600080fd5b8060138190555050565b600b5481565b6000601654421015611cbd5742601654611cb6919061472f565b9050611cc2565b600090505b90565b60006001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006546012600a611d1a91906145b7565b6276adf1611d2891906146d5565b611d32919061472f565b611d3c91906144dd565b905090565b60085481565b611d5033612187565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d86906141ec565b60405180910390fd5b600f811115611d9d57600080fd5b8060128190555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9733612187565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061432c565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed48282604051611fcd929190613ffc565b60405180910390a15050565b60125481565b3373ffffffffffffffffffffffffffffffffffffffff16611ffe611909565b73ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b9061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061414c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b6000612191611909565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806122175750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f59061424c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dc919061438c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906141ac565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257f5761257a83838361299b565b612678565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561262657600060155411612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906142ac565b60405180910390fd5b612621838383612b39565b612677565b60006015541161266b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612662906142ac565b60405180910390fd5b612676838383612f55565b5b5b505050565b601654811161268b57600080fd5b806016819055507f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e6016546040516126c3919061438c565b60405180910390a150565b6001601160146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600c54600b5461273f91906144dd565b905060006103e860125460016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906146d5565b6127bf9190614533565b905060008214156127d25750505061297d565b831561281f57600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612830565b8083101561282f5750505061297d565b5b600061283a6112f5565b61285c5782600b548361284d91906146d5565b6128579190614533565b61285f565b60005b90506000818361286f919061472f565b905060006002836128809190614533565b90506000828261289091906144dd565b905060004790506128a08261347c565b600081476128ae919061472f565b905060008611156128e05760008385836128c891906146d5565b6128d29190614533565b90506128de85826136d1565b505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161292890613fcc565b60006040518083038185875af1925050503d8060008114612965576040519150601f19603f3d011682016040523d82523d6000602084013e61296a565b606091505b5050905060019050505050505050505050505b6000601160146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061412c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a71919061472f565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac791906144dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2b919061438c565b60405180910390a350505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb79061412c565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008115612ca457600060b4905080601554612c7e91906144dd565b421015612c9857612c91816103e76137be565b9150612c9e565b60085491505b50612ceb565b8215612ce4576000603c905080601554612cbe91906144dd565b421015612cd857612cd1816103e76137be565b9150612cde565b60075491505b50612cea565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612d565750601460009054906101000a900460ff16155b8015612d6f5750601160149054906101000a900460ff16155b15612d7f57612d7e60006126ce565b5b6000612d8e8683600a54613808565b90506000612dac8784600b54600c54612da791906144dd565b613808565b905060008183612dbc91906144dd565b88612dc7919061472f565b905087600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e18919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e91906144dd565b925050819055508260066000828254612e87919061472f565b9250508190555080600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612edd91906144dd565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f41919061438c565b60405180910390a350505050505050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082821015613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061412c565b60405180910390fd5b82600e548361302f9190614533565b1015613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130679061426c565b60405180910390fd5b600d546012600a61308191906145b7565b6276adf161308f91906146d5565b6130999190614533565b83826130a591906144dd565b11156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061422c565b60405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600081156131ca57600060b49050806015546131a491906144dd565b4210156131be576131b7816103e76137be565b91506131c4565b60085491505b50613211565b821561320a576000603c9050806015546131e491906144dd565b4210156131fe576131f7816103e76137be565b9150613204565b60075491505b50613210565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561327c5750601460009054906101000a900460ff16155b80156132955750601160149054906101000a900460ff16155b156132a5576132a460006126ce565b5b60006132b48783600a54613808565b905060006132d28884600b54600c546132cd91906144dd565b613808565b9050600081836132e291906144dd565b896132ed919061472f565b905088600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461333e919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339491906144dd565b9250508190555082600660008282546133ad919061472f565b9250508190555080600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340391906144dd565b925050819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613467919061438c565b60405180910390a35050505050505050505050565b6134a930601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361221e565b6000600267ffffffffffffffff8111156134c6576134c561488a565b5b6040519080825280602002602001820160405280156134f45781602001602082028036833780820191505090505b509050308160008151811061350c5761350b61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e691906138ed565b816001815181106135fa576135f961485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136989594939291906143a7565b600060405180830381600087803b1580156136b257600080fd5b505af19250505080156136c3575060015b6136cc576136cd565b5b5050565b6136fe30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461221e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016137659695949392919061404e565b6060604051808303818588803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137b79190613ae1565b5050505050565b600080601554426137cf919061472f565b905083816032856137e0919061472f565b6137ea91906146d5565b6137f49190614533565b836137ff919061472f565b91505092915050565b60006103e88061381891906146d5565b82848661382591906146d5565b61382f91906146d5565b6138399190614533565b90509392505050565b60008135905061385181614cfa565b92915050565b60008151905061386681614cfa565b92915050565b60008135905061387b81614d11565b92915050565b60008151905061389081614d11565b92915050565b6000813590506138a581614d28565b92915050565b6000815190506138ba81614d28565b92915050565b6000602082840312156138d6576138d56148b9565b5b60006138e484828501613842565b91505092915050565b600060208284031215613903576139026148b9565b5b600061391184828501613857565b91505092915050565b60008060408385031215613931576139306148b9565b5b600061393f85828601613842565b925050602061395085828601613842565b9150509250929050565b600080600060608486031215613973576139726148b9565b5b600061398186828701613842565b935050602061399286828701613842565b92505060406139a386828701613896565b9150509250925092565b600080604083850312156139c4576139c36148b9565b5b60006139d285828601613842565b92505060206139e38582860161386c565b9150509250929050565b60008060408385031215613a0457613a036148b9565b5b6000613a1285828601613842565b9250506020613a2385828601613896565b9150509250929050565b600060208284031215613a4357613a426148b9565b5b6000613a518482850161386c565b91505092915050565b600060208284031215613a7057613a6f6148b9565b5b6000613a7e84828501613881565b91505092915050565b600060208284031215613a9d57613a9c6148b9565b5b6000613aab84828501613896565b91505092915050565b600060208284031215613aca57613ac96148b9565b5b6000613ad8848285016138ab565b91505092915050565b600080600060608486031215613afa57613af96148b9565b5b6000613b08868287016138ab565b9350506020613b19868287016138ab565b9250506040613b2a868287016138ab565b9150509250925092565b60008060008060008060c08789031215613b5157613b506148b9565b5b6000613b5f89828a01613896565b9650506020613b7089828a01613896565b9550506040613b8189828a01613896565b9450506060613b9289828a01613896565b9350506080613ba389828a01613896565b92505060a0613bb489828a01613896565b9150509295509295509295565b6000613bcd8383613bd9565b60208301905092915050565b613be281614763565b82525050565b613bf181614763565b82525050565b6000613c028261448d565b613c0c81856144b0565b9350613c178361447d565b8060005b83811015613c48578151613c2f8882613bc1565b9750613c3a836144a3565b925050600181019050613c1b565b5085935050505092915050565b613c5e81614775565b82525050565b613c6d816147b8565b82525050565b6000613c7e82614498565b613c8881856144cc565b9350613c988185602086016147ca565b613ca1816148be565b840191505092915050565b6000613cb96012836144cc565b9150613cc4826148dc565b602082019050919050565b6000613cdc6010836144cc565b9150613ce782614905565b602082019050919050565b6000613cff6018836144cc565b9150613d0a8261492e565b602082019050919050565b6000613d226026836144cc565b9150613d2d82614957565b604082019050919050565b6000613d456031836144cc565b9150613d50826149a6565b604082019050919050565b6000613d686011836144cc565b9150613d73826149f5565b602082019050919050565b6000613d8b6010836144cc565b9150613d9682614a1e565b602082019050919050565b6000613dae6014836144cc565b9150613db982614a47565b602082019050919050565b6000613dd16018836144cc565b9150613ddc82614a70565b602082019050919050565b6000613df46012836144cc565b9150613dff82614a99565b602082019050919050565b6000613e17602f836144cc565b9150613e2282614ac2565b604082019050919050565b6000613e3a600f836144cc565b9150613e4582614b11565b602082019050919050565b6000613e5d601f836144cc565b9150613e6882614b3a565b602082019050919050565b6000613e806020836144cc565b9150613e8b82614b63565b602082019050919050565b6000613ea36017836144cc565b9150613eae82614b8c565b602082019050919050565b6000613ec6600f836144cc565b9150613ed182614bb5565b602082019050919050565b6000613ee96000836144c1565b9150613ef482614bde565b600082019050919050565b6000613f0c602d836144cc565b9150613f1782614be1565b604082019050919050565b6000613f2f6014836144cc565b9150613f3a82614c30565b602082019050919050565b6000613f52601a836144cc565b9150613f5d82614c59565b602082019050919050565b6000613f75600c836144cc565b9150613f8082614c82565b602082019050919050565b6000613f986021836144cc565b9150613fa382614cab565b604082019050919050565b613fb7816147a1565b82525050565b613fc6816147ab565b82525050565b6000613fd782613edc565b9150819050919050565b6000602082019050613ff66000830184613be8565b92915050565b60006040820190506140116000830185613be8565b61401e6020830184613c55565b9392505050565b600060408201905061403a6000830185613be8565b6140476020830184613fae565b9392505050565b600060c0820190506140636000830189613be8565b6140706020830188613fae565b61407d6040830187613c64565b61408a6060830186613c64565b6140976080830185613be8565b6140a460a0830184613fae565b979650505050505050565b60006020820190506140c46000830184613c55565b92915050565b600060208201905081810360008301526140e48184613c73565b905092915050565b6000602082019050818103600083015261410581613cac565b9050919050565b6000602082019050818103600083015261412581613ccf565b9050919050565b6000602082019050818103600083015261414581613cf2565b9050919050565b6000602082019050818103600083015261416581613d15565b9050919050565b6000602082019050818103600083015261418581613d38565b9050919050565b600060208201905081810360008301526141a581613d5b565b9050919050565b600060208201905081810360008301526141c581613d7e565b9050919050565b600060208201905081810360008301526141e581613da1565b9050919050565b6000602082019050818103600083015261420581613dc4565b9050919050565b6000602082019050818103600083015261422581613de7565b9050919050565b6000602082019050818103600083015261424581613e0a565b9050919050565b6000602082019050818103600083015261426581613e2d565b9050919050565b6000602082019050818103600083015261428581613e50565b9050919050565b600060208201905081810360008301526142a581613e73565b9050919050565b600060208201905081810360008301526142c581613e96565b9050919050565b600060208201905081810360008301526142e581613eb9565b9050919050565b6000602082019050818103600083015261430581613eff565b9050919050565b6000602082019050818103600083015261432581613f22565b9050919050565b6000602082019050818103600083015261434581613f45565b9050919050565b6000602082019050818103600083015261436581613f68565b9050919050565b6000602082019050818103600083015261438581613f8b565b9050919050565b60006020820190506143a16000830184613fae565b92915050565b600060a0820190506143bc6000830188613fae565b6143c96020830187613c64565b81810360408301526143db8186613bf7565b90506143ea6060830185613be8565b6143f76080830184613fae565b9695505050505050565b600060c0820190506144166000830189613fae565b6144236020830188613fae565b6144306040830187613fae565b61443d6060830186613fae565b61444a6080830185613fae565b61445760a0830184613fae565b979650505050505050565b60006020820190506144776000830184613fbd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826147a1565b91506144f3836147a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614528576145276147fd565b5b828201905092915050565b600061453e826147a1565b9150614549836147a1565b9250826145595761455861482c565b5b828204905092915050565b6000808291508390505b60018511156145ae5780860481111561458a576145896147fd565b5b60018516156145995780820291505b80810290506145a7856148cf565b945061456e565b94509492505050565b60006145c2826147a1565b91506145cd836147ab565b92506145fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614602565b905092915050565b60008261461257600190506146ce565b8161462057600090506146ce565b816001811461463657600281146146405761466f565b60019150506146ce565b60ff841115614652576146516147fd565b5b8360020a915084821115614669576146686147fd565b5b506146ce565b5060208310610133831016604e8410600b84101617156146a45782820a90508381111561469f5761469e6147fd565b5b6146ce565b6146b18484846001614564565b925090508184048111156146c8576146c76147fd565b5b81810290505b9392505050565b60006146e0826147a1565b91506146eb836147a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614724576147236147fd565b5b828202905092915050565b600061473a826147a1565b9150614745836147a1565b925082821015614758576147576147fd565b5b828203905092915050565b600061476e82614781565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147c3826147a1565b9050919050565b60005b838110156147e85780820151818401526020810190506147cd565b838111156147f7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f5472616e736665722066726f6d207a65726f0000000000000000000000000000600082015250565b7f4e6f742079657420756e6c6f636b656400000000000000000000000000000000600082015250565b7f5472616e7366657220657863656564732062616c616e63650000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c6574202063616e277420626520756e646572203225206f6660008201527f2074686520746f74616c20737570706c79000000000000000000000000000000602082015250565b7f417070726f76652066726f6d207a65726f000000000000000000000000000000600082015250565b7f5472616e7366657220746f207a65726f00000000000000000000000000000000600082015250565b7f5472616e73666572203e20616c6c6f77616e6365000000000000000000000000600082015250565b7f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000600082015250565b7f5461782065786365656473206d61785461780000000000000000000000000000600082015250565b7f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60008201527f202520546f74616c20537570706c790000000000000000000000000000000000602082015250565b7f417070726f766520746f207a65726f0000000000000000000000000000000000600082015250565b7f5472616e73666572206578636565647320617574686f726973652073656c6c00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74726164696e67206e6f742079657420656e61626c6564000000000000000000600082015250565b7f416c72656164794c61756e636865640000000000000000000000000000000000600082015250565b50565b7f44756d70206d6561737572652063616e277420626520756e646572203530252060008201527f6f66207468652077616c6c657400000000000000000000000000000000000000602082015250565b7f63616e2774206368616e676520756e6973776170000000000000000000000000600082015250565b7f63616e277420496e636c7564652074686520636f6e7472616374000000000000600082015250565b7f3c3020616c6c6f77616e63650000000000000000000000000000000000000000600082015250565b7f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b614d0381614763565b8114614d0e57600080fd5b50565b614d1a81614775565b8114614d2557600080fd5b50565b614d31816147a1565b8114614d3c57600080fd5b5056fea2646970667358221220d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a564736f6c63430008070033

Deployed Bytecode Sourcemap

9092:22804:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28527:679;;;;;;;;;;;;;:::i;:::-;;29583:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30456:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19618:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29893:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10374:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10313:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9584:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30924:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20143:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29791:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27953:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21058:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31345:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25981:83;;;;;;;;;;;;;:::i;:::-;;21390:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20804:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10218:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25552:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25718:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10521:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30006:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5703:140;;;;;;;;;;;;;:::i;:::-;;10690:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26981:184;;;;;;;;;;;;;:::i;:::-;;10279:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10782:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25823:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5062:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29685:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27577:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31555:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27779:110;;;;;;;;;;;;;:::i;:::-;;30132:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26587:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26947:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19660:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10341:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24816:205;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25027:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10248:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19352:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9383:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9327:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9272:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30304:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26179:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19319:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5998:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10492:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28527:679;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28667:20:::1;;28648:15;:39;;28640:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:21;28752:19;;;;;;;;;;;28721:51;;28783:11;28797:14;:24;;;28830:4;28797:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28783:53;;28850:27;;;;;;;;;;;28847:269;;;9697:6;28924:15;:40;;;;:::i;:::-;28903:20;:61;;;;29102:2;29100:1;29093:6;:8;;;;:::i;:::-;:11;;;;:::i;:::-;29086:18;;28847:269;29126:14;:23;;;29150:10;29162:6;29126:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29185:13;;;;;;;;;;28571:635;;28527:679::o:0;29583:94::-;29631:13;29664:5;;;;;;;;;;;;;;;;;29657:12;;29583:94;:::o;30456:158::-;30530:4;30547:37;30556:10;30568:7;30577:6;30547:8;:37::i;:::-;30602:4;30595:11;;30456:158;;;;:::o;19618:35::-;;;;:::o;29893:105::-;29948:4;29972:18;;29965:25;;29893:105;:::o;10374:29::-;;;;:::o;10313:21::-;;;;:::o;9584:57::-;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;9584:57;:::o;30924:386::-;31021:4;31038:36;31048:6;31056:9;31067:6;31038:9;:36::i;:::-;31087:21;31111:11;:19;31123:6;31111:19;;;;;;;;;;;;;;;:31;31131:10;31111:31;;;;;;;;;;;;;;;;31087:55;;31181:6;31161:16;:26;;31153:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31225:55;31234:6;31242:10;31273:6;31254:16;:25;;;;:::i;:::-;31225:8;:55::i;:::-;31298:4;31291:11;;;30924:386;;;;;:::o;20143:612::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20266:11:::1;20314:1;10483:2;10440:4;20279:33;;;;:::i;:::-;20278:37;;;;:::i;:::-;20266:49;;20339:6;20334:3;:11;;:25;;;;;20353:6;20347:4;:12;;20334:25;:44;;;;;20372:6;20361:9;:17;;20334:44;20326:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10440:4;20434:9;20424;20419:4;:14;;;;:::i;:::-;:24;;;;:::i;:::-;:41;20411:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;20525:3;20518:6;:10;;;;20547:4;20539:7;:12;;;;20574:9;20562:11;:21;;;;20607:9;20594:12;:22;;;;20640:9;20627:12;:22;;;;20668:4;20660:7;:12;;;;20688:59;20699:3;20704:4;20710:9;20721:4;20727:9;20737;20688:59;;;;;;;;;;;:::i;:::-;;;;;;;;20255:500;20143:612:::0;;;;;;:::o;29791:94::-;29843:5;9575:2;29861:16;;29791:94;:::o;27953:149::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28037:57:::1;28078:15;28059:18;:34;;;;:::i;:::-;28037:21;:57::i;:::-;27953:149:::0;:::o;21058:215::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21138:1:::1;21126:10;:13;;21118:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21209:10;21199:9;:20;;;;21244:21;21254:10;21244:21;;;;;;:::i;:::-;;;;;;;;21058:215:::0;:::o;31345:202::-;31424:4;31441:76;31450:10;31462:7;31506:10;31471:11;:23;31483:10;31471:23;;;;;;;;;;;;;;;:32;31495:7;31471:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;31441:8;:76::i;:::-;31535:4;31528:11;;31345:202;;;;:::o;25981:83::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26032:24:::1;26051:4;26032:18;:24::i;:::-;25981:83::o:0;21390:152::-;21437:4;21530;21510:19;;21491:18;;:38;;;;:::i;:::-;:43;;;;:::i;:::-;21460:9;:30;21470:19;;;;;;;;;;;21460:30;;;;;;;;;;;;;;;;:74;21453:81;;21390:152;:::o;20804:207::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20879:2:::1;20870:7;:11;;20862:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20952:7;20945:6;:14;;;;20984:19;20995:7;20984:19;;;;;;:::i;:::-;;;;;;;;20804:207:::0;:::o;10218:23::-;;;;:::o;25552:154::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25630:19:::1;;;;;;;;;;;25625:24;;:3;:24;;;;25617:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25695:3;25684:5;:10;25690:3;25684:10;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;;;;;;;25552:154:::0;;:::o;25718:22::-;;;;;;;;;;;;;:::o;10521:25::-;;;;:::o;30006:118::-;30074:4;30098:9;:18;30108:7;30098:18;;;;;;;;;;;;;;;;30091:25;;30006:118;;;:::o;5703:140::-;5285:10;5274:21;;:7;:5;:7::i;:::-;:21;;;5266:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5802:1:::1;5765:40;;5786:6;::::0;::::1;;;;;;;;5765:40;;;;;;;;;;;;5833:1;5816:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5703:140::o:0;10690:30::-;;;;;;;;;;;;;:::o;26981:184::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27062:1:::1;27045:15;;:18;27037:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27109:15;27093;:31;;;;27140:17;;;;;;;;;;26981:184::o:0;10279:27::-;;;;:::o;10782:147::-;10869:15;;;;;;;;;;;10857:27;;:10;:27;;;10849:36;;;;;;10912:9;10896:15;;:25;;;;;;;;;;;;;;;;;;10782:147;:::o;25823:90::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:6:::1;25888:10;;:17;;;;;;;;;;;;;;;;;;25823:90:::0;:::o;5062:79::-;5100:7;5127:6;;;;;;;;;;;5120:13;;5062:79;:::o;29685:98::-;29735:13;29768:7;;;;;;;;;;;;;;;;;29761:14;;29685:98;:::o;27577:39::-;;;;;;;;;;;;;:::o;31555:336::-;31639:4;31656:21;31680:11;:23;31692:10;31680:23;;;;;;;;;;;;;;;:32;31704:7;31680:32;;;;;;;;;;;;;;;;31656:56;;31751:15;31731:16;:35;;31723:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31796:65;31805:10;31817:7;31845:15;31826:16;:34;;;;:::i;:::-;31796:8;:65::i;:::-;31879:4;31872:11;;;31555:336;;;;:::o;27779:110::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27877:4:::1;27849:27;;:32;;;;;;;;;;;;;;;;;;27779:110::o:0;30132:164::-;30209:4;30226:40;30236:10;30248:9;30259:6;30226:9;:40::i;:::-;30284:4;30277:11;;30132:164;;;;:::o;26587:249::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26696:4:::1;26679:22;;:7;:22;;;;26671:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26769:7;26742:17;:26;26760:7;26742:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26792:36;26812:7;26820;26792:36;;;;;;;:::i;:::-;;;;;;;;26587:249:::0;;:::o;26947:27::-;;;;:::o;19660:211::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19797:4:::1;19765:30;:36;;19757:45;;;::::0;::::1;;19833:30;19813:19;:50;;;;19660:211:::0;:::o;10341:26::-;;;;:::o;24816:205::-;24881:4;24916:20;;24900:15;:36;24897:97;;;24979:15;24958:20;;:36;;;;:::i;:::-;24951:43;;;;24897:97;25012:1;25005:8;;24816:205;;:::o;25027:139::-;25074:4;25132:9;:26;25150:6;25132:26;;;;;;;;;;;;;;;;25112:18;;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;25098:32;;;;:::i;:::-;25097:61;;;;:::i;:::-;25090:68;;25027:139;:::o;10248:24::-;;;;:::o;19352:191::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19466:2:::1;19441:23;:27;;19433:36;;;::::0;::::1;;19512:23;19499:12;:36;;;;19352:191:::0;:::o;9383:35::-;;;;;;;;;;;;;;;;;;;;;;:::o;9327:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9272:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;30304:144::-;30388:4;30412:11;:19;30424:6;30412:19;;;;;;;;;;;;;;;:28;30432:7;30412:28;;;;;;;;;;;;;;;;30405:35;;30304:144;;;;:::o;26179:248::-;11027:19;11035:10;11027:7;:19::i;:::-;11019:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26293:4:::1;26276:22;;:7;:22;;;;26268:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26365:7;26339:16;:25;26356:7;26339:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26388:31;26403:7;26411;26388:31;;;;;;;:::i;:::-;;;;;;;;26179:248:::0;;:::o;19319:26::-;;;;:::o;5998:236::-;5285:10;5274:21;;:7;:5;:7::i;:::-;:21;;;5266:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6099:1:::1;6079:22;;:8;:22;;;;6071:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6189:8;6160:38;;6181:6;::::0;::::1;;;;;;;;6160:38;;;;;;;;;;;;6218:8;6209:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5998:236:::0;:::o;10492:22::-;;;;:::o;11313:120::-;11366:4;11395:7;:5;:7::i;:::-;11389:13;;:4;:13;;;:36;;;;11410:15;;;;;;;;;;;11404:21;;:4;:21;;;11389:36;11382:43;;11313:120;;;:::o;30620:296::-;30727:1;30710:19;;:5;:19;;;;30702:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30789:1;30770:21;;:7;:21;;;;30762:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30854:6;30824:11;:18;30836:5;30824:18;;;;;;;;;;;;;;;:27;30843:7;30824:27;;;;;;;;;;;;;;;:36;;;;30892:7;30876:32;;30885:5;30876:32;;;30901:6;30876:32;;;;;;:::i;:::-;;;;;;;;30620:296;;;:::o;12974:879::-;13085:1;13067:20;;:6;:20;;;;13059:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;13150:1;13129:23;;:9;:23;;;;13121:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13216:16;:24;13233:6;13216:24;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;13244:16;:27;13261:9;13244:27;;;;;;;;;;;;;;;;;;;;;;;;;13216:55;13213:633;;;13286:43;13303:6;13311:9;13322:6;13286:16;:43::i;:::-;13213:633;;;13348:17;:28;13366:9;13348:28;;;;;;;;;;;;;;;;;;;;;;;;;13345:501;;;13486:1;13470:15;;:17;13462:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13529:51;13556:6;13563:9;13573:6;13529:26;:51::i;:::-;13345:501;;;13734:1;13718:15;;:17;13710:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13777:39;13792:6;13799:9;13809:6;13777:14;:39::i;:::-;13345:501;13213:633;12974:879;;;:::o;28158:280::-;28311:20;;28297:13;:34;28289:43;;;;;;28364:13;28343:20;:34;;;;28393:37;28409:20;;28393:37;;;;;;:::i;:::-;;;;;;;;28158:280;:::o;21701:1820::-;19166:4;19136:27;;:34;;;;;;;;;;;;;;;;;;21778:20:::1;21799:9;:24;21817:4;21799:24;;;;;;;;;;;;;;;;21778:45;;21834:13;21861:12;;21848;;:25;;;;:::i;:::-;21834:39;;21979:16;22040:4;22027:12;;21996:9;:30;22006:19;;;;;;;;;;;21996:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:48;;;;:::i;:::-;21979:65;;22107:1;22097:8;:11;22094:22;;;22109:7;;;;;22094:22;22285:12;22282:134;;;22324:9;:24;22342:4;22324:24;;;;;;;;;;;;;;;;22312:36;;22282:134;;;22383:11;22367:15;:27;22364:52;;;22409:7;;;;;22364:52;22282:134;22549:22;22582:17;:15;:17::i;:::-;:65;;22639:8;22625:12;;22613:11;:24;;;;:::i;:::-;22612:35;;;;:::i;:::-;22582:65;;;22600:1;22582:65;22549:98;;22660:22;22696:17;22684:11;:29;;;;:::i;:::-;22660:53;;22726:12;22757:1;22739:17;:19;;;;:::i;:::-;22726:32;;22839:14;22862:17;22854:7;:25;;;;:::i;:::-;22839:40;;22968:22;22993:21;22968:46;;23025:27;23042:9;23025:16;:27::i;:::-;23063:11;23100:17;23076:21;:41;;;;:::i;:::-;23063:55;;23241:1;23223:17;:19;23220:135;;;23258:11;23289:9;23280:7;23273:6;:14;;;;:::i;:::-;23272:26;;;;:::i;:::-;23258:40;;23313:30;23327:7;23336:6;23313:13;:30::i;:::-;23243:112;23220:135;23428:9;23440:15;;;;;;;;;;;:20;;23467:21;23440:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23427:66;;;23509:4;23504:9;;21767:1754;;;;;;;;;;19181:1;19223:5:::0;19193:27;;:35;;;;;;;;;;;;;;;;;;21701:1820;:::o;16535:339::-;16627:18;16648:9;:17;16658:6;16648:17;;;;;;;;;;;;;;;;16627:38;;16701:6;16684:13;:23;;16676:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16766:6;16747:9;:17;16757:6;16747:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;16805:6;16783:9;:20;16793:9;16783:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;16849:9;16833:33;;16842:6;16833:33;;;16859:6;16833:33;;;;;;:::i;:::-;;;;;;;;16616:258;16535:339;;;:::o;16943:1708::-;17046:18;17067:9;:17;17077:6;17067:17;;;;;;;;;;;;;;;;17046:38;;17120:6;17103:13;:23;;17095:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17168:10;17179:5;:13;17185:6;17179:13;;;;;;;;;;;;;;;;;;;;;;;;;17168:24;;17203:11;17215:5;:16;17221:9;17215:16;;;;;;;;;;;;;;;;;;;;;;;;;17203:28;;17244:8;17266:6;17263:496;;;17290:20;17311:11;17290:32;;17382:15;17366;;:31;;;;:::i;:::-;17350:15;:47;17347:143;;;17421:33;17434:15;17450:3;17421:12;:33::i;:::-;17417:37;;17347:143;;;17483:7;;17479:11;;17347:143;17273:233;17263:496;;;17524:5;17521:238;;;17545:19;17565:10;17545:30;;17625:14;17609:15;;:30;;;;:::i;:::-;17593:15;:46;17590:136;;;17663:32;17676:14;17691:3;17663:12;:32::i;:::-;17659:36;;17590:136;;;17720:6;;17716:10;;17590:136;17530:208;17521:238;;;17748:11;;17744:15;;17521:238;17263:496;17784:19;;;;;;;;;;;17776:27;;:6;:27;;;;17775:44;;;;;17808:10;;;;;;;;;;;17807:11;17775:44;:76;;;;;17823:27;;;;;;;;;;;17822:28;17775:76;17772:119;;;17866:25;17885:5;17866:18;:25::i;:::-;17772:119;17962:20;17983:35;17997:6;18005:3;18010:7;;17983:13;:35::i;:::-;17962:56;;18126:18;18145:53;18159:6;18167:3;18185:12;;18172;;:25;;;;:::i;:::-;18145:13;:53::i;:::-;18126:72;;18262:16;18305:13;18287:15;:31;;;;:::i;:::-;18279:6;:40;;;;:::i;:::-;18262:57;;18351:6;18332:9;:17;18342:6;18332:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;18452:13;18424:9;:24;18442:4;18424:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;18520:15;18500:18;;:35;;;;;;;:::i;:::-;;;;;;;;18568:11;18546:9;:20;18556:9;18546:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;18621:9;18605:38;;18614:6;18605:38;;;18631:11;18605:38;;;;;;:::i;:::-;;;;;;;;17035:1616;;;;;;;16943:1708;;;:::o;13960:1961::-;14050:18;14071:9;:17;14081:6;14071:17;;;;;;;;;;;;;;;;14050:38;;14099:21;14123:9;:20;14133:9;14123:20;;;;;;;;;;;;;;;;14099:44;;14179:6;14162:13;:23;;14154:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14260:6;14247:9;;14233:13;:23;;;;:::i;:::-;:33;;14225:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;14367:6;;9575:2;9628;:13;;;;:::i;:::-;9620:7;:21;;;;:::i;:::-;14353:20;;;;:::i;:::-;14341:6;14322:16;:25;;;;:::i;:::-;14321:52;;14313:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:10;14449:5;:13;14455:6;14449:13;;;;;;;;;;;;;;;;;;;;;;;;;14438:24;;14473:11;14485:5;:16;14491:9;14485:16;;;;;;;;;;;;;;;;;;;;;;;;;14473:28;;14514:8;14536:6;14533:496;;;14560:20;14581:11;14560:32;;14652:15;14636;;:31;;;;:::i;:::-;14620:15;:47;14617:143;;;14691:33;14704:15;14720:3;14691:12;:33::i;:::-;14687:37;;14617:143;;;14753:7;;14749:11;;14617:143;14543:233;14533:496;;;14794:5;14791:238;;;14815:19;14835:10;14815:30;;14895:14;14879:15;;:30;;;;:::i;:::-;14863:15;:46;14860:136;;;14933:32;14946:14;14961:3;14933:12;:32::i;:::-;14929:36;;14860:136;;;14990:6;;14986:10;;14860:136;14800:208;14791:238;;;15018:11;;15014:15;;14791:238;14533:496;15054:19;;;;;;;;;;;15046:27;;:6;:27;;;;15045:44;;;;;15078:10;;;;;;;;;;;15077:11;15045:44;:76;;;;;15093:27;;;;;;;;;;;15092:28;15045:76;15042:119;;;15136:25;15155:5;15136:18;:25::i;:::-;15042:119;15232:20;15253:35;15267:6;15275:3;15280:7;;15253:13;:35::i;:::-;15232:56;;15396:18;15415:53;15429:6;15437:3;15455:12;;15442;;:25;;;;:::i;:::-;15415:13;:53::i;:::-;15396:72;;15532:16;15575:13;15557:15;:31;;;;:::i;:::-;15549:6;:40;;;;:::i;:::-;15532:57;;15621:6;15602:9;:17;15612:6;15602:17;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;15722:13;15694:9;:24;15712:4;15694:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;15790:15;15770:18;;:35;;;;;;;:::i;:::-;;;;;;;;15838:11;15816:9;:20;15826:9;15816:20;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;15891:9;15875:38;;15884:6;15875:38;;;15901:11;15875:38;;;;;;:::i;:::-;;;;;;;;14039:1882;;;;;;;;13960:1961;;;:::o;23571:474::-;23629:56;23646:4;23661:14;;;;;;;;;;;23678:6;23629:8;:56::i;:::-;23696:21;23734:1;23720:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23696:40;;23765:4;23747;23752:1;23747:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23791:14;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23781:4;23786:1;23781:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;23829:14;;;;;;;;;;;:65;;;23909:6;23930:1;23946:4;23973;23993:15;23829:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23825:213;;;;;;23618:427;23571:474;:::o;24118:359::-;24194:61;24211:4;24226:14;;;;;;;;;;;24243:11;24194:8;:61::i;:::-;24266:14;;;;;;;;;;;:30;;;24304:9;24337:4;24357:11;24383:1;24399;24423:4;24443:15;24266:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24118:359;;:::o;16029:211::-;16101:4;16117:20;16154:15;;16138;:31;;;;:::i;:::-;16117:52;;16223:8;16207:15;16203:2;16196:6;:9;;;;:::i;:::-;16195:27;;;;:::i;:::-;:36;;;;:::i;:::-;16187:6;:45;;;;:::i;:::-;16180:52;;;16029:211;;;;:::o;16295:176::-;16380:4;10440;;16431:31;;;;:::i;:::-;16416:10;16412:3;16405:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;16404:59;;;;:::i;:::-;16397:66;;16295:176;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;440:137;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;583:139;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;728:143;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:119;;;991:79;;:::i;:::-;953:119;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;877:329;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:119;;;1337:79;;:::i;:::-;1299:119;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1212:351;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:119;;;1700:79;;:::i;:::-;1662:119;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1569:474;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:119;;;2197:79;;:::i;:::-;2159:119;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2049:619;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:119;;;2802:79;;:::i;:::-;2764:119;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2674:468;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:119;;;3279:79;;:::i;:::-;3241:119;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3148:474;;;;;:::o;3628:323::-;3684:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:119;;;3739:79;;:::i;:::-;3701:119;3859:1;3884:50;3926:7;3917:6;3906:9;3902:22;3884:50;:::i;:::-;3874:60;;3830:114;3628:323;;;;:::o;3957:345::-;4024:6;4073:2;4061:9;4052:7;4048:23;4044:32;4041:119;;;4079:79;;:::i;:::-;4041:119;4199:1;4224:61;4277:7;4268:6;4257:9;4253:22;4224:61;:::i;:::-;4214:71;;4170:125;3957:345;;;;:::o;4308:329::-;4367:6;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4308:329;;;;:::o;4643:351::-;4713:6;4762:2;4750:9;4741:7;4737:23;4733:32;4730:119;;;4768:79;;:::i;:::-;4730:119;4888:1;4913:64;4969:7;4960:6;4949:9;4945:22;4913:64;:::i;:::-;4903:74;;4859:128;4643:351;;;;:::o;5000:663::-;5088:6;5096;5104;5153:2;5141:9;5132:7;5128:23;5124:32;5121:119;;;5159:79;;:::i;:::-;5121:119;5279:1;5304:64;5360:7;5351:6;5340:9;5336:22;5304:64;:::i;:::-;5294:74;;5250:128;5417:2;5443:64;5499:7;5490:6;5479:9;5475:22;5443:64;:::i;:::-;5433:74;;5388:129;5556:2;5582:64;5638:7;5629:6;5618:9;5614:22;5582:64;:::i;:::-;5572:74;;5527:129;5000:663;;;;;:::o;5669:1057::-;5773:6;5781;5789;5797;5805;5813;5862:3;5850:9;5841:7;5837:23;5833:33;5830:120;;;5869:79;;:::i;:::-;5830:120;5989:1;6014:53;6059:7;6050:6;6039:9;6035:22;6014:53;:::i;:::-;6004:63;;5960:117;6116:2;6142:53;6187:7;6178:6;6167:9;6163:22;6142:53;:::i;:::-;6132:63;;6087:118;6244:2;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6215:118;6372:2;6398:53;6443:7;6434:6;6423:9;6419:22;6398:53;:::i;:::-;6388:63;;6343:118;6500:3;6527:53;6572:7;6563:6;6552:9;6548:22;6527:53;:::i;:::-;6517:63;;6471:119;6629:3;6656:53;6701:7;6692:6;6681:9;6677:22;6656:53;:::i;:::-;6646:63;;6600:119;5669:1057;;;;;;;;:::o;6732:179::-;6801:10;6822:46;6864:3;6856:6;6822:46;:::i;:::-;6900:4;6895:3;6891:14;6877:28;;6732:179;;;;:::o;6917:108::-;6994:24;7012:5;6994:24;:::i;:::-;6989:3;6982:37;6917:108;;:::o;7031:118::-;7118:24;7136:5;7118:24;:::i;:::-;7113:3;7106:37;7031:118;;:::o;7185:732::-;7304:3;7333:54;7381:5;7333:54;:::i;:::-;7403:86;7482:6;7477:3;7403:86;:::i;:::-;7396:93;;7513:56;7563:5;7513:56;:::i;:::-;7592:7;7623:1;7608:284;7633:6;7630:1;7627:13;7608:284;;;7709:6;7703:13;7736:63;7795:3;7780:13;7736:63;:::i;:::-;7729:70;;7822:60;7875:6;7822:60;:::i;:::-;7812:70;;7668:224;7655:1;7652;7648:9;7643:14;;7608:284;;;7612:14;7908:3;7901:10;;7309:608;;;7185:732;;;;:::o;7923:109::-;8004:21;8019:5;8004:21;:::i;:::-;7999:3;7992:34;7923:109;;:::o;8038:147::-;8133:45;8172:5;8133:45;:::i;:::-;8128:3;8121:58;8038:147;;:::o;8191:364::-;8279:3;8307:39;8340:5;8307:39;:::i;:::-;8362:71;8426:6;8421:3;8362:71;:::i;:::-;8355:78;;8442:52;8487:6;8482:3;8475:4;8468:5;8464:16;8442:52;:::i;:::-;8519:29;8541:6;8519:29;:::i;:::-;8514:3;8510:39;8503:46;;8283:272;8191:364;;;;:::o;8561:366::-;8703:3;8724:67;8788:2;8783:3;8724:67;:::i;:::-;8717:74;;8800:93;8889:3;8800:93;:::i;:::-;8918:2;8913:3;8909:12;8902:19;;8561:366;;;:::o;8933:::-;9075:3;9096:67;9160:2;9155:3;9096:67;:::i;:::-;9089:74;;9172:93;9261:3;9172:93;:::i;:::-;9290:2;9285:3;9281:12;9274:19;;8933:366;;;:::o;9305:::-;9447:3;9468:67;9532:2;9527:3;9468:67;:::i;:::-;9461:74;;9544:93;9633:3;9544:93;:::i;:::-;9662:2;9657:3;9653:12;9646:19;;9305:366;;;:::o;9677:::-;9819:3;9840:67;9904:2;9899:3;9840:67;:::i;:::-;9833:74;;9916:93;10005:3;9916:93;:::i;:::-;10034:2;10029:3;10025:12;10018:19;;9677:366;;;:::o;10049:::-;10191:3;10212:67;10276:2;10271:3;10212:67;:::i;:::-;10205:74;;10288:93;10377:3;10288:93;:::i;:::-;10406:2;10401:3;10397:12;10390:19;;10049:366;;;:::o;10421:::-;10563:3;10584:67;10648:2;10643:3;10584:67;:::i;:::-;10577:74;;10660:93;10749:3;10660:93;:::i;:::-;10778:2;10773:3;10769:12;10762:19;;10421:366;;;:::o;10793:::-;10935:3;10956:67;11020:2;11015:3;10956:67;:::i;:::-;10949:74;;11032:93;11121:3;11032:93;:::i;:::-;11150:2;11145:3;11141:12;11134:19;;10793:366;;;:::o;11165:::-;11307:3;11328:67;11392:2;11387:3;11328:67;:::i;:::-;11321:74;;11404:93;11493:3;11404:93;:::i;:::-;11522:2;11517:3;11513:12;11506:19;;11165:366;;;:::o;11537:::-;11679:3;11700:67;11764:2;11759:3;11700:67;:::i;:::-;11693:74;;11776:93;11865:3;11776:93;:::i;:::-;11894:2;11889:3;11885:12;11878:19;;11537:366;;;:::o;11909:::-;12051:3;12072:67;12136:2;12131:3;12072:67;:::i;:::-;12065:74;;12148:93;12237:3;12148:93;:::i;:::-;12266:2;12261:3;12257:12;12250:19;;11909:366;;;:::o;12281:::-;12423:3;12444:67;12508:2;12503:3;12444:67;:::i;:::-;12437:74;;12520:93;12609:3;12520:93;:::i;:::-;12638:2;12633:3;12629:12;12622:19;;12281:366;;;:::o;12653:::-;12795:3;12816:67;12880:2;12875:3;12816:67;:::i;:::-;12809:74;;12892:93;12981:3;12892:93;:::i;:::-;13010:2;13005:3;13001:12;12994:19;;12653:366;;;:::o;13025:::-;13167:3;13188:67;13252:2;13247:3;13188:67;:::i;:::-;13181:74;;13264:93;13353:3;13264:93;:::i;:::-;13382:2;13377:3;13373:12;13366:19;;13025:366;;;:::o;13397:::-;13539:3;13560:67;13624:2;13619:3;13560:67;:::i;:::-;13553:74;;13636:93;13725:3;13636:93;:::i;:::-;13754:2;13749:3;13745:12;13738:19;;13397:366;;;:::o;13769:::-;13911:3;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14008:93;14097:3;14008:93;:::i;:::-;14126:2;14121:3;14117:12;14110:19;;13769:366;;;:::o;14141:::-;14283:3;14304:67;14368:2;14363:3;14304:67;:::i;:::-;14297:74;;14380:93;14469:3;14380:93;:::i;:::-;14498:2;14493:3;14489:12;14482:19;;14141:366;;;:::o;14513:398::-;14672:3;14693:83;14774:1;14769:3;14693:83;:::i;:::-;14686:90;;14785:93;14874:3;14785:93;:::i;:::-;14903:1;14898:3;14894:11;14887:18;;14513:398;;;:::o;14917:366::-;15059:3;15080:67;15144:2;15139:3;15080:67;:::i;:::-;15073:74;;15156:93;15245:3;15156:93;:::i;:::-;15274:2;15269:3;15265:12;15258:19;;14917:366;;;:::o;15289:::-;15431:3;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15289:366;;;:::o;15661:::-;15803:3;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15661:366;;;:::o;16033:::-;16175:3;16196:67;16260:2;16255:3;16196:67;:::i;:::-;16189:74;;16272:93;16361:3;16272:93;:::i;:::-;16390:2;16385:3;16381:12;16374:19;;16033:366;;;:::o;16405:::-;16547:3;16568:67;16632:2;16627:3;16568:67;:::i;:::-;16561:74;;16644:93;16733:3;16644:93;:::i;:::-;16762:2;16757:3;16753:12;16746:19;;16405:366;;;:::o;16777:118::-;16864:24;16882:5;16864:24;:::i;:::-;16859:3;16852:37;16777:118;;:::o;16901:112::-;16984:22;17000:5;16984:22;:::i;:::-;16979:3;16972:35;16901:112;;:::o;17019:379::-;17203:3;17225:147;17368:3;17225:147;:::i;:::-;17218:154;;17389:3;17382:10;;17019:379;;;:::o;17404:222::-;17497:4;17535:2;17524:9;17520:18;17512:26;;17548:71;17616:1;17605:9;17601:17;17592:6;17548:71;:::i;:::-;17404:222;;;;:::o;17632:320::-;17747:4;17785:2;17774:9;17770:18;17762:26;;17798:71;17866:1;17855:9;17851:17;17842:6;17798:71;:::i;:::-;17879:66;17941:2;17930:9;17926:18;17917:6;17879:66;:::i;:::-;17632:320;;;;;:::o;17958:332::-;18079:4;18117:2;18106:9;18102:18;18094:26;;18130:71;18198:1;18187:9;18183:17;18174:6;18130:71;:::i;:::-;18211:72;18279:2;18268:9;18264:18;18255:6;18211:72;:::i;:::-;17958:332;;;;;:::o;18296:807::-;18545:4;18583:3;18572:9;18568:19;18560:27;;18597:71;18665:1;18654:9;18650:17;18641:6;18597:71;:::i;:::-;18678:72;18746:2;18735:9;18731:18;18722:6;18678:72;:::i;:::-;18760:80;18836:2;18825:9;18821:18;18812:6;18760:80;:::i;:::-;18850;18926:2;18915:9;18911:18;18902:6;18850:80;:::i;:::-;18940:73;19008:3;18997:9;18993:19;18984:6;18940:73;:::i;:::-;19023;19091:3;19080:9;19076:19;19067:6;19023:73;:::i;:::-;18296:807;;;;;;;;;:::o;19109:210::-;19196:4;19234:2;19223:9;19219:18;19211:26;;19247:65;19309:1;19298:9;19294:17;19285:6;19247:65;:::i;:::-;19109:210;;;;:::o;19325:313::-;19438:4;19476:2;19465:9;19461:18;19453:26;;19525:9;19519:4;19515:20;19511:1;19500:9;19496:17;19489:47;19553:78;19626:4;19617:6;19553:78;:::i;:::-;19545:86;;19325:313;;;;:::o;19644:419::-;19810:4;19848:2;19837:9;19833:18;19825:26;;19897:9;19891:4;19887:20;19883:1;19872:9;19868:17;19861:47;19925:131;20051:4;19925:131;:::i;:::-;19917:139;;19644:419;;;:::o;20069:::-;20235:4;20273:2;20262:9;20258:18;20250:26;;20322:9;20316:4;20312:20;20308:1;20297:9;20293:17;20286:47;20350:131;20476:4;20350:131;:::i;:::-;20342:139;;20069:419;;;:::o;20494:::-;20660:4;20698:2;20687:9;20683:18;20675:26;;20747:9;20741:4;20737:20;20733:1;20722:9;20718:17;20711:47;20775:131;20901:4;20775:131;:::i;:::-;20767:139;;20494:419;;;:::o;20919:::-;21085:4;21123:2;21112:9;21108:18;21100:26;;21172:9;21166:4;21162:20;21158:1;21147:9;21143:17;21136:47;21200:131;21326:4;21200:131;:::i;:::-;21192:139;;20919:419;;;:::o;21344:::-;21510:4;21548:2;21537:9;21533:18;21525:26;;21597:9;21591:4;21587:20;21583:1;21572:9;21568:17;21561:47;21625:131;21751:4;21625:131;:::i;:::-;21617:139;;21344:419;;;:::o;21769:::-;21935:4;21973:2;21962:9;21958:18;21950:26;;22022:9;22016:4;22012:20;22008:1;21997:9;21993:17;21986:47;22050:131;22176:4;22050:131;:::i;:::-;22042:139;;21769:419;;;:::o;22194:::-;22360:4;22398:2;22387:9;22383:18;22375:26;;22447:9;22441:4;22437:20;22433:1;22422:9;22418:17;22411:47;22475:131;22601:4;22475:131;:::i;:::-;22467:139;;22194:419;;;:::o;22619:::-;22785:4;22823:2;22812:9;22808:18;22800:26;;22872:9;22866:4;22862:20;22858:1;22847:9;22843:17;22836:47;22900:131;23026:4;22900:131;:::i;:::-;22892:139;;22619:419;;;:::o;23044:::-;23210:4;23248:2;23237:9;23233:18;23225:26;;23297:9;23291:4;23287:20;23283:1;23272:9;23268:17;23261:47;23325:131;23451:4;23325:131;:::i;:::-;23317:139;;23044:419;;;:::o;23469:::-;23635:4;23673:2;23662:9;23658:18;23650:26;;23722:9;23716:4;23712:20;23708:1;23697:9;23693:17;23686:47;23750:131;23876:4;23750:131;:::i;:::-;23742:139;;23469:419;;;:::o;23894:::-;24060:4;24098:2;24087:9;24083:18;24075:26;;24147:9;24141:4;24137:20;24133:1;24122:9;24118:17;24111:47;24175:131;24301:4;24175:131;:::i;:::-;24167:139;;23894:419;;;:::o;24319:::-;24485:4;24523:2;24512:9;24508:18;24500:26;;24572:9;24566:4;24562:20;24558:1;24547:9;24543:17;24536:47;24600:131;24726:4;24600:131;:::i;:::-;24592:139;;24319:419;;;:::o;24744:::-;24910:4;24948:2;24937:9;24933:18;24925:26;;24997:9;24991:4;24987:20;24983:1;24972:9;24968:17;24961:47;25025:131;25151:4;25025:131;:::i;:::-;25017:139;;24744:419;;;:::o;25169:::-;25335:4;25373:2;25362:9;25358:18;25350:26;;25422:9;25416:4;25412:20;25408:1;25397:9;25393:17;25386:47;25450:131;25576:4;25450:131;:::i;:::-;25442:139;;25169:419;;;:::o;25594:::-;25760:4;25798:2;25787:9;25783:18;25775:26;;25847:9;25841:4;25837:20;25833:1;25822:9;25818:17;25811:47;25875:131;26001:4;25875:131;:::i;:::-;25867:139;;25594:419;;;:::o;26019:::-;26185:4;26223:2;26212:9;26208:18;26200:26;;26272:9;26266:4;26262:20;26258:1;26247:9;26243:17;26236:47;26300:131;26426:4;26300:131;:::i;:::-;26292:139;;26019:419;;;:::o;26444:::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:::-;27035:4;27073:2;27062:9;27058:18;27050:26;;27122:9;27116:4;27112:20;27108:1;27097:9;27093:17;27086:47;27150:131;27276:4;27150:131;:::i;:::-;27142:139;;26869:419;;;:::o;27294:::-;27460:4;27498:2;27487:9;27483:18;27475:26;;27547:9;27541:4;27537:20;27533:1;27522:9;27518:17;27511:47;27575:131;27701:4;27575:131;:::i;:::-;27567:139;;27294:419;;;:::o;27719:::-;27885:4;27923:2;27912:9;27908:18;27900:26;;27972:9;27966:4;27962:20;27958:1;27947:9;27943:17;27936:47;28000:131;28126:4;28000:131;:::i;:::-;27992:139;;27719:419;;;:::o;28144:::-;28310:4;28348:2;28337:9;28333:18;28325:26;;28397:9;28391:4;28387:20;28383:1;28372:9;28368:17;28361:47;28425:131;28551:4;28425:131;:::i;:::-;28417:139;;28144:419;;;:::o;28569:222::-;28662:4;28700:2;28689:9;28685:18;28677:26;;28713:71;28781:1;28770:9;28766:17;28757:6;28713:71;:::i;:::-;28569:222;;;;:::o;28797:831::-;29060:4;29098:3;29087:9;29083:19;29075:27;;29112:71;29180:1;29169:9;29165:17;29156:6;29112:71;:::i;:::-;29193:80;29269:2;29258:9;29254:18;29245:6;29193:80;:::i;:::-;29320:9;29314:4;29310:20;29305:2;29294:9;29290:18;29283:48;29348:108;29451:4;29442:6;29348:108;:::i;:::-;29340:116;;29466:72;29534:2;29523:9;29519:18;29510:6;29466:72;:::i;:::-;29548:73;29616:3;29605:9;29601:19;29592:6;29548:73;:::i;:::-;28797:831;;;;;;;;:::o;29634:775::-;29867:4;29905:3;29894:9;29890:19;29882:27;;29919:71;29987:1;29976:9;29972:17;29963:6;29919:71;:::i;:::-;30000:72;30068:2;30057:9;30053:18;30044:6;30000:72;:::i;:::-;30082;30150:2;30139:9;30135:18;30126:6;30082:72;:::i;:::-;30164;30232:2;30221:9;30217:18;30208:6;30164:72;:::i;:::-;30246:73;30314:3;30303:9;30299:19;30290:6;30246:73;:::i;:::-;30329;30397:3;30386:9;30382:19;30373:6;30329:73;:::i;:::-;29634:775;;;;;;;;;:::o;30415:214::-;30504:4;30542:2;30531:9;30527:18;30519:26;;30555:67;30619:1;30608:9;30604:17;30595:6;30555:67;:::i;:::-;30415:214;;;;:::o;30716:132::-;30783:4;30806:3;30798:11;;30836:4;30831:3;30827:14;30819:22;;30716:132;;;:::o;30854:114::-;30921:6;30955:5;30949:12;30939:22;;30854:114;;;:::o;30974:99::-;31026:6;31060:5;31054:12;31044:22;;30974:99;;;:::o;31079:113::-;31149:4;31181;31176:3;31172:14;31164:22;;31079:113;;;:::o;31198:184::-;31297:11;31331:6;31326:3;31319:19;31371:4;31366:3;31362:14;31347:29;;31198:184;;;;:::o;31388:147::-;31489:11;31526:3;31511:18;;31388:147;;;;:::o;31541:169::-;31625:11;31659:6;31654:3;31647:19;31699:4;31694:3;31690:14;31675:29;;31541:169;;;;:::o;31716:305::-;31756:3;31775:20;31793:1;31775:20;:::i;:::-;31770:25;;31809:20;31827:1;31809:20;:::i;:::-;31804:25;;31963:1;31895:66;31891:74;31888:1;31885:81;31882:107;;;31969:18;;:::i;:::-;31882:107;32013:1;32010;32006:9;31999:16;;31716:305;;;;:::o;32027:185::-;32067:1;32084:20;32102:1;32084:20;:::i;:::-;32079:25;;32118:20;32136:1;32118:20;:::i;:::-;32113:25;;32157:1;32147:35;;32162:18;;:::i;:::-;32147:35;32204:1;32201;32197:9;32192:14;;32027:185;;;;:::o;32218:848::-;32279:5;32286:4;32310:6;32301:15;;32334:5;32325:14;;32348:712;32369:1;32359:8;32356:15;32348:712;;;32464:4;32459:3;32455:14;32449:4;32446:24;32443:50;;;32473:18;;:::i;:::-;32443:50;32523:1;32513:8;32509:16;32506:451;;;32938:4;32931:5;32927:16;32918:25;;32506:451;32988:4;32982;32978:15;32970:23;;33018:32;33041:8;33018:32;:::i;:::-;33006:44;;32348:712;;;32218:848;;;;;;;:::o;33072:281::-;33130:5;33154:23;33172:4;33154:23;:::i;:::-;33146:31;;33198:25;33214:8;33198:25;:::i;:::-;33186:37;;33242:104;33279:66;33269:8;33263:4;33242:104;:::i;:::-;33233:113;;33072:281;;;;:::o;33359:1073::-;33413:5;33604:8;33594:40;;33625:1;33616:10;;33627:5;;33594:40;33653:4;33643:36;;33670:1;33661:10;;33672:5;;33643:36;33739:4;33787:1;33782:27;;;;33823:1;33818:191;;;;33732:277;;33782:27;33800:1;33791:10;;33802:5;;;33818:191;33863:3;33853:8;33850:17;33847:43;;;33870:18;;:::i;:::-;33847:43;33919:8;33916:1;33912:16;33903:25;;33954:3;33947:5;33944:14;33941:40;;;33961:18;;:::i;:::-;33941:40;33994:5;;;33732:277;;34118:2;34108:8;34105:16;34099:3;34093:4;34090:13;34086:36;34068:2;34058:8;34055:16;34050:2;34044:4;34041:12;34037:35;34021:111;34018:246;;;34174:8;34168:4;34164:19;34155:28;;34209:3;34202:5;34199:14;34196:40;;;34216:18;;:::i;:::-;34196:40;34249:5;;34018:246;34289:42;34327:3;34317:8;34311:4;34308:1;34289:42;:::i;:::-;34274:57;;;;34363:4;34358:3;34354:14;34347:5;34344:25;34341:51;;;34372:18;;:::i;:::-;34341:51;34421:4;34414:5;34410:16;34401:25;;33359:1073;;;;;;:::o;34438:348::-;34478:7;34501:20;34519:1;34501:20;:::i;:::-;34496:25;;34535:20;34553:1;34535:20;:::i;:::-;34530:25;;34723:1;34655:66;34651:74;34648:1;34645:81;34640:1;34633:9;34626:17;34622:105;34619:131;;;34730:18;;:::i;:::-;34619:131;34778:1;34775;34771:9;34760:20;;34438:348;;;;:::o;34792:191::-;34832:4;34852:20;34870:1;34852:20;:::i;:::-;34847:25;;34886:20;34904:1;34886:20;:::i;:::-;34881:25;;34925:1;34922;34919:8;34916:34;;;34930:18;;:::i;:::-;34916:34;34975:1;34972;34968:9;34960:17;;34792:191;;;;:::o;34989:96::-;35026:7;35055:24;35073:5;35055:24;:::i;:::-;35044:35;;34989:96;;;:::o;35091:90::-;35125:7;35168:5;35161:13;35154:21;35143:32;;35091:90;;;:::o;35187:126::-;35224:7;35264:42;35257:5;35253:54;35242:65;;35187:126;;;:::o;35319:77::-;35356:7;35385:5;35374:16;;35319:77;;;:::o;35402:86::-;35437:7;35477:4;35470:5;35466:16;35455:27;;35402:86;;;:::o;35494:121::-;35552:9;35585:24;35603:5;35585:24;:::i;:::-;35572:37;;35494:121;;;:::o;35621:307::-;35689:1;35699:113;35713:6;35710:1;35707:13;35699:113;;;35798:1;35793:3;35789:11;35783:18;35779:1;35774:3;35770:11;35763:39;35735:2;35732:1;35728:10;35723:15;;35699:113;;;35830:6;35827:1;35824:13;35821:101;;;35910:1;35901:6;35896:3;35892:16;35885:27;35821:101;35670:258;35621:307;;;:::o;35934:180::-;35982:77;35979:1;35972:88;36079:4;36076:1;36069:15;36103:4;36100:1;36093:15;36120:180;36168:77;36165:1;36158:88;36265:4;36262:1;36255:15;36289:4;36286:1;36279:15;36306:180;36354:77;36351:1;36344:88;36451:4;36448:1;36441:15;36475:4;36472:1;36465:15;36492:180;36540:77;36537:1;36530:88;36637:4;36634:1;36627:15;36661:4;36658:1;36651:15;36801:117;36910:1;36907;36900:12;36924:102;36965:6;37016:2;37012:7;37007:2;37000:5;36996:14;36992:28;36982:38;;36924:102;;;:::o;37032:::-;37074:8;37121:5;37118:1;37114:13;37093:34;;37032:102;;;:::o;37140:168::-;37280:20;37276:1;37268:6;37264:14;37257:44;37140:168;:::o;37314:166::-;37454:18;37450:1;37442:6;37438:14;37431:42;37314:166;:::o;37486:174::-;37626:26;37622:1;37614:6;37610:14;37603:50;37486:174;:::o;37666:225::-;37806:34;37802:1;37794:6;37790:14;37783:58;37875:8;37870:2;37862:6;37858:15;37851:33;37666:225;:::o;37897:236::-;38037:34;38033:1;38025:6;38021:14;38014:58;38106:19;38101:2;38093:6;38089:15;38082:44;37897:236;:::o;38139:167::-;38279:19;38275:1;38267:6;38263:14;38256:43;38139:167;:::o;38312:166::-;38452:18;38448:1;38440:6;38436:14;38429:42;38312:166;:::o;38484:170::-;38624:22;38620:1;38612:6;38608:14;38601:46;38484:170;:::o;38660:174::-;38800:26;38796:1;38788:6;38784:14;38777:50;38660:174;:::o;38840:168::-;38980:20;38976:1;38968:6;38964:14;38957:44;38840:168;:::o;39014:234::-;39154:34;39150:1;39142:6;39138:14;39131:58;39223:17;39218:2;39210:6;39206:15;39199:42;39014:234;:::o;39254:165::-;39394:17;39390:1;39382:6;39378:14;39371:41;39254:165;:::o;39425:181::-;39565:33;39561:1;39553:6;39549:14;39542:57;39425:181;:::o;39612:182::-;39752:34;39748:1;39740:6;39736:14;39729:58;39612:182;:::o;39800:173::-;39940:25;39936:1;39928:6;39924:14;39917:49;39800:173;:::o;39979:165::-;40119:17;40115:1;40107:6;40103:14;40096:41;39979:165;:::o;40150:114::-;;:::o;40270:232::-;40410:34;40406:1;40398:6;40394:14;40387:58;40479:15;40474:2;40466:6;40462:15;40455:40;40270:232;:::o;40508:170::-;40648:22;40644:1;40636:6;40632:14;40625:46;40508:170;:::o;40684:176::-;40824:28;40820:1;40812:6;40808:14;40801:52;40684:176;:::o;40866:162::-;41006:14;41002:1;40994:6;40990:14;40983:38;40866:162;:::o;41034:220::-;41174:34;41170:1;41162:6;41158:14;41151:58;41243:3;41238:2;41230:6;41226:15;41219:28;41034:220;:::o;41260:122::-;41333:24;41351:5;41333:24;:::i;:::-;41326:5;41323:35;41313:63;;41372:1;41369;41362:12;41313:63;41260:122;:::o;41388:116::-;41458:21;41473:5;41458:21;:::i;:::-;41451:5;41448:32;41438:60;;41494:1;41491;41484:12;41438:60;41388:116;:::o;41510:122::-;41583:24;41601:5;41583:24;:::i;:::-;41576:5;41573:35;41563:63;;41622:1;41619;41612:12;41563:63;41510:122;:::o

Swarm Source

ipfs://d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a5

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.