Contract 0x884f6A98477b0F689f1da280A83a963f2B768972

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x81f5face3eadb542f9728bba23c0b0d331f16ac85fd8ffe6eb2bf03ee1c2d30aManage279873702022-05-06 9:54:40149 days 15 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.001087949078 41.060880084
0x25e0aa63d7916c55eee063eb82ad91207af980a6acf30b56cedd09e55659d934Manage273487922022-04-20 4:19:01165 days 20 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.003160582661 32.602484566
0x0db149c5acabdc79fdaa4e51923bad90eb1e154ece4550c1d4ee7f7b514d59cbManage273487672022-04-20 4:18:11165 days 20 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.002963598449 32.602484566
0x3eb20b53ececf6decc13430b7de55bbcbbb0f1c9e9d1f4f1ed420a8d6f2b0413Manage254980482022-03-02 14:47:52214 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.003544356465 38.991391358
0x70b4e4fbf909be1d646e603735841d49c3a0154b63803f335bd4b2944d65987eManage254976512022-03-02 14:32:04214 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.003727448719 41.000172902
0x08f20dc00a237ced2199b9e6cee11d34b22ddc73be6b4c1f30a2aa01e3664616Withdraw233293882022-01-04 6:44:39271 days 18 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0191564200
0xb0ea54d00c1fd3d9cf627e3f148d337df559a2a747d6591cc1b5aeec08b6ec1eWithdraw233088812022-01-03 18:06:15272 days 6 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.01247188382158.51
0xd4bd1ceb0c66825812b9640a995f282289ba375e0161f0c9d4ee911056888850Withdraw233084452022-01-03 17:50:37272 days 7 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.011197117732132.4381725
0xbe8a5503f98ce18033102449913802d0ad04f0d23dde1a67cbac11750099ff8bPush Management229903472021-12-26 15:59:58280 days 8 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0014323830
0xf547147bafe5327c645345106e13c28f7368fef3d50d8c41e99af1745c4c13cdToggle229877522021-12-26 14:19:17280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0031908630
0xf9dcc258ab3a20ccaa4fb650822132fd3767200f9ebc09411d94989a99a45561Queue229877482021-12-26 14:19:01280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.001449630
0x5c2056b7e5c2a1b76b7c51359ca293c72db8523362533961b30149b43a5fd5edToggle229877392021-12-26 14:18:25280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0025326330
0x75ab47cd5bb433b0ee383b5d18f513e43ed956da6fac2a6b2fdc5736d07e09b1Queue229877332021-12-26 14:18:01280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0014480430
0x781018bc521edc1c2411dc34932d52c30daecff3694b59a92497f4c26b06107fToggle229877272021-12-26 14:17:37280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0020743830
0xf275786f054e665d894d08b6712ec4a04bb74781edf99d4e193028af230f7105Queue229877212021-12-26 14:17:13280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0014449230
0xf55110d99e6165e45ed924d3535ce8590f82bfefb23c5774b6c06b98c58df1deToggle229877182021-12-26 14:17:01280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0025091730
0x3e001c9ff8e9e5dab66cb5a015f08eaad4c5f0574e55f82affedb7e50753bcb4Queue229877092021-12-26 14:16:25280 days 10 hrs agoMAMA DAO: Deployer IN  0x884f6a98477b0f689f1da280a83a963f2b7689720 MATIC0.0014414430
0x8396c1e5cc4af654b3abd43728e53cded0fe0c6e131aaf1bb7d2d389925c8e580x60c06040229869102021-12-26 13:48:59280 days 11 hrs agoMAMA DAO: Deployer IN  Create: MamaTreasury0 MATIC0.0958818330
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MamaTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-12-26
*/

/**
 *Submitted for verification at snowtrace.io on 2021-12-09
*/

