ETH Price: $3,393.24 (+1.68%)
Gas: 6 Gwei

Contract

0x31F8Cc382c9898b273eff4e0b7626a6987C846E8
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer136809462021-11-25 2:43:33964 days ago1637808213IN
OlympusDAO: Treasury
0.006648 ETH0.00235141111.97216568
Queue127325072021-06-30 1:44:381112 days ago1625017478IN
OlympusDAO: Treasury
0 ETH0.0005776612
Push Management127317982021-06-29 23:10:161112 days ago1625008216IN
OlympusDAO: Treasury
0 ETH0.0004782810
Toggle126876142021-06-23 1:51:111119 days ago1624413071IN
OlympusDAO: Treasury
0 ETH0.0003735221
Toggle126874732021-06-23 1:20:051119 days ago1624411205IN
OlympusDAO: Treasury
0 ETH0.002987341
Toggle126805022021-06-21 23:16:581120 days ago1624317418IN
OlympusDAO: Treasury
0 ETH0.0057360374.25
Toggle126804462021-06-21 23:03:281120 days ago1624316608IN
OlympusDAO: Treasury
0 ETH0.0046812267
Queue126745252021-06-21 0:36:391121 days ago1624235799IN
OlympusDAO: Treasury
0 ETH0.0004878310
Queue126719592021-06-20 15:24:211121 days ago1624202661IN
OlympusDAO: Treasury
0 ETH0.0005776612
Queue126719572021-06-20 15:23:571121 days ago1624202637IN
OlympusDAO: Treasury
0 ETH0.000579712
Toggle126679352021-06-20 0:08:131122 days ago1624147693IN
OlympusDAO: Treasury
0 ETH0.0001747110
Toggle126679282021-06-20 0:06:151122 days ago1624147575IN
OlympusDAO: Treasury
0 ETH0.0001747110
Toggle126679262021-06-20 0:06:051122 days ago1624147565IN
OlympusDAO: Treasury
0 ETH0.000829810
Toggle126679242021-06-20 0:05:461122 days ago1624147546IN
OlympusDAO: Treasury
0 ETH0.0008046210
Toggle126679242021-06-20 0:05:461122 days ago1624147546IN
OlympusDAO: Treasury
0 ETH0.0001714310
Toggle126679222021-06-20 0:05:321122 days ago1624147532IN
OlympusDAO: Treasury
0 ETH0.0007473510
Queue126599872021-06-18 18:15:221123 days ago1624040122IN
OlympusDAO: Treasury
0 ETH0.0006300713
Queue126599772021-06-18 18:13:251123 days ago1624040005IN
OlympusDAO: Treasury
0 ETH0.0006397613.2
Queue126599732021-06-18 18:12:331123 days ago1624039953IN
OlympusDAO: Treasury
0 ETH0.000625813
Toggle126599632021-06-18 18:10:311123 days ago1624039831IN
OlympusDAO: Treasury
0 ETH0.0004419425.78
Toggle126599602021-06-18 18:09:141123 days ago1624039754IN
OlympusDAO: Treasury
0 ETH0.0009460413.1
Toggle126599532021-06-18 18:08:081123 days ago1624039688IN
OlympusDAO: Treasury
0 ETH0.0002620615
Toggle126599532021-06-18 18:08:081123 days ago1624039688IN
OlympusDAO: Treasury
0 ETH0.0010210613.1
Toggle126599442021-06-18 18:05:401123 days ago1624039540IN
OlympusDAO: Treasury
0 ETH0.0001921811
Toggle126592072021-06-18 15:35:041123 days ago1624030504IN
OlympusDAO: Treasury
0 ETH0.002338231
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OlympusTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-28
*/

