Contract 0x03bB5Db08390884eadF45c39b07DD50d6C2A73DB

Contract Overview

Balance:
0 BNB
Txn Hash
Block
From
To
Value [Txn Fee]
0xa53968e59b992ae6900903418957432b4f4582c13c581e13059bc57fee4396f961898792021-02-11 9:58:5623 days 6 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.10194444
0x1d6d117242a0f6fb0c0cd81a65da9a0e40f2b1837447ee46f81d15c8fb68ed2b61898762021-02-11 9:58:4723 days 6 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.00087642
0xe4de68b5931f049917d217994eaf8fceb8b78086d5cd353eea8de2ff2099b12a61898452021-02-11 9:57:1423 days 7 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.000876
0x853ddd930e250c96c8caff5000b3c8de7e66d4f027f5465c25305909ad1198ae61898302021-02-11 9:56:2923 days 7 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.00087554
0x07114a0fdd1d731e8ddc0c34f51d8be8da619e2401a6ad0be5582df422ebabbe61898272021-02-11 9:56:2023 days 7 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.0008764
0x4c196f34aa8650884b344a9088a25f360cc639804dab38100ece3228fe59d5a861898182021-02-11 9:55:5323 days 7 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  0x03bb5db08390884eadf45c39b07dd50d6c2a73db0 BNB0.00145702
0x0580136c0a204ab7d70ba58f015fdec067c1d422914ff45d17b5ab6322ed09f961898092021-02-11 9:55:2623 days 7 hrs ago0x4f476c35f1d823c24c476db1eecb97db3a6a49a1 IN  Contract Creation0 BNB0.10430964
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xa53968e59b992ae6900903418957432b4f4582c13c581e13059bc57fee4396f961898792021-02-11 9:58:5623 days 6 hrs ago 0x03bb5db08390884eadf45c39b07dd50d6c2a73db 0xced5d16a8f4dd664f1dffa5c6e01adc04f7720310 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PoolRegistry

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : PoolRegistry.sol
pragma solidity ^0.6.0;

import "./interface/IPool.sol";
import "./interface/IAssetsManageTeam.sol";
import "./interface/IReturnInvestmentLpartner.sol";
import "./interface/ICreator.sol";
import "./interface/IRoleModel.sol";
import "./interface/IOracle.sol";

import "./access/TeamRole.sol";
import "./utils/EnumerableSet.sol";

