ETH Price: $3,351.88 (-8.36%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConnectOne

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-14
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

interface TokenInterface {
    function approve(address, uint256) external;
    function transfer(address, uint) external;
    function transferFrom(address, address, uint) external;
    function deposit() external payable;
    function withdraw(uint) external;
    function balanceOf(address) external view returns (uint);
    function decimals() external view returns (uint);
}

interface MemoryInterface {
    function getUint(uint id) external returns (uint num);
    function setUint(uint id, uint val) external;
}

interface EventInterface {
    function emitEvent(uint connectorType, uint connectorID, bytes32 eventCode, bytes calldata eventData) external;
}

contract Stores {

  /**
   * @dev Return ethereum address
   */
  function getEthAddr() internal pure returns (address) {
    return 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // ETH Address
  }

  /**
   * @dev Return memory variable address
   */
  function getMemoryAddr() internal pure returns (address) {
    return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address
  }

  /**
   * @dev Return InstaEvent Address.
   */
  function getEventAddr() internal pure returns (address) {
    return 0x2af7ea6Cb911035f3eb1ED895Cb6692C39ecbA97; // InstaEvent Address
  }

  /**
   * @dev Get Uint value from InstaMemory Contract.
   */
  function getUint(uint getId, uint val) internal returns (uint returnVal) {
    returnVal = getId == 0 ? val : MemoryInterface(getMemoryAddr()).getUint(getId);
  }

  /**
  * @dev Set Uint value in InstaMemory Contract.
  */
  function setUint(uint setId, uint val) virtual internal {
    if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);
  }

  /**
  * @dev emit event on event contract
  */
  function emitEvent(bytes32 eventCode, bytes memory eventData) virtual internal {
    (uint model, uint id) = connectorID();
    EventInterface(getEventAddr()).emitEvent(model, id, eventCode, eventData);
  }

  /**
  * @dev Connector Details.
  */
  function connectorID() public view returns(uint model, uint id) {
    (model, id) = (1, 38);
  }

}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract DSMath {
  uint constant WAD = 10 ** 18;
  uint constant RAY = 10 ** 27;

  function add(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(x, y);
  }

  function sub(uint x, uint y) internal virtual pure returns (uint z) {
    z = SafeMath.sub(x, y);
  }

  function mul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.mul(x, y);
  }

  function div(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.div(x, y);
  }

  function wmul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, y), WAD / 2) / WAD;
  }

  function wdiv(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, WAD), y / 2) / y;
  }

  function rdiv(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, RAY), y / 2) / y;
  }

  function rmul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, y), RAY / 2) / RAY;
  }

}

interface OneInchInterace {
    function swap(
        TokenInterface fromToken,
        TokenInterface toToken,
        uint256 fromTokenAmount,
        uint256 minReturnAmount,
        uint256 guaranteedAmount,
        address payable referrer,
        address[] calldata callAddresses,
        bytes calldata callDataConcat,
        uint256[] calldata starts,
        uint256[] calldata gasLimitsAndValues
    )
    external
    payable
    returns (uint256 returnAmount);
}

interface OneProtoInterface {
    function swap(
        TokenInterface fromToken,
        TokenInterface destToken,
        uint256 amount,
        uint256 minReturn,
        uint256[] calldata distribution,
        uint256 flags // See contants in IOneSplit.sol
    ) external payable returns(uint256);

    function swapMulti(
        TokenInterface[] calldata tokens,
        uint256 amount,
        uint256 minReturn,
        uint256[] calldata distribution,
        uint256[] calldata flags
    ) external payable returns(uint256 returnAmount);

    function getExpectedReturn(
        TokenInterface fromToken,
        TokenInterface destToken,
        uint256 amount,
        uint256 parts,
        uint256 flags // See constants in IOneSplit.sol
    )
    external
    view
    returns(
        uint256 returnAmount,
        uint256[] memory distribution
    );
}

interface OneProtoMappingInterface {
    function oneProtoAddress() external view returns(address);
}


contract OneHelpers is Stores, DSMath {

    /**
     * @dev Return 1proto mapping Address
     */
    function getOneProtoMappingAddress() internal pure returns (address payable) {
        return 0x8d0287AFa7755BB5f2eFe686AA8d4F0A7BC4AE7F;
    }

    /**
     * @dev Return 1proto Address
     */
    function getOneProtoAddress() internal view returns (address payable) {
        return payable(OneProtoMappingInterface(getOneProtoMappingAddress()).oneProtoAddress());
    }

    /**
     * @dev Return  1Inch Address
     */
    function getOneInchAddress() internal pure returns (address) {
        return 0x11111254369792b2Ca5d084aB5eEA397cA8fa48B;
    }

    /**
     * @dev Return 1inch Token Taker Address
     */
    function getOneInchTokenTaker() internal pure returns (address payable) {
        return 0xE4C9194962532fEB467DCe8b3d42419641c6eD2E;
    }

    /**
     * @dev Return 1inch swap function sig
     */
    function getOneInchSig() internal pure returns (bytes4) {
        return 0xf88309d7;
    }

    function convert18ToDec(uint _dec, uint256 _amt) internal pure returns (uint256 amt) {
        amt = (_amt / 10 ** (18 - _dec));
    }

    function convertTo18(uint _dec, uint256 _amt) internal pure returns (uint256 amt) {
        amt = mul(_amt, 10 ** (18 - _dec));
    }

    function getTokenBal(TokenInterface token) internal view returns(uint _amt) {
        _amt = address(token) == getEthAddr() ? address(this).balance : token.balanceOf(address(this));
    }

    function getTokensDec(TokenInterface buyAddr, TokenInterface sellAddr) internal view returns(uint buyDec, uint sellDec) {
        buyDec = address(buyAddr) == getEthAddr() ?  18 : buyAddr.decimals();
        sellDec = address(sellAddr) == getEthAddr() ?  18 : sellAddr.decimals();
    }

    function getSlippageAmt(
        TokenInterface _buyAddr,
        TokenInterface _sellAddr,
        uint _sellAmt,
        uint unitAmt
    ) internal view returns(uint _slippageAmt) {
        (uint _buyDec, uint _sellDec) = getTokensDec(_buyAddr, _sellAddr);
        uint _sellAmt18 = convertTo18(_sellDec, _sellAmt);
        _slippageAmt = convert18ToDec(_buyDec, wmul(unitAmt, _sellAmt18));
    }

    function convertToTokenInterface(address[] memory tokens) internal pure returns(TokenInterface[] memory) {
        TokenInterface[] memory _tokens = new TokenInterface[](tokens.length);
        for (uint i = 0; i < tokens.length; i++) {
            _tokens[i] = TokenInterface(tokens[i]);
        }
        return _tokens;
    }
}


contract OneProtoResolver is OneHelpers {
    struct OneProtoData {
        TokenInterface sellToken;
        TokenInterface buyToken;
        uint _sellAmt;
        uint _buyAmt;
        uint unitAmt;
        uint[] distribution;
        uint disableDexes;
    }

    function oneProtoSwap(
        OneProtoInterface oneProtoContract,
        OneProtoData memory oneProtoData
    ) internal returns (uint buyAmt) {
        TokenInterface _sellAddr = oneProtoData.sellToken;
        TokenInterface _buyAddr = oneProtoData.buyToken;
        uint _sellAmt = oneProtoData._sellAmt;

        uint _slippageAmt = getSlippageAmt(_buyAddr, _sellAddr, _sellAmt, oneProtoData.unitAmt);

        uint ethAmt;
        if (address(_sellAddr) == getEthAddr()) {
            ethAmt = _sellAmt;
        } else {
            _sellAddr.approve(address(oneProtoContract), _sellAmt);
        }


        uint initalBal = getTokenBal(_buyAddr);
        oneProtoContract.swap.value(ethAmt)(
            _sellAddr,
            _buyAddr,
            _sellAmt,
            _slippageAmt,
            oneProtoData.distribution,
            oneProtoData.disableDexes
        );
        uint finalBal = getTokenBal(_buyAddr);

        buyAmt = sub(finalBal, initalBal);

        require(_slippageAmt <= buyAmt, "Too much slippage");
    }

    struct OneProtoMultiData {
        address[] tokens;
        TokenInterface sellToken;
        TokenInterface buyToken;
        uint _sellAmt;
        uint _buyAmt;
        uint unitAmt;
        uint[] distribution;
        uint[] disableDexes;
    }

    function oneProtoSwapMulti(OneProtoMultiData memory oneProtoData) internal returns (uint buyAmt) {
        TokenInterface _sellAddr = oneProtoData.sellToken;
        TokenInterface _buyAddr = oneProtoData.buyToken;
        uint _sellAmt = oneProtoData._sellAmt;
        uint _slippageAmt = getSlippageAmt(_buyAddr, _sellAddr, _sellAmt, oneProtoData.unitAmt);

        OneProtoInterface oneSplitContract = OneProtoInterface(getOneProtoAddress());
        uint ethAmt;
        if (address(_sellAddr) == getEthAddr()) {
            ethAmt = _sellAmt;
        } else {
            _sellAddr.approve(address(oneSplitContract), _sellAmt);
        }

        uint initalBal = getTokenBal(_buyAddr);
        oneSplitContract.swapMulti.value(ethAmt)(
            convertToTokenInterface(oneProtoData.tokens),
            _sellAmt,
            _slippageAmt,
            oneProtoData.distribution,
            oneProtoData.disableDexes
        );
        uint finalBal = getTokenBal(_buyAddr);

        buyAmt = sub(finalBal, initalBal);

        require(_slippageAmt <= buyAmt, "Too much slippage");
    }
}

contract OneInchResolver is OneProtoResolver {
    function checkOneInchSig(bytes memory callData) internal pure returns(bool isOk) {
        bytes memory _data = callData;
        bytes4 sig;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            sig := mload(add(_data, 32))
        }
        isOk = sig == getOneInchSig();
    }

    struct OneInchData {
        TokenInterface sellToken;
        TokenInterface buyToken;
        uint _sellAmt;
        uint _buyAmt;
        uint unitAmt;
        bytes callData;
    }

    function oneInchSwap(
        OneInchData memory oneInchData,
        uint ethAmt
    ) internal returns (uint buyAmt) {
        TokenInterface buyToken = oneInchData.buyToken;
        (uint _buyDec, uint _sellDec) = getTokensDec(buyToken, oneInchData.sellToken);
        uint _sellAmt18 = convertTo18(_sellDec, oneInchData._sellAmt);
        uint _slippageAmt = convert18ToDec(_buyDec, wmul(oneInchData.unitAmt, _sellAmt18));

        uint initalBal = getTokenBal(buyToken);

        // solium-disable-next-line security/no-call-value
        (bool success, ) = address(getOneInchAddress()).call.value(ethAmt)(oneInchData.callData);
        if (!success) revert("1Inch-swap-failed");

        uint finalBal = getTokenBal(buyToken);

        buyAmt = sub(finalBal, initalBal);

        require(_slippageAmt <= buyAmt, "Too much slippage");
    }

}