// 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 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 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 OlympusTreasury is Ownable {

    using SafeMath for uint;
    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 OHM;
    uint public immutable blocksNeededForQueue;

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

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

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

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

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;
    mapping( address => uint ) 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 => uint ) public ReserveManagerQueue; // Delays changes to mapping.

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

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint ) 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 => uint ) public rewardManagerQueue; // Delays changes to mapping.

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

    constructor (
        address _OHM,
        address _DAI,
        address _OHMDAI,
        uint _blocksNeededForQueue
    ) {
        require( _OHM != address(0) );
        OHM = _OHM;

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

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

        blocksNeededForQueue = _blocksNeededForQueue;
    }

    /**
        @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( OHM ).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( OHM ).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( sOHM ).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( OHM ).burnFrom( msg.sender, _amount );

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

        emit RepayDebt( msg.sender, OHM, _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( OHM ).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( OHM ).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( OHM ).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 ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.SOHM ) { // 9
            sOHMQueue = block.number.add( blocksNeededForQueue );
        } 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;
            sOHM = _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 => uint ) 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 ] <= block.number, "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":"_OHM","type":"address"},{"internalType":"address","name":"_DAI","type":"address"},{"internalType":"address","name":"_OHMDAI","type":"address"},{"internalType":"uint256","name":"_blocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OlympusTreasury.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 OlympusTreasury.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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"","type":"uint256"}],"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 OlympusTreasury.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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.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"}]

60c06040523480156200001157600080fd5b506040516200636e3803806200636e833981810160405260808110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200015c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506002839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060a081815250505050505060805160601c60a051615fdd62000391600039806138025280613c8a5280613d245280613dbe5280613e5d5280613f055280613f9f528061403e52806140e6528061418052806142195250806113ae5280611a315280611bb55280611d0e52806124335280612fb8528061327452806136425250615fdd6000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806387d67dff1161019d578063cd85641a116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b146110c4578063fc7b9c181461114b578063fd1ec01014611169578063fff9ee87146111c1576102f0565b8063ebd83cd814610fb8578063ee4e19a114611012578063fb9395881461106c576102f0565b8063cd85641a14610ddb578063d031370b14610e33578063d07f390f14610e8b578063d796ffb814610ea9578063df89b34414610ef7578063e83afee314610f51576102f0565b8063a569e57111610156578063b1bd38b011610130578063b1bd38b014610c67578063b5b1d56014610cbf578063bc157ac114610d17578063c24ad43e14610d83576102f0565b8063a569e57114610b81578063a6c41fec14610bdb578063ab319c9a14610c0f576102f0565b806387d67dff146109a75780638f59c72714610a015780638f6a7b5714610a595780638f840ddd14610ab1578063932cc8c314610acf578063a1210a2d14610b27576102f0565b80632789de371161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461084757806370a0502a1461089f578063788c6c01146108f7578063869871bf1461094f576102f0565b80635a96ac0a1461079557806368c31dd51461079f5780636a20de92146107f9576102f0565b80632789de37146106435780632b7ce50014610661578063437f79121461066b57806346f68ee9146106c3578063481c6a75146107075780634e83423c1461073b576102f0565b80630f70431f116102ae5780630f70431f14610469578063124154ca1461049757806312422d23146104f1578063150799251461053f5780631af4da70146105735780631eec5a9a146105e1576102f0565b8062f714ce146102f55780630619aff114610343578063089208d81461039b578063094a8651146103a55780630b0eee30146103fd5780630c3513a81461044b575b600080fd5b6103416004803603604081101561030b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611219565b005b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050611525565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a3611564565b005b6103e7600480360360208110156103bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e3565b6040518082815260200191505060405180910390f35b6104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fb565b005b610453611a24565b6040518082815260200191505060405180910390f35b6104956004803603602081101561047f57600080fd5b8101908080359060200190929190505050611af4565b005b6104d9600480360360208110156104ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9c565b60405180821515815260200191505060405180910390f35b61053d6004803603604081101561050757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbc565b005b6105476122f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b56004803603602081101561058957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061231d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61062d600480360360408110156105f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612350565b6040518082815260200191505060405180910390f35b61064b612661565b6040518082815260200191505060405180910390f35b610669612667565b005b6106976004803603602081101561068157600080fd5b8101908080359060200190929190505050612a27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610705600480360360208110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a66565b005b61070f612c6b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61077d6004803603602081101561075157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c94565b60405180821515815260200191505060405180910390f35b61079d612cb4565b005b6107e1600480360360208110156107b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e5a565b60405180821515815260200191505060405180910390f35b6108456004803603604081101561080f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e7a565b005b6108736004803603602081101561085d57600080fd5b81019080803590602001909291905050506130c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108cb600480360360208110156108b557600080fd5b8101908080359060200190929190505050613107565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109396004803603602081101561090d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613146565b6040518082815260200191505060405180910390f35b61097b6004803603602081101561096557600080fd5b810190808035906020019092919050505061315e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e9600480360360208110156109bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061319d565b60405180821515815260200191505060405180910390f35b610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131bd565b6040518082815260200191505060405180910390f35b610a8560048036036020811015610a6f57600080fd5b81019080803590602001909291905050506131d5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ab9613214565b6040518082815260200191505060405180910390f35b610b1160048036036020811015610ae557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061321a565b6040518082815260200191505060405180910390f35b610b6960048036036020811015610b3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613232565b60405180821515815260200191505060405180910390f35b610bc360048036036020811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613252565b60405180821515815260200191505060405180910390f35b610be3613272565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c5160048036036020811015610c2557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613296565b6040518082815260200191505060405180910390f35b610ca960048036036020811015610c7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132ae565b6040518082815260200191505060405180910390f35b610ceb60048036036020811015610cd557600080fd5b81019080803590602001909291905050506132c6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d6d60048036036060811015610d2d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613305565b6040518082815260200191505060405180910390f35b610dc560048036036020811015610d9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613791565b6040518082815260200191505060405180910390f35b610e1d60048036036020811015610df157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137a9565b6040518082815260200191505060405180910390f35b610e5f60048036036020811015610e4957600080fd5b81019080803590602001909291905050506137c1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e93613800565b6040518082815260200191505060405180910390f35b610ef560048036036040811015610ebf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613824565b005b610f3960048036036020811015610f0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b49565b60405180821515815260200191505060405180910390f35b610fa060048036036040811015610f6757600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b69565b60405180821515815260200191505060405180910390f35b610ffa60048036036020811015610fce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c8565b60405180821515815260200191505060405180910390f35b6110546004803603602081101561102857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142e8565b60405180821515815260200191505060405180910390f35b6110ae6004803603602081101561108257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614308565b6040518082815260200191505060405180910390f35b611133600480360360608110156110da57600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614320565b60405180821515815260200191505060405180910390f35b61115361549b565b6040518082815260200191505060405180910390f35b6111956004803603602081101561117f57600080fd5b81019080803590602001909291905050506154a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611203600480360360208110156111d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154e0565b6040518082815260200191505060405180910390f35b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006113aa8284612350565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505061146a816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26114ca33848473ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8483604051808381526020018281526020019250505060405180910390a2505050565b6012818154811061153557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b6020528060005260406000206000915090505481565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561181157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118d1565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006118dd8383612350565b90506118e7611a24565b81111561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b611971816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26119d133838573ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80836040518082815260200191505060405180910390a2505050565b6000611aef611ade6022547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b81019080805190602001909291905050506154f890919063ffffffff16565b6021546154f890919063ffffffff16565b905090565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c4457600080fd5b505af1158015611c58573d6000803e3d6000fd5b50505050611cae81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d06816022546154f890919063ffffffff16565b6022819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098384604051808381526020018281526020019250505060405180910390a350565b60066020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611f468284612350565b90506000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fd357600080fd5b505afa158015611fe7573d6000803e3d6000fd5b505050506040513d6020811015611ffd57600080fd5b810190808051906020019092919050505090506000612064601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836154f890919063ffffffff16565b9050808311156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f457863656564732064656274206c696d6974000000000000000000000000000081525060200191505060405180910390fd5b61212e83601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546155e490919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612186836022546155e490919063ffffffff16565b6022819055506121a1836021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561224757600080fd5b505af115801561225b573d6000803e3d6000fd5b505050506040513d602081101561227157600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d68786604051808381526020018281526020019250505060405180910390a35050505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124fc576124f58373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ed57600080fd5b505afa158015612401573d6000803e3d6000fd5b505050506040513d602081101561241757600080fd5b810190808051906020019092919050505060ff16600a0a6124e77f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d60208110156124c157600080fd5b810190808051906020019092919050505060ff16600a0a8561566c90919063ffffffff16565b6156f290919063ffffffff16565b905061265b565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561265a57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561261c57600080fd5b505afa158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b810190808051906020019092919050505090505b5b92915050565b60205481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600080600090505b600280549050811015612877576128686128596002838154811061275057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002848154811061278857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561281957600080fd5b505afa15801561282d573d6000803e3d6000fd5b505050506040513d602081101561284357600080fd5b8101908080519060200190929190505050612350565b836155e490919063ffffffff16565b91508080600101915050612730565b5060005b600b805490508110156129c2576129b36129a4600b838154811061289b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b84815481106128d357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561296457600080fd5b505afa158015612978573d6000803e3d6000fd5b505050506040513d602081101561298e57600080fd5b8101908080519060200190929190505050612350565b836155e490919063ffffffff16565b9150808060010191505061287b565b5080602181905550807f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a2807fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250565b60088181548110612a3757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615f156026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d6020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f3b6022913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f41611a24565b811115612fb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561304757600080fd5b505af115801561305b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c836040518082815260200191505060405180910390a35050565b600581815481106130d857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015818154811061311757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b6018818154811061316e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b600e81815481106131e557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b60076020528060005260406000206000915090505481565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60176020528060005260406000206000915090505481565b60146020528060005260406000206000915090505481565b601c81815481106132d657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61341a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6134473330868673ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561355d57600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b61361d565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006136298486612350565b905061363e83826154f890919063ffffffff16565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b505050506136fe816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158683604051808381526020018281526020019250505060405180910390a2509392505050565b600a6020528060005260406000206000915090505481565b601a6020528060005260406000206000915090505481565b600281815481106137d157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6139cf3330848473ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b60006139db8284612350565b9050613a2f81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a87816022546154f890919063ffffffff16565b602281905550613aa2816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098584604051808381526020018281526020019250505060405180910390a3505050565b60166020528060005260406000206000915054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c6657600080fd5b60006009811115613c7357fe5b836009811115613c7f57fe5b1415613d0057613cb87f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614264565b60016009811115613d0d57fe5b836009811115613d1957fe5b1415613d9a57613d527f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614263565b60026009811115613da757fe5b836009811115613db357fe5b1415613e3457613dec7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614262565b60036009811115613e4157fe5b836009811115613e4d57fe5b1415613ee157613e99613e8a60027f000000000000000000000000000000000000000000000000000000000000000061566c90919063ffffffff16565b436155e490919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614261565b60046009811115613eee57fe5b836009811115613efa57fe5b1415613f7b57613f337f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614260565b60056009811115613f8857fe5b836009811115613f9457fe5b141561401557613fcd7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425f565b6006600981111561402257fe5b83600981111561402e57fe5b14156140c25761407a61406b60027f000000000000000000000000000000000000000000000000000000000000000061566c90919063ffffffff16565b436155e490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425e565b600760098111156140cf57fe5b8360098111156140db57fe5b141561415c576141147f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425d565b6008600981111561416957fe5b83600981111561417557fe5b14156141f6576141ae7f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425c565b60098081111561420257fe5b83600981111561420e57fe5b1415614252576142477f0000000000000000000000000000000000000000000000000000000000000000436155e490919063ffffffff16565b60208190555061425b565b600090506142c2565b5b5b5b5b5b5b5b5b5b82600981111561427057fe5b7f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2600190505b92915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b601e6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441d57600080fd5b600080600981111561442b57fe5b85600981111561443757fe5b14156145b45761444a60076006866157fd565b15614508576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f6005856159cd565b614507576005849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542b565b600160098111156145c157fe5b8560098111156145cd57fe5b141561474a576145e0600a6009866157fd565b1561469e576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146356008856159cd565b61469d576008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542a565b6002600981111561475757fe5b85600981111561476357fe5b14156148e05761477660046003866157fd565b15614834576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147cb6002856159cd565b614833576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615429565b600360098111156148ed57fe5b8560098111156148f957fe5b1415614ad95761490c60146013866157fd565b15614a2d576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c46012856159cd565b614a2c576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615428565b60046009811115614ae657fe5b856009811115614af257fe5b1415614cd257614b056010600f866157fd565b15614c2657600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bbd600e856159cd565b614c2557600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615427565b60056009811115614cdf57fe5b856009811115614ceb57fe5b1415614ee657614cfe600d600c866157fd565b15614dbc576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d53600b856159cd565b614dbb57600b849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615426565b60066009811115614ef357fe5b856009811115614eff57fe5b141561507c57614f1260176016866157fd565b15614fd0576000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f676015856159cd565b614fcf576015849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615425565b6007600981111561508957fe5b85600981111561509557fe5b1415615212576150a8601a6019866157fd565b15615166576000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150fd6018856159cd565b615165576018849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615424565b6008600981111561521f57fe5b85600981111561522b57fe5b14156153a85761523e601e601d866157fd565b156152fc576000601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615293601c856159cd565b6152fb57601c849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615423565b6009808111156153b457fe5b8560098111156153c057fe5b141561541857600060208190555083601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050615422565b6000915050615494565b5b5b5b5b5b5b5b5b5b84600981111561543757fe5b7f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc4778583604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a260019150505b9392505050565b60225481565b600b81815481106154b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b600061553a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a6e565b905092915050565b6155df8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b505050565b600080828401905083811015615662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561567f57600090506156ec565b600082840290508284828161569057fe5b04146156e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f5d6021913960400191505060405180910390fd5b809150505b92915050565b600061573483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615c1d565b905092915050565b6157f7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b50505050565b60008260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166159c15760008460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415615904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4d7573742071756575650000000000000000000000000000000000000000000081525060200191505060405180910390fd5b438460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156159b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5175657565206e6f74206578706972656400000000000000000000000000000081525060200191505060405180910390fd5b600190506159c6565b600090505b9392505050565b600080600090505b8380549050811015615a62578273ffffffffffffffffffffffffffffffffffffffff16848281548110615a0457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415615a55576001915050615a68565b80806001019150506159d5565b50600090505b92915050565b6000838311158290615b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ae0578082015181840152602081019050615ac5565b50505050905090810190601f168015615b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615b90826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16615ce39092919063ffffffff16565b9050600081511115615c1857808060200190516020811015615bb157600080fd5b8101908080519060200190929190505050615c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615f7e602a913960400191505060405180910390fd5b5b505050565b60008083118290615cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615c8e578082015181840152602081019050615c73565b50505050905090810190601f168015615cbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615cd557fe5b049050809150509392505050565b6060615cf28484600085615cfb565b90509392505050565b6060615d0685615f01565b615d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615dc85780518252602082019150602081019050602083039250615da5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615e2a576040519150601f19603f3d011682016040523d82523d6000602084013e615e2f565b606091505b50915091508115615e44578092505050615ef9565b600081511115615e575780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ebe578082015181840152602081019050615ea3565b50505050905090810190601f168015615eeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122015ff4556042a9f39281029da8b6820f365edf7ce7172e6ce094ff1a5956d062664736f6c63430007050033000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a8990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000034d7d7aaf50ad4944b70b320acb24c95fa2def7c0000000000000000000000000000000000000000000000000000000000001770

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102f05760003560e01c806387d67dff1161019d578063cd85641a116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b146110c4578063fc7b9c181461114b578063fd1ec01014611169578063fff9ee87146111c1576102f0565b8063ebd83cd814610fb8578063ee4e19a114611012578063fb9395881461106c576102f0565b8063cd85641a14610ddb578063d031370b14610e33578063d07f390f14610e8b578063d796ffb814610ea9578063df89b34414610ef7578063e83afee314610f51576102f0565b8063a569e57111610156578063b1bd38b011610130578063b1bd38b014610c67578063b5b1d56014610cbf578063bc157ac114610d17578063c24ad43e14610d83576102f0565b8063a569e57114610b81578063a6c41fec14610bdb578063ab319c9a14610c0f576102f0565b806387d67dff146109a75780638f59c72714610a015780638f6a7b5714610a595780638f840ddd14610ab1578063932cc8c314610acf578063a1210a2d14610b27576102f0565b80632789de371161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461084757806370a0502a1461089f578063788c6c01146108f7578063869871bf1461094f576102f0565b80635a96ac0a1461079557806368c31dd51461079f5780636a20de92146107f9576102f0565b80632789de37146106435780632b7ce50014610661578063437f79121461066b57806346f68ee9146106c3578063481c6a75146107075780634e83423c1461073b576102f0565b80630f70431f116102ae5780630f70431f14610469578063124154ca1461049757806312422d23146104f1578063150799251461053f5780631af4da70146105735780631eec5a9a146105e1576102f0565b8062f714ce146102f55780630619aff114610343578063089208d81461039b578063094a8651146103a55780630b0eee30146103fd5780630c3513a81461044b575b600080fd5b6103416004803603604081101561030b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611219565b005b61036f6004803603602081101561035957600080fd5b8101908080359060200190929190505050611525565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a3611564565b005b6103e7600480360360208110156103bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116e3565b6040518082815260200191505060405180910390f35b6104496004803603604081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116fb565b005b610453611a24565b6040518082815260200191505060405180910390f35b6104956004803603602081101561047f57600080fd5b8101908080359060200190929190505050611af4565b005b6104d9600480360360208110156104ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d9c565b60405180821515815260200191505060405180910390f35b61053d6004803603604081101561050757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbc565b005b6105476122f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b56004803603602081101561058957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061231d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61062d600480360360408110156105f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612350565b6040518082815260200191505060405180910390f35b61064b612661565b6040518082815260200191505060405180910390f35b610669612667565b005b6106976004803603602081101561068157600080fd5b8101908080359060200190929190505050612a27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610705600480360360208110156106d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a66565b005b61070f612c6b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61077d6004803603602081101561075157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c94565b60405180821515815260200191505060405180910390f35b61079d612cb4565b005b6107e1600480360360208110156107b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e5a565b60405180821515815260200191505060405180910390f35b6108456004803603604081101561080f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e7a565b005b6108736004803603602081101561085d57600080fd5b81019080803590602001909291905050506130c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108cb600480360360208110156108b557600080fd5b8101908080359060200190929190505050613107565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109396004803603602081101561090d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613146565b6040518082815260200191505060405180910390f35b61097b6004803603602081101561096557600080fd5b810190808035906020019092919050505061315e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e9600480360360208110156109bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061319d565b60405180821515815260200191505060405180910390f35b610a4360048036036020811015610a1757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131bd565b6040518082815260200191505060405180910390f35b610a8560048036036020811015610a6f57600080fd5b81019080803590602001909291905050506131d5565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ab9613214565b6040518082815260200191505060405180910390f35b610b1160048036036020811015610ae557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061321a565b6040518082815260200191505060405180910390f35b610b6960048036036020811015610b3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613232565b60405180821515815260200191505060405180910390f35b610bc360048036036020811015610b9757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613252565b60405180821515815260200191505060405180910390f35b610be3613272565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c5160048036036020811015610c2557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613296565b6040518082815260200191505060405180910390f35b610ca960048036036020811015610c7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132ae565b6040518082815260200191505060405180910390f35b610ceb60048036036020811015610cd557600080fd5b81019080803590602001909291905050506132c6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d6d60048036036060811015610d2d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613305565b6040518082815260200191505060405180910390f35b610dc560048036036020811015610d9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613791565b6040518082815260200191505060405180910390f35b610e1d60048036036020811015610df157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137a9565b6040518082815260200191505060405180910390f35b610e5f60048036036020811015610e4957600080fd5b81019080803590602001909291905050506137c1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e93613800565b6040518082815260200191505060405180910390f35b610ef560048036036040811015610ebf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613824565b005b610f3960048036036020811015610f0d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b49565b60405180821515815260200191505060405180910390f35b610fa060048036036040811015610f6757600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b69565b60405180821515815260200191505060405180910390f35b610ffa60048036036020811015610fce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142c8565b60405180821515815260200191505060405180910390f35b6110546004803603602081101561102857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506142e8565b60405180821515815260200191505060405180910390f35b6110ae6004803603602081101561108257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614308565b6040518082815260200191505060405180910390f35b611133600480360360608110156110da57600080fd5b81019080803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614320565b60405180821515815260200191505060405180910390f35b61115361549b565b6040518082815260200191505060405180910390f35b6111956004803603602081101561117f57600080fd5b81019080803590602001909291905050506154a1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611203600480360360208110156111d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506154e0565b6040518082815260200191505060405180910390f35b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461139e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006113aa8284612350565b90507f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561143d57600080fd5b505af1158015611451573d6000803e3d6000fd5b5050505061146a816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26114ca33848473ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb8483604051808381526020018281526020019250505060405180910390a2505050565b6012818154811061153557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b6020528060005260406000206000915090505481565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561181157601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661180c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118d1565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006118dd8383612350565b90506118e7611a24565b81111561195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b611971816021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a26119d133838573ffffffffffffffffffffffffffffffffffffffff166155429092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80836040518082815260200191505060405180910390a2505050565b6000611aef611ade6022547f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9557600080fd5b505afa158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b81019080805190602001909291905050506154f890919063ffffffff16565b6021546154f890919063ffffffff16565b905090565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611c4457600080fd5b505af1158015611c58573d6000803e3d6000fd5b50505050611cae81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d06816022546154f890919063ffffffff16565b6022819055507f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098384604051808381526020018281526020019250505060405180910390a350565b60066020528060005260406000206000915054906101000a900460ff1681565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611f468284612350565b90506000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fd357600080fd5b505afa158015611fe7573d6000803e3d6000fd5b505050506040513d6020811015611ffd57600080fd5b810190808051906020019092919050505090506000612064601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836154f890919063ffffffff16565b9050808311156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f457863656564732064656274206c696d6974000000000000000000000000000081525060200191505060405180910390fd5b61212e83601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546155e490919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612186836022546155e490919063ffffffff16565b6022819055506121a1836021546154f890919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561224757600080fd5b505af115801561225b573d6000803e3d6000fd5b505050506040513d602081101561227157600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d68786604051808381526020018281526020019250505060405180910390a35050505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124fc576124f58373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ed57600080fd5b505afa158015612401573d6000803e3d6000fd5b505050506040513d602081101561241757600080fd5b810190808051906020019092919050505060ff16600a0a6124e77f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d60208110156124c157600080fd5b810190808051906020019092919050505060ff16600a0a8561566c90919063ffffffff16565b6156f290919063ffffffff16565b905061265b565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561265a57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634249719f84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561261c57600080fd5b505afa158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b810190808051906020019092919050505090505b5b92915050565b60205481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612728576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600080600090505b600280549050811015612877576128686128596002838154811061275057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002848154811061278857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561281957600080fd5b505afa15801561282d573d6000803e3d6000fd5b505050506040513d602081101561284357600080fd5b8101908080519060200190929190505050612350565b836155e490919063ffffffff16565b91508080600101915050612730565b5060005b600b805490508110156129c2576129b36129a4600b838154811061289b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b84815481106128d357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561296457600080fd5b505afa158015612978573d6000803e3d6000fd5b505050506040513d602081101561298e57600080fd5b8101908080519060200190929190505050612350565b836155e490919063ffffffff16565b9150808060010191505061287b565b5080602181905550807f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a2807fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446660405160405180910390a250565b60088181548110612a3757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615f156026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba60405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601d6020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f3b6022913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d60405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60036020528060005260406000206000915054906101000a900460ff1681565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f41611a24565b811115612fb6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e73756666696369656e74207265736572766573000000000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561304757600080fd5b505af115801561305b573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c836040518082815260200191505060405180910390a35050565b600581815481106130d857600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6015818154811061311757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b6018818154811061316e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b600e81815481106131e557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b60076020528060005260406000206000915090505481565b600f6020528060005260406000206000915054906101000a900460ff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89981565b60176020528060005260406000206000915090505481565b60146020528060005260406000206000915090505481565b601c81815481106132d657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133a85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61341a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6134473330868673ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561355d57600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b61361d565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661361c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b60006136298486612350565b905061363e83826154f890919063ffffffff16565b91507f000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89973ffffffffffffffffffffffffffffffffffffffff166340c10f1933846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156136d157600080fd5b505af11580156136e5573d6000803e3d6000fd5b505050506136fe816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a158683604051808381526020018281526020019250505060405180910390a2509392505050565b600a6020528060005260406000206000915090505481565b601a6020528060005260406000206000915090505481565b600281815481106137d157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000177081565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f7420617070726f766564000000000000000000000000000000000000000081525060200191505060405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206163636570746564000000000000000000000000000000000000000081525060200191505060405180910390fd5b6139cf3330848473ffffffffffffffffffffffffffffffffffffffff1661573c909392919063ffffffff16565b60006139db8284612350565b9050613a2f81601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546154f890919063ffffffff16565b601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a87816022546154f890919063ffffffff16565b602281905550613aa2816021546155e490919063ffffffff16565b6021819055506021547f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6660405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f3098584604051808381526020018281526020019250505060405180910390a3505050565b60166020528060005260406000206000915054906101000a900460ff1681565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c6657600080fd5b60006009811115613c7357fe5b836009811115613c7f57fe5b1415613d0057613cb87f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614264565b60016009811115613d0d57fe5b836009811115613d1957fe5b1415613d9a57613d527f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614263565b60026009811115613da757fe5b836009811115613db357fe5b1415613e3457613dec7f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614262565b60036009811115613e4157fe5b836009811115613e4d57fe5b1415613ee157613e99613e8a60027f000000000000000000000000000000000000000000000000000000000000177061566c90919063ffffffff16565b436155e490919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614261565b60046009811115613eee57fe5b836009811115613efa57fe5b1415613f7b57613f337f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614260565b60056009811115613f8857fe5b836009811115613f9457fe5b141561401557613fcd7f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425f565b6006600981111561402257fe5b83600981111561402e57fe5b14156140c25761407a61406b60027f000000000000000000000000000000000000000000000000000000000000177061566c90919063ffffffff16565b436155e490919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425e565b600760098111156140cf57fe5b8360098111156140db57fe5b141561415c576141147f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425d565b6008600981111561416957fe5b83600981111561417557fe5b14156141f6576141ae7f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425c565b60098081111561420257fe5b83600981111561420e57fe5b1415614252576142477f0000000000000000000000000000000000000000000000000000000000001770436155e490919063ffffffff16565b60208190555061425b565b600090506142c2565b5b5b5b5b5b5b5b5b5b82600981111561427057fe5b7f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf83604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2600190505b92915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b601e6020528060005260406000206000915090505481565b60003373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441d57600080fd5b600080600981111561442b57fe5b85600981111561443757fe5b14156145b45761444a60076006866157fd565b15614508576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f6005856159cd565b614507576005849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542b565b600160098111156145c157fe5b8560098111156145cd57fe5b141561474a576145e0600a6009866157fd565b1561469e576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146356008856159cd565b61469d576008849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061542a565b6002600981111561475757fe5b85600981111561476357fe5b14156148e05761477660046003866157fd565b15614834576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147cb6002856159cd565b614833576002849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615429565b600360098111156148ed57fe5b8560098111156148f957fe5b1415614ad95761490c60146013866157fd565b15614a2d576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149c46012856159cd565b614a2c576012849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615428565b60046009811115614ae657fe5b856009811115614af257fe5b1415614cd257614b056010600f866157fd565b15614c2657600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bbd600e856159cd565b614c2557600e849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615427565b60056009811115614cdf57fe5b856009811115614ceb57fe5b1415614ee657614cfe600d600c866157fd565b15614dbc576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d53600b856159cd565b614dbb57600b849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615426565b60066009811115614ef357fe5b856009811115614eff57fe5b141561507c57614f1260176016866157fd565b15614fd0576000601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f676015856159cd565b614fcf576015849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615425565b6007600981111561508957fe5b85600981111561509557fe5b1415615212576150a8601a6019866157fd565b15615166576000601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150fd6018856159cd565b615165576018849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615424565b6008600981111561521f57fe5b85600981111561522b57fe5b14156153a85761523e601e601d866157fd565b156152fc576000601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615293601c856159cd565b6152fb57601c849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615905080601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550615423565b6009808111156153b457fe5b8560098111156153c057fe5b141561541857600060208190555083601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050615422565b6000915050615494565b5b5b5b5b5b5b5b5b5b84600981111561543757fe5b7f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc4778583604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a260019150505b9392505050565b60225481565b600b81815481106154b157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915090505481565b600061553a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615a6e565b905092915050565b6155df8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b505050565b600080828401905083811015615662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083141561567f57600090506156ec565b600082840290508284828161569057fe5b04146156e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f5d6021913960400191505060405180910390fd5b809150505b92915050565b600061573483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615c1d565b905092915050565b6157f7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050615b2e565b50505050565b60008260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166159c15760008460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415615904576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4d7573742071756575650000000000000000000000000000000000000000000081525060200191505060405180910390fd5b438460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156159b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5175657565206e6f74206578706972656400000000000000000000000000000081525060200191505060405180910390fd5b600190506159c6565b600090505b9392505050565b600080600090505b8380549050811015615a62578273ffffffffffffffffffffffffffffffffffffffff16848281548110615a0457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415615a55576001915050615a68565b80806001019150506159d5565b50600090505b92915050565b6000838311158290615b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ae0578082015181840152602081019050615ac5565b50505050905090810190601f168015615b0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615b90826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16615ce39092919063ffffffff16565b9050600081511115615c1857808060200190516020811015615bb157600080fd5b8101908080519060200190929190505050615c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615f7e602a913960400191505060405180910390fd5b5b505050565b60008083118290615cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615c8e578082015181840152602081019050615c73565b50505050905090810190601f168015615cbb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615cd557fe5b049050809150509392505050565b6060615cf28484600085615cfb565b90509392505050565b6060615d0685615f01565b615d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615dc85780518252602082019150602081019050602083039250615da5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615e2a576040519150601f19603f3d011682016040523d82523d6000602084013e615e2f565b606091505b50915091508115615e44578092505050615ef9565b600081511115615e575780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615ebe578082015181840152602081019050615ea3565b50505050905090810190601f168015615eeb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122015ff4556042a9f39281029da8b6820f365edf7ce7172e6ce094ff1a5956d062664736f6c63430007050033

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

000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a8990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000034d7d7aaf50ad4944b70b320acb24c95fa2def7c0000000000000000000000000000000000000000000000000000000000001770

-----Decoded View---------------
Arg [0] : _OHM (address): 0x383518188C0C6d7730D91b2c03a03C837814a899
Arg [1] : _DAI (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [2] : _OHMDAI (address): 0x34d7d7Aaf50AD4944B70B320aCB24C95fa2def7c
Arg [3] : _blocksNeededForQueue (uint256): 6000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a899
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [2] : 00000000000000000000000034d7d7aaf50ad4944b70b320acb24c95fa2def7c
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001770


Deployed Bytecode Sourcemap

6752:19215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12044:581;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9185:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4143:159;;;:::i;:::-;;9897:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15079:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16240:146;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14558:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8207:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12770:859;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10194:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9086:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17370:458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10220:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16539:668;;;:::i;:::-;;8360:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4310:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3916:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10047:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4583:221;;;:::i;:::-;;7965:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15788:343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8110:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8020:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9679:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8455:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8738:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8830:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10287:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8266:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8929:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8681:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7804:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9585:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9337:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9953:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11016:877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8512:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9815:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7890:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7839:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13796:631;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9526:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18004:1785;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9280:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9766:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19999:4833;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10352:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8604:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8990:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12044:581;12123:14;:24;12139:6;12123:24;;;;;;;;;;;;;;;;;;;;;;;;;12114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12264:4;12230:38;;:16;:30;12248:10;12230:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;12221:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12299:10;12312:26;12321:6;12329:7;12312;:26::i;:::-;12299:39;;12360:3;12349:25;;;12376:10;12388:5;12349:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12424:26;12443:5;12424:13;;:17;;:26;;;;:::i;:::-;12408:13;:42;;;;12483:13;;12466:32;;;;;;;;;;12511:52;12542:10;12554:7;12519:6;12511:29;;;;:52;;;;;:::i;:::-;12593:6;12581:36;;;12601:7;12610:5;12581:36;;;;;;;;;;;;;;;;;;;;;;;;12044:581;;;:::o;9185:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4143:159::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4260:1:::1;4227:37;;4244:6;::::0;::::1;;;;;;;;4227:37;;;;;;;;;;;;4292:1;4275:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4143:159::o:0;9897:47::-;;;;;;;;;;;;;;;;;:::o;15079:628::-;15151:16;:26;15169:6;15151:26;;;;;;;;;;;;;;;;;;;;;;;;;15147:209;;;15204:18;:32;15224:10;15204:32;;;;;;;;;;;;;;;;;;;;;;;;;15195:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:209;;;15296:16;:30;15314:10;15296:30;;;;;;;;;;;;;;;;;;;;;;;;;15287:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:209;15368:10;15381:26;15390:6;15398:7;15381;:26::i;:::-;15368:39;;15436:16;:14;:16::i;:::-;15427:5;:25;;15418:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15508:26;15527:5;15508:13;;:17;;:26;;;;:::i;:::-;15492:13;:42;;;;15567:13;;15550:32;;;;;;;;;;15595:52;15626:10;15638:7;15603:6;15595:29;;;;:52;;;;;:::i;:::-;15682:6;15665:34;;;15690:7;15665:34;;;;;;;;;;;;;;;;;;15079:628;;;:::o;16240:146::-;16288:4;16313:65;16332:44;16365:9;;16340:3;16332:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;:44;;;;:::i;:::-;16313:13;;:17;;:65;;;;:::i;:::-;16306:72;;16240:146;:::o;14558:376::-;14629:8;:22;14639:10;14629:22;;;;;;;;;;;;;;;;;;;;;;;;;14620:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14693:3;14682:25;;;14709:10;14721:7;14682:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14773:42;14806:7;14773:13;:27;14788:10;14773:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;14743:13;:27;14758:10;14743:27;;;;;;;;;;;;;;;:72;;;;14838:24;14853:7;14838:9;;:13;;:24;;;;:::i;:::-;14826:9;:36;;;;14903:3;14880:46;;14891:10;14880:46;;;14908:7;14917;14880:46;;;;;;;;;;;;;;;;;;;;;;;;14558:376;:::o;8207:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;12770:859::-;12850:8;:22;12860:10;12850:22;;;;;;;;;;;;;;;;;;;;;;;;;12841:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12910:14;:24;12926:6;12910:24;;;;;;;;;;;;;;;;;;;;;;;;;12901:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12965:10;12978:26;12987:6;12995:7;12978;:26::i;:::-;12965:39;;13017:16;13044:4;;;;;;;;;;;13036:24;;;13062:10;13036:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13017:57;;13122:18;13143:46;13160:13;:27;13175:10;13160:27;;;;;;;;;;;;;;;;13143:11;:15;;:46;;;;:::i;:::-;13122:67;;13218:13;13209:5;:22;;13200:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13298:40;13331:5;13298:13;:27;13313:10;13298:27;;;;;;;;;;;;;;;;:31;;:40;;;;:::i;:::-;13268:13;:27;13283:10;13268:27;;;;;;;;;;;;;;;:70;;;;13361:22;13376:5;13361:9;;:13;;:22;;;;:::i;:::-;13349:9;:34;;;;13412:26;13431:5;13412:13;;:17;;:26;;;;:::i;:::-;13396:13;:42;;;;13471:13;;13454:32;;;;;;;;;;13507:6;13499:25;;;13526:10;13538:7;13499:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13597:6;13573:48;;13585:10;13573:48;;;13605:7;13614:5;13573:48;;;;;;;;;;;;;;;;;;;;;;;;12770:859;;;;;:::o;10194:19::-;;;;;;;;;;;;;:::o;9086:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;17370:458::-;17441:11;17471:14;:24;17487:6;17471:24;;;;;;;;;;;;;;;;;;;;;;;;;17466:355;;;17575:86;17640:6;17632:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17626:33;;:2;:33;17575:45;17602:3;17594:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17588:30;;:2;:30;17575:7;:11;;:45;;;;:::i;:::-;:49;;:86;;;;:::i;:::-;17566:95;;17466:355;;;17684:16;:26;17702:6;17684:26;;;;;;;;;;;;;;;;;;;;;;;;;17679:142;;;17754:14;:24;17770:6;17754:24;;;;;;;;;;;;;;;;;;;;;;;;;17737:53;;;17792:6;17800:7;17737:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17728:81;;17679:142;17466:355;17370:458;;;;:::o;10220:21::-;;;;:::o;16539:668::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16598:13:::1;16627:6:::0;16636:1:::1;16627:10;;16622:221;16643:13;:20;;;;16639:1;:24;16622:221;;;16697:134;16730:86;16739:13;16754:1;16739:18;;;;;;;;;;;;;;;;;;;;;;;;;16767:13;16782:1;16767:18;;;;;;;;;;;;;;;;;;;;;;;;;16759:38;;;16807:4;16759:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16730:7;:86::i;:::-;16697:8;:12;;:134;;;;:::i;:::-;16686:145;;16665:3;;;;;;;16622:221;;;;16858:6;16853:226;16874:15;:22;;;;16870:1;:26;16853:226;;;16930:137;16962:90;16971:15;16988:1;16971:20;;;;;;;;;;;;;;;;;;;;;;;;;17001:15;17018:1;17001:20;;;;;;;;;;;;;;;;;;;;;;;;;16993:40;;;17043:4;16993:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;16962:7;:90::i;:::-;16930:8;:12;;:137;;;;:::i;:::-;16919:148;;16898:3;;;;;;;16853:226;;;;17105:8;17089:13;:24;;;;17146:8;17129:27;;;;;;;;;;17189:8;17172:27;;;;;;;;;;4126:1;16539:668::o:0;8360:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4310:261::-;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4434:1:::1;4413:23;;:9;:23;;;;4404:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4520:9;4495:36;;4512:6;::::0;::::1;;;;;;;;4495:36;;;;;;;;;;;;4554:9;4542;;:21;;;;;;;;;;;;;;;;;;4310:261:::0;:::o;3916:90::-;3965:7;3992:6;;;;;;;;;;;3985:13;;3916:90;:::o;10047:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;;;;;;;;;;4653:23;;:10;:23;;;4644:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;;;;;;;;;4731:36;;4748:6;;;;;;;;;;4731:36;;;;;;;;;;;;4787:9;;;;;;;;;;;4778:6;;:18;;;;;;;;;;;;;;;;;;4583:221::o;7965:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15788:343::-;15874:15;:29;15891:10;15874:29;;;;;;;;;;;;;;;;;;;;;;;;;15865:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:16;:14;:16::i;:::-;15941:7;:27;;15932:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16024:3;16008:26;;;16036:10;16048:7;16008:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16102:10;16075:48;;16090:10;16075:48;;;16114:7;16075:48;;;;;;;;;;;;;;;;;;15788:343;;:::o;8110:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9429:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8020:51::-;;;;;;;;;;;;;;;;;:::o;9679:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8455:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;8738:53::-;;;;;;;;;;;;;;;;;:::o;8830:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10287:25::-;;;;:::o;8266:55::-;;;;;;;;;;;;;;;;;:::o;8929:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;8681:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;7804:28::-;;;:::o;9585:55::-;;;;;;;;;;;;;;;;;:::o;9337:53::-;;;;;;;;;;;;;;;;;:::o;9953:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11016:877::-;11098:10;11131:14;:24;11147:6;11131:24;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;11159:16;:26;11177:6;11159:26;;;;;;;;;;;;;;;;;;;;;;;;;11131:54;11122:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11214:71;11249:10;11269:4;11276:7;11222:6;11214:33;;;;:71;;;;;;:::i;:::-;11303:14;:24;11319:6;11303:24;;;;;;;;;;;;;;;;;;;;;;;;;11298:212;;;11354:18;:32;11374:10;11354:32;;;;;;;;;;;;;;;;;;;;;;;;;11345:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11298:212;;;11446:20;:34;11468:10;11446:34;;;;;;;;;;;;;;;;;;;;;;;;;11437:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11298:212;11522:10;11535:26;11544:6;11552:7;11535;:26::i;:::-;11522:39;;11653:20;11664:7;11653:5;:9;;:20;;;;:::i;:::-;11645:28;;11700:3;11684:26;;;11712:10;11724:5;11684:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11760:26;11779:5;11760:13;;:17;;:26;;;;:::i;:::-;11744:13;:42;;;;11819:13;;11802:32;;;;;;;;;;11861:6;11852:33;;;11869:7;11878:5;11852:33;;;;;;;;;;;;;;;;;;;;;;;;11016:877;;;;;;:::o;8512:53::-;;;;;;;;;;;;;;;;;:::o;9815:45::-;;;;;;;;;;;;;;;;;:::o;7890:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7839:42::-;;;:::o;13796:631::-;13887:8;:22;13897:10;13887:22;;;;;;;;;;;;;;;;;;;;;;;;;13878:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13947:14;:24;13963:6;13947:24;;;;;;;;;;;;;;;;;;;;;;;;;13938:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14002:71;14037:10;14057:4;14064:7;14010:6;14002:33;;;;:71;;;;;;:::i;:::-;14086:10;14099:26;14108:6;14116:7;14099;:26::i;:::-;14086:39;;14166:40;14199:5;14166:13;:27;14181:10;14166:27;;;;;;;;;;;;;;;;:31;;:40;;;;:::i;:::-;14136:13;:27;14151:10;14136:27;;;;;;;;;;;;;;;:70;;;;14229:22;14244:5;14229:9;;:13;;:22;;;;:::i;:::-;14217:9;:34;;;;14280:26;14299:5;14280:13;;:17;;:26;;;;:::i;:::-;14264:13;:42;;;;14339:13;;14322:32;;;;;;;;;;14395:6;14372:47;;14383:10;14372:47;;;14403:7;14412:5;14372:47;;;;;;;;;;;;;;;;;;;;;;;;13796:631;;;:::o;9526:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;18004:1785::-;18092:4;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18139:1:::1;18119:22;;:8;:22;;;;18110:33;;;::::0;::::1;;18172:25;18159:38;;;;;;;;:9;:38;;;;;;;;;18154:1552;;;18256:40;18274:20;18256:12;:16;;:40;;;;:::i;:::-;18220:21;:33;18243:8;18220:33;;;;;;;;;;;;;;;:76;;;;18154:1552;;;18332:23;18319:36;;;;;;;;:9;:36;;;;;;;;;18314:1392;;;18412:40;18430:20;18412:12;:16;;:40;;;;:::i;:::-;18378:19;:31;18399:8;18378:31;;;;;;;;;;;;;;;:74;;;;18314:1392;;;18488:21;18475:34;;;;;;;;:9;:34;;;;;;;;;18470:1236;;;18564:40;18582:20;18564:12;:16;;:40;;;;:::i;:::-;18532:17;:29;18551:8;18532:29;;;;;;;;;;;;;;;:72;;;;18470:1236;;;18640:23;18627:36;;;;;;;;:9;:36;;;;;;;;;18622:1084;;;18720:49;18738:29;18764:1;18738:20;:24;;:29;;;;:::i;:::-;18720:12;:16;;:49;;;;:::i;:::-;18686:19;:31;18707:8;18686:31;;;;;;;;;;;;;;;:83;;;;18622:1084;;;18805:27;18792:40;;;;;;;;:9;:40;;;;;;;;;18787:919;;;18893:40;18911:20;18893:12;:16;;:40;;;;:::i;:::-;18855:23;:35;18880:8;18855:35;;;;;;;;;;;;;;;:78;;;;18787:919;;;18969:23;18956:36;;;;;;;;:9;:36;;;;;;;;;18951:755;;;19049:40;19067:20;19049:12;:16;;:40;;;;:::i;:::-;19015:19;:31;19036:8;19015:31;;;;;;;;;;;;;;;:74;;;;18951:755;;;19125:25;19112:38;;;;;;;;:9;:38;;;;;;;;;19107:599;;;19209:49;19227:29;19253:1;19227:20;:24;;:29;;;;:::i;:::-;19209:12;:16;;:49;;;;:::i;:::-;19173:21;:33;19196:8;19173:33;;;;;;;;;;;;;;;:85;;;;19107:599;;;19294:15;19281:28;;;;;;;;:9;:28;;;;;;;;;19276:430;;;19358:40;19376:20;19358:12;:16;;:40;;;;:::i;:::-;19332:11;:23;19345:8;19332:23;;;;;;;;;;;;;;;:66;;;;19276:430;;;19434:22;19421:35;;;;;;;;:9;:35;;;;;;;;;19416:290;;;19512:40;19530:20;19512:12;:16;;:40;;;;:::i;:::-;19479:18;:30;19499:8;19479:30;;;;;;;;;;;;;;;:73;;;;19416:290;;;19588:13;19575:26:::0;::::1;;;;;;;:9;:26;;;;;;;;;19570:136;;;19636:40;19654:20;19636:12;:16;;:40;;;;:::i;:::-;19624:9;:52;;;;19570:136;;;19701:5;19694:12;;;;19570:136;19416:290;19276:430;19107:599;18951:755;18787:919;18622:1084;18470:1236;18314:1392;18154:1552;19738:9;19724:35;;;;;;;;;19749:8;19724:35;;;;;;;;;;;;;;;;;;;;19777:4;19770:11;;4126:1;18004:1785:::0;;;;:::o;9280:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;9766:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;10103:52::-;;;;;;;;;;;;;;;;;:::o;19999:4833::-;20109:4;4067:10;4057:20;;:6;;;;;;;;;;:20;;;4048:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20156:1:::1;20136:22;;:8;:22;;;;20127:33;;;::::0;::::1;;20171:11;20211:25:::0;20198:38:::1;;;;;;;;:9;:38;;;;;;;;;20193:4545;;;20264:67;20278:21;20301:18;20321:8;20264:12;:67::i;:::-;20259:293;;;20389:1;20353:21;:33;20376:8;20353:33;;;;;;;;;;;;;;;:37;;;;20414:43;20428:17;20447:8;20414:12;:43::i;:::-;20409:128;;20483:17;20507:8;20483:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20409:128;20259:293;20576:18;:30;20596:8;20576:30;;;;;;;;;;;;;;;;;;;;;;;;;20575:31;20566:40;;20654:6;20621:18;:30;20641:8;20621:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20193:4545;;;20710:23;20697:36;;;;;;;;:9;:36;;;;;;;;;20692:4046;;;20761:63;20775:19;20796:16;20814:8;20761:12;:63::i;:::-;20756:283;;;20880:1;20846:19;:31;20867:8;20846:31;;;;;;;;;;;;;;;:35;;;;20905:41;20919:15;20936:8;20905:12;:41::i;:::-;20900:124;;20972:15;20994:8;20972:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20900:124;20756:283;21063:16;:28;21081:8;21063:28;;;;;;;;;;;;;;;;;;;;;;;;;21062:29;21053:38;;21137:6;21106:16;:28;21124:8;21106:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20692:4046;;;21181:21;21168:34;;;;;;;;:9;:34;;;;;;;;;21163:3575;;;21230:59;21244:17;21263:14;21279:8;21230:12;:59::i;:::-;21225:273;;;21343:1;21311:17;:29;21330:8;21311:29;;;;;;;;;;;;;;;:33;;;;21368:39;21382:13;21397:8;21368:12;:39::i;:::-;21363:120;;21433:13;21453:8;21433:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21363:120;21225:273;21522:14;:26;21538:8;21522:26;;;;;;;;;;;;;;;;;;;;;;;;;21521:27;21512:36;;21592:6;21563:14;:26;21579:8;21563:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21163:3575;;;21636:23;21623:36;;;;;;;;:9;:36;;;;;;;;;21618:3120;;;21687:63;21701:19;21722:16;21740:8;21687:12;:63::i;:::-;21682:334;;;21772:15;21794:8;21772:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21857:1;21823:19;:31;21844:8;21823:31;;;;;;;;;;;;;;;:35;;;;21882:41;21896:15;21913:8;21882:12;:41::i;:::-;21877:124;;21949:15;21971:8;21949:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21877:124;21682:334;22040:16;:28;22058:8;22040:28;;;;;;;;;;;;;;;;;;;;;;;;;22039:29;22030:38;;22114:6;22083:16;:28;22101:8;22083:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21618:3120;;;22158:27;22145:40;;;;;;;;:9;:40;;;;;;;;;22140:2598;;;22213:71;22227:23;22252:20;22274:8;22213:12;:71::i;:::-;22208:358;;;22306:19;22332:8;22306:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22399:1;22361:23;:35;22386:8;22361:35;;;;;;;;;;;;;;;:39;;;;22424:45;22438:19;22459:8;22424:12;:45::i;:::-;22419:132;;22495:19;22521:8;22495:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22419:132;22208:358;22590:20;:32;22612:8;22590:32;;;;;;;;;;;;;;;;;;;;;;;;;22589:33;22580:42;;22672:6;22637:20;:32;22659:8;22637:32;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;22140:2598;;;22716:23;22703:36;;;;;;;;:9;:36;;;;;;;;;22698:2040;;;22767:63;22781:19;22802:16;22820:8;22767:12;:63::i;:::-;22762:283;;;22886:1;22852:19;:31;22873:8;22852:31;;;;;;;;;;;;;;;:35;;;;22911:41;22925:15;22942:8;22911:12;:41::i;:::-;22906:124;;22978:15;23000:8;22978:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22906:124;22762:283;23069:16;:28;23087:8;23069:28;;;;;;;;;;;;;;;;;;;;;;;;;23068:29;23059:38;;23143:6;23112:16;:28;23130:8;23112:28;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23193:11;23164:14;:26;23180:8;23164:26;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22698:2040;;;23242:25;23229:38;;;;;;;;:9;:38;;;;;;;;;23224:1514;;;23295:67;23309:21;23332:18;23352:8;23295:12;:67::i;:::-;23290:293;;;23420:1;23384:21;:33;23407:8;23384:33;;;;;;;;;;;;;;;:37;;;;23445:43;23459:17;23478:8;23445:12;:43::i;:::-;23440:128;;23514:17;23538:8;23514:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23440:128;23290:293;23607:18;:30;23627:8;23607:30;;;;;;;;;;;;;;;;;;;;;;;;;23606:31;23597:40;;23685:6;23652:18;:30;23672:8;23652:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23224:1514;;;23729:15;23716:28;;;;;;;;:9;:28;;;;;;;;;23711:1027;;;23772:47;23786:11;23799:8;23809;23772:12;:47::i;:::-;23767:243;;;23867:1;23841:11;:23;23854:8;23841:23;;;;;;;;;;;;;;;:27;;;;23892:33;23906:7;23915:8;23892:12;:33::i;:::-;23887:108;;23951:7;23965:8;23951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23887:108;23767:243;24034:8;:20;24044:8;24034:20;;;;;;;;;;;;;;;;;;;;;;;;;24033:21;24024:30;;24092:6;24069:8;:20;24079:8;24069:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23711:1027;;;24136:22;24123:35;;;;;;;;:9;:35;;;;;;;;;24118:620;;;24186:61;24200:18;24220:15;24237:8;24186:12;:61::i;:::-;24181:278;;;24302:1;24269:18;:30;24289:8;24269:30;;;;;;;;;;;;;;;:34;;;;24327:40;24341:14;24357:8;24327:12;:40::i;:::-;24322:122;;24393:14;24414:8;24393:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24322:122;24181:278;24483:15;:27;24500:8;24483:27;;;;;;;;;;;;;;;;;;;;;;;;;24482:28;24473:37;;24555:6;24525:15;:27;24542:8;24525:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24118:620;;;24599:13;24586:26:::0;::::1;;;;;;;:9;:26;;;;;;;;;24581:157;;;24647:1;24635:9;:13;;;;24670:8;24663:4;;:15;;;;;;;;;;;;;;;;;;24702:4;24693:13;;24581:157;;;24733:5;24726:12;;;;;24581:157;24118:620;23711:1027;23224:1514;22698:2040;22140:2598;21618:3120;21163:3575;20692:4046;20193:4545;24773:9;24756:46;;;;;;;;;24784:8;24794:6;24756:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;24820:4;24813:11;;;4126:1;19999:4833:::0;;;;;:::o;10352:21::-;;;;:::o;8604:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8990:57::-;;;;;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;366:50;;288:136;;;;:::o;5561:177::-;5644:86;5664:5;5694:23;;;5719:2;5723:5;5671:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;177:9;193:1;189;:5;177:17;;218:1;213;:6;;205:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;271:1;264:8;;;99:181;;;;:::o;632:250::-;690:7;719:1;714;:6;710:47;;;744:1;737:8;;;;710:47;769:9;785:1;781;:5;769:17;;814:1;809;805;:5;;;;;;:10;797:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;873:1;866:8;;;632:250;;;;;:::o;890:132::-;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;968:46;;890:132;;;;:::o;5746:205::-;5847:96;5867:5;5897:27;;;5926:4;5932:2;5936:5;5874:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5847:19;:96::i;:::-;5746:205;;;;:::o;25080:438::-;25269:4;25293:7;:19;25302:8;25293:19;;;;;;;;;;;;;;;;;;;;;;;;;25287:210;;25361:1;25339:6;:18;25347:8;25339:18;;;;;;;;;;;;;;;;:23;;25330:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25424:12;25402:6;:18;25410:8;25402:18;;;;;;;;;;;;;;;;:34;;25393:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:4;25474:11;;;;25287:210;25505:5;25498:12;;25080:438;;;;;;:::o;25687:277::-;25776:4;25799:6;25808:1;25799:10;;25794:140;25815:5;:12;;;;25811:1;:16;25794:140;;;25868:6;25854:20;;:5;25861:1;25854:10;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;25850:73;;;25903:4;25896:11;;;;;25850:73;25829:3;;;;;;;25794:140;;;;25951:5;25944:12;;25687:277;;;;;:::o;432:192::-;518:7;551:1;546;:6;;554:12;538:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;578:9;594:1;590;:5;578:17;;615:1;608:8;;;432:192;;;;;:::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;6066:27;;;;:69;;;;;:::i;:::-;6040:95;;6170:1;6150:10;:17;:21;6146:224;;;6292:10;6281:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6273:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6146:224;5959:418;;;:::o;1030:189::-;1116:7;1148:1;1144;:5;1151:12;1136:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;1175:17;;1210:1;1203:8;;;1030:189;;;;;:::o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;;1679:196;;;;;:::o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;:11;;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;2288:17;;;;;;2260:433;2362:1;2342:10;:17;:21;2338:344;;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2653:12;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1883:817;;;;;;;:::o;1249:422::-;1309:4;1517:12;1628:7;1616:20;1608:28;;1662:1;1655:4;:8;1648:15;;;1249:422;;;:::o

Swarm Source

ipfs://15ff4556042a9f39281029da8b6820f365edf7ce7172e6ce094ff1a5956d0626

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.