contract PoolRegistry is TeamRole, IRoleModel {
    using EnumerableSet for EnumerableSet.AddressSet;

    event CreatePool(address pool);
    event AddPool(address pool);
    event UpdatePool(address pool);

    // The address of the contract that creates the Investment Pool
    address private _creatorInvestPool;
    // Smart contract for request deposit
    IAssetsManageTeam private _assetsManageTeam;
    // Smart contract for return investment
    IReturnInvestmentLpartner private _returnInvestmentLpartner;
    // Oracle contract address
    IOracle _oracleContract;

    // Collection of all pool addresses
    EnumerableSet.AddressSet private _addressesPools;

    /*************************************************************
    ****************** MANAGEMENT POOL METHODS *******************
    **************************************************************/

    /**
    * @dev Create new Investment Pool.
    * @param lockPeriod The blocking period of assets.
    * @param depositFixedFee Ether deposit commission LPartner.
    * @param referralDepositFee Referral commission.
    * @param anualPrecent The annual percentage of tokens.
    * @param superAdmin The An address that has privileges SUPER_ADMIN_ROLE.
    * @param gPartner The An address that has privileges GENERAL_PARTNER_ROLE.
    * @param lPartner The An address that has privileges LIMITED_PARTNER_ROLE.
    * @param startupTeam The An address that has privileges TEAM_ROLE.
    * @return A boolean that indicates if the operation was successful.
    */
    function createPool(
//        address token,
        uint256 lockPeriod,
        uint256 depositFixedFee,
        uint256 referralDepositFee,
        uint256 anualPrecent,
        uint256 penaltyEarlyWithdraw,
        address superAdmin,
        address gPartner,
        address lPartner,
        address startupTeam
    ) public onlyTeam returns (bool) {
        ICreator _creatorContract = ICreator(_creatorInvestPool);

        address _investPool = _creatorContract.createPool(
//            token,
            lockPeriod,
            depositFixedFee,
            referralDepositFee,
            anualPrecent,
            penaltyEarlyWithdraw,
            superAdmin,
            gPartner,
            lPartner,
            startupTeam
        );

        _addressesPools.add(_investPool);

        emit CreatePool(_investPool);
        return true;
    }
    
    /**
    * @dev Add new smart contract Investment Pool.
    * @param poolAddress The address Investment Pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function addPool(address poolAddress) public onlyTeam returns (bool) {
        // require(!_addressesPools.contains(poolAddress), "PoolRegistry: pool with this address already exists");

        _addressesPools.add(poolAddress);
        _assetsManageTeam.addManager(poolAddress);

        emit AddPool(poolAddress);
        return true;
    }

    /**
    * @dev Update smart contract Investment Pool.
    * @param token The address token contract.
    * @param locked The address to query the wager of.
    * @param depositFixedFee Commission from the deposit Limited Partner.
    * @param referralDepositFee Commission from the deposit if the limited partner has a referral.
    * @param anualPrecent The annual percentage of tokens.
    * @param penaltyEarlyWithdraw The penalty for early withdraw.
    * @return A boolean that indicates if the operation was successful.
    */
    function updatePool(address pool, bool publicPool, address token, uint256 locked, uint256 depositFixedFee, uint256 referralDepositFee, uint256 anualPrecent, uint256 penaltyEarlyWithdraw) public onlyTeam returns (bool) {
        IPool _poolContract = IPool(pool);
        _poolContract._updatePool(publicPool, token, locked, depositFixedFee, referralDepositFee, anualPrecent, penaltyEarlyWithdraw);
        
        emit UpdatePool(pool);
        return true;
    }

    /**
    * @dev Set price token for One. (POOL REGISTRY)
    * @param rate new price token to Wei.
    * @return A boolean that indicates if the operation was successful.
    */
    function setPriceToken(address pool, uint256 rate) external onlyTeam returns (bool) {
        IPool _poolContract = IPool(pool);

        _poolContract._setRate(rate);
        return true;
    }

    /*************************************************************
    ******************** ASSET MANAGE TEAM ***********************
    **************************************************************/

    /**
    * @dev Deposit token for Investment Pool.
    * @param pool The address Investment Pool.
    * @param amount Amount of deposit tokens.
    * @return A boolean that indicates if the operation was successful.
    */
    function depositTokenToPool(address pool, uint256 amount) public returns(bool) {
        IPool _poolContract = IPool(pool);
        _poolContract._depositTokenPoolRegistry(msg.sender, amount);

        return true;
    }

    /**
    * @dev Withdraw ether from Investment pool STARTUP_TEAM.
    * @param pool The address Investment Pool.
    * @param amount Amount of withdraw ether.
    * @return A boolean that indicates if the operation was successful.
    */
    function withdrawEtherStartupTeam(address pool, uint256 amount) public returns(bool) {
        IPool _poolContract = IPool(pool);
        _poolContract._withdrawEtherTeam(msg.sender, amount);

        return true;
    }

    /**
    * @dev Creation of a request to deposit token or withdraw ether.
    * @param withdraw Boolean value to indicate the type of request.
    * @param pool The address Investment Pool.
    * @param maxValue Maximum possible deposit.
    * @return A boolean that indicates if the operation was successful.
    */
    function requestStartupTeam(bool withdraw, address pool, uint256 maxValue) public returns (bool) {        
        return _assetsManageTeam._request(withdraw, pool, msg.sender, maxValue);
    }

    /**
    * @dev Approve of a request to deposit token or withdraw ether.
    * @param pool The address Investment Pool.
    * @param team Address to confirm the token deposit.
    * @return A boolean that indicates if the operation was successful.
    */
    function approveReqStartupTeam(address pool, address team) public returns (bool) {
        return _assetsManageTeam._approve(pool, team, msg.sender);
    }
    
    /**
    * @dev Disapprove of a request to deposit a token or withdraw ether.
    * @param pool The address Investment Pool.
    * @param team Address to disapprove the token deposit.
    * @return A boolean that indicates if the operation was successful.
    */
    function disapproveReqStartupTeam(address pool, address team) public returns (bool) {
        return _assetsManageTeam._disapprove(pool, team, msg.sender);
    }
    
    /**
    * @dev Lock deposit or withdraw ether for startup team address.
    * @param pool The address Investment Pool.
    * @param team Address to lock token deposit or withdraw ether.
    * @return A boolean that indicates if the operation was successful.
    */
    function lockStartupTeam(address pool, address team) public returns (bool) {        
        return _assetsManageTeam._lock(pool, team, msg.sender);
    }

    /**
    * @dev Unlock deposit or withdraw ether for startup team address.
    * @param pool The address Investment Pool.
    * @param team Address to unlock token deposit or withdraw ether.
    * @return A boolean that indicates if the operation was successful.
    */
    function unlockStartupTeam(address pool, address team) public returns (bool) {        
        return _assetsManageTeam._unlock(pool, team, msg.sender);
    }

    /**
    * @dev Get information about the user who made a deposit ETH.
    * @param pool The address Investment Pool.
    * @param owner The address investor pool.
    * @param index The owner's deposit index.
    */
    function getDepositEtherPool(address pool, address owner, uint256 index) public view
        returns (
            uint256 amount,
            uint256 time,
            uint256 lock_period,
            bool refund_authorize)
        {
            IPool _poolContract = IPool(pool);
            (amount, time, lock_period, refund_authorize) = _poolContract.getDepositEther(owner, index);

            return (amount, time, lock_period, refund_authorize);
    }

    /**
    * @dev Get information about the user who made a depositToken or withdrawEther.
    * @param pool The address Investment Pool.
    * @param owner The address investor pool.
    * @param index The owner's deposit index.
    */
    function getPerformedOperationsTeamStartup(address pool, address owner, uint256 index) public view
        returns(
            address token, 
            uint256 amountToken,
            uint256 withdrawEther,
            uint256 time)
        {
            (token, amountToken, withdrawEther, time) = _assetsManageTeam.getPerformedOperations(pool, owner, index);

            return (token, amountToken, withdrawEther, time);
    }

    /**
    * @dev Get all addresses that made a requests for a token deposit or withdraw.
    * @param pool The address Investment Pool.
    */
    function getRequestsTeam(address pool) public view returns (address[] memory) {
        return _assetsManageTeam.getRequests(pool);
    }

    /**
    * @dev Get all addresses that made a approve for a token deposit or withdraw.
    * @param pool The address Investment Pool.
    */
    function getApprovalReqTeam(address pool) public view returns (address[] memory) {
        return _assetsManageTeam.getApproval(pool);
    }

    /**
    * @dev Get request information for team address.
    * @param pool The address Investment Pool.
    * @param team The address team account.
    */
    function getRequestTeamAddress(address pool, address team) public view returns (bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValueEther, uint256 madeValueEther) {
        (lock, maxValueToken, madeValueToken, maxValueEther, madeValueEther) = _assetsManageTeam.getRequestTeamAddress(pool, team);
        return (lock, maxValueToken, madeValueToken, maxValueEther, madeValueEther);
    }

    /**
    * @dev Get approve information for team address.
    * @param pool The address Investment Pool.
    * @param team The address team account.
    */
    function getApproveTeamAddress(address pool, address team) public view returns (bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValueEther, uint256 madeValueEther) {
        (lock, maxValueToken, madeValueToken, maxValueEther, madeValueEther) = _assetsManageTeam.getApproveTeamAddress(pool, team);
        return (lock, maxValueToken, madeValueToken, maxValueEther, madeValueEther);
    }

    /*************************************************************
    ********************* REFERRAL METHODS ***********************
    **************************************************************/

    /**
    * @dev Adding referral LPartner.
    * @param pool The address Investment Pool.
    * @param referral The address referral LPartner.
    * @return A boolean that indicates if the operation was successful.
    */
    function setReferral(address pool, address lPartner, address referral) public returns (bool) {
        IPool _poolContract = IPool(pool);
        require(_poolContract.hasRole(LIMITED_PARTNER_ROLE, lPartner), "PoolRegistry: parameter Lpartner has no role LPartner");

        return _poolContract._setReferral(msg.sender, lPartner, referral);
    }

    /**
    * @dev Get address referal for LPartner.
    * @param pool The address Investment Pool.
    */
    function getReferral(address pool, address lPartner) public view returns (address) {
        IPool _poolContract = IPool(pool);
        return _poolContract.getReferral(lPartner);
    }

    /*************************************************************
    **************** METHODS RETURNS INVESTMENT ******************
    **************************************************************/

    /**
    * @dev Creating a request for a return investment Limited partner.
    * @param pool The address Investment Pool contract.
    * @param index Investment index.
    * @return A boolean that indicates if the operation was successful.
    */
    function requestReturnInvestmentLpartner(address pool, uint256 index) public returns (bool) {
        return _returnInvestmentLpartner._request(pool, msg.sender, index);
    }

    /**
    * @dev Approve of a request for return investment.
    * @param pool The address Investment Pool contract.
    * @param lPartner Address to confirm the request.
    * @return A boolean that indicates if the operation was successful.
    */
    function approveReturnInvestmentLpartner(address pool, address lPartner) public returns (bool) {
        return _returnInvestmentLpartner._approve(pool, lPartner, msg.sender);
    }

    /**
    * @dev Returns investment pool.
    * @param pool The address Investment Pool contract.
    * @return A boolean that indicates if the operation was successful.
    */
    function withdrawEtherLpartner(address pool) public returns (bool) {        
        IPool _poolContract = IPool(pool);
        return _poolContract._withdrawEtherLpartner(msg.sender);
    }

    /**
    * @dev Disapprove of a request for return investment.
    * @param pool The address Investment Pool contract.
    * @param lPartner Address to confirm the request.
    * @return A boolean that indicates if the operation was successful.
    */
    function disapproveReturnInvestmentLpartner(address pool, address lPartner) public returns (bool) {
        return _returnInvestmentLpartner._disapprove(pool, lPartner, msg.sender);
    }

    /**
    * @dev Get all requests.
    * @param pool address investment pool contract.
    */
    function getAddrRequestsReturnInvesLpartner(address pool) public view returns (address[] memory) {
        return _returnInvestmentLpartner.getRequests(pool);
    }

    /**
    * @dev Get all requests current LPartner.
    * @param pool address investment pool contract.
    * @param lPartner address limited parner role.
    */
    function getRequestsReturnInvestLpartner(address pool, address lPartner) public view returns (uint256[] memory) {
        return _returnInvestmentLpartner.getRequestsLpartner(pool, lPartner);
    }

    /*************************************************************
    ********************* INTERNAL METHODS ***********************
    **************************************************************/

    /**
    * @dev Deposit ETH for Investment Pool.
    * @param pool The address Investment Pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function depositEtherToPool(address payable pool) public payable returns(bool) {
        uint256 amount = msg.value;
        IPool _poolContract = IPool(pool);

        pool.transfer(amount);
        _poolContract._depositEtherPoolRegistry(msg.sender, amount);

        return true;
    }

    /**
    * @dev Returns ether to investment pool from team.
    * @param pool The address Investment Pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function returnsEtherFromTeam(address payable pool) public payable returns(bool) {
        IPool _poolContract = IPool(pool);
        require(_poolContract.hasRole(STARTUP_TEAM_ROLE, msg.sender), "PoolRegistry: sender has no role TeamStartup");

        pool.transfer(msg.value);

        return true;
    }

    /**
    * @dev Allow ether deposit to investment pool.
    * @param pool The address Investment Pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function activateDepositToPool(address pool) public onlyTeam returns (bool) {
        IPool _poolContract = IPool(pool);
        return _poolContract._activateDepositToPool();
    }

    /**
    * @dev Disallow ether deposit to investment pool.
    * @param pool The address Investment Pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function disactivateDepositToPool(address pool) public onlyTeam returns (bool) {
        IPool _poolContract = IPool(pool);
        return _poolContract._disactivateDepositToPool();
    }

    /**
    * @dev Grants role to account.
    * @param pool The address Investment Pool.
    * @param role Role account.
    * @param account The address for grant role.
    * @return A boolean that indicates if the operation was successful.
    */
    function grantRoleInvestmentPool(address pool, bytes32 role, address account) public returns (bool) {        
        IPool _poolContract = IPool(pool);

        require(_poolContract.hasRole(SUPER_ADMIN_ROLE, msg.sender), "PoolRegistry: sender has no role GPartner");

        _poolContract.grantRole(role, account);

        return true;
    }

    /**
    * @dev Revoke role to account.
    * @param pool The address Investment Pool.
    * @param role Role account.
    * @param account The address for grant role.
    * @return A boolean that indicates if the operation was successful.
    */
    function revokeRoleInvestmentPool(address pool, bytes32 role, address account) public returns (bool) {
        IPool _poolContract = IPool(pool);

        require(_poolContract.hasRole(SUPER_ADMIN_ROLE, msg.sender), "PoolRegistry: sender has no role GPartner");

        _poolContract.revokeRole(role, account);

        return true;
    }

    /**
    * @dev Set the address of the contract creating Investment Pools.
    * @param creatorContract The address creator pool.
    * @return A boolean that indicates if the operation was successful.
    */
    function setAddressCreatorInvestPool(address creatorContract) public onlyTeam returns (bool) {
        _creatorInvestPool = creatorContract;
        return true;
    }
    
    /**
    * @dev Set address assetManageTeam contract.
    * @param addrContract The address AssetManageTeam contract.
    * @return A boolean that indicates if the operation was successful.
    */
    function setAssetManageTeamContract(IAssetsManageTeam addrContract) public onlyTeam returns (bool) {
        _assetsManageTeam = addrContract;
        return true;
    }

    /**
    * @dev Set address ReturnInvestmentLpartner contract.
    * @param addrContract The address ReturnInvestmentLpartner contract.
    * @return A boolean that indicates if the operation was successful.
    */
    function setReturnInvestmentLpartner(IReturnInvestmentLpartner addrContract) public onlyTeam returns (bool) {
        _returnInvestmentLpartner = addrContract;
        return true;
    }

    /**
    * @dev Set address Oracle contract.
    * @param _oracle The address Oracle contract.
    * @return A boolean that indicates if the operation was successful.
    */
    function setOracleContract(IOracle _oracle) public onlyTeam returns (bool) {
        _oracleContract = _oracle;
        return true;
    }

    /**
    * @dev Get all Investment Pool addresses.
    */
    function getPools() public view returns (address[] memory) {
        return _addressesPools.collection();
    }

    /**
    * @dev Get information about the Investment Pool.
    * @param pool The address Investment Pool.
    */
    function getInfoPool(address pool) public view
        returns(
            bool isPublicPool,
            address token, 
            uint256 locked, 
            uint256 rate, 
            uint256 depositFixedFee, 
            uint256 referralDepositFee, 
            uint256 anualPrecent, 
            uint256 penaltyEarlyWithdraw, 
            uint256 totalInvestLpartner,
            uint256 premiumFee
        )
    {
        IPool _poolContract = IPool(pool);
        (isPublicPool, token, locked, rate, depositFixedFee, , , , ,) = _poolContract.getInfoPool();
        (, , , , , referralDepositFee, anualPrecent, penaltyEarlyWithdraw, totalInvestLpartner, premiumFee) = _poolContract.getInfoPool();
        
        return (isPublicPool, token, locked, rate, depositFixedFee, referralDepositFee, anualPrecent, penaltyEarlyWithdraw, totalInvestLpartner, premiumFee);
    }

    /**
    * @dev Get address TokenRequestContract.
    */
    function getAssetManageTeamContract() public view returns (IAssetsManageTeam) {
        return _assetsManageTeam;
    }

    /**
    * @dev Get address TokenRequestContract.
    */
    function getReturnInvesmentLpartner() public view returns (IReturnInvestmentLpartner) {
        return _returnInvestmentLpartner;
    }

    /**
    * @dev Get address OracleContract.
    */
    function getOracleContract() public view returns (IOracle) {
        return _oracleContract;
    }

    /**
    * @dev Get all addresses for role.
    * @param pool The address Investment Pool.
    * @param role Role accounts.
    */
    function getAddressesRolesPool(address pool, bytes32 role) public view returns (address[] memory) {
        IPool _poolContract = IPool(pool);
        return _poolContract.getMembersRole(role);
    }

    /**
    * @dev Get address contract creator Invest pool.
    */
    function getAddressCreatorInvestPool() public view returns(address) {
        return _creatorInvestPool;
    }

    /**
    * @dev Get address TokenRequestContract.
    */
    function getPriceToken(address pool) public view returns (uint256 rate) {
        IPool _poolContract = IPool(pool);
        (, , , rate, , , , , ,) = _poolContract.getInfoPool();
        return rate;
    }

    /**
    * @dev Get address TokenRequestContract.
    */
    function getCustomPrice(address aggregator) public view returns (uint256) {
        return uint256(_oracleContract.getCustomPrice(aggregator));
    }
}