contract OneProtoEventResolver is OneInchResolver {
    event LogSell(
        address indexed buyToken,
        address indexed sellToken,
        uint256 buyAmt,
        uint256 sellAmt,
        uint256 getId,
        uint256 setId
    );

    function emitLogSell(
        OneProtoData memory oneProtoData,
        uint256 getId,
        uint256 setId
    ) internal {
        bytes32 _eventCode;
        bytes memory _eventParam;
        emit LogSell(
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        _eventCode = keccak256("LogSell(address,address,uint256,uint256,uint256,uint256)");
        _eventParam = abi.encode(
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        emitEvent(_eventCode, _eventParam);
    }

    event LogSellTwo(
        address indexed buyToken,
        address indexed sellToken,
        uint256 buyAmt,
        uint256 sellAmt,
        uint256 getId,
        uint256 setId
    );

    function emitLogSellTwo(
        OneProtoData memory oneProtoData,
        uint256 getId,
        uint256 setId
    ) internal {
        bytes32 _eventCode;
        bytes memory _eventParam;
        emit LogSellTwo(
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        _eventCode = keccak256("LogSellTwo(address,address,uint256,uint256,uint256,uint256)");
        _eventParam = abi.encode(
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        emitEvent(_eventCode, _eventParam);
    }

    event LogSellMulti(
        address[] tokens,
        address indexed buyToken,
        address indexed sellToken,
        uint256 buyAmt,
        uint256 sellAmt,
        uint256 getId,
        uint256 setId
    );

    function emitLogSellMulti(
        OneProtoMultiData memory oneProtoData,
        uint256 getId,
        uint256 setId
    ) internal {
        bytes32 _eventCode;
        bytes memory _eventParam;
        emit LogSellMulti(
            oneProtoData.tokens,
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        _eventCode = keccak256("LogSellMulti(address[],address,address,uint256,uint256,uint256,uint256)");
        _eventParam = abi.encode(
            oneProtoData.tokens,
            address(oneProtoData.buyToken),
            address(oneProtoData.sellToken),
            oneProtoData._buyAmt,
            oneProtoData._sellAmt,
            getId,
            setId
        );
        emitEvent(_eventCode, _eventParam);
    }
}

contract OneInchEventResolver is OneProtoEventResolver {
    event LogSellThree(
        address indexed buyToken,
        address indexed sellToken,
        uint256 buyAmt,
        uint256 sellAmt,
        uint256 getId,
        uint256 setId
    );

    function emitLogSellThree(
        OneInchData memory oneInchData,
        uint256 setId
    ) internal {
        bytes32 _eventCode;
        bytes memory _eventParam;
        emit LogSellThree(
            address(oneInchData.buyToken),
            address(oneInchData.sellToken),
            oneInchData._buyAmt,
            oneInchData._sellAmt,
            0,
            setId
        );
        _eventCode = keccak256("LogSellThree(address,address,uint256,uint256,uint256,uint256)");
        _eventParam = abi.encode(
            address(oneInchData.buyToken),
            address(oneInchData.sellToken),
            oneInchData._buyAmt,
            oneInchData._sellAmt,
            0,
            setId
        );
        emitEvent(_eventCode, _eventParam);
    }
}

contract OneProtoResolverHelpers is OneInchEventResolver {
    function _sell(
        OneProtoData memory oneProtoData,
        uint256 getId,
        uint256 setId
    ) internal {
        uint _sellAmt = getUint(getId, oneProtoData._sellAmt);

        oneProtoData._sellAmt = _sellAmt == uint(-1) ?
            getTokenBal(oneProtoData.sellToken) :
            _sellAmt;

        OneProtoInterface oneProtoContract = OneProtoInterface(getOneProtoAddress());

        (, oneProtoData.distribution) = oneProtoContract.getExpectedReturn(
                oneProtoData.sellToken,
                oneProtoData.buyToken,
                oneProtoData._sellAmt,
                5,
                0
            );

        oneProtoData._buyAmt = oneProtoSwap(
            oneProtoContract,
            oneProtoData
        );

        setUint(setId, oneProtoData._buyAmt);

        emitLogSell(oneProtoData, getId, setId);
    }

    function _sellTwo(
        OneProtoData memory oneProtoData,
        uint getId,
        uint setId
    ) internal {
        uint _sellAmt = getUint(getId, oneProtoData._sellAmt);

        oneProtoData._sellAmt = _sellAmt == uint(-1) ?
            getTokenBal(oneProtoData.sellToken) :
            _sellAmt;

        oneProtoData._buyAmt = oneProtoSwap(
            OneProtoInterface(getOneProtoAddress()),
            oneProtoData
        );

        setUint(setId, oneProtoData._buyAmt);
        emitLogSellTwo(oneProtoData, getId, setId);
    }

    function _sellMulti(
        OneProtoMultiData memory oneProtoData,
        uint getId,
        uint setId
    ) internal {
        uint _sellAmt = getUint(getId, oneProtoData._sellAmt);

        oneProtoData._sellAmt = _sellAmt == uint(-1) ?
            getTokenBal(oneProtoData.sellToken) :
            _sellAmt;

        oneProtoData._buyAmt = oneProtoSwapMulti(oneProtoData);
        setUint(setId, oneProtoData._buyAmt);

        emitLogSellMulti(oneProtoData, getId, setId);
    }
}

contract OneInchResolverHelpers is OneProtoResolverHelpers {
    function _sellThree(
        OneInchData memory oneInchData,
        uint setId
    ) internal {
        TokenInterface _sellAddr = oneInchData.sellToken;

        uint ethAmt;
        if (address(_sellAddr) == getEthAddr()) {
            ethAmt = oneInchData._sellAmt;
        } else {
            TokenInterface(_sellAddr).approve(getOneInchTokenTaker(), oneInchData._sellAmt);
        }

        require(checkOneInchSig(oneInchData.callData), "Not-swap-function");

        oneInchData._buyAmt = oneInchSwap(oneInchData, ethAmt);
        setUint(setId, oneInchData._buyAmt);

        emitLogSellThree(oneInchData, setId);
    }
}

contract OneProto is OneInchResolverHelpers {
    /**
     * @dev Sell ETH/ERC20_Token using 1proto.
     * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAddr selling token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAmt selling token amount.
     * @param unitAmt unit amount of buyAmt/sellAmt with slippage.
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function sell(
        address buyAddr,
        address sellAddr,
        uint sellAmt,
        uint unitAmt,
        uint getId,
        uint setId
    ) external payable {
        OneProtoData memory oneProtoData = OneProtoData({
            buyToken: TokenInterface(buyAddr),
            sellToken: TokenInterface(sellAddr),
            _sellAmt: sellAmt,
            unitAmt: unitAmt,
            distribution: new uint[](0),
            _buyAmt: 0,
            disableDexes: 0
        });

        _sell(oneProtoData, getId, setId);
    }

    /**
     * @dev Sell ETH/ERC20_Token using 1proto using off-chain calculation.
     * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAddr selling token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAmt selling token amount.
     * @param unitAmt unit amount of buyAmt/sellAmt with slippage.
     * @param distribution distribution of swap across different dex.
     * @param disableDexes disable a dex. (To disable none: 0)
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function sellTwo(
        address buyAddr,
        address sellAddr,
        uint sellAmt,
        uint unitAmt,
        uint[] calldata distribution,
        uint disableDexes,
        uint getId,
        uint setId
    ) external payable {
        OneProtoData memory oneProtoData = OneProtoData({
            buyToken: TokenInterface(buyAddr),
            sellToken: TokenInterface(sellAddr),
            _sellAmt: sellAmt,
            unitAmt: unitAmt,
            distribution: distribution,
            disableDexes: disableDexes,
            _buyAmt: 0
        });

        _sellTwo(oneProtoData, getId, setId);
    }

    /**
     * @dev Sell ETH/ERC20_Token using 1proto using muliple token.
     * @param tokens array of tokens.
     * @param sellAmt selling token amount.
     * @param unitAmt unit amount of buyAmt/sellAmt with slippage.
     * @param distribution distribution of swap across different dex.
     * @param disableDexes disable a dex. (To disable none: 0)
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function sellMulti(
        address[] calldata tokens,
        uint sellAmt,
        uint unitAmt,
        uint[] calldata distribution,
        uint[] calldata disableDexes,
        uint getId,
        uint setId
    ) external payable {
        OneProtoMultiData memory oneProtoData = OneProtoMultiData({
            tokens: tokens,
            buyToken: TokenInterface(address(tokens[tokens.length - 1])),
            sellToken: TokenInterface(address(tokens[0])),
            unitAmt: unitAmt,
            distribution: distribution,
            disableDexes: disableDexes,
            _sellAmt: sellAmt,
            _buyAmt: 0
        });

        _sellMulti(oneProtoData, getId, setId);
    }
}

contract OneInch is OneProto {
    /**
     * @dev Sell ETH/ERC20_Token using 1inch.
     * @param buyAddr buying token address.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAddr selling token amount.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param sellAmt selling token amount.
     * @param unitAmt unit amount of buyAmt/sellAmt with slippage.
     * @param callData Data from 1inch API.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function sellThree(
        address buyAddr,
        address sellAddr,
        uint sellAmt,
        uint unitAmt,
        bytes calldata callData,
        uint setId
    ) external payable {
        OneInchData memory oneInchData = OneInchData({
            buyToken: TokenInterface(buyAddr),
            sellToken: TokenInterface(sellAddr),
            unitAmt: unitAmt,
            callData: callData,
            _sellAmt: sellAmt,
            _buyAmt: 0
        });

        _sellThree(oneInchData, setId);
    }
}

contract ConnectOne is OneInch {
    string public name = "1inch-1proto-v1";
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"},{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogSellMulti","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogSellThree","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogSellTwo","type":"event"},{"inputs":[],"name":"connectorID","outputs":[{"internalType":"uint256","name":"model","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyAddr","type":"address"},{"internalType":"address","name":"sellAddr","type":"address"},{"internalType":"uint256","name":"sellAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"sellAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"uint256[]","name":"distribution","type":"uint256[]"},{"internalType":"uint256[]","name":"disableDexes","type":"uint256[]"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"sellMulti","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"buyAddr","type":"address"},{"internalType":"address","name":"sellAddr","type":"address"},{"internalType":"uint256","name":"sellAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"sellThree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"buyAddr","type":"address"},{"internalType":"address","name":"sellAddr","type":"address"},{"internalType":"uint256","name":"sellAmt","type":"uint256"},{"internalType":"uint256","name":"unitAmt","type":"uint256"},{"internalType":"uint256[]","name":"distribution","type":"uint256[]"},{"internalType":"uint256","name":"disableDexes","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"sellTwo","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600f81526020017f31696e63682d3170726f746f2d76310000000000000000000000000000000000815250600090805190602001906200005192919062000066565b503480156200005f57600080fd5b5062000115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000a957805160ff1916838001178555620000da565b82800160010185558215620000da579182015b82811115620000d9578251825591602001919060010190620000bc565b5b509050620000e99190620000ed565b5090565b6200011291905b808211156200010e576000816000905550600101620000f4565b5090565b90565b61302e80620001256000396000f3fe6080604052600436106100555760003560e01c806306fdde031461005a57806345c9acfe1461008557806356c45b1f146100a157806390ab67e1146100bd578063dc5bb7cd146100d9578063eb15f781146100f5575b600080fd5b34801561006657600080fd5b5061006f610121565b60405161007c9190612b52565b60405180910390f35b61009f600480360361009a9190810190611fc5565b6101bf565b005b6100bb60048036036100b69190810190611f1e565b61026e565b005b6100d760048036036100d2919081019061204e565b61032a565b005b6100f360048036036100ee9190810190611e50565b6104bd565b005b34801561010157600080fd5b5061010a61057f565b604051610118929190612c51565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101b75780601f1061018c576101008083540402835291602001916101b7565b820191906000526020600020905b81548152906001019060200180831161019a57829003601f168201915b505050505081565b6101c7611b0d565b6040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160008152602001858152602001600060405190808252806020026020018201604052801561024d5781602001602082028038833980820191505090505b50815260200160008152509050610265818484610598565b50505050505050565b610276611b76565b6040518060c001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018781526020016000815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250905061032081836106de565b5050505050505050565b610332611bd8565b6040518061010001604052808c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018c8c600081811061039257fe5b90506020020160206103a79190810190611dfe565b73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c60018f8f9050038181106103d457fe5b90506020020160206103e99190810190611dfe565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200160008152602001898152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081525090506104b0818484610826565b5050505050505050505050565b6104c5611b0d565b6040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200160008152602001888152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018581525090506105738184846108ad565b50505050505050505050565b6000806001602681915080905080925081935050509091565b60006105a883856040015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105d757806105e5565b6105e484600001516109e6565b5b84604001818152505060006105f8610ab9565b90508073ffffffffffffffffffffffffffffffffffffffff1663085e2c5b866000015187602001518860400151600560006040518663ffffffff1660e01b8152600401610649959493929190612a97565b60006040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061069e919081019061216a565b90508090508560a001819052506106b58186610b45565b8560600181815250506106cc838660600151610d3d565b6106d7858585610dbe565b5050505050565b60008260000151905060006106f1610ea0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561073057836040015190506107a9565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3610754610ebc565b86604001516040518363ffffffff1660e01b815260040161077692919061284b565b600060405180830381600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050505b6107b68460a00151610ed8565b6107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c16565b60405180910390fd5b6107ff8482610f39565b846060018181525050610816838560600151610d3d565b61082084846110b5565b50505050565b600061083683856060015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108655780610873565b61087284602001516109e6565b5b84606001818152505061088584611198565b84608001818152505061089c828560800151610d3d565b6108a78484846113a6565b50505050565b60006108bd83856040015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108ec57806108fa565b6108f984600001516109e6565b5b84604001818152505061091461090e610ab9565b85610b45565b84606001818152505061092b828560600151610d3d565b610936848484611494565b50505050565b60008083146109dc5761094d611576565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b81526004016109859190612c36565b602060405180830381600087803b15801561099f57600080fd5b505af11580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d79190810190612141565b6109de565b815b905092915050565b60006109f0610ea0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610ab0578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5b9190612830565b60206040518083038186803b158015610a7357600080fd5b505afa158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aab9190810190612141565b610ab2565b475b9050919050565b6000610ac3611592565b73ffffffffffffffffffffffffffffffffffffffff1663f147f88b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b409190810190611e27565b905090565b600080826000015190506000836020015190506000846040015190506000610b7383858489608001516115ae565b90506000610b7f610ea0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610bba57829050610c28565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b389856040518363ffffffff1660e01b8152600401610bf5929190612936565b600060405180830381600087803b158015610c0f57600080fd5b505af1158015610c23573d6000803e3d6000fd5b505050505b6000610c33856109e6565b90508873ffffffffffffffffffffffffffffffffffffffff1663e2a7515e83888888888e60a001518f60c001516040518863ffffffff1660e01b8152600401610c8196959493929190612aea565b6020604051808303818588803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250610cd39190810190612141565b506000610cdf866109e6565b9050610ceb81836115ef565b975087841115610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612bd6565b60405180910390fd5b5050505050505092915050565b60008214610dba57610d4d611576565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b8152600401610d87929190612c51565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b505050505b5050565b60006060846000015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff167f1cfcd3047f831e194b89f1ca8957ba1aa919764f692e915eef67b5e7a3e71acb876060015188604001518888604051610e359493929190612d0b565b60405180910390a3604051610e49906127dc565b6040518091039020915084602001518560000151866060015187604001518787604051602001610e7e969594939291906128d5565b6040516020818303038152906040529050610e998282611603565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073e4c9194962532feb467dce8b3d42419641c6ed2e905090565b60006060829050600060208201519050610ef0611690565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050919050565b60008083602001519050600080610f5483876000015161169f565b915091506000610f6882886040015161182d565b90506000610f8384610f7e8a6080015185611847565b611887565b90506000610f90866109e6565b90506000610f9c6118a1565b73ffffffffffffffffffffffffffffffffffffffff16898b60a00151604051610fc591906127c5565b60006040518083038185875af1925050503d8060008114611002576040519150601f19603f3d011682016040523d82523d6000602084013e611007565b606091505b505090508061104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290612bf6565b60405180910390fd5b6000611056886109e6565b905061106281846115ef565b9850888411156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612bd6565b60405180910390fd5b505050505050505092915050565b60006060836000015173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff167f2ba4d29030af9ce41a7c2a91414527227c7f829ce555a29d2fb87122fd4cc2818660600151876040015160008860405161112d9493929190612cc6565b60405180910390a360405161114190612806565b60405180910390209150836020015184600001518560600151866040015160008760405160200161117796959493929190612874565b60405160208183030381529060405290506111928282611603565b50505050565b6000808260200151905060008360400151905060008460600151905060006111c68385848960a001516115ae565b905060006111d2610ab9565b905060006111de610ea0565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561121957839050611287565b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b383866040518363ffffffff1660e01b8152600401611254929190612936565b600060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050505b6000611292866109e6565b90508273ffffffffffffffffffffffffffffffffffffffff1663c7851396836112be8c600001516118bd565b88888e60c001518f60e001516040518763ffffffff1660e01b81526004016112ea959493929190612a2f565b6020604051808303818588803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525061133c9190810190612141565b506000611348876109e6565b905061135481836115ef565b985088851115611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090612bd6565b60405180910390fd5b5050505050505050919050565b60006060846020015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f240cab0e7aa417dbc708acd992f8ddbe09616063b926f4c45d0cca4621341fff87600001518860800151896060015189896040516114239594939291906129d5565b60405180910390a3604051611437906127f1565b60405180910390209150846000015185604001518660200151876080015188606001518888604051602001611472979695949392919061295f565b604051602081830303815290604052905061148d8282611603565b5050505050565b60006060846000015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff167f8d9bc2a1bde35a10f10d4953a131a84701a1e89707f3a6f359e6a850b5da33fe87606001518860400151888860405161150b9493929190612d0b565b60405180910390a360405161151f9061281b565b6040518091039020915084602001518560000151866060015187604001518787604051602001611554969594939291906128d5565b604051602081830303815290604052905061156f8282611603565b5050505050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b6000738d0287afa7755bb5f2efe686aa8d4f0a7bc4ae7f905090565b60008060006115bd878761169f565b9150915060006115cd828761182d565b90506115e2836115dd8784611847565b611887565b9350505050949350505050565b60006115fb8383611973565b905092915050565b60008061160e61057f565b9150915061161a6119bd565b73ffffffffffffffffffffffffffffffffffffffff1663e14d4fb1838387876040518563ffffffff1660e01b81526004016116589493929190612c7a565b600060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b5050505050505050565b600063f88309d760e01b905090565b6000806116aa610ea0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461175f578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561172257600080fd5b505afa158015611736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061175a9190810190612141565b611762565b60125b915061176c610ea0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611821578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061181c9190810190612141565b611824565b60125b90509250929050565b600061183f8284601203600a0a6119d9565b905092915050565b6000670de0b6b3a764000061187761185f85856119ed565b6002670de0b6b3a76400008161187157fe5b04611a5d565b8161187e57fe5b04905092915050565b600082601203600a0a828161189857fe5b04905092915050565b60007311111254369792b2ca5d084ab5eea397ca8fa48b905090565b60608082516040519080825280602002602001820160405280156118f05781602001602082028038833980820191505090505b50905060008090505b83518110156119695783818151811061190e57fe5b602002602001015182828151811061192257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506118f9565b5080915050919050565b60006119b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ab2565b905092915050565b6000732af7ea6cb911035f3eb1ed895cb6692c39ecba97905090565b60006119e583836119ed565b905092915050565b600080831415611a005760009050611a57565b6000828402905082848281611a1157fe5b0414611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990612bb6565b60405180910390fd5b809150505b92915050565b600080828401905083811015611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90612b96565b60405180910390fd5b8091505092915050565b6000838311158290611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af19190612b74565b60405180910390fd5b5060008385039050809150509392505050565b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160608152602001600081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001606081525090565b60405180610100016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160608152602001606081525090565b600081359050611c5881612fca565b92915050565b600081519050611c6d81612fca565b92915050565b60008083601f840112611c8557600080fd5b8235905067ffffffffffffffff811115611c9e57600080fd5b602083019150836020820283011115611cb657600080fd5b9250929050565b60008083601f840112611ccf57600080fd5b8235905067ffffffffffffffff811115611ce857600080fd5b602083019150836020820283011115611d0057600080fd5b9250929050565b600082601f830112611d1857600080fd5b8151611d2b611d2682612d7d565b612d50565b91508181835260208401935060208101905083856020840282011115611d5057600080fd5b60005b83811015611d805781611d668882611de9565b845260208401935060208301925050600181019050611d53565b5050505092915050565b60008083601f840112611d9c57600080fd5b8235905067ffffffffffffffff811115611db557600080fd5b602083019150836001820283011115611dcd57600080fd5b9250929050565b600081359050611de381612fe1565b92915050565b600081519050611df881612fe1565b92915050565b600060208284031215611e1057600080fd5b6000611e1e84828501611c49565b91505092915050565b600060208284031215611e3957600080fd5b6000611e4784828501611c5e565b91505092915050565b60008060008060008060008060006101008a8c031215611e6f57600080fd5b6000611e7d8c828d01611c49565b9950506020611e8e8c828d01611c49565b9850506040611e9f8c828d01611dd4565b9750506060611eb08c828d01611dd4565b96505060808a013567ffffffffffffffff811115611ecd57600080fd5b611ed98c828d01611cbd565b955095505060a0611eec8c828d01611dd4565b93505060c0611efd8c828d01611dd4565b92505060e0611f0e8c828d01611dd4565b9150509295985092959850929598565b600080600080600080600060c0888a031215611f3957600080fd5b6000611f478a828b01611c49565b9750506020611f588a828b01611c49565b9650506040611f698a828b01611dd4565b9550506060611f7a8a828b01611dd4565b945050608088013567ffffffffffffffff811115611f9757600080fd5b611fa38a828b01611d8a565b935093505060a0611fb68a828b01611dd4565b91505092959891949750929550565b60008060008060008060c08789031215611fde57600080fd5b6000611fec89828a01611c49565b9650506020611ffd89828a01611c49565b955050604061200e89828a01611dd4565b945050606061201f89828a01611dd4565b935050608061203089828a01611dd4565b92505060a061204189828a01611dd4565b9150509295509295509295565b60008060008060008060008060008060e08b8d03121561206d57600080fd5b60008b013567ffffffffffffffff81111561208757600080fd5b6120938d828e01611c73565b9a509a505060206120a68d828e01611dd4565b98505060406120b78d828e01611dd4565b97505060608b013567ffffffffffffffff8111156120d457600080fd5b6120e08d828e01611cbd565b965096505060808b013567ffffffffffffffff8111156120ff57600080fd5b61210b8d828e01611cbd565b945094505060a061211e8d828e01611dd4565b92505060c061212f8d828e01611dd4565b9150509295989b9194979a5092959850565b60006020828403121561215357600080fd5b600061216184828501611de9565b91505092915050565b6000806040838503121561217d57600080fd5b600061218b85828601611de9565b925050602083015167ffffffffffffffff8111156121a857600080fd5b6121b485828601611d07565b9150509250929050565b60006121ca8383612215565b60208301905092915050565b60006121e283836123c6565b60208301905092915050565b60006121fa83836127a7565b60208301905092915050565b61220f81612ef6565b82525050565b61221e81612ea3565b82525050565b61222d81612ea3565b82525050565b600061223e82612dd5565b6122488185612e49565b935061225383612da5565b8060005b8381101561228457815161226b88826121be565b975061227683612e22565b925050600181019050612257565b5085935050505092915050565b600061229c82612de0565b6122a68185612e49565b93506122b183612db5565b8060005b838110156122e25781516122c988826121d6565b97506122d483612e2f565b9250506001810190506122b5565b5085935050505092915050565b60006122fa82612deb565b6123048185612e5a565b935061230f83612dc5565b8060005b8381101561234057815161232788826121ee565b975061233283612e3c565b925050600181019050612313565b5085935050505092915050565b61235681612eb5565b82525050565b600061236782612e01565b6123718185612e6b565b9350612381818560208601612f86565b61238a81612fb9565b840191505092915050565b60006123a082612df6565b6123aa8185612e7c565b93506123ba818560208601612f86565b80840191505092915050565b6123cf81612f08565b82525050565b6123de81612f08565b82525050565b6123ed81612f2c565b82525050565b6123fc81612f3e565b82525050565b61240b81612f50565b82525050565b600061241c82612e17565b6124268185612e87565b9350612436818560208601612f86565b61243f81612fb9565b840191505092915050565b600061245582612e0c565b61245f8185612e87565b935061246f818560208601612f86565b61247881612fb9565b840191505092915050565b6000612490603883612e98565b91507f4c6f6753656c6c28616464726573732c616464726573732c75696e743235362c60008301527f75696e743235362c75696e743235362c75696e743235362900000000000000006020830152603882019050919050565b60006124f6604783612e98565b91507f4c6f6753656c6c4d756c746928616464726573735b5d2c616464726573732c6160008301527f6464726573732c75696e743235362c75696e743235362c75696e743235362c7560208301527f696e7432353629000000000000000000000000000000000000000000000000006040830152604782019050919050565b6000612582603d83612e98565b91507f4c6f6753656c6c546872656528616464726573732c616464726573732c75696e60008301527f743235362c75696e743235362c75696e743235362c75696e74323536290000006020830152603d82019050919050565b60006125e8601b83612e87565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612628603b83612e98565b91507f4c6f6753656c6c54776f28616464726573732c616464726573732c75696e743260008301527f35362c75696e743235362c75696e743235362c75696e743235362900000000006020830152603b82019050919050565b600061268e602183612e87565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126f4601183612e87565b91507f546f6f206d75636820736c6970706167650000000000000000000000000000006000830152602082019050919050565b6000612734601183612e87565b91507f31496e63682d737761702d6661696c65640000000000000000000000000000006000830152602082019050919050565b6000612774601183612e87565b91507f4e6f742d737761702d66756e6374696f6e0000000000000000000000000000006000830152602082019050919050565b6127b081612edf565b82525050565b6127bf81612edf565b82525050565b60006127d18284612395565b915081905092915050565b60006127e782612483565b9150819050919050565b60006127fc826124e9565b9150819050919050565b600061281182612575565b9150819050919050565b60006128268261261b565b9150819050919050565b60006020820190506128456000830184612224565b92915050565b60006040820190506128606000830185612206565b61286d60208301846127b6565b9392505050565b600060c0820190506128896000830189612224565b6128966020830188612224565b6128a360408301876127b6565b6128b060608301866127b6565b6128bd60808301856123f3565b6128ca60a08301846127b6565b979650505050505050565b600060c0820190506128ea6000830189612224565b6128f76020830188612224565b61290460408301876127b6565b61291160608301866127b6565b61291e60808301856127b6565b61292b60a08301846127b6565b979650505050505050565b600060408201905061294b6000830185612224565b61295860208301846127b6565b9392505050565b600060e0820190508181036000830152612979818a612233565b90506129886020830189612224565b6129956040830188612224565b6129a260608301876127b6565b6129af60808301866127b6565b6129bc60a08301856127b6565b6129c960c08301846127b6565b98975050505050505050565b600060a08201905081810360008301526129ef8188612233565b90506129fe60208301876127b6565b612a0b60408301866127b6565b612a1860608301856127b6565b612a2560808301846127b6565b9695505050505050565b600060a0820190508181036000830152612a498188612291565b9050612a5860208301876127b6565b612a6560408301866127b6565b8181036060830152612a7781856122ef565b90508181036080830152612a8b81846122ef565b90509695505050505050565b600060a082019050612aac60008301886123d5565b612ab960208301876123d5565b612ac660408301866127b6565b612ad36060830185612402565b612ae060808301846123e4565b9695505050505050565b600060c082019050612aff60008301896123d5565b612b0c60208301886123d5565b612b1960408301876127b6565b612b2660608301866127b6565b8181036080830152612b3881856122ef565b9050612b4760a08301846127b6565b979650505050505050565b60006020820190508181036000830152612b6c818461244a565b905092915050565b60006020820190508181036000830152612b8e8184612411565b905092915050565b60006020820190508181036000830152612baf816125db565b9050919050565b60006020820190508181036000830152612bcf81612681565b9050919050565b60006020820190508181036000830152612bef816126e7565b9050919050565b60006020820190508181036000830152612c0f81612727565b9050919050565b60006020820190508181036000830152612c2f81612767565b9050919050565b6000602082019050612c4b60008301846127b6565b92915050565b6000604082019050612c6660008301856127b6565b612c7360208301846127b6565b9392505050565b6000608082019050612c8f60008301876127b6565b612c9c60208301866127b6565b612ca9604083018561234d565b8181036060830152612cbb818461235c565b905095945050505050565b6000608082019050612cdb60008301876127b6565b612ce860208301866127b6565b612cf560408301856123e4565b612d0260608301846127b6565b95945050505050565b6000608082019050612d2060008301876127b6565b612d2d60208301866127b6565b612d3a60408301856127b6565b612d4760608301846127b6565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715612d7357600080fd5b8060405250919050565b600067ffffffffffffffff821115612d9457600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612eae82612ebf565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f0182612f62565b9050919050565b6000612f1382612f1a565b9050919050565b6000612f2582612ebf565b9050919050565b6000612f3782612edf565b9050919050565b6000612f4982612ee9565b9050919050565b6000612f5b82612edf565b9050919050565b6000612f6d82612f74565b9050919050565b6000612f7f82612ebf565b9050919050565b60005b83811015612fa4578082015181840152602081019050612f89565b83811115612fb3576000848401525b50505050565b6000601f19601f8301169050919050565b612fd381612ea3565b8114612fde57600080fd5b50565b612fea81612edf565b8114612ff557600080fd5b5056fea2646970667358221220ee09c4242de353a3a306dc92ae765c84ffe645e0f32c1753a3d9e541ed9a042a64736f6c63430006000033

Deployed Bytecode

0x6080604052600436106100555760003560e01c806306fdde031461005a57806345c9acfe1461008557806356c45b1f146100a157806390ab67e1146100bd578063dc5bb7cd146100d9578063eb15f781146100f5575b600080fd5b34801561006657600080fd5b5061006f610121565b60405161007c9190612b52565b60405180910390f35b61009f600480360361009a9190810190611fc5565b6101bf565b005b6100bb60048036036100b69190810190611f1e565b61026e565b005b6100d760048036036100d2919081019061204e565b61032a565b005b6100f360048036036100ee9190810190611e50565b6104bd565b005b34801561010157600080fd5b5061010a61057f565b604051610118929190612c51565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101b75780601f1061018c576101008083540402835291602001916101b7565b820191906000526020600020905b81548152906001019060200180831161019a57829003601f168201915b505050505081565b6101c7611b0d565b6040518060e001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160008152602001858152602001600060405190808252806020026020018201604052801561024d5781602001602082028038833980820191505090505b50815260200160008152509050610265818484610598565b50505050505050565b610276611b76565b6040518060c001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018781526020016000815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250905061032081836106de565b5050505050505050565b610332611bd8565b6040518061010001604052808c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018c8c600081811061039257fe5b90506020020160206103a79190810190611dfe565b73ffffffffffffffffffffffffffffffffffffffff1681526020018c8c60018f8f9050038181106103d457fe5b90506020020160206103e99190810190611dfe565b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200160008152602001898152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081525090506104b0818484610826565b5050505050505050505050565b6104c5611b0d565b6040518060e001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff16815260200189815260200160008152602001888152602001878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505081526020018581525090506105738184846108ad565b50505050505050505050565b6000806001602681915080905080925081935050509091565b60006105a883856040015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105d757806105e5565b6105e484600001516109e6565b5b84604001818152505060006105f8610ab9565b90508073ffffffffffffffffffffffffffffffffffffffff1663085e2c5b866000015187602001518860400151600560006040518663ffffffff1660e01b8152600401610649959493929190612a97565b60006040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061069e919081019061216a565b90508090508560a001819052506106b58186610b45565b8560600181815250506106cc838660600151610d3d565b6106d7858585610dbe565b5050505050565b60008260000151905060006106f1610ea0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561073057836040015190506107a9565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3610754610ebc565b86604001516040518363ffffffff1660e01b815260040161077692919061284b565b600060405180830381600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050505b6107b68460a00151610ed8565b6107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c16565b60405180910390fd5b6107ff8482610f39565b846060018181525050610816838560600151610d3d565b61082084846110b5565b50505050565b600061083683856060015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108655780610873565b61087284602001516109e6565b5b84606001818152505061088584611198565b84608001818152505061089c828560800151610d3d565b6108a78484846113a6565b50505050565b60006108bd83856040015161093c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108ec57806108fa565b6108f984600001516109e6565b5b84604001818152505061091461090e610ab9565b85610b45565b84606001818152505061092b828560600151610d3d565b610936848484611494565b50505050565b60008083146109dc5761094d611576565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b81526004016109859190612c36565b602060405180830381600087803b15801561099f57600080fd5b505af11580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d79190810190612141565b6109de565b815b905092915050565b60006109f0610ea0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610ab0578173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5b9190612830565b60206040518083038186803b158015610a7357600080fd5b505afa158015610a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610aab9190810190612141565b610ab2565b475b9050919050565b6000610ac3611592565b73ffffffffffffffffffffffffffffffffffffffff1663f147f88b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b409190810190611e27565b905090565b600080826000015190506000836020015190506000846040015190506000610b7383858489608001516115ae565b90506000610b7f610ea0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610bba57829050610c28565b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b389856040518363ffffffff1660e01b8152600401610bf5929190612936565b600060405180830381600087803b158015610c0f57600080fd5b505af1158015610c23573d6000803e3d6000fd5b505050505b6000610c33856109e6565b90508873ffffffffffffffffffffffffffffffffffffffff1663e2a7515e83888888888e60a001518f60c001516040518863ffffffff1660e01b8152600401610c8196959493929190612aea565b6020604051808303818588803b158015610c9a57600080fd5b505af1158015610cae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250610cd39190810190612141565b506000610cdf866109e6565b9050610ceb81836115ef565b975087841115610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612bd6565b60405180910390fd5b5050505050505092915050565b60008214610dba57610d4d611576565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b8152600401610d87929190612c51565b600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b505050505b5050565b60006060846000015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff167f1cfcd3047f831e194b89f1ca8957ba1aa919764f692e915eef67b5e7a3e71acb876060015188604001518888604051610e359493929190612d0b565b60405180910390a3604051610e49906127dc565b6040518091039020915084602001518560000151866060015187604001518787604051602001610e7e969594939291906128d5565b6040516020818303038152906040529050610e998282611603565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073e4c9194962532feb467dce8b3d42419641c6ed2e905090565b60006060829050600060208201519050610ef0611690565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161492505050919050565b60008083602001519050600080610f5483876000015161169f565b915091506000610f6882886040015161182d565b90506000610f8384610f7e8a6080015185611847565b611887565b90506000610f90866109e6565b90506000610f9c6118a1565b73ffffffffffffffffffffffffffffffffffffffff16898b60a00151604051610fc591906127c5565b60006040518083038185875af1925050503d8060008114611002576040519150601f19603f3d011682016040523d82523d6000602084013e611007565b606091505b505090508061104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290612bf6565b60405180910390fd5b6000611056886109e6565b905061106281846115ef565b9850888411156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90612bd6565b60405180910390fd5b505050505050505092915050565b60006060836000015173ffffffffffffffffffffffffffffffffffffffff16846020015173ffffffffffffffffffffffffffffffffffffffff167f2ba4d29030af9ce41a7c2a91414527227c7f829ce555a29d2fb87122fd4cc2818660600151876040015160008860405161112d9493929190612cc6565b60405180910390a360405161114190612806565b60405180910390209150836020015184600001518560600151866040015160008760405160200161117796959493929190612874565b60405160208183030381529060405290506111928282611603565b50505050565b6000808260200151905060008360400151905060008460600151905060006111c68385848960a001516115ae565b905060006111d2610ab9565b905060006111de610ea0565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561121957839050611287565b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b383866040518363ffffffff1660e01b8152600401611254929190612936565b600060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050505b6000611292866109e6565b90508273ffffffffffffffffffffffffffffffffffffffff1663c7851396836112be8c600001516118bd565b88888e60c001518f60e001516040518763ffffffff1660e01b81526004016112ea959493929190612a2f565b6020604051808303818588803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525061133c9190810190612141565b506000611348876109e6565b905061135481836115ef565b985088851115611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090612bd6565b60405180910390fd5b5050505050505050919050565b60006060846020015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f240cab0e7aa417dbc708acd992f8ddbe09616063b926f4c45d0cca4621341fff87600001518860800151896060015189896040516114239594939291906129d5565b60405180910390a3604051611437906127f1565b60405180910390209150846000015185604001518660200151876080015188606001518888604051602001611472979695949392919061295f565b604051602081830303815290604052905061148d8282611603565b5050505050565b60006060846000015173ffffffffffffffffffffffffffffffffffffffff16856020015173ffffffffffffffffffffffffffffffffffffffff167f8d9bc2a1bde35a10f10d4953a131a84701a1e89707f3a6f359e6a850b5da33fe87606001518860400151888860405161150b9493929190612d0b565b60405180910390a360405161151f9061281b565b6040518091039020915084602001518560000151866060015187604001518787604051602001611554969594939291906128d5565b604051602081830303815290604052905061156f8282611603565b5050505050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b6000738d0287afa7755bb5f2efe686aa8d4f0a7bc4ae7f905090565b60008060006115bd878761169f565b9150915060006115cd828761182d565b90506115e2836115dd8784611847565b611887565b9350505050949350505050565b60006115fb8383611973565b905092915050565b60008061160e61057f565b9150915061161a6119bd565b73ffffffffffffffffffffffffffffffffffffffff1663e14d4fb1838387876040518563ffffffff1660e01b81526004016116589493929190612c7a565b600060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b5050505050505050565b600063f88309d760e01b905090565b6000806116aa610ea0565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461175f578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561172257600080fd5b505afa158015611736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061175a9190810190612141565b611762565b60125b915061176c610ea0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611821578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061181c9190810190612141565b611824565b60125b90509250929050565b600061183f8284601203600a0a6119d9565b905092915050565b6000670de0b6b3a764000061187761185f85856119ed565b6002670de0b6b3a76400008161187157fe5b04611a5d565b8161187e57fe5b04905092915050565b600082601203600a0a828161189857fe5b04905092915050565b60007311111254369792b2ca5d084ab5eea397ca8fa48b905090565b60608082516040519080825280602002602001820160405280156118f05781602001602082028038833980820191505090505b50905060008090505b83518110156119695783818151811061190e57fe5b602002602001015182828151811061192257fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506118f9565b5080915050919050565b60006119b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ab2565b905092915050565b6000732af7ea6cb911035f3eb1ed895cb6692c39ecba97905090565b60006119e583836119ed565b905092915050565b600080831415611a005760009050611a57565b6000828402905082848281611a1157fe5b0414611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990612bb6565b60405180910390fd5b809150505b92915050565b600080828401905083811015611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90612b96565b60405180910390fd5b8091505092915050565b6000838311158290611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af19190612b74565b60405180910390fd5b5060008385039050809150509392505050565b6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160608152602001600081525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001606081525090565b60405180610100016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160608152602001606081525090565b600081359050611c5881612fca565b92915050565b600081519050611c6d81612fca565b92915050565b60008083601f840112611c8557600080fd5b8235905067ffffffffffffffff811115611c9e57600080fd5b602083019150836020820283011115611cb657600080fd5b9250929050565b60008083601f840112611ccf57600080fd5b8235905067ffffffffffffffff811115611ce857600080fd5b602083019150836020820283011115611d0057600080fd5b9250929050565b600082601f830112611d1857600080fd5b8151611d2b611d2682612d7d565b612d50565b91508181835260208401935060208101905083856020840282011115611d5057600080fd5b60005b83811015611d805781611d668882611de9565b845260208401935060208301925050600181019050611d53565b5050505092915050565b60008083601f840112611d9c57600080fd5b8235905067ffffffffffffffff811115611db557600080fd5b602083019150836001820283011115611dcd57600080fd5b9250929050565b600081359050611de381612fe1565b92915050565b600081519050611df881612fe1565b92915050565b600060208284031215611e1057600080fd5b6000611e1e84828501611c49565b91505092915050565b600060208284031215611e3957600080fd5b6000611e4784828501611c5e565b91505092915050565b60008060008060008060008060006101008a8c031215611e6f57600080fd5b6000611e7d8c828d01611c49565b9950506020611e8e8c828d01611c49565b9850506040611e9f8c828d01611dd4565b9750506060611eb08c828d01611dd4565b96505060808a013567ffffffffffffffff811115611ecd57600080fd5b611ed98c828d01611cbd565b955095505060a0611eec8c828d01611dd4565b93505060c0611efd8c828d01611dd4565b92505060e0611f0e8c828d01611dd4565b9150509295985092959850929598565b600080600080600080600060c0888a031215611f3957600080fd5b6000611f478a828b01611c49565b9750506020611f588a828b01611c49565b9650506040611f698a828b01611dd4565b9550506060611f7a8a828b01611dd4565b945050608088013567ffffffffffffffff811115611f9757600080fd5b611fa38a828b01611d8a565b935093505060a0611fb68a828b01611dd4565b91505092959891949750929550565b60008060008060008060c08789031215611fde57600080fd5b6000611fec89828a01611c49565b9650506020611ffd89828a01611c49565b955050604061200e89828a01611dd4565b945050606061201f89828a01611dd4565b935050608061203089828a01611dd4565b92505060a061204189828a01611dd4565b9150509295509295509295565b60008060008060008060008060008060e08b8d03121561206d57600080fd5b60008b013567ffffffffffffffff81111561208757600080fd5b6120938d828e01611c73565b9a509a505060206120a68d828e01611dd4565b98505060406120b78d828e01611dd4565b97505060608b013567ffffffffffffffff8111156120d457600080fd5b6120e08d828e01611cbd565b965096505060808b013567ffffffffffffffff8111156120ff57600080fd5b61210b8d828e01611cbd565b945094505060a061211e8d828e01611dd4565b92505060c061212f8d828e01611dd4565b9150509295989b9194979a5092959850565b60006020828403121561215357600080fd5b600061216184828501611de9565b91505092915050565b6000806040838503121561217d57600080fd5b600061218b85828601611de9565b925050602083015167ffffffffffffffff8111156121a857600080fd5b6121b485828601611d07565b9150509250929050565b60006121ca8383612215565b60208301905092915050565b60006121e283836123c6565b60208301905092915050565b60006121fa83836127a7565b60208301905092915050565b61220f81612ef6565b82525050565b61221e81612ea3565b82525050565b61222d81612ea3565b82525050565b600061223e82612dd5565b6122488185612e49565b935061225383612da5565b8060005b8381101561228457815161226b88826121be565b975061227683612e22565b925050600181019050612257565b5085935050505092915050565b600061229c82612de0565b6122a68185612e49565b93506122b183612db5565b8060005b838110156122e25781516122c988826121d6565b97506122d483612e2f565b9250506001810190506122b5565b5085935050505092915050565b60006122fa82612deb565b6123048185612e5a565b935061230f83612dc5565b8060005b8381101561234057815161232788826121ee565b975061233283612e3c565b925050600181019050612313565b5085935050505092915050565b61235681612eb5565b82525050565b600061236782612e01565b6123718185612e6b565b9350612381818560208601612f86565b61238a81612fb9565b840191505092915050565b60006123a082612df6565b6123aa8185612e7c565b93506123ba818560208601612f86565b80840191505092915050565b6123cf81612f08565b82525050565b6123de81612f08565b82525050565b6123ed81612f2c565b82525050565b6123fc81612f3e565b82525050565b61240b81612f50565b82525050565b600061241c82612e17565b6124268185612e87565b9350612436818560208601612f86565b61243f81612fb9565b840191505092915050565b600061245582612e0c565b61245f8185612e87565b935061246f818560208601612f86565b61247881612fb9565b840191505092915050565b6000612490603883612e98565b91507f4c6f6753656c6c28616464726573732c616464726573732c75696e743235362c60008301527f75696e743235362c75696e743235362c75696e743235362900000000000000006020830152603882019050919050565b60006124f6604783612e98565b91507f4c6f6753656c6c4d756c746928616464726573735b5d2c616464726573732c6160008301527f6464726573732c75696e743235362c75696e743235362c75696e743235362c7560208301527f696e7432353629000000000000000000000000000000000000000000000000006040830152604782019050919050565b6000612582603d83612e98565b91507f4c6f6753656c6c546872656528616464726573732c616464726573732c75696e60008301527f743235362c75696e743235362c75696e743235362c75696e74323536290000006020830152603d82019050919050565b60006125e8601b83612e87565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000612628603b83612e98565b91507f4c6f6753656c6c54776f28616464726573732c616464726573732c75696e743260008301527f35362c75696e743235362c75696e743235362c75696e743235362900000000006020830152603b82019050919050565b600061268e602183612e87565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126f4601183612e87565b91507f546f6f206d75636820736c6970706167650000000000000000000000000000006000830152602082019050919050565b6000612734601183612e87565b91507f31496e63682d737761702d6661696c65640000000000000000000000000000006000830152602082019050919050565b6000612774601183612e87565b91507f4e6f742d737761702d66756e6374696f6e0000000000000000000000000000006000830152602082019050919050565b6127b081612edf565b82525050565b6127bf81612edf565b82525050565b60006127d18284612395565b915081905092915050565b60006127e782612483565b9150819050919050565b60006127fc826124e9565b9150819050919050565b600061281182612575565b9150819050919050565b60006128268261261b565b9150819050919050565b60006020820190506128456000830184612224565b92915050565b60006040820190506128606000830185612206565b61286d60208301846127b6565b9392505050565b600060c0820190506128896000830189612224565b6128966020830188612224565b6128a360408301876127b6565b6128b060608301866127b6565b6128bd60808301856123f3565b6128ca60a08301846127b6565b979650505050505050565b600060c0820190506128ea6000830189612224565b6128f76020830188612224565b61290460408301876127b6565b61291160608301866127b6565b61291e60808301856127b6565b61292b60a08301846127b6565b979650505050505050565b600060408201905061294b6000830185612224565b61295860208301846127b6565b9392505050565b600060e0820190508181036000830152612979818a612233565b90506129886020830189612224565b6129956040830188612224565b6129a260608301876127b6565b6129af60808301866127b6565b6129bc60a08301856127b6565b6129c960c08301846127b6565b98975050505050505050565b600060a08201905081810360008301526129ef8188612233565b90506129fe60208301876127b6565b612a0b60408301866127b6565b612a1860608301856127b6565b612a2560808301846127b6565b9695505050505050565b600060a0820190508181036000830152612a498188612291565b9050612a5860208301876127b6565b612a6560408301866127b6565b8181036060830152612a7781856122ef565b90508181036080830152612a8b81846122ef565b90509695505050505050565b600060a082019050612aac60008301886123d5565b612ab960208301876123d5565b612ac660408301866127b6565b612ad36060830185612402565b612ae060808301846123e4565b9695505050505050565b600060c082019050612aff60008301896123d5565b612b0c60208301886123d5565b612b1960408301876127b6565b612b2660608301866127b6565b8181036080830152612b3881856122ef565b9050612b4760a08301846127b6565b979650505050505050565b60006020820190508181036000830152612b6c818461244a565b905092915050565b60006020820190508181036000830152612b8e8184612411565b905092915050565b60006020820190508181036000830152612baf816125db565b9050919050565b60006020820190508181036000830152612bcf81612681565b9050919050565b60006020820190508181036000830152612bef816126e7565b9050919050565b60006020820190508181036000830152612c0f81612727565b9050919050565b60006020820190508181036000830152612c2f81612767565b9050919050565b6000602082019050612c4b60008301846127b6565b92915050565b6000604082019050612c6660008301856127b6565b612c7360208301846127b6565b9392505050565b6000608082019050612c8f60008301876127b6565b612c9c60208301866127b6565b612ca9604083018561234d565b8181036060830152612cbb818461235c565b905095945050505050565b6000608082019050612cdb60008301876127b6565b612ce860208301866127b6565b612cf560408301856123e4565b612d0260608301846127b6565b95945050505050565b6000608082019050612d2060008301876127b6565b612d2d60208301866127b6565b612d3a60408301856127b6565b612d4760608301846127b6565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715612d7357600080fd5b8060405250919050565b600067ffffffffffffffff821115612d9457600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612eae82612ebf565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f0182612f62565b9050919050565b6000612f1382612f1a565b9050919050565b6000612f2582612ebf565b9050919050565b6000612f3782612edf565b9050919050565b6000612f4982612ee9565b9050919050565b6000612f5b82612edf565b9050919050565b6000612f6d82612f74565b9050919050565b6000612f7f82612ebf565b9050919050565b60005b83811015612fa4578082015181840152602081019050612f89565b83811115612fb3576000848401525b50505050565b6000601f19601f8301169050919050565b612fd381612ea3565b8114612fde57600080fd5b50565b612fea81612edf565b8114612ff557600080fd5b5056fea2646970667358221220ee09c4242de353a3a306dc92ae765c84ffe645e0f32c1753a3d9e541ed9a042a64736f6c63430006000033

Deployed Bytecode Sourcemap

28813:80:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28851:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28851:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;24572:562;;;;;;;;;;;;;;;;:::i;:::-;;28271:535;;;;;;;;;;;;;;;;:::i;:::-;;27014:719;;;;;;;;;;;;;;;;:::i;:::-;;25835:645;;;;;;;;;;;;;;;;:::i;:::-;;2111:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2111:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;28851:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24572:562::-;24762:32;;:::i;:::-;24797:283;;;;;;;;24899:8;24797:283;;;;;;24850:7;24797:283;;;;;;24933:7;24797:283;;;;25037:1;24797:283;;;;24964:7;24797:283;;;;25011:1;25000:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;25000:13:0;;;;24797:283;;;;25067:1;24797:283;;;24762:318;;25093:33;25099:12;25113:5;25120;25093;:33::i;:::-;24572:562;;;;;;;:::o;28271:535::-;28479:30;;:::i;:::-;28512:243;;;;;;;;28613:8;28512:243;;;;;;28564:7;28512:243;;;;;;28711:7;28512:243;;;;28742:1;28512:243;;;;28646:7;28512:243;;;;28678:8;;28512:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;28512:243:0;;;;;;;;;28479:276;;28768:30;28779:11;28792:5;28768:10;:30::i;:::-;28271:535;;;;;;;;:::o;27014:719::-;27270:37;;:::i;:::-;27310:364;;;;;;;;27351:6;;27310:364;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27310:364:0;;;;;;;;;;27481:6;;27488:1;27481:9;;;;;;;;;;;;;;;;;;;;;;27310:364;;;;;;27405:6;;27428:1;27412:6;;:13;;:17;27405:25;;;;;;;;;;;;;;;;;;;;;;27310:364;;;;;;27630:7;27310:364;;;;27661:1;27310:364;;;;27516:7;27310:364;;;;27552:12;;27310:364;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27310:364:0;;;;;;;;;;27593:12;;27310:364;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;27310:364:0;;;;;;;;;27270:404;;27687:38;27698:12;27712:5;27719;27687:10;:38::i;:::-;27014:719;;;;;;;;;;;:::o;25835:645::-;26095:32;;:::i;:::-;26130:293;;;;;;;;26232:8;26130:293;;;;;;26183:7;26130:293;;;;;;26266:7;26130:293;;;;26410:1;26130:293;;;;26297:7;26130:293;;;;26333:12;;26130:293;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;26130:293:0;;;;;;;;;;26374:12;26130:293;;;26095:328;;26436:36;26445:12;26459:5;26466;26436:8;:36::i;:::-;25835:645;;;;;;;;;;:::o;2111:98::-;2154:10;2166:7;2197:1;2200:2;2182:21;;;;;;;;;;;;;;2111:98;;:::o;21292:888::-;21425:13;21441:37;21449:5;21456:12;:21;;;21441:7;:37::i;:::-;21425:53;;21532:2;21515:8;:20;:95;;21602:8;21515:95;;;21551:35;21563:12;:22;;;21551:11;:35::i;:::-;21515:95;21491:12;:21;;:119;;;;;21623:34;21678:20;:18;:20::i;:::-;21623:76;;21744:16;:34;;;21797:12;:22;;;21838:12;:21;;;21878:12;:21;;;21918:1;21938;21744:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21744:210:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21744:210:0;;;;;;39:16:-1;36:1;17:17;2:54;21744:210:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21744:210:0;;;;;;;;;21712:242;;;;;21715:12;:25;;21712:242;;;;21990:81;22017:16;22048:12;21990;:81::i;:::-;21967:12;:20;;:104;;;;;22084:36;22092:5;22099:12;:20;;;22084:7;:36::i;:::-;22133:39;22145:12;22159:5;22166;22133:11;:39::i;:::-;21292:888;;;;;:::o;23335:649::-;23444:24;23471:11;:21;;;23444:48;;23505:11;23553:12;:10;:12::i;:::-;23531:34;;23539:9;23531:34;;;23527:208;;;23591:11;:20;;;23582:29;;23527:208;;;23659:9;23644:33;;;23678:22;:20;:22::i;:::-;23702:11;:20;;;23644:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23644:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23644:79:0;;;;23527:208;23755:37;23771:11;:20;;;23755:15;:37::i;:::-;23747:67;;;;;;;;;;;;;;;;;;;;;;23849:32;23861:11;23874:6;23849:11;:32::i;:::-;23827:11;:19;;:54;;;;;23892:35;23900:5;23907:11;:19;;;23892:7;:35::i;:::-;23940:36;23957:11;23970:5;23940:16;:36::i;:::-;23335:649;;;;:::o;22761:501::-;22898:13;22914:37;22922:5;22929:12;:21;;;22914:7;:37::i;:::-;22898:53;;23005:2;22988:8;:20;:95;;23075:8;22988:95;;;23024:35;23036:12;:22;;;23024:11;:35::i;:::-;22988:95;22964:12;:21;;:119;;;;;23119:31;23137:12;23119:17;:31::i;:::-;23096:12;:20;;:54;;;;;23161:36;23169:5;23176:12;:20;;;23161:7;:36::i;:::-;23210:44;23227:12;23241:5;23248;23210:16;:44::i;:::-;22761:501;;;;:::o;22188:565::-;22318:13;22334:37;22342:5;22349:12;:21;;;22334:7;:37::i;:::-;22318:53;;22425:2;22408:8;:20;:95;;22495:8;22408:95;;;22444:35;22456:12;:22;;;22444:11;:35::i;:::-;22408:95;22384:12;:21;;:119;;;;;22539:104;22584:20;:18;:20::i;:::-;22620:12;22539;:104::i;:::-;22516:12;:20;;:127;;;;;22656:36;22664:5;22671:12;:20;;;22656:7;:36::i;:::-;22703:42;22718:12;22732:5;22739;22703:14;:42::i;:::-;22188:565;;;;:::o;1426:164::-;1483:14;1527:1;1518:5;:10;:66;;1553:15;:13;:15::i;:::-;1537:40;;;1578:5;1537:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1537:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1537:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1537:47:0;;;;;;;;;1518:66;;;1531:3;1518:66;1506:78;;1426:164;;;;:::o;11404:189::-;11469:9;11516:12;:10;:12::i;:::-;11498:30;;11506:5;11498:30;;;:87;;11555:5;:15;;;11579:4;11555:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11555:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11555:30:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11555:30:0;;;;;;;;;11498:87;;;11531:21;11498:87;11491:94;;11404:189;;;:::o;10369:176::-;10422:15;10490:27;:25;:27::i;:::-;10465:69;;;:71;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10465:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10465:71:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10465:71:0;;;;;;;;;10450:87;;10369:176;:::o;12937:1073::-;13072:11;13096:24;13123:12;:22;;;13096:49;;13156:23;13182:12;:21;;;13156:47;;13214:13;13230:12;:21;;;13214:37;;13264:17;13284:67;13299:8;13309:9;13320:8;13330:12;:20;;;13284:14;:67::i;:::-;13264:87;;13364:11;13412:12;:10;:12::i;:::-;13390:34;;13398:9;13390:34;;;13386:171;;;13450:8;13441:17;;13386:171;;;13491:9;:17;;;13517:16;13536:8;13491:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13491:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13491:54:0;;;;13386:171;13571:14;13588:21;13600:8;13588:11;:21::i;:::-;13571:38;;13620:16;:21;;;13648:6;13670:9;13694:8;13717;13740:12;13767;:25;;;13807:12;:25;;;13620:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13620:223:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13620:223:0;;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13620:223:0;;;;;;;;;;13854:13;13870:21;13882:8;13870:11;:21::i;:::-;13854:37;;13913:24;13917:8;13927:9;13913:3;:24::i;:::-;13904:33;;13974:6;13958:12;:22;;13950:52;;;;;;;;;;;;;;;;;;;;;;12937:1073;;;;;;;;;;;:::o;1659:137::-;1735:1;1726:5;:10;1722:68;;1754:15;:13;:15::i;:::-;1738:40;;;1779:5;1786:3;1738:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1738:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1738:52:0;;;;1722:68;1659:137;;:::o;17131:822::-;17270:18;17299:24;17414:12;:22;;;17339:220;;17369:12;:21;;;17339:220;;;17452:12;:20;;;17487:12;:21;;;17523:5;17543;17339:220;;;;;;;;;;;;;;;;;;17583:69;;;;;;;;;;;;;;17570:82;;17710:12;:21;;;17755:12;:22;;;17793:12;:20;;;17828:12;:21;;;17864:5;17884;17677:223;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17677:223:0;;;17663:237;;17911:34;17921:10;17933:11;17911:9;:34::i;:::-;17131:822;;;;;:::o;820:131::-;865:7;888:42;881:49;;820:131;:::o;10807:140::-;10862:15;10897:42;10890:49;;10807:140;:::o;15466:328::-;15536:9;15558:18;15579:8;15558:29;;15598:10;15732:2;15725:5;15721:14;15715:21;15708:28;;15771:15;:13;:15::i;:::-;15764:22;;;:3;:22;;;;15757:29;;15466:328;;;;;:::o;16001:865::-;16110:11;16134:23;16160:11;:20;;;16134:46;;16192:12;16206:13;16223:45;16236:8;16246:11;:21;;;16223:12;:45::i;:::-;16191:77;;;;16279:15;16297:43;16309:8;16319:11;:20;;;16297:11;:43::i;:::-;16279:61;;16351:17;16371:62;16386:7;16395:37;16400:11;:19;;;16421:10;16395:4;:37::i;:::-;16371:14;:62::i;:::-;16351:82;;16446:14;16463:21;16475:8;16463:11;:21::i;:::-;16446:38;;16558:12;16584:19;:17;:19::i;:::-;16576:33;;16616:6;16624:11;:20;;;16576:69;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;16557:88:0;;;16661:7;16656:41;;16670:27;;;;;;;;;;;;;;;;;;;16656:41;16710:13;16726:21;16738:8;16726:11;:21::i;:::-;16710:37;;16769:24;16773:8;16783:9;16769:3;:24::i;:::-;16760:33;;16830:6;16814:12;:22;;16806:52;;;;;;;;;;;;;;;;;;;;;;16001:865;;;;;;;;;;;;:::o;20426:795::-;20544:18;20573:24;20692:11;:21;;;20613:217;;20648:11;:20;;;20613:217;;;20729:11;:19;;;20763:11;:20;;;20798:1;20814:5;20613:217;;;;;;;;;;;;;;;;;;20854:74;;;;;;;;;;;;;;20841:87;;20986:11;:20;;;21030:11;:21;;;21067:11;:19;;;21101:11;:20;;;21136:1;21152:5;20953:215;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20953:215:0;;;20939:229;;21179:34;21189:10;21201:11;21179:9;:34::i;:::-;20426:795;;;;:::o;14285:1122::-;14369:11;14393:24;14420:12;:22;;;14393:49;;14453:23;14479:12;:21;;;14453:47;;14511:13;14527:12;:21;;;14511:37;;14559:17;14579:67;14594:8;14604:9;14615:8;14625:12;:20;;;14579:14;:67::i;:::-;14559:87;;14659:34;14714:20;:18;:20::i;:::-;14659:76;;14746:11;14794:12;:10;:12::i;:::-;14772:34;;14780:9;14772:34;;;14768:171;;;14832:8;14823:17;;14768:171;;;14873:9;:17;;;14899:16;14918:8;14873:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14873:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14873:54:0;;;;14768:171;14951:14;14968:21;14980:8;14968:11;:21::i;:::-;14951:38;;15000:16;:26;;;15033:6;15055:44;15079:12;:19;;;15055:23;:44::i;:::-;15114:8;15137:12;15164;:25;;;15204:12;:25;;;15000:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15000:240:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15000:240:0;;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15000:240:0;;;;;;;;;;15251:13;15267:21;15279:8;15267:11;:21::i;:::-;15251:37;;15310:24;15314:8;15324:9;15310:3;:24::i;:::-;15301:33;;15371:6;15355:12;:22;;15347:52;;;;;;;;;;;;;;;;;;;;;;14285:1122;;;;;;;;;;;:::o;19233:920::-;19382:18;19411:24;19565:12;:22;;;19451:259;;19520:12;:21;;;19451:259;;;19478:12;:19;;;19603:12;:20;;;19638:12;:21;;;19674:5;19694;19451:259;;;;;;;;;;;;;;;;;;;19734:84;;;;;;;;;;;;;;19721:97;;19868:12;:19;;;19910:12;:21;;;19955:12;:22;;;19993:12;:20;;;20028:12;:21;;;20064:5;20084;19843:257;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19843:257:0;;;19829:271;;20111:34;20121:10;20133:11;20111:9;:34::i;:::-;19233:920;;;;;:::o;18163:831::-;18305:18;18334:24;18452:12;:22;;;18374:223;;18407:12;:21;;;18374:223;;;18490:12;:20;;;18525:12;:21;;;18561:5;18581;18374:223;;;;;;;;;;;;;;;;;;18621:72;;;;;;;;;;;;;;18608:85;;18751:12;:21;;;18796:12;:22;;;18834:12;:20;;;18869:12;:21;;;18905:5;18925;18718:223;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18718:223:0;;;18704:237;;18952:34;18962:10;18974:11;18952:9;:34::i;:::-;18163:831;;;;;:::o;1013:142::-;1061:7;1084:42;1077:49;;1013:142;:::o;10163:145::-;10223:15;10258:42;10251:49;;10163:145;:::o;11898:408::-;12067:17;12098:12;12112:13;12129:33;12142:8;12152:9;12129:12;:33::i;:::-;12097:65;;;;12173:15;12191:31;12203:8;12213;12191:11;:31::i;:::-;12173:49;;12248:50;12263:7;12272:25;12277:7;12286:10;12272:4;:25::i;:::-;12248:14;:50::i;:::-;12233:65;;11898:408;;;;;;;;;:::o;7708:103::-;7768:6;7787:18;7800:1;7803;7787:12;:18::i;:::-;7783:22;;7708:103;;;;:::o;1854:209::-;1941:10;1953:7;1964:13;:11;:13::i;:::-;1940:37;;;;1999:14;:12;:14::i;:::-;1984:40;;;2025:5;2032:2;2036:9;2047;1984:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1984:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1984:73:0;;;;1854:209;;;;:::o;11017:92::-;11065:6;11091:10;11084:17;;;;11017:92;:::o;11601:289::-;11694:11;11707:12;11761;:10;:12::i;:::-;11741:32;;11749:7;11741:32;;;:59;;11782:7;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11782:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11782:18:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11782:18:0;;;;;;;;;11741:59;;;11777:2;11741:59;11732:68;;11842:12;:10;:12::i;:::-;11821:33;;11829:8;11821:33;;;:61;;11863:8;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11863:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11863:19:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11863:19:0;;;;;;;;;11821:61;;;11858:2;11821:61;11811:71;;11601:289;;;;;:::o;11261:135::-;11330:11;11360:28;11364:4;11382;11377:2;:9;11370:2;:17;11360:3;:28::i;:::-;11354:34;;11261:135;;;;:::o;8019:125::-;8072:6;7559:8;8091:41;8104:18;8117:1;8120;8104:12;:18::i;:::-;8130:1;7559:8;8124:7;;;;;;8091:12;:41::i;:::-;:47;;;;;;8087:51;;8019:125;;;;:::o;11117:136::-;11189:11;11239:4;11234:2;:9;11227:2;:17;11220:4;:24;;;;;;11213:32;;11117:136;;;;:::o;10606:129::-;10658:7;10685:42;10678:49;;10606:129;:::o;12314:334::-;12394:23;12430:31;12485:6;:13;12464:35;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;12464:35:0;;;;12430:69;;12515:6;12524:1;12515:10;;12510:106;12531:6;:13;12527:1;:17;12510:106;;;12594:6;12601:1;12594:9;;;;;;;;;;;;;;12566:7;12574:1;12566:10;;;;;;;;;;;;;:38;;;;;;;;;;;12546:3;;;;;;;12510:106;;;;12633:7;12626:14;;;12314:334;;;:::o;3522:136::-;3580:7;3607:43;3611:1;3614;3607:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3600:50;;3522:136;;;;:::o;1213:140::-;1260:7;1283:42;1276:49;;1213:140;:::o;7817:95::-;7869:6;7888:18;7901:1;7904;7888:12;:18::i;:::-;7884:22;;7817:95;;;;:::o;4412:471::-;4470:7;4720:1;4715;:6;4711:47;;;4745:1;4738:8;;;;4711:47;4770:9;4786:1;4782;:5;4770:17;;4815:1;4810;4806;:5;;;;;;:10;4798:56;;;;;;;;;;;;;;;;;;;;;;4874:1;4867:8;;;4412:471;;;;;:::o;3058:181::-;3116:7;3136:9;3152:1;3148;:5;3136:17;;3177:1;3172;:6;;3164:46;;;;;;;;;;;;;;;;;;;;;;3230:1;3223:8;;;3058:181;;;;:::o;3961:192::-;4047:7;4080:1;4075;:6;;4083:12;4067:29;;;;;;;;;;;;;;;;;;;;;;;;;4107:9;4123:1;4119;:5;4107:17;;4144:1;4137:8;;;3961:192;;;;;:::o;28813:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;679:352;;;809:3;802:4;794:6;790:17;786:27;776:2;;827:1;824;817:12;776:2;860:6;847:20;837:30;;887:18;879:6;876:30;873:2;;;919:1;916;909:12;873:2;953:4;945:6;941:17;929:29;;1004:3;996:4;988:6;984:17;974:8;970:32;967:41;964:2;;;1021:1;1018;1011:12;964:2;769:262;;;;;;1057:722;;1185:3;1178:4;1170:6;1166:17;1162:27;1152:2;;1203:1;1200;1193:12;1152:2;1233:6;1227:13;1255:80;1270:64;1327:6;1270:64;;;1255:80;;;1246:89;;1352:5;1377:6;1370:5;1363:21;1407:4;1399:6;1395:17;1385:27;;1429:4;1424:3;1420:14;1413:21;;1482:6;1529:3;1521:4;1513:6;1509:17;1504:3;1500:27;1497:36;1494:2;;;1546:1;1543;1536:12;1494:2;1571:1;1556:217;1581:6;1578:1;1575:13;1556:217;;;1639:3;1661:48;1705:3;1693:10;1661:48;;;1656:3;1649:61;1733:4;1728:3;1724:14;1717:21;;1761:4;1756:3;1752:14;1745:21;;1613:160;1603:1;1600;1596:9;1591:14;;1556:217;;;1560:14;1145:634;;;;;;;;1801:336;;;1915:3;1908:4;1900:6;1896:17;1892:27;1882:2;;1933:1;1930;1923:12;1882:2;1966:6;1953:20;1943:30;;1993:18;1985:6;1982:30;1979:2;;;2025:1;2022;2015:12;1979:2;2059:4;2051:6;2047:17;2035:29;;2110:3;2102:4;2094:6;2090:17;2080:8;2076:32;2073:41;2070:2;;;2127:1;2124;2117:12;2070:2;1875:262;;;;;;2145:130;;2225:6;2212:20;2203:29;;2237:33;2264:5;2237:33;;;2197:78;;;;;2282:134;;2366:6;2360:13;2351:22;;2378:33;2405:5;2378:33;;;2345:71;;;;;2423:241;;2527:2;2515:9;2506:7;2502:23;2498:32;2495:2;;;2543:1;2540;2533:12;2495:2;2578:1;2595:53;2640:7;2631:6;2620:9;2616:22;2595:53;;;2585:63;;2557:97;2489:175;;;;;2671:263;;2786:2;2774:9;2765:7;2761:23;2757:32;2754:2;;;2802:1;2799;2792:12;2754:2;2837:1;2854:64;2910:7;2901:6;2890:9;2886:22;2854:64;;;2844:74;;2816:108;2748:186;;;;;2941:1277;;;;;;;;;;3199:3;3187:9;3178:7;3174:23;3170:33;3167:2;;;3216:1;3213;3206:12;3167:2;3251:1;3268:53;3313:7;3304:6;3293:9;3289:22;3268:53;;;3258:63;;3230:97;3358:2;3376:53;3421:7;3412:6;3401:9;3397:22;3376:53;;;3366:63;;3337:98;3466:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;;;3474:63;;3445:98;3574:2;3592:53;3637:7;3628:6;3617:9;3613:22;3592:53;;;3582:63;;3553:98;3710:3;3699:9;3695:19;3682:33;3735:18;3727:6;3724:30;3721:2;;;3767:1;3764;3757:12;3721:2;3795:80;3867:7;3858:6;3847:9;3843:22;3795:80;;;3785:90;;;;3661:220;3912:3;3931:53;3976:7;3967:6;3956:9;3952:22;3931:53;;;3921:63;;3891:99;4021:3;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;;;4030:63;;4000:99;4130:3;4149:53;4194:7;4185:6;4174:9;4170:22;4149:53;;;4139:63;;4109:99;3161:1057;;;;;;;;;;;;4225:993;;;;;;;;4433:3;4421:9;4412:7;4408:23;4404:33;4401:2;;;4450:1;4447;4440:12;4401:2;4485:1;4502:53;4547:7;4538:6;4527:9;4523:22;4502:53;;;4492:63;;4464:97;4592:2;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;;;4600:63;;4571:98;4700:2;4718:53;4763:7;4754:6;4743:9;4739:22;4718:53;;;4708:63;;4679:98;4808:2;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;;;4816:63;;4787:98;4944:3;4933:9;4929:19;4916:33;4969:18;4961:6;4958:30;4955:2;;;5001:1;4998;4991:12;4955:2;5029:64;5085:7;5076:6;5065:9;5061:22;5029:64;;;5019:74;;;;4895:204;5130:3;5149:53;5194:7;5185:6;5174:9;5170:22;5149:53;;;5139:63;;5109:99;4395:823;;;;;;;;;;;5225:869;;;;;;;5414:3;5402:9;5393:7;5389:23;5385:33;5382:2;;;5431:1;5428;5421:12;5382:2;5466:1;5483:53;5528:7;5519:6;5508:9;5504:22;5483:53;;;5473:63;;5445:97;5573:2;5591:53;5636:7;5627:6;5616:9;5612:22;5591:53;;;5581:63;;5552:98;5681:2;5699:53;5744:7;5735:6;5724:9;5720:22;5699:53;;;5689:63;;5660:98;5789:2;5807:53;5852:7;5843:6;5832:9;5828:22;5807:53;;;5797:63;;5768:98;5897:3;5916:53;5961:7;5952:6;5941:9;5937:22;5916:53;;;5906:63;;5876:99;6006:3;6025:53;6070:7;6061:6;6050:9;6046:22;6025:53;;;6015:63;;5985:99;5376:718;;;;;;;;;6101:1463;;;;;;;;;;;6412:3;6400:9;6391:7;6387:23;6383:33;6380:2;;;6429:1;6426;6419:12;6380:2;6492:1;6481:9;6477:17;6464:31;6515:18;6507:6;6504:30;6501:2;;;6547:1;6544;6537:12;6501:2;6575:80;6647:7;6638:6;6627:9;6623:22;6575:80;;;6565:90;;;;6443:218;6692:2;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;;;6700:63;;6671:98;6800:2;6818:53;6863:7;6854:6;6843:9;6839:22;6818:53;;;6808:63;;6779:98;6936:2;6925:9;6921:18;6908:32;6960:18;6952:6;6949:30;6946:2;;;6992:1;6989;6982:12;6946:2;7020:80;7092:7;7083:6;7072:9;7068:22;7020:80;;;7010:90;;;;6887:219;7165:3;7154:9;7150:19;7137:33;7190:18;7182:6;7179:30;7176:2;;;7222:1;7219;7212:12;7176:2;7250:80;7322:7;7313:6;7302:9;7298:22;7250:80;;;7240:90;;;;7116:220;7367:3;7386:53;7431:7;7422:6;7411:9;7407:22;7386:53;;;7376:63;;7346:99;7476:3;7495:53;7540:7;7531:6;7520:9;7516:22;7495:53;;;7485:63;;7455:99;6374:1190;;;;;;;;;;;;;;7571:263;;7686:2;7674:9;7665:7;7661:23;7657:32;7654:2;;;7702:1;7699;7692:12;7654:2;7737:1;7754:64;7810:7;7801:6;7790:9;7786:22;7754:64;;;7744:74;;7716:108;7648:186;;;;;7841:528;;;7998:2;7986:9;7977:7;7973:23;7969:32;7966:2;;;8014:1;8011;8004:12;7966:2;8049:1;8066:64;8122:7;8113:6;8102:9;8098:22;8066:64;;;8056:74;;8028:108;8188:2;8177:9;8173:18;8167:25;8212:18;8204:6;8201:30;8198:2;;;8244:1;8241;8234:12;8198:2;8264:89;8345:7;8336:6;8325:9;8321:22;8264:89;;;8254:99;;8146:213;7960:409;;;;;;8377:173;;8464:46;8506:3;8498:6;8464:46;;;8539:4;8534:3;8530:14;8516:28;;8457:93;;;;;8559:215;;8667:67;8730:3;8722:6;8667:67;;;8763:4;8758:3;8754:14;8740:28;;8660:114;;;;;8783:173;;8870:46;8912:3;8904:6;8870:46;;;8945:4;8940:3;8936:14;8922:28;;8863:93;;;;;8964:142;9055:45;9094:5;9055:45;;;9050:3;9043:58;9037:69;;;9113:103;9186:24;9204:5;9186:24;;;9181:3;9174:37;9168:48;;;9223:113;9306:24;9324:5;9306:24;;;9301:3;9294:37;9288:48;;;9374:674;;9515:50;9559:5;9515:50;;;9578:86;9657:6;9652:3;9578:86;;;9571:93;;9685:52;9731:5;9685:52;;;9757:7;9785:1;9770:256;9795:6;9792:1;9789:13;9770:256;;;9862:6;9856:13;9883:63;9942:3;9927:13;9883:63;;;9876:70;;9963:56;10012:6;9963:56;;;9953:66;;9827:199;9817:1;9814;9810:9;9805:14;;9770:256;;;9774:14;10039:3;10032:10;;9494:554;;;;;;;;10103:795;;10269:75;10338:5;10269:75;;;10357:86;10436:6;10431:3;10357:86;;;10350:93;;10464:77;10535:5;10464:77;;;10561:7;10589:1;10574:302;10599:6;10596:1;10593:13;10574:302;;;10666:6;10660:13;10687:84;10767:3;10752:13;10687:84;;;10680:91;;10788:81;10862:6;10788:81;;;10778:91;;10631:245;10621:1;10618;10614:9;10609:14;;10574:302;;;10578:14;10889:3;10882:10;;10248:650;;;;;;;;10937:674;;11078:50;11122:5;11078:50;;;11141:86;11220:6;11215:3;11141:86;;;11134:93;;11248:52;11294:5;11248:52;;;11320:7;11348:1;11333:256;11358:6;11355:1;11352:13;11333:256;;;11425:6;11419:13;11446:63;11505:3;11490:13;11446:63;;;11439:70;;11526:56;11575:6;11526:56;;;11516:66;;11390:199;11380:1;11377;11373:9;11368:14;;11333:256;;;11337:14;11602:3;11595:10;;11057:554;;;;;;;;11619:113;11702:24;11720:5;11702:24;;;11697:3;11690:37;11684:48;;;11739:343;;11849:38;11881:5;11849:38;;;11899:70;11962:6;11957:3;11899:70;;;11892:77;;11974:52;12019:6;12014:3;12007:4;12000:5;11996:16;11974:52;;;12047:29;12069:6;12047:29;;;12042:3;12038:39;12031:46;;11829:253;;;;;;12089:348;;12213:34;12241:5;12213:34;;;12259:88;12340:6;12335:3;12259:88;;;12252:95;;12352:52;12397:6;12392:3;12385:4;12378:5;12374:16;12352:52;;;12425:6;12420:3;12416:16;12409:23;;12193:244;;;;;;12444:158;12538:58;12590:5;12538:58;;;12533:3;12526:71;12520:82;;;12609:168;12713:58;12765:5;12713:58;;;12708:3;12701:71;12695:82;;;12784:142;12875:45;12914:5;12875:45;;;12870:3;12863:58;12857:69;;;12933:138;13022:43;13059:5;13022:43;;;13017:3;13010:56;13004:67;;;13078:142;13169:45;13208:5;13169:45;;;13164:3;13157:58;13151:69;;;13227:347;;13339:39;13372:5;13339:39;;;13390:71;13454:6;13449:3;13390:71;;;13383:78;;13466:52;13511:6;13506:3;13499:4;13492:5;13488:16;13466:52;;;13539:29;13561:6;13539:29;;;13534:3;13530:39;13523:46;;13319:255;;;;;;13581:339;;13689:35;13718:5;13689:35;;;13736:71;13800:6;13795:3;13736:71;;;13729:78;;13812:52;13857:6;13852:3;13845:4;13838:5;13834:16;13812:52;;;13885:29;13907:6;13885:29;;;13880:3;13876:39;13869:46;;13669:251;;;;;;13928:429;;14106:85;14188:2;14183:3;14106:85;;;14099:92;;14224:34;14220:1;14215:3;14211:11;14204:55;14293:26;14288:2;14283:3;14279:12;14272:48;14348:2;14343:3;14339:12;14332:19;;14092:265;;;;14366:481;;14544:85;14626:2;14621:3;14544:85;;;14537:92;;14662:34;14658:1;14653:3;14649:11;14642:55;14731:34;14726:2;14721:3;14717:12;14710:56;14800:9;14795:2;14790:3;14786:12;14779:31;14838:2;14833:3;14829:12;14822:19;;14530:317;;;;14856:434;;15034:85;15116:2;15111:3;15034:85;;;15027:92;;15152:34;15148:1;15143:3;15139:11;15132:55;15221:31;15216:2;15211:3;15207:12;15200:53;15281:2;15276:3;15272:12;15265:19;;15020:270;;;;15299:327;;15459:67;15523:2;15518:3;15459:67;;;15452:74;;15559:29;15555:1;15550:3;15546:11;15539:50;15617:2;15612:3;15608:12;15601:19;;15445:181;;;;15635:432;;15813:85;15895:2;15890:3;15813:85;;;15806:92;;15931:34;15927:1;15922:3;15918:11;15911:55;16000:29;15995:2;15990:3;15986:12;15979:51;16058:2;16053:3;16049:12;16042:19;;15799:268;;;;16076:370;;16236:67;16300:2;16295:3;16236:67;;;16229:74;;16336:34;16332:1;16327:3;16323:11;16316:55;16405:3;16400:2;16395:3;16391:12;16384:25;16437:2;16432:3;16428:12;16421:19;;16222:224;;;;16455:317;;16615:67;16679:2;16674:3;16615:67;;;16608:74;;16715:19;16711:1;16706:3;16702:11;16695:40;16763:2;16758:3;16754:12;16747:19;;16601:171;;;;16781:317;;16941:67;17005:2;17000:3;16941:67;;;16934:74;;17041:19;17037:1;17032:3;17028:11;17021:40;17089:2;17084:3;17080:12;17073:19;;16927:171;;;;17107:317;;17267:67;17331:2;17326:3;17267:67;;;17260:74;;17367:19;17363:1;17358:3;17354:11;17347:40;17415:2;17410:3;17406:12;17399:19;;17253:171;;;;17432:103;17505:24;17523:5;17505:24;;;17500:3;17493:37;17487:48;;;17542:113;17625:24;17643:5;17625:24;;;17620:3;17613:37;17607:48;;;17662:254;;17802:89;17887:3;17878:6;17802:89;;;17795:96;;17908:3;17901:10;;17783:133;;;;;17923:372;;18122:148;18266:3;18122:148;;;18115:155;;18287:3;18280:10;;18103:192;;;;18302:372;;18501:148;18645:3;18501:148;;;18494:155;;18666:3;18659:10;;18482:192;;;;18681:372;;18880:148;19024:3;18880:148;;;18873:155;;19045:3;19038:10;;18861:192;;;;19060:372;;19259:148;19403:3;19259:148;;;19252:155;;19424:3;19417:10;;19240:192;;;;19439:213;;19557:2;19546:9;19542:18;19534:26;;19571:71;19639:1;19628:9;19624:17;19615:6;19571:71;;;19528:124;;;;;19659:340;;19813:2;19802:9;19798:18;19790:26;;19827:79;19903:1;19892:9;19888:17;19879:6;19827:79;;;19917:72;19985:2;19974:9;19970:18;19961:6;19917:72;;;19784:215;;;;;;20006:783;;20270:3;20259:9;20255:19;20247:27;;20285:71;20353:1;20342:9;20338:17;20329:6;20285:71;;;20367:72;20435:2;20424:9;20420:18;20411:6;20367:72;;;20450;20518:2;20507:9;20503:18;20494:6;20450:72;;;20533;20601:2;20590:9;20586:18;20577:6;20533:72;;;20616:79;20690:3;20679:9;20675:19;20666:6;20616:79;;;20706:73;20774:3;20763:9;20759:19;20750:6;20706:73;;;20241:548;;;;;;;;;;20796:771;;21054:3;21043:9;21039:19;21031:27;;21069:71;21137:1;21126:9;21122:17;21113:6;21069:71;;;21151:72;21219:2;21208:9;21204:18;21195:6;21151:72;;;21234;21302:2;21291:9;21287:18;21278:6;21234:72;;;21317;21385:2;21374:9;21370:18;21361:6;21317:72;;;21400:73;21468:3;21457:9;21453:19;21444:6;21400:73;;;21484;21552:3;21541:9;21537:19;21528:6;21484:73;;;21025:542;;;;;;;;;;21574:324;;21720:2;21709:9;21705:18;21697:26;;21734:71;21802:1;21791:9;21787:17;21778:6;21734:71;;;21816:72;21884:2;21873:9;21869:18;21860:6;21816:72;;;21691:207;;;;;;21905:1023;;22237:3;22226:9;22222:19;22214:27;;22288:9;22282:4;22278:20;22274:1;22263:9;22259:17;22252:47;22313:104;22412:4;22403:6;22313:104;;;22305:112;;22428:72;22496:2;22485:9;22481:18;22472:6;22428:72;;;22511;22579:2;22568:9;22564:18;22555:6;22511:72;;;22594;22662:2;22651:9;22647:18;22638:6;22594:72;;;22677:73;22745:3;22734:9;22730:19;22721:6;22677:73;;;22761;22829:3;22818:9;22814:19;22805:6;22761:73;;;22845;22913:3;22902:9;22898:19;22889:6;22845:73;;;22208:720;;;;;;;;;;;22935:799;;23211:3;23200:9;23196:19;23188:27;;23262:9;23256:4;23252:20;23248:1;23237:9;23233:17;23226:47;23287:104;23386:4;23377:6;23287:104;;;23279:112;;23402:72;23470:2;23459:9;23455:18;23446:6;23402:72;;;23485;23553:2;23542:9;23538:18;23529:6;23485:72;;;23568;23636:2;23625:9;23621:18;23612:6;23568:72;;;23651:73;23719:3;23708:9;23704:19;23695:6;23651:73;;;23182:552;;;;;;;;;23741:1129;;24134:3;24123:9;24119:19;24111:27;;24185:9;24179:4;24175:20;24171:1;24160:9;24156:17;24149:47;24210:129;24334:4;24325:6;24210:129;;;24202:137;;24350:72;24418:2;24407:9;24403:18;24394:6;24350:72;;;24433;24501:2;24490:9;24486:18;24477:6;24433:72;;;24553:9;24547:4;24543:20;24538:2;24527:9;24523:18;24516:48;24578:104;24677:4;24668:6;24578:104;;;24570:112;;24731:9;24725:4;24721:20;24715:3;24704:9;24700:19;24693:49;24756:104;24855:4;24846:6;24756:104;;;24748:112;;24105:765;;;;;;;;;24877:775;;25165:3;25154:9;25150:19;25142:27;;25180:92;25269:1;25258:9;25254:17;25245:6;25180:92;;;25283:93;25372:2;25361:9;25357:18;25348:6;25283:93;;;25387:72;25455:2;25444:9;25440:18;25431:6;25387:72;;;25470:80;25546:2;25535:9;25531:18;25522:6;25470:80;;;25561:81;25637:3;25626:9;25622:19;25613:6;25561:81;;;25136:516;;;;;;;;;25659:995;;26005:3;25994:9;25990:19;25982:27;;26020:92;26109:1;26098:9;26094:17;26085:6;26020:92;;;26123:93;26212:2;26201:9;26197:18;26188:6;26123:93;;;26227:72;26295:2;26284:9;26280:18;26271:6;26227:72;;;26310;26378:2;26367:9;26363:18;26354:6;26310:72;;;26431:9;26425:4;26421:20;26415:3;26404:9;26400:19;26393:49;26456:104;26555:4;26546:6;26456:104;;;26448:112;;26571:73;26639:3;26628:9;26624:19;26615:6;26571:73;;;25976:678;;;;;;;;;;26661:293;;26795:2;26784:9;26780:18;26772:26;;26845:9;26839:4;26835:20;26831:1;26820:9;26816:17;26809:47;26870:74;26939:4;26930:6;26870:74;;;26862:82;;26766:188;;;;;26961:301;;27099:2;27088:9;27084:18;27076:26;;27149:9;27143:4;27139:20;27135:1;27124:9;27120:17;27113:47;27174:78;27247:4;27238:6;27174:78;;;27166:86;;27070:192;;;;;27269:407;;27460:2;27449:9;27445:18;27437:26;;27510:9;27504:4;27500:20;27496:1;27485:9;27481:17;27474:47;27535:131;27661:4;27535:131;;;27527:139;;27431:245;;;;27683:407;;27874:2;27863:9;27859:18;27851:26;;27924:9;27918:4;27914:20;27910:1;27899:9;27895:17;27888:47;27949:131;28075:4;27949:131;;;27941:139;;27845:245;;;;28097:407;;28288:2;28277:9;28273:18;28265:26;;28338:9;28332:4;28328:20;28324:1;28313:9;28309:17;28302:47;28363:131;28489:4;28363:131;;;28355:139;;28259:245;;;;28511:407;;28702:2;28691:9;28687:18;28679:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28777:131;28903:4;28777:131;;;28769:139;;28673:245;;;;28925:407;;29116:2;29105:9;29101:18;29093:26;;29166:9;29160:4;29156:20;29152:1;29141:9;29137:17;29130:47;29191:131;29317:4;29191:131;;;29183:139;;29087:245;;;;29339:213;;29457:2;29446:9;29442:18;29434:26;;29471:71;29539:1;29528:9;29524:17;29515:6;29471:71;;;29428:124;;;;;29559:324;;29705:2;29694:9;29690:18;29682:26;;29719:71;29787:1;29776:9;29772:17;29763:6;29719:71;;;29801:72;29869:2;29858:9;29854:18;29845:6;29801:72;;;29676:207;;;;;;29890:631;;30110:3;30099:9;30095:19;30087:27;;30125:71;30193:1;30182:9;30178:17;30169:6;30125:71;;;30207:72;30275:2;30264:9;30260:18;30251:6;30207:72;;;30290;30358:2;30347:9;30343:18;30334:6;30290:72;;;30410:9;30404:4;30400:20;30395:2;30384:9;30380:18;30373:48;30435:76;30506:4;30497:6;30435:76;;;30427:84;;30081:440;;;;;;;;30528:563;;30738:3;30727:9;30723:19;30715:27;;30753:71;30821:1;30810:9;30806:17;30797:6;30753:71;;;30835:72;30903:2;30892:9;30888:18;30879:6;30835:72;;;30918:80;30994:2;30983:9;30979:18;30970:6;30918:80;;;31009:72;31077:2;31066:9;31062:18;31053:6;31009:72;;;30709:382;;;;;;;;31098:547;;31300:3;31289:9;31285:19;31277:27;;31315:71;31383:1;31372:9;31368:17;31359:6;31315:71;;;31397:72;31465:2;31454:9;31450:18;31441:6;31397:72;;;31480;31548:2;31537:9;31533:18;31524:6;31480:72;;;31563;31631:2;31620:9;31616:18;31607:6;31563:72;;;31271:374;;;;;;;;31652:256;;31714:2;31708:9;31698:19;;31752:4;31744:6;31740:17;31851:6;31839:10;31836:22;31815:18;31803:10;31800:34;31797:62;31794:2;;;31872:1;31869;31862:12;31794:2;31892:10;31888:2;31881:22;31692:216;;;;;31915:304;;32074:18;32066:6;32063:30;32060:2;;;32106:1;32103;32096:12;32060:2;32141:4;32133:6;32129:17;32121:25;;32204:4;32198;32194:15;32186:23;;31997:222;;;;32226:147;;32308:3;32300:11;;32346:4;32341:3;32337:14;32329:22;;32294:79;;;;32380:172;;32487:3;32479:11;;32525:4;32520:3;32516:14;32508:22;;32473:79;;;;32559:147;;32641:3;32633:11;;32679:4;32674:3;32670:14;32662:22;;32627:79;;;;32713:133;;32818:5;32812:12;32802:22;;32783:63;;;;32853:158;;32983:5;32977:12;32967:22;;32948:63;;;;33018:133;;33123:5;33117:12;33107:22;;33088:63;;;;33158:117;;33247:5;33241:12;33231:22;;33212:63;;;;33282:121;;33375:5;33369:12;33359:22;;33340:63;;;;33410:118;;33500:5;33494:12;33484:22;;33465:63;;;;33535:122;;33629:5;33623:12;33613:22;;33594:63;;;;33664:104;;33758:4;33753:3;33749:14;33741:22;;33735:33;;;;33775:129;;33894:4;33889:3;33885:14;33877:22;;33871:33;;;;33911:104;;34005:4;34000:3;33996:14;33988:22;;33982:33;;;;34023:178;;34153:6;34148:3;34141:19;34190:4;34185:3;34181:14;34166:29;;34134:67;;;;;34210:178;;34340:6;34335:3;34328:19;34377:4;34372:3;34368:14;34353:29;;34321:67;;;;;34397:162;;34511:6;34506:3;34499:19;34548:4;34543:3;34539:14;34524:29;;34492:67;;;;;34568:144;;34703:3;34688:18;;34681:31;;;;;34721:163;;34836:6;34831:3;34824:19;34873:4;34868:3;34864:14;34849:29;;34817:67;;;;;34893:145;;35029:3;35014:18;;35007:31;;;;;35046:91;;35108:24;35126:5;35108:24;;;35097:35;;35091:46;;;;35144:72;;35206:5;35195:16;;35189:27;;;;35223:121;;35296:42;35289:5;35285:54;35274:65;;35268:76;;;;35351:72;;35413:5;35402:16;;35396:27;;;;35430:81;;35501:4;35494:5;35490:16;35479:27;;35473:38;;;;35518:129;;35605:37;35636:5;35605:37;;;35592:50;;35586:61;;;;35654:163;;35754:58;35806:5;35754:58;;;35741:71;;35735:82;;;;35824:129;;35924:24;35942:5;35924:24;;;35911:37;;35905:48;;;;35960:116;;36047:24;36065:5;36047:24;;;36034:37;;36028:48;;;;36083:112;;36168:22;36184:5;36168:22;;;36155:35;;36149:46;;;;36202:116;;36289:24;36307:5;36289:24;;;36276:37;;36270:48;;;;36325:121;;36404:37;36435:5;36404:37;;;36391:50;;36385:61;;;;36453:108;;36532:24;36550:5;36532:24;;;36519:37;;36513:48;;;;36569:268;36634:1;36641:101;36655:6;36652:1;36649:13;36641:101;;;36731:1;36726:3;36722:11;36716:18;36712:1;36707:3;36703:11;36696:39;36677:2;36674:1;36670:10;36665:15;;36641:101;;;36757:6;36754:1;36751:13;36748:2;;;36822:1;36813:6;36808:3;36804:16;36797:27;36748:2;36618:219;;;;;36845:97;;36933:2;36929:7;36924:2;36917:5;36913:14;36909:28;36899:38;;36893:49;;;;36950:117;37019:24;37037:5;37019:24;;;37012:5;37009:35;36999:2;;37058:1;37055;37048:12;36999:2;36993:74;;37074:117;37143:24;37161:5;37143:24;;;37136:5;37133:35;37123:2;;37182:1;37179;37172:12;37123:2;37117:74;

Swarm Source

ipfs://ee09c4242de353a3a306dc92ae765c84ffe645e0f32c1753a3d9e541ed9a042a

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

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.