/**
 *Submitted for verification at snowtrace.io on 2021-11-06
*/

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function add32(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function mul32(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }

        uint32 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

library Address {

  function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function functionCall(
        address target, 
        bytes memory data, 
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function _functionCallWithValue(
        address target, 
        bytes memory data, 
        uint256 weiValue, 
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function _verifyCallResult(
        bool success, 
        bytes memory returndata, 
        string memory errorMessage
    ) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IOwnable {
  function manager() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

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

    modifier onlyManager() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyManager() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyManager() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

interface IERC20 {
    function decimals() external view returns (uint8);

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20Mintable {
  function mint( uint256 amount_ ) external;

  function mint( address account_, uint256 ammount_ ) external;
}

interface IOHMERC20 {
    function burnFrom(address account_, uint256 amount_) external;
}

interface IBondCalculator {
  function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}

contract MamaTreasury is Ownable {

    using SafeMath for uint;
    using SafeMath for uint32;
    using SafeERC20 for IERC20;

    event Deposit( address indexed token, uint amount, uint value );
    event Withdrawal( address indexed token, uint amount, uint value );
    event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event ReservesManaged( address indexed token, uint amount );
    event ReservesUpdated( uint indexed totalReserves );
    event ReservesAudited( uint indexed totalReserves );
    event RewardsMinted( address indexed caller, address indexed recipient, uint amount );
    event ChangeQueued( MANAGING indexed managing, address queued );
    event ChangeActivated( MANAGING indexed managing, address activated, bool result );

    enum MANAGING { 
        RESERVEDEPOSITOR, 
        RESERVESPENDER, 
        RESERVETOKEN, 
        RESERVEMANAGER, 
        LIQUIDITYDEPOSITOR, 
        LIQUIDITYTOKEN, 
        LIQUIDITYMANAGER, 
        DEBTOR, 
        REWARDMANAGER, 
        SOHM 
    }

    address public immutable Mama;
    uint32 public immutable secondsNeededForQueue;

    address[] public reserveTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isReserveToken;
    mapping( address => uint32 ) public reserveTokenQueue; // Delays changes to mapping.

    address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveDepositor;
    mapping( address => uint32 ) public reserveDepositorQueue; // Delays changes to mapping.

    address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveSpender;
    mapping( address => uint32 ) public reserveSpenderQueue; // Delays changes to mapping.

    address[] public liquidityTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isLiquidityToken;
    mapping( address => uint32 ) public LiquidityTokenQueue; // Delays changes to mapping.

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;
    mapping( address => uint32 ) public LiquidityDepositorQueue; // Delays changes to mapping.

    mapping( address => address ) public bondCalculator; // bond calculator for liquidity token

    address[] public reserveManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveManager;
    mapping( address => uint32 ) public ReserveManagerQueue; // Delays changes to mapping.

    address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityManager;
    mapping( address => uint32 ) public LiquidityManagerQueue; // Delays changes to mapping.

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint32 ) public debtorQueue; // Delays changes to mapping.
    mapping( address => uint ) public debtorBalance;

    address[] public rewardManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isRewardManager;
    mapping( address => uint32 ) public rewardManagerQueue; // Delays changes to mapping.

    address public sMama;
    uint public sOHMQueue; // Delays change to sOHM address
    
    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    constructor (
        address _Mama,
        address _sMama,
        uint32 _secondsNeededForQueue
    ) {
        require( _Mama != address(0) );
        Mama = _Mama;

        isReserveToken[ _sMama ] = true;
        reserveTokens.push( _sMama );

    //    isLiquidityToken[ _OHMDAI ] = true;
    //    liquidityTokens.push( _OHMDAI );

        secondsNeededForQueue = _secondsNeededForQueue;
    }

    /**
        @notice allow approved address to deposit an asset for OHM
        @param _amount uint
        @param _token address
        @param _profit uint
        @return send_ uint
     */
    function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) {
        require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        if ( isReserveToken[ _token ] ) {
            require( isReserveDepositor[ msg.sender ], "Not approved" );
        } else {
            require( isLiquidityDepositor[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        // mint OHM needed and store amount of rewards for distribution
        send_ = value.sub( _profit );
        IERC20Mintable( Mama ).mint( msg.sender, send_ );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit Deposit( _token, _amount, value );
    }

    /**
        @notice allow approved address to burn OHM for reserves
        @param _amount uint
        @param _token address
     */
    function withdraw( uint _amount, address _token ) external {
        require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions
        require( isReserveSpender[ msg.sender ] == true, "Not approved" );

        uint value = valueOf( _token, _amount );
        IOHMERC20( Mama ).burnFrom( msg.sender, value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit Withdrawal( _token, _amount, value );
    }

    /**
        @notice allow approved address to borrow reserves
        @param _amount uint
        @param _token address
     */
    function incurDebt( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        uint value = valueOf( _token, _amount );

        uint maximumDebt = IERC20( sMama ).balanceOf( msg.sender ); // Can only borrow against sOHM held
        uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] );
        require( value <= availableDebt, "Exceeds debt limit" );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value );
        totalDebt = totalDebt.add( value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).transfer( msg.sender, _amount );
        
        emit CreateDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with reserves
        @param _amount uint
        @param _token address
     */
    function repayDebtWithReserve( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        uint value = valueOf( _token, _amount );
        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value );
        totalDebt = totalDebt.sub( value );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit RepayDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with OHM
        @param _amount uint
     */
    function repayDebtWithOHM( uint _amount ) external {
        require( isDebtor[ msg.sender ], "Not approved" );

        IOHMERC20( Mama ).burnFrom( msg.sender, _amount );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount );
        totalDebt = totalDebt.sub( _amount );

        emit RepayDebt( msg.sender, Mama, _amount, _amount );
    }

    /**
        @notice allow approved address to withdraw assets
        @param _token address
        @param _amount uint
     */
    function manage( address _token, uint _amount ) external {
        if( isLiquidityToken[ _token ] ) {
            require( isLiquidityManager[ msg.sender ], "Not approved" );
        } else {
            require( isReserveManager[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        require( value <= excessReserves(), "Insufficient reserves" );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit ReservesManaged( _token, _amount );
    }

    /**
        @notice send epoch reward to staking contract
     */
    function mintRewards( address _recipient, uint _amount ) external {
        require( isRewardManager[ msg.sender ], "Not approved" );
        require( _amount <= excessReserves(), "Insufficient reserves" );

        IERC20Mintable( Mama ).mint( _recipient, _amount );

        emit RewardsMinted( msg.sender, _recipient, _amount );
    } 

    /**
        @notice returns excess reserves not backing tokens
        @return uint
     */
    function excessReserves() public view returns ( uint ) {
        return totalReserves.sub( IERC20( Mama ).totalSupply().sub( totalDebt ) );
    }

    /**
        @notice takes inventory of all tracked assets
        @notice always consolidate to recognized reserves before audit
     */
    function auditReserves() external onlyManager() {
        uint reserves;
        for( uint i = 0; i < reserveTokens.length; i++ ) {
            reserves = reserves.add ( 
                valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        for( uint i = 0; i < liquidityTokens.length; i++ ) {
            reserves = reserves.add (
                valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        totalReserves = reserves;
        emit ReservesUpdated( reserves );
        emit ReservesAudited( reserves );
    }

    /**
        @notice returns OHM valuation of asset
        @param _token address
        @param _amount uint
        @return value_ uint
     */
    function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) {
        if ( isReserveToken[ _token ] ) {
            // convert amount to match OHM decimals
            value_ = _amount.mul( 10 ** IERC20( Mama ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
        }
    }

    /**
        @notice queue address to change boolean in mapping
        @param _managing MANAGING
        @param _address address
        @return bool
     */
    function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            reserveDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue.mul32( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = uint32(block.timestamp).add32( secondsNeededForQueue );
        } else return false;

        emit ChangeQueued( _managing, _address );
        return true;
    }

    /**
        @notice verify queue then set boolean in mapping
        @param _managing MANAGING
        @param _address address
        @param _calculator address
        @return bool
     */
    function toggle(
        MANAGING _managing, 
        address _address, 
        address _calculator 
    ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        bool result;
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) {
                reserveDepositorQueue[ _address ] = 0;
                if( !listContains( reserveDepositors, _address ) ) {
                    reserveDepositors.push( _address );
                }
            }
            result = !isReserveDepositor[ _address ];
            isReserveDepositor[ _address ] = result;
            
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) {
                reserveSpenderQueue[ _address ] = 0;
                if( !listContains( reserveSpenders, _address ) ) {
                    reserveSpenders.push( _address );
                }
            }
            result = !isReserveSpender[ _address ];
            isReserveSpender[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) {
                reserveTokenQueue[ _address ] = 0;
                if( !listContains( reserveTokens, _address ) ) {
                    reserveTokens.push( _address );
                }
            }
            result = !isReserveToken[ _address ];
            isReserveToken[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) {
                reserveManagers.push( _address );
                ReserveManagerQueue[ _address ] = 0;
                if( !listContains( reserveManagers, _address ) ) {
                    reserveManagers.push( _address );
                }
            }
            result = !isReserveManager[ _address ];
            isReserveManager[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) {
                liquidityDepositors.push( _address );
                LiquidityDepositorQueue[ _address ] = 0;
                if( !listContains( liquidityDepositors, _address ) ) {
                    liquidityDepositors.push( _address );
                }
            }
            result = !isLiquidityDepositor[ _address ];
            isLiquidityDepositor[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) {
                LiquidityTokenQueue[ _address ] = 0;
                if( !listContains( liquidityTokens, _address ) ) {
                    liquidityTokens.push( _address );
                }
            }
            result = !isLiquidityToken[ _address ];
            isLiquidityToken[ _address ] = result;
            bondCalculator[ _address ] = _calculator;

        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) {
                LiquidityManagerQueue[ _address ] = 0;
                if( !listContains( liquidityManagers, _address ) ) {
                    liquidityManagers.push( _address );
                }
            }
            result = !isLiquidityManager[ _address ];
            isLiquidityManager[ _address ] = result;

        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            if ( requirements( debtorQueue, isDebtor, _address ) ) {
                debtorQueue[ _address ] = 0;
                if( !listContains( debtors, _address ) ) {
                    debtors.push( _address );
                }
            }
            result = !isDebtor[ _address ];
            isDebtor[ _address ] = result;

        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) {
                rewardManagerQueue[ _address ] = 0;
                if( !listContains( rewardManagers, _address ) ) {
                    rewardManagers.push( _address );
                }
            }
            result = !isRewardManager[ _address ];
            isRewardManager[ _address ] = result;

        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = 0;
            sMama = _address;
            result = true;

        } else return false;

        emit ChangeActivated( _managing, _address, result );
        return true;
    }

    /**
        @notice checks requirements and returns altered structs
        @param queue_ mapping( address => uint )
        @param status_ mapping( address => bool )
        @param _address address
        @return bool 
     */
    function requirements( 
        mapping( address => uint32 ) storage queue_, 
        mapping( address => bool ) storage status_, 
        address _address 
    ) internal view returns ( bool ) {
        if ( !status_[ _address ] ) {
            require( queue_[ _address ] != 0, "Must queue" );
            require( queue_[ _address ] <= uint32(block.timestamp), "Queue not expired" );
            return true;
        } return false;
    }

    /**
        @notice checks array to ensure against duplicate
        @param _list address[]
        @param _token address
        @return bool
     */
    function listContains( address[] storage _list, address _token ) internal view returns ( bool ) {
        for( uint i = 0; i < _list.length; i++ ) {
            if( _list[ i ] == _token ) {
                return true;
            }
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_Mama","type":"address"},{"internalType":"address","name":"_sMama","type":"address"},{"internalType":"uint32","name":"_secondsNeededForQueue","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum MamaTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum MamaTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Mama","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum MamaTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithOHM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sMama","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum MamaTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b50604051620038de380380620038de8339818101604052606081101561003557600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0383166100a057600080fd5b6001600160601b0319606084901b166080526001600160a01b039182166000818152600360205260408120805460ff1916600190811790915560028054918201815582527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169092179091556001600160e01b031960e083901b1660a052919092169163ffffffff169061373590620001a9903980611a7b528061204b52806120c8528061214552806121c1528061225352806122d0528061234c52806123ce528061244b52806124c8525080610a4e5280610df05280610f015280610fb552806112ed52806113da52806119705280611cee52506137356000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c8063869871bf1161019d578063cd85641a116100e9578063ee4e19a1116100a2578063fbfd393b1161007c578063fbfd393b14610908578063fc7b9c181461093f578063fd1ec01014610947578063fff9ee8714610964576102f0565b8063ee4e19a1146108b4578063f15acda5146108da578063fb939588146108e2576102f0565b8063cd85641a146107ca578063d031370b146107f0578063d796ffb81461080d578063df89b34414610839578063e83afee31461085f578063ebd83cd81461088e576102f0565b8063a1210a2d11610156578063b1bd38b011610130578063b1bd38b01461072f578063b5b1d56014610755578063bc157ac114610772578063c24ad43e146107a4576102f0565b8063a1210a2d146106bd578063a569e571146106e3578063ab319c9a14610709576102f0565b8063869871bf1461060957806387d67dff146106265780638f59c7271461064c5780638f6a7b57146106725780638f840ddd1461068f578063932cc8c314610697576102f0565b80632789de371161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461058857806370a0502a146105a5578063788c6c01146105c25780637a8960d814610601576102f0565b80635a96ac0a1461052e57806368c31dd5146105365780636a20de921461055c576102f0565b80632789de37146104ad5780632b7ce500146104b5578063437f7912146104bd57806346f68ee9146104da578063481c6a75146105005780634e83423c14610508576102f0565b80630f70431f116102ae5780630f70431f146103d0578063124154ca146103ed57806312422d231461042757806319ab810b146104535780631af4da701461045b5780631eec5a9a14610481576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b031661098a565b005b6103406004803603602081101561033957600080fd5b5035610b61565b604080516001600160a01b039092168252519081900360200190f35b610321610b8b565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c22565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c34565b61038a610de3565b610321600480360360208110156103e657600080fd5b5035610e87565b6104136004803603602081101561040357600080fd5b50356001600160a01b0316611006565b604080519115158252519081900360200190f35b6103216004803603604081101561043d57600080fd5b50803590602001356001600160a01b031661101b565b6103406112eb565b6103406004803603602081101561047157600080fd5b50356001600160a01b031661130f565b61038a6004803603604081101561049757600080fd5b506001600160a01b03813516906020013561132a565b61038a61151e565b610321611524565b610340600480360360208110156104d357600080fd5b50356116e7565b610321600480360360208110156104f057600080fd5b50356001600160a01b03166116f7565b6103406117e4565b6104136004803603602081101561051e57600080fd5b50356001600160a01b03166117f3565b610321611808565b6104136004803603602081101561054c57600080fd5b50356001600160a01b03166118b2565b6103216004803603604081101561057257600080fd5b506001600160a01b0381351690602001356118c7565b6103406004803603602081101561059e57600080fd5b5035611a41565b610340600480360360208110156105bb57600080fd5b5035611a51565b6105e8600480360360208110156105d857600080fd5b50356001600160a01b0316611a61565b6040805163ffffffff9092168252519081900360200190f35b6105e8611a79565b6103406004803603602081101561061f57600080fd5b5035611a9d565b6104136004803603602081101561063c57600080fd5b50356001600160a01b0316611aad565b6105e86004803603602081101561066257600080fd5b50356001600160a01b0316611ac2565b6103406004803603602081101561068857600080fd5b5035611ada565b61038a611aea565b6105e8600480360360208110156106ad57600080fd5b50356001600160a01b0316611af0565b610413600480360360208110156106d357600080fd5b50356001600160a01b0316611b08565b610413600480360360208110156106f957600080fd5b50356001600160a01b0316611b1d565b6105e86004803603602081101561071f57600080fd5b50356001600160a01b0316611b32565b6105e86004803603602081101561074557600080fd5b50356001600160a01b0316611b4a565b6103406004803603602081101561076b57600080fd5b5035611b62565b61038a6004803603606081101561078857600080fd5b508035906001600160a01b036020820135169060400135611b72565b6105e8600480360360208110156107ba57600080fd5b50356001600160a01b0316611df0565b6105e8600480360360208110156107e057600080fd5b50356001600160a01b0316611e08565b6103406004803603602081101561080657600080fd5b5035611e20565b6103216004803603604081101561082357600080fd5b50803590602001356001600160a01b0316611e30565b6104136004803603602081101561084f57600080fd5b50356001600160a01b0316611fb3565b6104136004803603604081101561087557600080fd5b50803560ff1690602001356001600160a01b0316611fc8565b610413600480360360208110156108a457600080fd5b50356001600160a01b0316612555565b610413600480360360208110156108ca57600080fd5b50356001600160a01b031661256a565b61034061257f565b6105e8600480360360208110156108f857600080fd5b50356001600160a01b031661258e565b6104136004803603606081101561091e57600080fd5b5060ff813516906001600160a01b03602082013581169160400135166125a6565b61038a612ebc565b6103406004803603602081101561095d57600080fd5b5035612ec2565b6105e86004803603602081101561097a57600080fd5b50356001600160a01b0316612ed2565b6001600160a01b03811660009081526003602052604090205460ff166109e6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a3e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a4a828461132a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050602154610ae99250905082612eea565b60218190556040516000805160206136b683398151915290600090a2610b196001600160a01b0383163385612f2c565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b7157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bd8576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610cad573360009081526016602052604090205460ff16610ca8576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610d00565b3360009081526013602052604090205460ff16610d00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610d0c838361132a565b9050610d16610de3565b811115610d62576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d6f9082612eea565b60218190556040516000805160206136b683398151915290600090a2610d9f6001600160a01b0384163384612f2c565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e82610e796022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4757600080fd5b505afa158015610e5b573d6000803e3d6000fd5b505050506040513d6020811015610e7157600080fd5b505190612eea565b60215490612eea565b905090565b3360009081526019602052604090205460ff16610eda576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610f4857600080fd5b505af1158015610f5c573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f7b9250905082612eea565b336000908152601b6020526040902055602254610f989082612eea565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff1661106e576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff166110ca576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110d6828461132a565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561112757600080fd5b505afa15801561113b573d6000803e3d6000fd5b505050506040513d602081101561115157600080fd5b5051336000908152601b602052604081205491925090611172908390612eea565b9050808311156111be576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111d89084612f83565b336000908152601b60205260409020556022546111f59084612f83565b6022556021546112059084612eea565b60218190556040516000805160206136b683398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b505050506040513d602081101561129a57600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff161561146757611460836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561138757600080fd5b505afa15801561139b573d6000803e3d6000fd5b505050506040513d60208110156113b157600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161145a916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b15801561142157600080fd5b505afa158015611435573d6000803e3d6000fd5b505050506040513d602081101561144b57600080fd5b5051859060ff16600a0a612fdd565b90613036565b9050611518565b6001600160a01b0383166000908152600c602052604090205460ff1615611518576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156114e957600080fd5b505afa1580156114fd573d6000803e3d6000fd5b505050506040513d602081101561151357600080fd5b505190505b92915050565b60205481565b6000546001600160a01b03163314611571576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6000805b6002548110156116495761163f6116386002838154811061159257fe5b600091825260209091200154600280546001600160a01b0390921691859081106115b857fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561160757600080fd5b505afa15801561161b573d6000803e3d6000fd5b505050506040513d602081101561163157600080fd5b505161132a565b8390612f83565b9150600101611575565b5060005b600b5481101561169a57611690611638600b838154811061166a57fe5b600091825260209091200154600b80546001600160a01b0390921691859081106115b857fe5b915060010161164d565b50602181905560405181906000805160206136b683398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b7157600080fd5b6000546001600160a01b03163314611744576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b0381166117895760405162461bcd60e51b815260040180806020018281038252602681526020018061362d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146118515760405162461bcd60e51b81526004018080602001828103825260228152602001806136536022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff1661191a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611922610de3565b81111561196e576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119e557600080fd5b505af11580156119f9573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b7157600080fd5b60158181548110610b7157600080fd5b60046020526000908152604090205463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60188181548110610b7157600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205463ffffffff1681565b600e8181548110610b7157600080fd5b60215481565b60076020526000908152604090205463ffffffff1681565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205463ffffffff1681565b60146020526000908152604090205463ffffffff1681565b601c8181548110610b7157600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611bb157506001600160a01b0383166000908152600c602052604090205460ff165b611bf1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611c066001600160a01b038416333087613078565b6001600160a01b03831660009081526003602052604090205460ff1615611c7f573360009081526006602052604090205460ff16611c7a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611cd2565b336000908152600f602052604090205460ff16611cd2576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611cde848661132a565b9050611cea8184612eea565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6357600080fd5b505af1158015611d77573d6000803e3d6000fd5b5050602154611d899250905082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205463ffffffff1681565b601a6020526000908152604090205463ffffffff1681565b60028181548110610b7157600080fd5b3360009081526019602052604090205460ff16611e83576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611edf576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611ef46001600160a01b038216333085613078565b6000611f00828461132a565b336000908152601b6020526040902054909150611f1d9082612eea565b336000908152601b6020526040902055602254611f3a9082612eea565b602255602154611f4a9082612f83565b60218190556040516000805160206136b683398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b03163314612016576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03821661202957600080fd5b600083600981111561203757fe5b14156120a65761207163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600760205260409020805463ffffffff191663ffffffff92909216919091179055612504565b60018360098111156120b457fe5b1415612123576120ee63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600a60205260409020805463ffffffff191663ffffffff92909216919091179055612504565b600283600981111561213157fe5b14156121a05761216b63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600460205260409020805463ffffffff191663ffffffff92909216919091179055612504565b60038360098111156121ae57fe5b1415612231576121fc6121ec63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b63ffffffff42811691906130d816565b6001600160a01b0383166000908152601460205260409020805463ffffffff191663ffffffff92909216919091179055612504565b600483600981111561223f57fe5b14156122ae5761227963ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601060205260409020805463ffffffff191663ffffffff92909216919091179055612504565b60058360098111156122bc57fe5b141561232b576122f663ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152600d60205260409020805463ffffffff191663ffffffff92909216919091179055612504565b600683600981111561233957fe5b14156123ac576123776121ec63ffffffff7f000000000000000000000000000000000000000000000000000000000000000081169060029061313b16565b6001600160a01b0383166000908152601760205260409020805463ffffffff191663ffffffff92909216919091179055612504565b60078360098111156123ba57fe5b1415612429576123f463ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601a60205260409020805463ffffffff191663ffffffff92909216919091179055612504565b600883600981111561243757fe5b14156124a65761247163ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b6001600160a01b0383166000908152601e60205260409020805463ffffffff191663ffffffff92909216919091179055612504565b60098360098111156124b457fe5b14156124fc576124ee63ffffffff428116907f0000000000000000000000000000000000000000000000000000000000000000906130d816565b63ffffffff16602055612504565b506000611518565b82600981111561251057fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601f546001600160a01b031681565b601e6020526000908152604090205463ffffffff1681565b600080546001600160a01b031633146125f4576040805162461bcd60e51b81526020600482018190526024820152600080516020613696833981519152604482015290519081900360640190fd5b6001600160a01b03831661260757600080fd5b60008085600981111561261657fe5b14156126dc5761262960076006866131ac565b156126ac576001600160a01b0384166000908152600760205260409020805463ffffffff1916905561265c6005856132a5565b6126ac57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612e5e565b60018560098111156126ea57fe5b14156127b0576126fd600a6009866131ac565b15612780576001600160a01b0384166000908152600a60205260409020805463ffffffff191690556127306008856132a5565b61278057600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612e5e565b60028560098111156127be57fe5b1415612884576127d160046003866131ac565b15612854576001600160a01b0384166000908152600460205260409020805463ffffffff191690556128046002856132a5565b61285457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612e5e565b600385600981111561289257fe5b1415612995576128a560146013866131ac565b1561296557601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260409020805463ffffffff1916905561291590856132a5565b61296557601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612e5e565b60048560098111156129a357fe5b1415612aa6576129b66010600f866131ac565b15612a7657600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260409020805463ffffffff19169055612a2690856132a5565b612a7657600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612e5e565b6005856009811115612ab457fe5b1415612b9c57612ac7600d600c866131ac565b15612b4a576001600160a01b0384166000908152600d60205260409020805463ffffffff19169055612afa600b856132a5565b612b4a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612e5e565b6006856009811115612baa57fe5b1415612c7057612bbd60176016866131ac565b15612c40576001600160a01b0384166000908152601760205260409020805463ffffffff19169055612bf06015856132a5565b612c4057601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612e5e565b6007856009811115612c7e57fe5b1415612d4457612c91601a6019866131ac565b15612d14576001600160a01b0384166000908152601a60205260409020805463ffffffff19169055612cc46018856132a5565b612d1457601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612e5e565b6008856009811115612d5257fe5b1415612e1857612d65601e601d866131ac565b15612de8576001600160a01b0384166000908152601e60205260409020805463ffffffff19169055612d98601c856132a5565b612de857601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612e5e565b6009856009811115612e2657fe5b1415612e5457506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612e5e565b6000915050612eb5565b846009811115612e6a57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b7157600080fd5b60106020526000908152604090205463ffffffff1681565b6000612eb583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132f5565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f7e90849061338c565b505050565b600082820183811015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612fec57506000611518565b82820282848281612ff957fe5b0414612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6000612eb583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061343d565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526130d290859061338c565b50505050565b600082820163ffffffff8085169082161015612eb5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600063ffffffff831661315057506000611518565b82820263ffffffff808416908086169083168161316957fe5b0463ffffffff1614612eb55760405162461bcd60e51b81526004018080602001828103825260218152602001806136756021913960400191505060405180910390fd5b6001600160a01b03811660009081526020839052604081205460ff1661329b576001600160a01b03821660009081526020859052604090205463ffffffff16613229576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b03821660009081526020859052604090205463ffffffff42811691161115613293576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612eb5565b5060009392505050565b6000805b835481101561329b57826001600160a01b03168482815481106132c857fe5b6000918252602090912001546001600160a01b031614156132ed576001915050611518565b6001016132a9565b600081848411156133845760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613349578181015183820152602001613331565b50505050905090810190601f1680156133765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60606133e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134a29092919063ffffffff16565b805190915015612f7e5780806020019051602081101561340057600080fd5b5051612f7e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806136d6602a913960400191505060405180910390fd5b6000818361348c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613349578181015183820152602001613331565b50600083858161349857fe5b0495945050505050565b60606134b184846000856134b9565b949350505050565b60606134c485613626565b613515576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106135545780518252601f199092019160209182019101613535565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135b6576040519150601f19603f3d011682016040523d82523d6000602084013e6135bb565b606091505b509150915081156135cf5791506134b19050565b8051156135df5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315613349578181015183820152602001613331565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212209b143471cb9a59e62b9cb441f88d2eea76d7f496512277f573163c6dbd014e0064736f6c63430007050033000000000000000000000000a9a779aea33b6f40cfc78a29cf56fc7e6fb329ab000000000000000000000000ace14532d052a71869506856ef8ad7cf8a1361280000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a9a779aea33b6f40cfc78a29cf56fc7e6fb329ab000000000000000000000000ace14532d052a71869506856ef8ad7cf8a1361280000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _Mama (address): 0xa9a779aea33b6f40cfc78a29cf56fc7e6fb329ab
Arg [1] : _sMama (address): 0xace14532d052a71869506856ef8ad7cf8a136128
Arg [2] : _secondsNeededForQueue (uint32): 0

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a9a779aea33b6f40cfc78a29cf56fc7e6fb329ab
Arg [1] : 000000000000000000000000ace14532d052a71869506856ef8ad7cf8a136128
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

7455:19563:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12897:582;;;;;;;;;;;;;;;;-1:-1:-1;12897:582:0;;;;;;-1:-1:-1;;;;;12897:582:0;;:::i;:::-;;10037:32;;;;;;;;;;;;;;;;-1:-1:-1;10037:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;10037:32:0;;;;;;;;;;;;;;4846:159;;;:::i;10755:47::-;;;;;;;;;;;;;;;;-1:-1:-1;10755:47:0;-1:-1:-1;;;;;10755:47:0;;:::i;:::-;;;;;;;;;;;;;;;;15936:626;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15936:626:0;;;;;;;;:::i;17096:147::-;;;:::i;15413:378::-;;;;;;;;;;;;;;;;-1:-1:-1;15413:378:0;;:::i;9051:52::-;;;;;;;;;;;;;;;;-1:-1:-1;9051:52:0;-1:-1:-1;;;;;9051:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;13624:860;;;;;;;;;;;;;;;;-1:-1:-1;13624:860:0;;;;;;-1:-1:-1;;;;;13624:860:0;;:::i;8642:29::-;;;:::i;9938:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9938:51:0;-1:-1:-1;;;;;9938:51:0;;:::i;18227:459::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18227:459:0;;;;;;;;:::i;11081:21::-;;;:::i;17396:668::-;;;:::i;9206:32::-;;;;;;;;;;;;;;;;-1:-1:-1;9206:32:0;;:::i;5013:261::-;;;;;;;;;;;;;;;;-1:-1:-1;5013:261:0;-1:-1:-1;;;;;5013:261:0;;:::i;4619:90::-;;;:::i;10905:49::-;;;;;;;;;;;;;;;;-1:-1:-1;10905:49:0;-1:-1:-1;;;;;10905:49:0;;:::i;5286:221::-;;;:::i;8807:48::-;;;;;;;;;;;;;;;;-1:-1:-1;8807:48:0;-1:-1:-1;;;;;8807:48:0;;:::i;16643:344::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16643:344:0;;;;;;;;:::i;8954:34::-;;;;;;;;;;;;;;;;-1:-1:-1;8954:34:0;;:::i;10283:::-;;;;;;;;;;;;;;;;-1:-1:-1;10283:34:0;;:::i;8862:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8862:53:0;-1:-1:-1;;;;;8862:53:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;8678:45;;;:::i;10535:24::-;;;;;;;;;;;;;;;;-1:-1:-1;10535:24:0;;:::i;9301:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9301:50:0;-1:-1:-1;;;;;9301:50:0;;:::i;9586:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9586:55:0;-1:-1:-1;;;;;9586:55:0;;:::i;9680:36::-;;;;;;;;;;;;;;;;-1:-1:-1;9680:36:0;;:::i;11148:25::-;;;:::i;9110:57::-;;;;;;;;;;;;;;;;-1:-1:-1;9110:57:0;-1:-1:-1;;;;;9110:57:0;;:::i;9779:54::-;;;;;;;;;;;;;;;;-1:-1:-1;9779:54:0;-1:-1:-1;;;;;9779:54:0;;:::i;9529:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9529:50:0;-1:-1:-1;;;;;9529:50:0;;:::i;10439:57::-;;;;;;;;;;;;;;;;-1:-1:-1;10439:57:0;-1:-1:-1;;;;;10439:57:0;;:::i;10189:55::-;;;;;;;;;;;;;;;;-1:-1:-1;10189:55:0;-1:-1:-1;;;;;10189:55:0;;:::i;10811:31::-;;;;;;;;;;;;;;;;-1:-1:-1;10811:31:0;;:::i;11870:876::-;;;;;;;;;;;;;;;;-1:-1:-1;11870:876:0;;;-1:-1:-1;;;;;11870:876:0;;;;;;;;;;:::i;9358:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9358:55:0;-1:-1:-1;;;;;9358:55:0;;:::i;10671:47::-;;;;;;;;;;;;;;;;-1:-1:-1;10671:47:0;-1:-1:-1;;;;;10671:47:0;;:::i;8732:30::-;;;;;;;;;;;;;;;;-1:-1:-1;8732:30:0;;:::i;14651:631::-;;;;;;;;;;;;;;;;-1:-1:-1;14651:631:0;;;;;;-1:-1:-1;;;;;14651:631:0;;:::i;10380:52::-;;;;;;;;;;;;;;;;-1:-1:-1;10380:52:0;-1:-1:-1;;;;;10380:52:0;;:::i;18862:1929::-;;;;;;;;;;;;;;;;-1:-1:-1;18862:1929:0;;;;;;;;-1:-1:-1;;;;;18862:1929:0;;:::i;10132:50::-;;;;;;;;;;;;;;;;-1:-1:-1;10132:50:0;-1:-1:-1;;;;;10132:50:0;;:::i;10622:42::-;;;;;;;;;;;;;;;;-1:-1:-1;10622:42:0;-1:-1:-1;;;;;10622:42:0;;:::i;11054:20::-;;;:::i;10961:54::-;;;;;;;;;;;;;;;;-1:-1:-1;10961:54:0;-1:-1:-1;;;;;10961:54:0;;:::i;21001:4869::-;;;;;;;;;;;;;;;;-1:-1:-1;21001:4869:0;;;;;-1:-1:-1;;;;;21001:4869:0;;;;;;;;;;;;:::i;11213:21::-;;;:::i;9452:32::-;;;;;;;;;;;;;;;;-1:-1:-1;9452:32:0;;:::i;9840:59::-;;;;;;;;;;;;;;;;-1:-1:-1;9840:59:0;-1:-1:-1;;;;;9840:59:0;;:::i;12897:582::-;-1:-1:-1;;;;;12976:24:0;;;;;;:14;:24;;;;;;;;12967:51;;;;;-1:-1:-1;;;12967:51:0;;;;;;;;;;;;-1:-1:-1;;;12967:51:0;;;;;;;;;;;;;;;13101:10;13083:30;;;;:16;:30;;;;;;;;:38;;:30;:38;13074:65;;;;;-1:-1:-1;;;13074:65:0;;;;;;;;;;;;-1:-1:-1;;;13074:65:0;;;;;;;;;;;;;;;13152:10;13165:26;13174:6;13182:7;13165;:26::i;:::-;13152:39;;13213:4;-1:-1:-1;;;;;13202:26:0;;13230:10;13242:5;13202:47;;;;;;;;;;;;;-1:-1:-1;;;;;13202:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13278:13:0;;:26;;-1:-1:-1;13278:13:0;-1:-1:-1;13297:5:0;13278:17;:26::i;:::-;13262:13;:42;;;13320:32;;-1:-1:-1;;;;;;;;;;;13320:32:0;;;;13365:52;-1:-1:-1;;;;;13365:29:0;;13396:10;13408:7;13365:29;:52::i;:::-;13435:36;;;;;;;;;;;;;;-1:-1:-1;;;;;13435:36:0;;;;;;;;;;;12897:582;;;:::o;10037:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10037:32:0;;-1:-1:-1;10037:32:0;:::o;4846:159::-;4760:6;;-1:-1:-1;;;;;4760:6:0;4770:10;4760:20;4751:67;;;;;-1:-1:-1;;;4751:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4751:67:0;;;;;;;;;;;;;;;4963:1:::1;4947:6:::0;;4930:37:::1;::::0;-1:-1:-1;;;;;4947:6:0;;::::1;::::0;4930:37:::1;::::0;4963:1;;4930:37:::1;4995:1;4978:19:::0;;-1:-1:-1;;;;;;4978:19:0::1;::::0;;4846:159::o;10755:47::-;;;;;;;;;;;;;:::o;15936:626::-;-1:-1:-1;;;;;16008:26:0;;;;;;:16;:26;;;;;;;;16004:209;;;16081:10;16061:32;;;;:18;:32;;;;;;;;16052:59;;;;;-1:-1:-1;;;16052:59:0;;;;;;;;;;;;-1:-1:-1;;;16052:59:0;;;;;;;;;;;;;;;16004:209;;;16171:10;16153:30;;;;:16;:30;;;;;;;;16144:57;;;;;-1:-1:-1;;;16144:57:0;;;;;;;;;;;;-1:-1:-1;;;16144:57:0;;;;;;;;;;;;;;;16225:10;16238:24;16246:6;16254:7;16238;:24::i;:::-;16225:37;;16291:16;:14;:16::i;:::-;16282:5;:25;;16273:61;;;;;-1:-1:-1;;;16273:61:0;;;;;;;;;;;;-1:-1:-1;;;16273:61:0;;;;;;;;;;;;;;;16363:13;;:26;;16382:5;16363:17;:26::i;:::-;16347:13;:42;;;16405:32;;-1:-1:-1;;;;;;;;;;;16405:32:0;;;;16450:52;-1:-1:-1;;;;;16450:29:0;;16481:10;16493:7;16450:29;:52::i;:::-;16520:34;;;;;;;;-1:-1:-1;;;;;16520:34:0;;;;;;;;;;;;;15936:626;;;:::o;17096:147::-;17144:4;17169:66;17188:45;17222:9;;17196:4;-1:-1:-1;;;;;17188:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17188:28:0;;:32;:45::i;:::-;17169:13;;;:17;:66::i;:::-;17162:73;;17096:147;:::o;15413:378::-;15494:10;15484:22;;;;:8;:22;;;;;;;;15475:49;;;;;-1:-1:-1;;;15475:49:0;;;;;;;;;;;;-1:-1:-1;;;15475:49:0;;;;;;;;;;;;;;;15537;;;-1:-1:-1;;;15537:49:0;;15565:10;15537:49;;;;;;;;;;;;-1:-1:-1;;;;;15548:4:0;15537:26;;;;:49;;;;;-1:-1:-1;;15537:49:0;;;;;;;-1:-1:-1;15537:26:0;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15644:10:0;15629:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;15629:27:0;-1:-1:-1;15662:7:0;15629:31;:42::i;:::-;15614:10;15599:27;;;;:13;:27;;;;;:72;15694:9;;:24;;15709:7;15694:13;:24::i;:::-;15682:9;:36;15736:47;;;;;;;;;;;;;;-1:-1:-1;;;;;15759:4:0;15736:47;;15747:10;;15736:47;;;;;;;;;;;15413:378;:::o;9051:52::-;;;;;;;;;;;;;;;:::o;13624:860::-;13714:10;13704:22;;;;:8;:22;;;;;;;;13695:49;;;;;-1:-1:-1;;;13695:49:0;;;;;;;;;;;;-1:-1:-1;;;13695:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13764:24:0;;;;;;:14;:24;;;;;;;;13755:51;;;;;-1:-1:-1;;;13755:51:0;;;;;;;;;;;;-1:-1:-1;;;13755:51:0;;;;;;;;;;;;;;;13819:10;13832:26;13841:6;13849:7;13832;:26::i;:::-;13898:5;;13890:39;;;-1:-1:-1;;;13890:39:0;;13917:10;13890:39;;;;;;13819;;-1:-1:-1;13871:16:0;;-1:-1:-1;;;;;13898:5:0;;;;13890:25;;:39;;;;;;;;;;;;;;;13898:5;13890:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13890:39:0;14030:10;13977:18;14015:27;;;:13;13890:39;14015:27;;;;;13890:39;;-1:-1:-1;13977:18:0;13998:46;;13890:39;;13998:15;:46::i;:::-;13977:67;;14073:13;14064:5;:22;;14055:55;;;;;-1:-1:-1;;;14055:55:0;;;;;;;;;;;;-1:-1:-1;;;14055:55:0;;;;;;;;;;;;;;;14168:10;14153:27;;;;:13;:27;;;;;;:40;;14186:5;14153:31;:40::i;:::-;14138:10;14123:27;;;;:13;:27;;;;;:70;14216:9;;:22;;14231:5;14216:13;:22::i;:::-;14204:9;:34;14267:13;;:26;;14286:5;14267:17;:26::i;:::-;14251:13;:42;;;14309:32;;-1:-1:-1;;;;;;;;;;;14309:32:0;;;;14354:48;;;-1:-1:-1;;;14354:48:0;;14381:10;14354:48;;;;;;;;;;;;-1:-1:-1;;;;;14354:25:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;14354:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14428:48:0;;;;;;14354;14428;;;;;;;-1:-1:-1;;;;;14428:48:0;;;14440:10;;14428:48;;;;;;;;;;;13624:860;;;;;:::o;8642:29::-;;;:::o;9938:51::-;;;;;;;;;;;;-1:-1:-1;;;;;9938:51:0;;:::o;18227:459::-;-1:-1:-1;;;;;18328:24:0;;18298:11;18328:24;;;:14;:24;;;;;;;;18323:356;;;18432:87;18498:6;-1:-1:-1;;;;;18490:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18490:27:0;18451:25;;;-1:-1:-1;;;18451:25:0;;;;18484:33;;;;:2;:33;;18432:46;;-1:-1:-1;;;;;18459:4:0;18451:23;;;;:25;;;;;18490:27;;18451:25;;;;;;;;:23;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18451:25:0;18432:7;;18445:31;;:2;:31;18432:11;:46::i;:::-;:50;;:87::i;:::-;18423:96;;18323:356;;;-1:-1:-1;;;;;18542:26:0;;;;;;:16;:26;;;;;;;;18537:142;;;-1:-1:-1;;;;;18612:24:0;;;;;;;:14;:24;;;;;;;;;;18595:72;;-1:-1:-1;;;18595:72:0;;;;;;;;;;;;;;;;;18612:24;;;;;18595:53;;:72;;;;;;;;;;;18612:24;18595:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18595:72:0;;-1:-1:-1;18537:142:0;18227:459;;;;:::o;11081:21::-;;;;:::o;17396:668::-;4760:6;;-1:-1:-1;;;;;4760:6:0;4770:10;4760:20;4751:67;;;;;-1:-1:-1;;;4751:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4751:67:0;;;;;;;;;;;;;;;17455:13:::1;::::0;17479:221:::1;17500:13;:20:::0;17496:24;::::1;17479:221;;;17554:134;17587:86;17596:13;17611:1;17596:18;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17624:13:::1;:18:::0;;-1:-1:-1;;;;;17596:18:0;;::::1;::::0;17639:1;;17624:18;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;17616:55:::1;::::0;;-1:-1:-1;;;17616:55:0;;17664:4:::1;17616:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;17624:18:0;;::::1;::::0;17616:38:::1;::::0;:55;;;;;;;;;;17624:18;17616:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17616:55:0;17587:7:::1;:86::i;:::-;17554:8:::0;;:12:::1;:134::i;:::-;17543:145:::0;-1:-1:-1;17522:3:0::1;;17479:221;;;;17715:6;17710:226;17731:15;:22:::0;17727:26;::::1;17710:226;;;17787:137;17819:90;17828:15;17845:1;17828:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17858:15:::1;:20:::0;;-1:-1:-1;;;;;17828:20:0;;::::1;::::0;17875:1;;17858:20;::::1;;;;17787:137;17776:148:::0;-1:-1:-1;17755:3:0::1;;17710:226;;;-1:-1:-1::0;17946:13:0::1;:24:::0;;;17986:27:::1;::::0;17962:8;;-1:-1:-1;;;;;;;;;;;17986:27:0;;;::::1;18029;::::0;18046:8;;18029:27:::1;::::0;;;::::1;4829:1;17396:668::o:0;9206:32::-;;;;;;;;;;;;5013:261;4760:6;;-1:-1:-1;;;;;4760:6:0;4770:10;4760:20;4751:67;;;;;-1:-1:-1;;;4751:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4751:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5116:23:0;::::1;5107:75;;;;-1:-1:-1::0;;;5107:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5215:6;::::0;;5198:36:::1;::::0;-1:-1:-1;;;;;5198:36:0;;::::1;::::0;5215:6;::::1;::::0;5198:36:::1;::::0;::::1;5245:9;:21:::0;;-1:-1:-1;;;;;;5245:21:0::1;-1:-1:-1::0;;;;;5245:21:0;;;::::1;::::0;;;::::1;::::0;;5013:261::o;4619:90::-;4668:7;4695:6;-1:-1:-1;;;;;4695:6:0;4619:90;:::o;10905:49::-;;;;;;;;;;;;;;;:::o;5286:221::-;5370:9;;-1:-1:-1;;;;;5370:9:0;5356:10;:23;5347:71;;;;-1:-1:-1;;;5347:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5459:9;;;5451:6;;5434:36;;-1:-1:-1;;;;;5459:9:0;;;;5451:6;;;;5434:36;;;5490:9;;;5481:18;;-1:-1:-1;;;;;;5481:18:0;-1:-1:-1;;;;;5490:9:0;;;5481:18;;;;;;5286:221::o;8807:48::-;;;;;;;;;;;;;;;:::o;16643:344::-;16746:10;16729:29;;;;:15;:29;;;;;;;;16720:56;;;;;-1:-1:-1;;;16720:56:0;;;;;;;;;;;;-1:-1:-1;;;16720:56:0;;;;;;;;;;;;;;;16807:16;:14;:16::i;:::-;16796:7;:27;;16787:63;;;;;-1:-1:-1;;;16787:63:0;;;;;;;;;;;;-1:-1:-1;;;16787:63:0;;;;;;;;;;;;;;;16879:4;-1:-1:-1;;;;;16863:27:0;;16892:10;16904:7;16863:50;;;;;;;;;;;;;-1:-1:-1;;;;;16863:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16931:48:0;;;;;;;;-1:-1:-1;;;;;16931:48:0;;;-1:-1:-1;16946:10:0;;-1:-1:-1;16931:48:0;;;;;;;;;16643:344;;:::o;8954:34::-;;;;;;;;;;;;10283;;;;;;;;;;;;8862:53;;;;;;;;;;;;;;;:::o;8678:45::-;;;:::o;10535:24::-;;;;;;;;;;;;9301:50;;;;;;;;;;;;;;;:::o;9586:55::-;;;;;;;;;;;;;;;:::o;9680:36::-;;;;;;;;;;;;11148:25;;;;:::o;9110:57::-;;;;;;;;;;;;;;;:::o;9779:54::-;;;;;;;;;;;;;;;:::o;9529:50::-;;;;;;;;;;;;;;;:::o;10439:57::-;;;;;;;;;;;;;;;:::o;10189:55::-;;;;;;;;;;;;;;;:::o;10811:31::-;;;;;;;;;;;;11870:876;-1:-1:-1;;;;;11985:24:0;;11952:10;11985:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;12013:26:0;;;;;;:16;:26;;;;;;;;11985:54;11976:81;;;;;-1:-1:-1;;;11976:81:0;;;;;;;;;;;;-1:-1:-1;;;11976:81:0;;;;;;;;;;;;;;;12068:71;-1:-1:-1;;;;;12068:33:0;;12103:10;12123:4;12130:7;12068:33;:71::i;:::-;-1:-1:-1;;;;;12157:24:0;;;;;;:14;:24;;;;;;;;12152:212;;;12228:10;12208:32;;;;:18;:32;;;;;;;;12199:59;;;;;-1:-1:-1;;;12199:59:0;;;;;;;;;;;;-1:-1:-1;;;12199:59:0;;;;;;;;;;;;;;;12152:212;;;12322:10;12300:34;;;;:20;:34;;;;;;;;12291:61;;;;;-1:-1:-1;;;12291:61:0;;;;;;;;;;;;-1:-1:-1;;;12291:61:0;;;;;;;;;;;;;;;12376:10;12389:24;12397:6;12405:7;12389;:24::i;:::-;12376:37;-1:-1:-1;12505:20:0;12376:37;12516:7;12505:9;:20::i;:::-;12497:28;;12552:4;-1:-1:-1;;;;;12536:27:0;;12565:10;12577:5;12536:48;;;;;;;;;;;;;-1:-1:-1;;;;;12536:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12613:13:0;;:26;;-1:-1:-1;12613:13:0;-1:-1:-1;12632:5:0;12613:17;:26::i;:::-;12597:13;:42;;;12655:32;;-1:-1:-1;;;;;;;;;;;12655:32:0;;;;12705:33;;;;;;;;;;;;;;-1:-1:-1;;;;;12705:33:0;;;;;;;;;;;11870:876;;;;;;:::o;9358:55::-;;;;;;;;;;;;;;;:::o;10671:47::-;;;;;;;;;;;;;;;:::o;8732:30::-;;;;;;;;;;;;14651:631;14752:10;14742:22;;;;:8;:22;;;;;;;;14733:49;;;;;-1:-1:-1;;;14733:49:0;;;;;;;;;;;;-1:-1:-1;;;14733:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14802:24:0;;;;;;:14;:24;;;;;;;;14793:51;;;;;-1:-1:-1;;;14793:51:0;;;;;;;;;;;;-1:-1:-1;;;14793:51:0;;;;;;;;;;;;;;;14857:71;-1:-1:-1;;;;;14857:33:0;;14892:10;14912:4;14919:7;14857:33;:71::i;:::-;14941:10;14954:26;14963:6;14971:7;14954;:26::i;:::-;15036:10;15021:27;;;;:13;:27;;;;;;14941:39;;-1:-1:-1;15021:40:0;;14941:39;15021:31;:40::i;:::-;15006:10;14991:27;;;;:13;:27;;;;;:70;15084:9;;:22;;15099:5;15084:13;:22::i;:::-;15072:9;:34;15135:13;;:26;;15154:5;15135:17;:26::i;:::-;15119:13;:42;;;15177:32;;-1:-1:-1;;;;;;;;;;;15177:32:0;;;;15227:47;;;;;;;;;;;;;;-1:-1:-1;;;;;15227:47:0;;;15238:10;;15227:47;;;;;;;;;;;14651:631;;;:::o;10380:52::-;;;;;;;;;;;;;;;:::o;18862:1929::-;18950:4;4760:6;;-1:-1:-1;;;;;4760:6:0;4770:10;4760:20;4751:67;;;;;-1:-1:-1;;;4751:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4751:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18977:22:0;::::1;18968:33;;;::::0;::::1;;19030:25;19017:9;:38;;;;;;;;;19012:1696;;;19114:54;:29;19121:15;19114:29:::0;::::1;::::0;19145:21:::1;::::0;19114:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;19078:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:90;;-1:-1:-1;;19078:90:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19012:1696:::1;;;19204:23;19191:9;:36;;;;;;;;;19186:1522;;;19284:54;:29;19291:15;19284:29:::0;::::1;::::0;19315:21:::1;::::0;19284:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;19250:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:88;;-1:-1:-1;;19250:88:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19186:1522:::1;;;19374:21;19361:9;:34;;;;;;;;;19356:1352;;;19450:54;:29;19457:15;19450:29:::0;::::1;::::0;19481:21:::1;::::0;19450:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;19418:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:86;;-1:-1:-1;;19418:86:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19356:1352:::1;;;19540:23;19527:9;:36;;;;;;;;;19522:1186;;;19620:65;19651:32;:27;:21;:27:::0;::::1;::::0;19680:1:::1;::::0;19651:27:::1;:32;:::i;:::-;19620:29;19627:15;19620:29:::0;::::1;::::0;:65;:29:::1;:65;:::i;:::-;-1:-1:-1::0;;;;;19586:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:99;;-1:-1:-1;;19586:99:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19522:1186:::1;;;19721:27;19708:9;:40;;;;;;;;;19703:1005;;;19809:54;:29;19816:15;19809:29:::0;::::1;::::0;19840:21:::1;::::0;19809:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;19771:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:92;;-1:-1:-1;;19771:92:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19703:1005:::1;;;19899:23;19886:9;:36;;;;;;;;;19881:827;;;19979:54;:29;19986:15;19979:29:::0;::::1;::::0;20010:21:::1;::::0;19979:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;19945:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:88;;-1:-1:-1;;19945:88:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19881:827:::1;;;20069:25;20056:9;:38;;;;;;;;;20051:657;;;20153:65;20184:32;:27;:21;:27:::0;::::1;::::0;20213:1:::1;::::0;20184:27:::1;:32;:::i;20153:65::-;-1:-1:-1::0;;;;;20117:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:101;;-1:-1:-1;;20117:101:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20051:657:::1;;;20254:15;20241:9;:28;;;;;;;;;20236:472;;;20318:54;:29;20325:15;20318:29:::0;::::1;::::0;20349:21:::1;::::0;20318:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;20292:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:80;;-1:-1:-1;;20292:80:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20236:472:::1;;;20408:22;20395:9;:35;;;;;;;;;20390:318;;;20486:54;:29;20493:15;20486:29:::0;::::1;::::0;20517:21:::1;::::0;20486:29:::1;:54;:::i;:::-;-1:-1:-1::0;;;;;20453:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;:87;;-1:-1:-1;;20453:87:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20390:318:::1;;;20576:13;20563:9;:26;;;;;;;;;20558:150;;;20624:54;:29;20631:15;20624:29:::0;::::1;::::0;20655:21:::1;::::0;20624:29:::1;:54;:::i;:::-;20612:66;;:9;:66:::0;20558:150:::1;;;-1:-1:-1::0;20703:5:0::1;20696:12;;20558:150;20740:9;20726:35;;;;;;;;;::::0;;-1:-1:-1;;;;;20726:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;20779:4:0::1;18862:1929:::0;;;;:::o;10132:50::-;;;;;;;;;;;;;;;:::o;10622:42::-;;;;;;;;;;;;;;;:::o;11054:20::-;;;-1:-1:-1;;;;;11054:20:0;;:::o;10961:54::-;;;;;;;;;;;;;;;:::o;21001:4869::-;21146:4;4760:6;;-1:-1:-1;;;;;4760:6:0;4770:10;4760:20;4751:67;;;;;-1:-1:-1;;;4751:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4751:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21173:22:0;::::1;21164:33;;;::::0;::::1;;21208:11;::::0;21235:9:::1;:38;;;;;;;;;21230:4546;;;21301:67;21315:21;21338:18;21358:8;21301:12;:67::i;:::-;21296:293;;;-1:-1:-1::0;;;;;21390:33:0;::::1;21426:1;21390:33:::0;;;:21:::1;:33;::::0;;;;:37;;-1:-1:-1;;21390:37:0::1;::::0;;21451:43:::1;21465:17;21413:8:::0;21451:12:::1;:43::i;:::-;21446:128;;21520:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21520:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21520:34:0::1;-1:-1:-1::0;;;;;21520:34:0;::::1;;::::0;;21446:128:::1;-1:-1:-1::0;;;;;;21613:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;21612:31;-1:-1:-1::0;;21658:39:0;;::::1;::::0;::::1;::::0;;;21230:4546:::1;;;21747:23;21734:9;:36;;;;;;;;;21729:4047;;;21798:63;21812:19;21833:16;21851:8;21798:12;:63::i;:::-;21793:283;;;-1:-1:-1::0;;;;;21883:31:0;::::1;21917:1;21883:31:::0;;;:19:::1;:31;::::0;;;;:35;;-1:-1:-1;;21883:35:0::1;::::0;;21942:41:::1;21956:15;21904:8:::0;21942:12:::1;:41::i;:::-;21937:124;;22009:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22009:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22009:32:0::1;-1:-1:-1::0;;;;;22009:32:0;::::1;;::::0;;21937:124:::1;-1:-1:-1::0;;;;;;22100:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;22099:29;-1:-1:-1::0;;22143:37:0;;::::1;::::0;::::1;::::0;;;21729:4047:::1;;;22218:21;22205:9;:34;;;;;;;;;22200:3576;;;22267:59;22281:17;22300:14;22316:8;22267:12;:59::i;:::-;22262:273;;;-1:-1:-1::0;;;;;22348:29:0;::::1;22380:1;22348:29:::0;;;:17:::1;:29;::::0;;;;:33;;-1:-1:-1;;22348:33:0::1;::::0;;22405:39:::1;22419:13;22367:8:::0;22405:12:::1;:39::i;:::-;22400:120;;22470:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22470:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22470:30:0::1;-1:-1:-1::0;;;;;22470:30:0;::::1;;::::0;;22400:120:::1;-1:-1:-1::0;;;;;;22559:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;22558:27;-1:-1:-1::0;;22600:35:0;;::::1;::::0;::::1;::::0;;;22200:3576:::1;;;22673:23;22660:9;:36;;;;;;;;;22655:3121;;;22724:63;22738:19;22759:16;22777:8;22724:12;:63::i;:::-;22719:334;;;22809:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;22809:32:0::1;-1:-1:-1::0;;;;;22809:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22860:31:0;;;:19:::1;22809:32;22860:31:::0;;;;:35;;-1:-1:-1;;22860:35:0::1;::::0;;22919:41:::1;::::0;22809:32;22919:12:::1;:41::i;:::-;22914:124;;22986:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22986:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22986:32:0::1;-1:-1:-1::0;;;;;22986:32:0;::::1;;::::0;;22914:124:::1;-1:-1:-1::0;;;;;;23077:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;23076:29;-1:-1:-1::0;;23120:37:0;;::::1;::::0;::::1;::::0;;;22655:3121:::1;;;23195:27;23182:9;:40;;;;;;;;;23177:2599;;;23250:71;23264:23;23289:20;23311:8;23250:12;:71::i;:::-;23245:358;;;23343:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;23343:36:0::1;-1:-1:-1::0;;;;;23343:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23398:35:0;;;:23:::1;23343:36;23398:35:::0;;;;:39;;-1:-1:-1;;23398:39:0::1;::::0;;23461:45:::1;::::0;23343:36;23461:12:::1;:45::i;:::-;23456:132;;23532:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23532:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23532:36:0::1;-1:-1:-1::0;;;;;23532:36:0;::::1;;::::0;;23456:132:::1;-1:-1:-1::0;;;;;;23627:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;23626:33;-1:-1:-1::0;;23674:41:0;;::::1;::::0;::::1;::::0;;;23177:2599:::1;;;23753:23;23740:9;:36;;;;;;;;;23735:2041;;;23804:63;23818:19;23839:16;23857:8;23804:12;:63::i;:::-;23799:283;;;-1:-1:-1::0;;;;;23889:31:0;::::1;23923:1;23889:31:::0;;;:19:::1;:31;::::0;;;;:35;;-1:-1:-1;;23889:35:0::1;::::0;;23948:41:::1;23962:15;23910:8:::0;23948:12:::1;:41::i;:::-;23943:124;;24015:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24015:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24015:32:0::1;-1:-1:-1::0;;;;;24015:32:0;::::1;;::::0;;23943:124:::1;-1:-1:-1::0;;;;;;24106:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;24105:29;-1:-1:-1::0;;24149:37:0;;::::1;::::0;::::1;::::0;;;24201:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;24201:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;23735:2041:::1;;;24279:25;24266:9;:38;;;;;;;;;24261:1515;;;24332:67;24346:21;24369:18;24389:8;24332:12;:67::i;:::-;24327:293;;;-1:-1:-1::0;;;;;24421:33:0;::::1;24457:1;24421:33:::0;;;:21:::1;:33;::::0;;;;:37;;-1:-1:-1;;24421:37:0::1;::::0;;24482:43:::1;24496:17;24444:8:::0;24482:12:::1;:43::i;:::-;24477:128;;24551:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24551:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24551:34:0::1;-1:-1:-1::0;;;;;24551:34:0;::::1;;::::0;;24477:128:::1;-1:-1:-1::0;;;;;;24644:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;24643:31;-1:-1:-1::0;;24689:39:0;;::::1;::::0;::::1;::::0;;;24261:1515:::1;;;24766:15;24753:9;:28;;;;;;;;;24748:1028;;;24809:47;24823:11;24836:8;24846;24809:12;:47::i;:::-;24804:243;;;-1:-1:-1::0;;;;;24878:23:0;::::1;24904:1;24878:23:::0;;;:11:::1;:23;::::0;;;;:27;;-1:-1:-1;;24878:27:0::1;::::0;;24929:33:::1;24943:7;24891:8:::0;24929:12:::1;:33::i;:::-;24924:108;;24988:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24988:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24988:24:0::1;-1:-1:-1::0;;;;;24988:24:0;::::1;;::::0;;24924:108:::1;-1:-1:-1::0;;;;;;25071:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;25070:21;-1:-1:-1::0;;25106:29:0;;::::1;::::0;::::1;::::0;;;24748:1028:::1;;;25173:22;25160:9;:35;;;;;;;;;25155:621;;;25223:61;25237:18;25257:15;25274:8;25223:12;:61::i;:::-;25218:278;;;-1:-1:-1::0;;;;;25306:30:0;::::1;25339:1;25306:30:::0;;;:18:::1;:30;::::0;;;;:34;;-1:-1:-1;;25306:34:0::1;::::0;;25364:40:::1;25378:14;25326:8:::0;25364:12:::1;:40::i;:::-;25359:122;;25430:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25430:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25430:31:0::1;-1:-1:-1::0;;;;;25430:31:0;::::1;;::::0;;25359:122:::1;-1:-1:-1::0;;;;;;25520:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;25519:28;-1:-1:-1::0;;25562:36:0;;::::1;::::0;::::1;::::0;;;25155:621:::1;;;25636:13;25623:9;:26;;;;;;;;;25618:158;;;-1:-1:-1::0;25684:1:0::1;25672:9;:13:::0;25700:5:::1;:16:::0;;-1:-1:-1;;;;;;25700:16:0::1;-1:-1:-1::0;;;;;25700:16:0;::::1;;::::0;;-1:-1:-1;25618:158:0::1;;;25771:5;25764:12;;;;;25618:158;25811:9;25794:46;;;;;;;;;::::0;;-1:-1:-1;;;;;25794:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;25858:4;25851:11;;;4829:1;21001:4869:::0;;;;;:::o;11213:21::-;;;;:::o;9452:32::-;;;;;;;;;;;;9840:59;;;;;;;;;;;;;;;:::o;617:136::-;675:7;702:43;706:1;709;702:43;;;;;;;;;;;;;;;;;:3;:43::i;6264:177::-;6374:58;;;-1:-1:-1;;;;;6374:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6374:58:0;-1:-1:-1;;;6374:58:0;;;6347:86;;6367:5;;6347:19;:86::i;:::-;6264:177;;;:::o;241:181::-;299:7;331:5;;;355:6;;;;347:46;;;;;-1:-1:-1;;;347:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;961:250;1019:7;1043:6;1039:47;;-1:-1:-1;1073:1:0;1066:8;;1039:47;1110:5;;;1114:1;1110;:5;:1;1134:5;;;;;:10;1126:56;;;;-1:-1:-1;;;1126:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1475:132;1533:7;1560:39;1564:1;1567;1560:39;;;;;;;;;;;;;;;;;:3;:39::i;6449:205::-;6577:68;;;-1:-1:-1;;;;;6577:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6577:68:0;-1:-1:-1;;;6577:68:0;;;6550:96;;6570:5;;6550:19;:96::i;:::-;6449:205;;;;:::o;430:179::-;488:6;518:5;;;542:6;;;;;;;;;534:46;;;;;-1:-1:-1;;;534:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1219:248;1277:6;1300;;;1296:47;;-1:-1:-1;1330:1:0;1323:8;;1296:47;1366:5;;;1390:10;;;;;:5;;;;;;;;;;;;:10;;;1382:56;;;;-1:-1:-1;;;1382:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26118:451;-1:-1:-1;;;;;26333:19:0;;26309:4;26333:19;;;;;;;;;;;;;26327:221;;-1:-1:-1;;;;;26379:18:0;;;;;;;;;;;;;;;;26370:48;;;;;-1:-1:-1;;;26370:48:0;;;;;;;;;;;;-1:-1:-1;;;26370:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26442:18:0;;;;;;;;;;;;;;:45;26471:15;26442:45;;:18;;:45;;26433:77;;;;;-1:-1:-1;;;26433:77:0;;;;;;;;;;;;-1:-1:-1;;;26433:77:0;;;;;;;;;;;;;;;-1:-1:-1;26532:4:0;26525:11;;26327:221;-1:-1:-1;26556:5:0;26118:451;;;;;:::o;26738:277::-;26827:4;;26845:140;26866:12;;26862:16;;26845:140;;;26919:6;-1:-1:-1;;;;;26905:20:0;:5;26912:1;26905:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26905:10:0;:20;26901:73;;;26954:4;26947:11;;;;;26901:73;26880:3;;26845:140;;761:192;847:7;883:12;875:6;;;;867:29;;;;-1:-1:-1;;;867:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;919:5:0;;;761:192::o;6662:418::-;6743:23;6769:69;6797:4;6769:69;;;;;;;;;;;;;;;;;6777:5;-1:-1:-1;;;;;6769:27:0;;;:69;;;;;:::i;:::-;6853:17;;6743:95;;-1:-1:-1;6853:21:0;6849:224;;6995:10;6984:30;;;;;;;;;;;;;;;-1:-1:-1;6984:30:0;6976:85;;;;-1:-1:-1;;;6976:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:189;1701:7;1736:12;1729:5;1721:28;;;;-1:-1:-1;;;1721:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:9;1776:1;1772;:5;;;;;;;1615:189;-1:-1:-1;;;;;1615:189:0:o;2264:232::-;2403:12;2435:53;2458:6;2466:4;2472:1;2475:12;2435:22;:53::i;:::-;2428:60;2264:232;-1:-1:-1;;;;2264:232:0:o;2504:863::-;2680:12;2713:18;2724:6;2713:10;:18::i;:::-;2705:60;;;;;-1:-1:-1;;;2705:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:12;2853:23;2880:6;-1:-1:-1;;;;;2880:11:0;2900:8;2911:4;2880:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2880:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2838:78;;;;2931:7;2927:433;;;2962:10;-1:-1:-1;2955:17:0;;-1:-1:-1;2955:17:0;2927:433;3009:17;;:21;3005:344;;3177:10;3171:17;3238:15;3225:10;3221:2;3217:19;3210:44;3125:148;3313:20;;-1:-1:-1;;;3313:20:0;;;;;;;;;;;;;;;;;3320:12;;3313:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1834:422;2201:20;2240:8;;;1834:422::o

Swarm Source

ipfs://9b143471cb9a59e62b9cb441f88d2eea76d7f496512277f573163c6dbd014e00
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.