File 2 of 10 : TeamRole.sol
pragma solidity ^0.6.0;

import "./lib/Roles.sol";

contract TeamRole {
    using Roles for Roles.Role;

    event TeamAdded(address indexed account);
    event TeamRemoved(address indexed account);

    Roles.Role private _team;

    constructor () internal {
        _addTeam(msg.sender);
    }

    modifier onlyTeam() {
        require(isTeam(msg.sender), "TeamRole: caller does not have the Team role");
        _;
    }

    function isTeam(address account) public view returns (bool) {
        return _team.has(account);
    }

    function getTeamAddresses() public view returns (address[] memory) {
        return _team.accounts;
    }

    function addTeam(address account) public onlyTeam {
        _addTeam(account);
    }

    function renounceTeam() public {
        _removeTeam(msg.sender);
    }

    function _addTeam(address account) internal {
        _team.add(account);
        emit TeamAdded(account);
    }

    function _removeTeam(address account) internal {
        _team.remove(account);
        emit TeamRemoved(account);
    }
}

File 3 of 10 : Roles.sol
pragma solidity ^0.6.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        address[] accounts;
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
        role.accounts.push(account);
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        
        for (uint256 i; i < role.accounts.length; i++) {
            if (role.accounts[i] == account) {
                _removeIndexArray(i, role.accounts);
                break;
            }
        }
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }

    function _removeIndexArray(uint256 index, address[] storage array) internal virtual {
        for(uint256 i = index; i < array.length-1; i++) {
            array[i] = array[i+1];
        }
        
        array.pop();
    }
}

File 4 of 10 : IAssetsManageTeam.sol
pragma solidity ^0.6.0;

interface IAssetsManageTeam {

    // ***** SET INFO ***** //

    function _depositToken(address pool, address team, address token, uint256 amount) external returns (bool);
    
    function _withdrawEther(address pool, address team, uint256 amount) external returns (bool);
    
    function _request(bool withdraw, address pool, address team, uint256 maxValue) external returns(bool);
    
    function _approve(address pool, address team, address owner) external returns(bool);

    function _disapprove(address pool, address team, address owner) external returns(bool);
    
    function _lock(address pool, address team, address owner) external returns(bool);
    
    function _unlock(address pool, address team, address owner) external returns(bool);

    function addManager(address account) external;
    
    // ***** GET INFO ***** //

    function getPerformedOperationsLength(address pool, address owner) external view returns(uint256 length);
    
    function getPerformedOperations(address pool, address owner, uint256 index) external view returns(address token, uint256 amountToken, uint256 withdrawEther, uint256 time);
    
    function getRequests(address pool) external view returns(address[] memory);

    function getApproval(address pool) external view returns(address[] memory);
    
    function getRequestTeamAddress(address pool, address team) external view returns(bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValueEther, uint256 madeValueEther);
    
    function getApproveTeamAddress(address pool, address team) external view returns(bool lock, uint256 maxValueToken, uint256 madeValueToken, uint256 maxValueEther, uint256 madeValueEther);
}

File 5 of 10 : ICreator.sol
pragma solidity ^0.6.0;

interface ICreator {
    function createPool(
//        address token,
        uint256 lockPeriod,
        uint256 depositFixedFee,
        uint256 referralDepositFee,
        uint256 anualPrecent,
        uint256 penaltyEarlyWithdraw,
        address superAdmin,
        address gPartner,
        address lPartner,
        address startupTeam
    ) external returns (address);
}

File 6 of 10 : IOracle.sol
pragma solidity ^0.6.0;

interface IOracle {
    function getLatestPrice() external view returns (int);
    function getCustomPrice(address aggregator) external view returns (uint256);
}

File 7 of 10 : IPool.sol
pragma solidity ^0.6.0;

interface IPool {

    // ***** GET INFO ***** //

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleMemberCount(bytes32 role) external view returns (uint256);

    function getDepositEther(address owner, uint256 index) external view returns(uint256 amount, uint256 time, uint256 lock_period, bool refund_authorize);

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

    function getMembersRole(bytes32 role) external view returns (address[] memory Accounts);

    function getInfoPool() external view returns( bool isPublicPool, address token, uint256 locked, uint256 rate, uint256 depositFixedFee, uint256 referralDepositFee, uint256 anualPrecent, uint256 penaltyEarlyWithdraw, uint256 totalInvestLpartner, uint256 premiumFee);

    function getReferral(address lPartner) external view returns (address);
    
    // ***** SET INFO ***** //

    function _updatePool(bool isPublicPool, address token, uint256 locked, uint256 depositFixedFee, uint256 referralDepositFee, uint256 anualPrecent, uint256 penaltyEarlyWithdraw) external returns (bool);

    function _setRate(uint256 rate) external returns (bool);

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

    function _depositTokenPoolRegistry(address payable sender, uint256 amount) external returns (bool);

    function _withdrawEtherTeam (address payable sender, uint256 amount) external returns (bool);

    function _activateDepositToPool() external returns (bool);

    function _disactivateDepositToPool() external returns (bool);

    function _setReferral(address sender, address lPartner, address referral) external returns (bool);

    function _approveWithdrawLpartner(address lPartner, uint256 index) external returns (bool);

    function _withdrawEtherLpartner (address payable sender) external returns (bool);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;
}

File 8 of 10 : IReturnInvestmentLpartner.sol
pragma solidity ^0.6.0;

interface IReturnInvestmentLpartner {
  function _request(address pool, address lPartner, uint256 index) external returns(bool);
  
  function _approve(address pool, address lPartner, address sender) external returns(bool);
  
  function _disapprove(address pool, address lPartner, address sender) external returns(bool);

  function getRequests(address pool) external view returns(address[] memory);
  
  function getRequestsLpartner(address pool, address lPartner) external view returns(uint256[] memory);
}

File 9 of 10 : IRoleModel.sol
pragma solidity ^0.6.0;

contract IRoleModel {
    /**
     * SUPER_ADMIN_ROLE - The Role controls adding a new wallet addresses to according roles arrays
     */
    bytes32 public constant SUPER_ADMIN_ROLE = keccak256("SUPER_ADMIN_ROLE");

    /**
     * GENERAL_PARTNER_ROLE - The Role controls the approval process to transfer money inside
     *               investment pools and control Limited Partners adding, investment
     *               pools adding
     */
    bytes32 public constant GENERAL_PARTNER_ROLE = keccak256("GENERAL_PARTNER_ROLE");

    /**
     * LIMITED_PARTNER_ROLE - The Role allows the wallet of LP to invest money in the
     *               investment pool and withdraw money from there (access to limited pools)
     */
    bytes32 public constant LIMITED_PARTNER_ROLE = keccak256("LIMITED_PARTNER_ROLE");

    /**
     * TEAM_ROLE - Role that exposes access to wallets (the team member), were
     *           distributed all fees, fines, and success premiums from investment pools
     */
    bytes32 public constant STARTUP_TEAM_ROLE = keccak256("STARTUP_TEAM_ROLE");

    /**
     * POOL_REGISTRY - Registry of contract, which manage contract;
     */
    bytes32 public constant POOL_REGISTRY = keccak256("POOL_REGISTRY");

    /**
     * RETURN_INVESTMENT_LPARTNER - Management returns investment for Limitited partner role.
     */
    bytes32 public constant RETURN_INVESTMENT_LPARTNER = keccak256("RETURN_INVESTMENT_LPARTNER");

    bytes32 public constant ORACLE = keccak256("ORACLE");

    bytes32 public constant REFERER_ROLE = keccak256("REFERER_ROLE");

}

File 10 of 10 : EnumerableSet.sol
pragma solidity ^0.6.0;

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Collection addresses
        address[] _collection;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }
    
    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value, address addressValue) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._collection.push(addressValue);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value, address addressValue) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];
            
            for(uint256 i = 0; i < set._collection.length; i++) {
                if (set._collection[i] == addressValue) {
                    _removeIndexArray(i, set._collection);
                    break;
                }
            }
            
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
    
    function _collection(Set storage set) private view returns (address[] memory) {
        return set._collection;    
    }
    
    function _removeIndexArray(uint256 index, address[] storage array) internal virtual {
        for(uint256 i = index; i < array.length-1; i++) {
            array[i] = array[i+1];
        }
        
        array.pop();
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)), value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)), value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    
    function collection(AddressSet storage set) internal view returns (address[] memory) {
        return _collection(set._inner);
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"AddPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"CreatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TeamAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TeamRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"}],"name":"UpdatePool","type":"event"},{"inputs":[],"name":"GENERAL_PARTNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIMITED_PARTNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REGISTRY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RETURN_INVESTMENT_LPARTNER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTUP_TEAM_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPER_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"activateDepositToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddress","type":"address"}],"name":"addPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"approveReqStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lPartner","type":"address"}],"name":"approveReturnInvestmentLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockPeriod","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"anualPrecent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"},{"internalType":"address","name":"superAdmin","type":"address"},{"internalType":"address","name":"gPartner","type":"address"},{"internalType":"address","name":"lPartner","type":"address"},{"internalType":"address","name":"startupTeam","type":"address"}],"name":"createPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"pool","type":"address"}],"name":"depositEtherToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokenToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disactivateDepositToPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"disapproveReqStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lPartner","type":"address"}],"name":"disapproveReturnInvestmentLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddrRequestsReturnInvesLpartner","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressCreatorInvestPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getAddressesRolesPool","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getApprovalReqTeam","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"getApproveTeamAddress","outputs":[{"internalType":"bool","name":"lock","type":"bool"},{"internalType":"uint256","name":"maxValueToken","type":"uint256"},{"internalType":"uint256","name":"madeValueToken","type":"uint256"},{"internalType":"uint256","name":"maxValueEther","type":"uint256"},{"internalType":"uint256","name":"madeValueEther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAssetManageTeamContract","outputs":[{"internalType":"contract IAssetsManageTeam","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"getCustomPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getDepositEtherPool","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"lock_period","type":"uint256"},{"internalType":"bool","name":"refund_authorize","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getInfoPool","outputs":[{"internalType":"bool","name":"isPublicPool","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"locked","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"anualPrecent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"},{"internalType":"uint256","name":"totalInvestLpartner","type":"uint256"},{"internalType":"uint256","name":"premiumFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleContract","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPerformedOperationsTeamStartup","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"withdrawEther","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPriceToken","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lPartner","type":"address"}],"name":"getReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"getRequestTeamAddress","outputs":[{"internalType":"bool","name":"lock","type":"bool"},{"internalType":"uint256","name":"maxValueToken","type":"uint256"},{"internalType":"uint256","name":"madeValueToken","type":"uint256"},{"internalType":"uint256","name":"maxValueEther","type":"uint256"},{"internalType":"uint256","name":"madeValueEther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lPartner","type":"address"}],"name":"getRequestsReturnInvestLpartner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getRequestsTeam","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReturnInvesmentLpartner","outputs":[{"internalType":"contract IReturnInvestmentLpartner","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRoleInvestmentPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"lockStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"requestReturnInvestmentLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"withdraw","type":"bool"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxValue","type":"uint256"}],"name":"requestStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"pool","type":"address"}],"name":"returnsEtherFromTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRoleInvestmentPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creatorContract","type":"address"}],"name":"setAddressCreatorInvestPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAssetsManageTeam","name":"addrContract","type":"address"}],"name":"setAssetManageTeamContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracleContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setPriceToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"lPartner","type":"address"},{"internalType":"address","name":"referral","type":"address"}],"name":"setReferral","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IReturnInvestmentLpartner","name":"addrContract","type":"address"}],"name":"setReturnInvestmentLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"team","type":"address"}],"name":"unlockStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"publicPool","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"locked","type":"uint256"},{"internalType":"uint256","name":"depositFixedFee","type":"uint256"},{"internalType":"uint256","name":"referralDepositFee","type":"uint256"},{"internalType":"uint256","name":"anualPrecent","type":"uint256"},{"internalType":"uint256","name":"penaltyEarlyWithdraw","type":"uint256"}],"name":"updatePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawEtherLpartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawEtherStartupTeam","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405262000015336200001b60201b60201c565b620002a5565b620000368160006200007c60201b620056721790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc60405160405180910390a250565b6200008e8282620001c560201b60201c565b1562000102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200024e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062005edf6022913960400191505060405180910390fd5b8260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b615c2a80620002b56000396000f3fe60806040526004361061036b5760003560e01c8063871f470d116101c6578063cbc5906e116100f7578063e435451e11610095578063eb35d0f81161006f578063eb35d0f814611b42578063f121a2fe14611bb5578063f6f8996b14611c89578063fe070e9d14611d2f5761036b565b8063e435451e14611974578063e6e0114a14611a70578063e72f7fa414611ad95761036b565b8063d914cd4b116100d1578063d914cd4b14611846578063d9a431b3146118af578063debce1e2146118c6578063e3bbb5651461191d5761036b565b8063cbc5906e14611702578063cc446eb21461172d578063d2a4671b146117dd5761036b565b8063b463a75c11610164578063c159a3821161013e578063c159a3821461151d578063c1abd7571461159c578063c6a94989146115c7578063c6ad63da1461168f5761036b565b8063b463a75c146113d0578063be12da6214611421578063beeb7bde146114aa5761036b565b80638d09ce93116101a05780638d09ce931461116d5780638e8b4c85146111f657806390f4930a1461129f57806396a3e1f4146113475761036b565b8063871f470d14610ff757806389e527711461109c57806389fd4d3d146111085761036b565b806344a08b8c116102a05780635d255e811161023e5780637a3627ff116102185780637a3627ff14610e165780637fa226e614610e9f578063816fb80114610efb578063823a87da14610f6e5761036b565b80635d255e8114610ce5578063673a2a1f14610d4e5780636ce0aef314610dba5761036b565b80635394efed1161027a5780635394efed14610b9557806354b0d2a414610bfe5780635756eb4f14610c555780635ac8b00514610cba5761036b565b806344a08b8c14610a30578063496ccd9b14610a995780634f899d6414610b025761036b565b8063248519141161030d57806332fd3067116102e757806332fd3067146108ac57806338013f021461093557806340a5a151146109605780634460bdd614610a055761036b565b80632485191414610752578063261fef02146107bb5780632da0154c146107e65761036b565b80631863681f116103495780631863681f146105795780631a88df8a1461061f5780631cda4a8d1461067657806322529fff146106a15761036b565b806306ad92e914610370578063072255951461044057806308fdaedd146104d3575b600080fd5b34801561037c57600080fd5b506103e96004803603606081101561039357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d5a565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561044c57600080fd5b506104b96004803603606081101561046357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb9565b604051808215151515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120b4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561056557808201518184015260208101905061054a565b505050509050019250505060405180910390f35b34801561058557600080fd5b506105c86004803603602081101561059c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612231565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561060b5780820151818401526020810190506105f0565b505050509050019250505060405180910390f35b34801561062b57600080fd5b506106346123ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561068257600080fd5b5061068b6123d8565b6040518082815260200191505060405180910390f35b3480156106ad57600080fd5b50610710600480360360408110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612411565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561075e57600080fd5b506107a16004803603602081101561077557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124d8565b604051808215151515815260200191505060405180910390f35b3480156107c757600080fd5b506107d06124f5565b6040518082815260200191505060405180910390f35b3480156107f257600080fd5b506108556004803603604081101561080957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252e565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561089857808201518184015260208101905061087d565b505050509050019250505060405180910390f35b3480156108b857600080fd5b5061091b600480360360408110156108cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126e0565b604051808215151515815260200191505060405180910390f35b34801561094157600080fd5b5061094a61282e565b6040518082815260200191505060405180910390f35b34801561096c57600080fd5b506109cf6004803603604081101561098357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612867565b60405180861515151581526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b348015610a1157600080fd5b50610a1a6129d2565b6040518082815260200191505060405180910390f35b348015610a3c57600080fd5b50610a7f60048036036020811015610a5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a0b565b604051808215151515815260200191505060405180910390f35b348015610aa557600080fd5b50610ae860048036036020811015610abc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612afb565b604051808215151515815260200191505060405180910390f35b348015610b0e57600080fd5b50610b7b60048036036060811015610b2557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ba5565b604051808215151515815260200191505060405180910390f35b348015610ba157600080fd5b50610be460048036036020811015610bb857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612da0565b604051808215151515815260200191505060405180910390f35b348015610c0a57600080fd5b50610c13612e4a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c6157600080fd5b50610ca460048036036020811015610c7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e74565b6040518082815260200191505060405180910390f35b348015610cc657600080fd5b50610ccf612f94565b6040518082815260200191505060405180910390f35b348015610cf157600080fd5b50610d3460048036036020811015610d0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fcd565b604051808215151515815260200191505060405180910390f35b348015610d5a57600080fd5b50610d636130bd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610da6578082015181840152602081019050610d8b565b505050509050019250505060405180910390f35b610dfc60048036036020811015610dd057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130ce565b604051808215151515815260200191505060405180910390f35b348015610e2257600080fd5b50610e8560048036036040811015610e3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131ee565b604051808215151515815260200191505060405180910390f35b610ee160048036036020811015610eb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061333c565b604051808215151515815260200191505060405180910390f35b348015610f0757600080fd5b50610f5460048036036040811015610f1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134dd565b604051808215151515815260200191505060405180910390f35b348015610f7a57600080fd5b50610fdd60048036036040811015610f9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135dc565b604051808215151515815260200191505060405180910390f35b34801561100357600080fd5b506110666004803603604081101561101a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061372a565b60405180861515151581526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b3480156110a857600080fd5b506110b1613895565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156110f45780820151818401526020810190506110d9565b505050509050019250505060405180910390f35b34801561111457600080fd5b506111576004803603602081101561112b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613925565b6040518082815260200191505060405180910390f35b34801561117957600080fd5b506111dc6004803603604081101561119057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a08565b604051808215151515815260200191505060405180910390f35b34801561120257600080fd5b506112856004803603606081101561121957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b56565b604051808215151515815260200191505060405180910390f35b3480156112ab57600080fd5b50611318600480360360608110156112c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613dd2565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b34801561135357600080fd5b506113b66004803603604081101561136a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ee1565b604051808215151515815260200191505060405180910390f35b3480156113dc57600080fd5b5061141f600480360360208110156113f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061402f565b005b34801561142d57600080fd5b506114906004803603604081101561144457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614099565b604051808215151515815260200191505060405180910390f35b3480156114b657600080fd5b50611503600480360360408110156114cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506141e7565b604051808215151515815260200191505060405180910390f35b34801561152957600080fd5b506115826004803603606081101561154057600080fd5b81019080803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506142bb565b604051808215151515815260200191505060405180910390f35b3480156115a857600080fd5b506115b16143ea565b6040518082815260200191505060405180910390f35b3480156115d357600080fd5b5061167560048036036101008110156115eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050614423565b604051808215151515815260200191505060405180910390f35b34801561169b57600080fd5b506116e8600480360360408110156116b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506145eb565b604051808215151515815260200191505060405180910390f35b34801561170e57600080fd5b506117176146bf565b6040518082815260200191505060405180910390f35b34801561173957600080fd5b506117866004803603604081101561175057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506146f8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156117c95780820151818401526020810190506117ae565b505050509050019250505060405180910390f35b3480156117e957600080fd5b5061182c6004803603602081101561180057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061482e565b604051808215151515815260200191505060405180910390f35b34801561185257600080fd5b506118956004803603602081101561186957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506148d8565b604051808215151515815260200191505060405180910390f35b3480156118bb57600080fd5b506118c4614a72565b005b3480156118d257600080fd5b506118db614a7d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561192957600080fd5b50611932614aa7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561198057600080fd5b50611a56600480360361012081101561199857600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ad1565b604051808215151515815260200191505060405180910390f35b348015611a7c57600080fd5b50611abf60048036036020811015611a9357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614d65565b604051808215151515815260200191505060405180910390f35b348015611ae557600080fd5b50611b2860048036036020811015611afc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614e2d565b604051808215151515815260200191505060405180910390f35b348015611b4e57600080fd5b50611b9b60048036036040811015611b6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614ed7565b604051808215151515815260200191505060405180910390f35b348015611bc157600080fd5b50611c0460048036036020811015611bd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ff9565b604051808b1515151581526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b348015611c9557600080fd5b50611cd860048036036020811015611cac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615252565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611d1b578082015181840152602081019050611d00565b505050509050019250505060405180910390f35b348015611d3b57600080fd5b50611d446153cf565b6040518082815260200191505060405180910390f35b600080600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b95b78d38888886040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060806040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d6080811015611e6557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050508094508195508296508397505050505083838383935093509350935093509350935093565b6000808490508073ffffffffffffffffffffffffffffffffffffffff166391d1485460405180807f53555045525f41444d494e5f524f4c450000000000000000000000000000000081525060100190506040518091039020336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b8101908080519060200190929190505050612009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615b3f6029913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663d547741f85856040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561209057600080fd5b505af11580156120a4573d6000803e3d6000fd5b5050505060019150509392505050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663804e44f3836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561215557600080fd5b505afa158015612169573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561219357600080fd5b81019080805160405193929190846401000000008211156121b357600080fd5b838201915060208201858111156121c957600080fd5b82518660208202830111640100000000821117156121e657600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561221d578082015181840152602081019050612202565b505050509050016040525050509050919050565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663804e44f3836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156122d257600080fd5b505afa1580156122e6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561231057600080fd5b810190808051604051939291908464010000000082111561233057600080fd5b8382019150602082018581111561234657600080fd5b825186602082028301116401000000008211171561236357600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561239a57808201518184015260208101905061237f565b505050509050016040525050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60405180807f504f4f4c5f524547495354525900000000000000000000000000000000000000815250600d019050604051809103902081565b6000808390508073ffffffffffffffffffffffffffffffffffffffff16633b0f0f2f846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561249457600080fd5b505afa1580156124a8573d6000803e3d6000fd5b505050506040513d60208110156124be57600080fd5b810190808051906020019092919050505091505092915050565b60006124ee82600061540890919063ffffffff16565b9050919050565b60405180807f52455455524e5f494e564553544d454e545f4c504152544e4552000000000000815250601a019050604051809103902081565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166339926c4384846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060006040518083038186803b15801561260357600080fd5b505afa158015612617573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561264157600080fd5b810190808051604051939291908464010000000082111561266157600080fd5b8382019150602082018581111561267757600080fd5b825186602082028301116401000000008211171561269457600080fd5b8083526020830192505050908051906020019060200280838360005b838110156126cb5780820151818401526020810190506126b0565b50505050905001604052505050905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca2a33d98484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156127eb57600080fd5b505af11580156127ff573d6000803e3d6000fd5b505050506040513d602081101561281557600080fd5b8101908080519060200190929190505050905092915050565b60405180807f4f5241434c4500000000000000000000000000000000000000000000000000008152506006019050604051809103902081565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a5a15188886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060a06040518083038186803b15801561294257600080fd5b505afa158015612956573d6000803e3d6000fd5b505050506040513d60a081101561296c57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505080955081965082975083985084995050505050508484848484945094509450945094509295509295909350565b60405180807f53555045525f41444d494e5f524f4c45000000000000000000000000000000008152506010019050604051809103902081565b6000612a16336124d8565b612a6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff16636176dd9f6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612ab857600080fd5b505af1158015612acc573d6000803e3d6000fd5b505050506040513d6020811015612ae257600080fd5b8101908080519060200190929190505050915050919050565b6000612b06336124d8565b612b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000808490508073ffffffffffffffffffffffffffffffffffffffff166391d1485460405180807f53555045525f41444d494e5f524f4c450000000000000000000000000000000081525060100190506040518091039020336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612c6557600080fd5b505afa158015612c79573d6000803e3d6000fd5b505050506040513d6020811015612c8f57600080fd5b8101908080519060200190929190505050612cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615b3f6029913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16632f2ff15d85856040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b5050505060019150509392505050565b6000612dab336124d8565b612e00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808290508073ffffffffffffffffffffffffffffffffffffffff1663d2f0d2a86040518163ffffffff1660e01b81526004016101406040518083038186803b158015612ec157600080fd5b505afa158015612ed5573d6000803e3d6000fd5b505050506040513d610140811015612eec57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949596509091929394509091929350909192509091509050508092505081915050919050565b60405180807f524546455245525f524f4c450000000000000000000000000000000000000000815250600c019050604051809103902081565b6000612fd8336124d8565b61302d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff16633049ea336040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561307a57600080fd5b505af115801561308e573d6000803e3d6000fd5b505050506040513d60208110156130a457600080fd5b8101908080519060200190929190505050915050919050565b60606130c960066154e6565b905090565b60008034905060008390508373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561311f573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663857c50a033846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156131a757600080fd5b505af11580156131bb573d6000803e3d6000fd5b505050506040513d60208110156131d157600080fd5b810190808051906020019092919050505050600192505050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c0291f8484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156132f957600080fd5b505af115801561330d573d6000803e3d6000fd5b505050506040513d602081101561332357600080fd5b8101908080519060200190929190505050905092915050565b6000808290508073ffffffffffffffffffffffffffffffffffffffff166391d1485460405180807f535441525455505f5445414d5f524f4c4500000000000000000000000000000081525060110190506040518091039020336040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156133fc57600080fd5b505afa158015613410573d6000803e3d6000fd5b505050506040513d602081101561342657600080fd5b810190808051906020019092919050505061348c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b68602c913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156134d2573d6000803e3d6000fd5b506001915050919050565b60006134e8336124d8565b61353d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff166394707a95846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561359557600080fd5b505af11580156135a9573d6000803e3d6000fd5b505050506040513d60208110156135bf57600080fd5b810190808051906020019092919050505050600191505092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c0291f8484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156136e757600080fd5b505af11580156136fb573d6000803e3d6000fd5b505050506040513d602081101561371157600080fd5b8101908080519060200190929190505050905092915050565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663871f470d88886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060a06040518083038186803b15801561380557600080fd5b505afa158015613819573d6000803e3d6000fd5b505050506040513d60a081101561382f57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505080955081965082975083985084995050505050508484848484945094509450945094509295509295909350565b60606000800180548060200260200160405190810160405280929190818152602001828054801561391b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116138d1575b5050505050905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389fd4d3d836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156139c657600080fd5b505afa1580156139da573d6000803e3d6000fd5b505050506040513d60208110156139f057600080fd5b81019080805190602001909291905050509050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca2a33d98484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015613b1357600080fd5b505af1158015613b27573d6000803e3d6000fd5b505050506040513d6020811015613b3d57600080fd5b8101908080519060200190929190505050905092915050565b6000808490508073ffffffffffffffffffffffffffffffffffffffff166391d1485460405180807f4c494d495445445f504152544e45525f524f4c4500000000000000000000000081525060140190506040518091039020866040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613c1657600080fd5b505afa158015613c2a573d6000803e3d6000fd5b505050506040513d6020811015613c4057600080fd5b8101908080519060200190929190505050613ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180615b946035913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663cb4ff7f23386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015613d8d57600080fd5b505af1158015613da1573d6000803e3d6000fd5b505050506040513d6020811015613db757600080fd5b81019080805190602001909291905050509150509392505050565b60008060008060008790508073ffffffffffffffffffffffffffffffffffffffff16632cb2b9f588886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060806040518083038186803b158015613e6257600080fd5b505afa158015613e76573d6000803e3d6000fd5b505050506040513d6080811015613e8c57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809550819650829750839850505050508484848494509450945094505093509350935093565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d85d2b138484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015613fec57600080fd5b505af1158015614000573d6000803e3d6000fd5b505050506040513d602081101561401657600080fd5b8101908080519060200190929190505050905092915050565b614038336124d8565b61408d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b614096816154fb565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398545b1e8484336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156141a457600080fd5b505af11580156141b8573d6000803e3d6000fd5b505050506040513d60208110156141ce57600080fd5b8101908080519060200190929190505050905092915050565b6000808390508073ffffffffffffffffffffffffffffffffffffffff1663085a73f533856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561427457600080fd5b505af1158015614288573d6000803e3d6000fd5b505050506040513d602081101561429e57600080fd5b810190808051906020019092919050505050600191505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e3158f3858533866040518563ffffffff1660e01b815260040180851515151581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156143a657600080fd5b505af11580156143ba573d6000803e3d6000fd5b505050506040513d60208110156143d057600080fd5b810190808051906020019092919050505090509392505050565b60405180807f47454e4552414c5f504152544e45525f524f4c450000000000000000000000008152506014019050604051809103902081565b600061442e336124d8565b614483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b60008990508073ffffffffffffffffffffffffffffffffffffffff1663adb7b0078a8a8a8a8a8a8a6040518863ffffffff1660e01b815260040180881515151581526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001975050505050505050602060405180830381600087803b15801561453b57600080fd5b505af115801561454f573d6000803e3d6000fd5b505050506040513d602081101561456557600080fd5b8101908080519060200190929190505050507f4349687687e69ab0479266619127f66a1d429752cd8accfef157633fa10875d28a604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600191505098975050505050505050565b6000808390508073ffffffffffffffffffffffffffffffffffffffff1663feb83f6933856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561467857600080fd5b505af115801561468c573d6000803e3d6000fd5b505050506040513d60208110156146a257600080fd5b810190808051906020019092919050505050600191505092915050565b60405180807f535441525455505f5445414d5f524f4c450000000000000000000000000000008152506011019050604051809103902081565b606060008390508073ffffffffffffffffffffffffffffffffffffffff16639cf6cc70846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561475057600080fd5b505afa158015614764573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561478e57600080fd5b81019080805160405193929190846401000000008211156147ae57600080fd5b838201915060208201858111156147c457600080fd5b82518660208202830111640100000000821117156147e157600080fd5b8083526020830192505050908051906020019060200280838360005b838110156148185780820151818401526020810190506147fd565b5050505090500160405250505091505092915050565b6000614839336124d8565b61488e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60006148e3336124d8565b614938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b61494c82600661555590919063ffffffff16565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d06177a836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156149ee57600080fd5b505af1158015614a02573d6000803e3d6000fd5b505050507f8c82d670bc9247c2cfb6964089bc9cff0255f9caade6fbc74a13368083e5546682604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160019050919050565b614a7b33615586565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000614adc336124d8565b614b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663e435451e8d8d8d8d8d8d8d8d8d6040518a63ffffffff1660e01b8152600401808a81526020018981526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019950505050505050505050602060405180830381600087803b158015614c9d57600080fd5b505af1158015614cb1573d6000803e3d6000fd5b505050506040513d6020811015614cc757600080fd5b81019080805190602001909291905050509050614cee81600661555590919063ffffffff16565b507f69c0bed0cfe2481daba8100e8d026afc0310449557d52e860717cab3f70fd8ab81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001925050509998505050505050505050565b6000808290508073ffffffffffffffffffffffffffffffffffffffff16633683d1f5336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614dea57600080fd5b505af1158015614dfe573d6000803e3d6000fd5b505050506040513d6020811015614e1457600080fd5b8101908080519060200190929190505050915050919050565b6000614e38336124d8565b614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615bc9602c913960400191505060405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9a8fbae8433856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015614fb657600080fd5b505af1158015614fca573d6000803e3d6000fd5b505050506040513d6020811015614fe057600080fd5b8101908080519060200190929190505050905092915050565b60008060008060008060008060008060008b90508073ffffffffffffffffffffffffffffffffffffffff1663d2f0d2a86040518163ffffffff1660e01b81526004016101406040518083038186803b15801561505457600080fd5b505afa158015615068573d6000803e3d6000fd5b505050506040513d61014081101561507f57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192935090919250909150905050809b50819c50829d50839e50849f5050505050508073ffffffffffffffffffffffffffffffffffffffff1663d2f0d2a86040518163ffffffff1660e01b81526004016101406040518083038186803b15801561515457600080fd5b505afa158015615168573d6000803e3d6000fd5b505050506040513d61014081101561517f57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293949596979850909192939495969750909192939495965090919293949550909192939450809650819750829850839950849a5050505050508a8a8a8a8a8a8a8a8a8a9a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663da076a87836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b1580156152f357600080fd5b505afa158015615307573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561533157600080fd5b810190808051604051939291908464010000000082111561535157600080fd5b8382019150602082018581111561536757600080fd5b825186602082028301116401000000008211171561538457600080fd5b8083526020830192505050908051906020019060200280838360005b838110156153bb5780820151818401526020810190506153a0565b505050509050016040525050509050919050565b60405180807f4c494d495445445f504152544e45525f524f4c450000000000000000000000008152506014019050604051809103902081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561548f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615b1d6022913960400191505060405180910390fd5b8260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606154f4826000016155e0565b9050919050565b61550f81600061567290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f3f5f1db80208f0d453083a86e16909cecc1e95e2618d5d927c93ace22b8200fc60405160405180910390a250565b600061557e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b846157b2565b905092915050565b61559a81600061588890919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f26b6063d78aefcf96f02ff06bc9822b5a623278253add7fffa5fb453db39981060405160405180910390a250565b60608160010180548060200260200160405190810160405280929190818152602001828054801561566657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161561c575b50505050509050919050565b61567c8282615408565b156156ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600001819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006157be84846159e4565b61587c578360000183908060018154018082558091505060019003906000526020600020016000909190919091505583600101829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600001805490508460020160008581526020019081526020016000208190555060019050615881565b600090505b9392505050565b6158928282615408565b6158e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615afc6021913960400191505060405180910390fd5b60005b8260000180549050811015615985578173ffffffffffffffffffffffffffffffffffffffff1683600001828154811061591f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415615978576159738184600001615a07565b615985565b80806001019150506158ea565b5060008260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080836002016000848152602001908152602001600020541415905092915050565b60008290505b6001828054905003811015615ab757816001820181548110615a2b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281548110615a6257fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050615a0d565b5080805480615ac257fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505056fe526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373506f6f6c52656769737472793a2073656e64657220686173206e6f20726f6c652047506172746e6572506f6f6c52656769737472793a2073656e64657220686173206e6f20726f6c65205465616d53746172747570506f6f6c52656769737472793a20706172616d65746572204c706172746e657220686173206e6f20726f6c65204c506172746e65725465616d526f6c653a2063616c6c657220646f6573206e6f74206861766520746865205465616d20726f6c65a26469706673582212205a37594889c9d7651937ca8306498a3f6854ba0e457aee0ed935c0d2232bbcf064736f6c63430006000033526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading