ETH Price: $3,404.12 (+1.99%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enter In Pool185786482023-11-15 17:02:59413 days ago1700067779IN
0x87e1f628...30DEb3322
0 ETH0.0079964451.92934544
Harvest185716152023-11-14 17:24:23414 days ago1699982663IN
0x87e1f628...30DEb3322
0 ETH0.0039100142.07166293
Policy Claim185711862023-11-14 15:57:59414 days ago1699977479IN
0x87e1f628...30DEb3322
0 ETH0.0043625348.49044057
Policy Claim185711762023-11-14 15:55:59414 days ago1699977359IN
0x87e1f628...30DEb3322
0 ETH0.0033489746.27768642
Enter In Pool185700862023-11-14 12:17:11414 days ago1699964231IN
0x87e1f628...30DEb3322
0 ETH0.0028317627.57025961
Harvest185700792023-11-14 12:15:47414 days ago1699964147IN
0x87e1f628...30DEb3322
0 ETH0.0027612229.71074704
Enter In Pool185585092023-11-12 21:27:23416 days ago1699824443IN
0x87e1f628...30DEb3322
0 ETH0.0028067927.32707925
Harvest185585052023-11-12 21:26:35416 days ago1699824395IN
0x87e1f628...30DEb3322
0 ETH0.0026169428.15831577
Enter In Pool185555262023-11-12 11:26:35416 days ago1699788395IN
0x87e1f628...30DEb3322
0 ETH0.0027454526.72992732
Leave From Pendi...185486382023-11-11 12:17:59417 days ago1699705079IN
0x87e1f628...30DEb3322
0 ETH0.0031271622.1210606
Harvest185486092023-11-11 12:12:11417 days ago1699704731IN
0x87e1f628...30DEb3322
0 ETH0.0020829922.41299746
Enter In Pool185383562023-11-10 1:46:47419 days ago1699580807IN
0x87e1f628...30DEb3322
0 ETH0.0036899835.93011636
Harvest185317352023-11-09 3:33:35420 days ago1699500815IN
0x87e1f628...30DEb3322
0 ETH0.0030686433.01856475
Harvest185208212023-11-07 14:58:23421 days ago1699369103IN
0x87e1f628...30DEb3322
0 ETH0.0038885441.84070869
Harvest185156672023-11-06 21:38:47422 days ago1699306727IN
0x87e1f628...30DEb3322
0 ETH0.0029841832.10971509
Enter In Pool185127112023-11-06 11:42:11422 days ago1699270931IN
0x87e1f628...30DEb3322
0 ETH0.0033130721.51358694
Enter In Pool184941772023-11-03 21:21:11425 days ago1699046471IN
0x87e1f628...30DEb3322
0 ETH0.0020721720.17721181
Harvest184941732023-11-03 21:20:23425 days ago1699046423IN
0x87e1f628...30DEb3322
0 ETH0.0017835319.19081117
Harvest184761382023-11-01 8:43:11427 days ago1698828191IN
0x87e1f628...30DEb3322
0 ETH0.0012137213.05962616
Harvest184730202023-10-31 22:14:59428 days ago1698790499IN
0x87e1f628...30DEb3322
0 ETH0.0019055120.50332652
Leave From Pendi...184685052023-10-31 7:04:35428 days ago1698735875IN
0x87e1f628...30DEb3322
0 ETH0.0021502814.92571458
Harvest184677692023-10-31 4:36:23429 days ago1698726983IN
0x87e1f628...30DEb3322
0 ETH0.001248513.42929064
Leave From Pendi...184677672023-10-31 4:35:59429 days ago1698726959IN
0x87e1f628...30DEb3322
0 ETH0.0020147814.25224942
Leave From Pool ...184624042023-10-30 10:33:23429 days ago1698662003IN
0x87e1f628...30DEb3322
0 ETH0.0030922117.53431134
Harvest184623892023-10-30 10:30:11429 days ago1698661811IN
0x87e1f628...30DEb3322
0 ETH0.0017108218.40844497
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SingleSidedReinsurancePool

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion
File 1 of 11 : SingleSidedReinsurancePool.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./interfaces/IMigration.sol";
import "./interfaces/IRiskPoolFactory.sol";
import "./interfaces/IRewarderFactory.sol";
import "./interfaces/ISingleSidedReinsurancePool.sol";
import "./interfaces/ISyntheticSSRPFactory.sol";
import "./interfaces/IRewarder.sol";
import "./interfaces/IRiskPool.sol";
import "./libraries/TransferHelper.sol";

contract SingleSidedReinsurancePool is ISingleSidedReinsurancePool, ReentrancyGuard {
    address public owner;
    address public claimAssessor;
    address public migrateTo;
    address public syntheticSSRP;

    uint256 public LOCK_TIME = 1 days;
    uint256 public constant ACC_UNO_PRECISION = 1e18;
    uint256 public STAKING_START_TIME;

    address public rewarder;
    address public override riskPool;
    struct PoolInfo {
        uint128 lastRewardBlock;
        uint128 accUnoPerShare;
        uint256 unoMultiplierPerBlock;
    }

    struct UserInfo {
        uint256 lastWithdrawTime;
        uint256 rewardDebt;
        uint256 amount;
    }

    mapping(address => UserInfo) public userInfo;

    PoolInfo public poolInfo;

    event RiskPoolCreated(address indexed _SSRP, address indexed _pool);
    event StakedInPool(address indexed _staker, address indexed _pool, uint256 _amount);
    event LeftPool(address indexed _staker, address indexed _pool, uint256 _requestAmount);
    event LogUpdatePool(uint128 _lastRewardBlock, uint256 _lpSupply, uint256 _accUnoPerShare);
    event Harvest(address indexed _user, address indexed _receiver, uint256 _amount);
    event LogLeaveFromPendingSSRP(address indexed _user, uint256 _withdrawLpAmount, uint256 _withdrawUnoAmount);
    event PolicyClaim(address indexed _user, uint256 _claimAmount);
    event LogLpTransferInSSRP(address indexed _from, address indexed _to, uint256 _amount);
    event LogCreateRewarder(address indexed _SSRP, address indexed _rewarder, address _currency);
    event LogCreateSyntheticSSRP(address indexed _SSRP, address indexed _syntheticSSRP, address indexed _lpToken);
    event LogCancelWithdrawRequest(address indexed _user, uint256 _cancelAmount, uint256 _cancelAmountInUno);
    event LogMigrate(address indexed _user, address indexed _migrateTo, uint256 _migratedAmount);

    constructor(address _owner, address _claimAssessor) {
        owner = _owner;
        claimAssessor = _claimAssessor;
        STAKING_START_TIME = block.timestamp + 3 days;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "UnoRe: Forbidden");
        _;
    }

    modifier onlyClaimAssessor() {
        require(msg.sender == claimAssessor, "UnoRe: Forbidden");
        _;
    }

    modifier isStartTime() {
        require(block.timestamp >= STAKING_START_TIME, "UnoRe: not available time");
        _;
    }

    function setRewardMultiplier(uint256 _rewardMultiplier) external onlyOwner {
        require(_rewardMultiplier > 0, "UnoRe: zero value");
        poolInfo.unoMultiplierPerBlock = _rewardMultiplier;
    }

    function setClaimAssessor(address _claimAssessor) external onlyOwner {
        require(_claimAssessor != address(0), "UnoRe: zero address");
        claimAssessor = _claimAssessor;
    }

    function setMigrateTo(address _migrateTo) external onlyOwner {
        require(_migrateTo != address(0), "UnoRe: zero address");
        migrateTo = _migrateTo;
    }

    function setMinLPCapital(uint256 _minLPCapital) external onlyOwner {
        require(_minLPCapital > 0, "UnoRe: not allow zero value");
        IRiskPool(riskPool).setMinLPCapital(_minLPCapital);
    }

    function setLockTime(uint256 _lockTime) external onlyOwner {
        require(_lockTime > 0, "UnoRe: not allow zero lock time");
        LOCK_TIME = _lockTime;
    }

    function setStakingStartTime(uint256 _startTime) external onlyOwner {
        require(_startTime > 0, "UnoRe: not allow zero start time");
        STAKING_START_TIME = _startTime;
    }

    /**
     * @dev create Risk pool with UNO from SSRP owner
     */
    function createRiskPool(
        string calldata _name,
        string calldata _symbol,
        address _factory,
        address _currency,
        uint256 _rewardMultiplier
    ) external onlyOwner nonReentrant {
        require(riskPool == address(0), "UnoRe: risk pool created already");
        riskPool = IRiskPoolFactory(_factory).newRiskPool(_name, _symbol, address(this), _currency);
        poolInfo.lastRewardBlock = uint128(block.number);
        poolInfo.accUnoPerShare = 0;
        poolInfo.unoMultiplierPerBlock = _rewardMultiplier;
        emit RiskPoolCreated(address(this), riskPool);
    }

    function createRewarder(
        address _operator,
        address _factory,
        address _currency
    ) external onlyOwner nonReentrant {
        require(_factory != address(0), "UnoRe: rewarder factory no exist");
        rewarder = IRewarderFactory(_factory).newRewarder(_operator, _currency, address(this));
        emit LogCreateRewarder(address(this), rewarder, _currency);
    }

    function createSyntheticSSRP(address _owner, address _factory) external onlyOwner nonReentrant {
        require(_owner != address(0), "UnoRe: zero owner address");
        require(_factory != address(0), "UnoRe:zero factory address");
        require(riskPool != address(0), "UnoRe:zero LP token address");
        syntheticSSRP = ISyntheticSSRPFactory(_factory).newSyntheticSSRP(_owner, riskPool);
        emit LogCreateSyntheticSSRP(address(this), syntheticSSRP, riskPool);
    }

    function migrate() external nonReentrant {
        require(migrateTo != address(0), "UnoRe: zero address");
        _harvest(msg.sender);
        uint256 amount = userInfo[msg.sender].amount;
        bool isUnLocked = block.timestamp - userInfo[msg.sender].lastWithdrawTime > LOCK_TIME;
        uint256 migratedAmount = IRiskPool(riskPool).migrateLP(msg.sender, migrateTo, isUnLocked);
        IMigration(migrateTo).onMigration(msg.sender, amount, "");
        userInfo[msg.sender].amount = 0;
        userInfo[msg.sender].rewardDebt = 0;
        emit LogMigrate(msg.sender, migrateTo, migratedAmount);
    }

    function pendingUno(address _to) external view returns (uint256 pending) {
        uint256 tokenSupply = IERC20(riskPool).totalSupply();
        uint128 accUnoPerShare = poolInfo.accUnoPerShare;
        if (block.number > poolInfo.lastRewardBlock && tokenSupply != 0) {
            uint256 blocks = block.number - uint256(poolInfo.lastRewardBlock);
            uint256 unoReward = blocks * poolInfo.unoMultiplierPerBlock;
            accUnoPerShare = accUnoPerShare + uint128((unoReward * ACC_UNO_PRECISION) / tokenSupply);
        }
        uint256 userBalance = userInfo[_to].amount;
        pending = (userBalance * uint256(accUnoPerShare)) / ACC_UNO_PRECISION - userInfo[_to].rewardDebt;
    }

    function updatePool() public override {
        if (block.number > poolInfo.lastRewardBlock) {
            uint256 tokenSupply = IERC20(riskPool).totalSupply();
            if (tokenSupply > 0) {
                uint256 blocks = block.number - uint256(poolInfo.lastRewardBlock);
                uint256 unoReward = blocks * poolInfo.unoMultiplierPerBlock;
                poolInfo.accUnoPerShare = poolInfo.accUnoPerShare + uint128(((unoReward * ACC_UNO_PRECISION) / tokenSupply));
            }
            poolInfo.lastRewardBlock = uint128(block.number);
            emit LogUpdatePool(poolInfo.lastRewardBlock, tokenSupply, poolInfo.accUnoPerShare);
        }
    }

    function enterInPool(uint256 _amount) external override isStartTime nonReentrant {
        require(_amount != 0, "UnoRe: ZERO Value");
        updatePool();
        address token = IRiskPool(riskPool).currency();
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        TransferHelper.safeTransferFrom(token, msg.sender, riskPool, _amount);
        IRiskPool(riskPool).enter(msg.sender, _amount);
        userInfo[msg.sender].rewardDebt =
            userInfo[msg.sender].rewardDebt +
            ((_amount * 1e18 * uint256(poolInfo.accUnoPerShare)) / lpPriceUno) /
            ACC_UNO_PRECISION;
        userInfo[msg.sender].amount = userInfo[msg.sender].amount + ((_amount * 1e18) / lpPriceUno);
        emit StakedInPool(msg.sender, riskPool, _amount);
    }

    /**
     * @dev WR will be in pending for 10 days at least
     */
    function leaveFromPoolInPending(uint256 _amount) external override isStartTime nonReentrant {
        _harvest(msg.sender);
        // Withdraw desired amount from pool
        uint256 amount = userInfo[msg.sender].amount;
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        (uint256 pendingAmount, , ) = IRiskPool(riskPool).getWithdrawRequest(msg.sender);
        require(((amount - pendingAmount) * lpPriceUno) / 1e18 >= _amount, "UnoRe: withdraw amount overflow");
        IRiskPool(riskPool).leaveFromPoolInPending(msg.sender, _amount);

        userInfo[msg.sender].lastWithdrawTime = block.timestamp;
        emit LeftPool(msg.sender, riskPool, _amount);
    }

    /**
     * @dev user can submit claim again and receive his funds into his wallet after 10 days since last WR.
     */
    function leaveFromPending() external override isStartTime nonReentrant {
        require(block.timestamp - userInfo[msg.sender].lastWithdrawTime >= LOCK_TIME, "UnoRe: Locked time");
        _harvest(msg.sender);
        uint256 amount = userInfo[msg.sender].amount;
        (uint256 pendingAmount, , ) = IRiskPool(riskPool).getWithdrawRequest(msg.sender);
        uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
        userInfo[msg.sender].rewardDebt =
            accumulatedUno -
            ((pendingAmount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
        (uint256 withdrawAmount, uint256 withdrawAmountInUNO) = IRiskPool(riskPool).leaveFromPending(msg.sender);
        userInfo[msg.sender].amount = amount - withdrawAmount;
        emit LogLeaveFromPendingSSRP(msg.sender, withdrawAmount, withdrawAmountInUNO);
    }

    function lpTransfer(
        address _from,
        address _to,
        uint256 _amount
    ) external override nonReentrant {
        require(msg.sender == address(riskPool), "UnoRe: not allow others transfer");
        if (_from != syntheticSSRP && _to != syntheticSSRP) {
            _harvest(_from);
            uint256 amount = userInfo[_from].amount;
            (uint256 pendingAmount, , ) = IRiskPool(riskPool).getWithdrawRequest(_from);
            require(amount - pendingAmount >= _amount, "UnoRe: balance overflow");
            uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
            userInfo[_from].rewardDebt = accumulatedUno - ((_amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
            userInfo[_from].amount = amount - _amount;

            userInfo[_to].rewardDebt =
                userInfo[_to].rewardDebt +
                ((_amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
            userInfo[_to].amount = userInfo[_to].amount + _amount;

            emit LogLpTransferInSSRP(_from, _to, _amount);
        }
    }

    function harvest(address _to) external override isStartTime nonReentrant {
        _harvest(_to);
    }

    function _harvest(address _to) private {
        updatePool();
        uint256 amount = userInfo[_to].amount;
        uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
        uint256 _pendingUno = accumulatedUno - userInfo[_to].rewardDebt;

        // Effects
        userInfo[msg.sender].rewardDebt = accumulatedUno;
        uint256 rewardAmount = 0;

        if (rewarder != address(0) && _pendingUno != 0) {
            rewardAmount = IRewarder(rewarder).onReward(_to, _pendingUno);
        }

        emit Harvest(msg.sender, _to, rewardAmount);
    }

    function cancelWithdrawRequest() external nonReentrant {
        (uint256 cancelAmount, uint256 cancelAmountInUno) = IRiskPool(riskPool).cancelWithrawRequest(msg.sender);
        emit LogCancelWithdrawRequest(msg.sender, cancelAmount, cancelAmountInUno);
    }

    function policyClaim(address _to, uint256 _amount) external onlyClaimAssessor isStartTime nonReentrant {
        require(_to != address(0), "UnoRe: zero address");
        require(_amount > 0, "UnoRe: zero amount");
        uint256 realClaimAmount = IRiskPool(riskPool).policyClaim(_to, _amount);
        emit PolicyClaim(_to, realClaimAmount);
    }

    function getStakedAmountPerUser(address _to) external view returns (uint256 unoAmount, uint256 lpAmount) {
        lpAmount = userInfo[_to].amount;
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        unoAmount = (lpAmount * lpPriceUno) / 1e18;
    }

    /**
     * @dev get withdraw request amount in pending per user in UNO
     */
    function getWithdrawRequestPerUser(address _user)
        external
        view
        returns (
            uint256 pendingAmount,
            uint256 pendingAmountInUno,
            uint256 originUnoAmount,
            uint256 requestTime
        )
    {
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        (pendingAmount, requestTime, originUnoAmount) = IRiskPool(riskPool).getWithdrawRequest(_user);
        pendingAmountInUno = (pendingAmount * lpPriceUno) / 1e18;
    }

    /**
     * @dev get total withdraw request amount in pending for the risk pool in UNO
     */
    function getTotalWithdrawPendingAmount() external view returns (uint256) {
        return IRiskPool(riskPool).getTotalWithdrawRequestAmount();
    }
}

File 2 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 11 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 11 : IMigration.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

interface IMigration {
    function onMigration(
        address who_,
        uint256 amount_,
        bytes memory data_
    ) external;
}

File 5 of 11 : IRiskPoolFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRiskPoolFactory {
    function newRiskPool(
        string calldata _name,
        string calldata _symbol,
        address _pool,
        address _currency
    ) external returns (address);
}

File 6 of 11 : IRewarderFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRewarderFactory {
    function newRewarder(
        address _operator,
        address _currency,
        address _pool
    ) external returns (address);
}

File 7 of 11 : ISingleSidedReinsurancePool.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface ISingleSidedReinsurancePool {
    function updatePool() external;

    function enterInPool(uint256 _amount) external;

    function leaveFromPoolInPending(uint256 _amount) external;

    function leaveFromPending() external;

    function harvest(address _to) external;

    function lpTransfer(
        address _from,
        address _to,
        uint256 _amount
    ) external;

    function riskPool() external view returns (address);
}

File 8 of 11 : ISyntheticSSRPFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface ISyntheticSSRPFactory {
    function newSyntheticSSRP(address _owner, address _lpToken) external returns (address);
}

File 9 of 11 : IRewarder.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.0;

interface IRewarder {
    function currency() external view returns (address);

    function onReward(address to, uint256 unoAmount) external payable returns (uint256);
}

File 10 of 11 : IRiskPool.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRiskPool {
    function enter(address _from, uint256 _amount) external;

    function leaveFromPoolInPending(address _to, uint256 _amount) external;

    function leaveFromPending(address _to) external returns (uint256, uint256);

    function cancelWithrawRequest(address _to) external returns (uint256, uint256);

    function policyClaim(address _to, uint256 _amount) external returns (uint256 realClaimAmount);

    function migrateLP(
        address _to,
        address _migrateTo,
        bool _isUnLocked
    ) external returns (uint256);

    function setMinLPCapital(uint256 _minLPCapital) external;

    function currency() external view returns (address);

    function getTotalWithdrawRequestAmount() external view returns (uint256);

    function getWithdrawRequest(address _to)
        external
        view
        returns (
            uint256,
            uint256,
            uint256
        );

    function lpPriceUno() external view returns (uint256);
}

File 11 of 11 : TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.0;

// from Uniswap TransferHelper library
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed");
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed");
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed");
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper::safeTransferETH: ETH transfer failed");
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 500
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_claimAssessor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_requestAmount","type":"uint256"}],"name":"LeftPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_cancelAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_cancelAmountInUno","type":"uint256"}],"name":"LogCancelWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSRP","type":"address"},{"indexed":true,"internalType":"address","name":"_rewarder","type":"address"},{"indexed":false,"internalType":"address","name":"_currency","type":"address"}],"name":"LogCreateRewarder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSRP","type":"address"},{"indexed":true,"internalType":"address","name":"_syntheticSSRP","type":"address"},{"indexed":true,"internalType":"address","name":"_lpToken","type":"address"}],"name":"LogCreateSyntheticSSRP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_withdrawLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_withdrawUnoAmount","type":"uint256"}],"name":"LogLeaveFromPendingSSRP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"LogLpTransferInSSRP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_migrateTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"_migratedAmount","type":"uint256"}],"name":"LogMigrate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"_lastRewardBlock","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"_lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_accUnoPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_claimAmount","type":"uint256"}],"name":"PolicyClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSRP","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"}],"name":"RiskPoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakedInPool","type":"event"},{"inputs":[],"name":"ACC_UNO_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAssessor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_currency","type":"address"}],"name":"createRewarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_currency","type":"address"},{"internalType":"uint256","name":"_rewardMultiplier","type":"uint256"}],"name":"createRiskPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"name":"createSyntheticSSRP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enterInPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getStakedAmountPerUser","outputs":[{"internalType":"uint256","name":"unoAmount","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWithdrawPendingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getWithdrawRequestPerUser","outputs":[{"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"internalType":"uint256","name":"pendingAmountInUno","type":"uint256"},{"internalType":"uint256","name":"originUnoAmount","type":"uint256"},{"internalType":"uint256","name":"requestTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leaveFromPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"leaveFromPoolInPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lpTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"pendingUno","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"policyClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"lastRewardBlock","type":"uint128"},{"internalType":"uint128","name":"accUnoPerShare","type":"uint128"},{"internalType":"uint256","name":"unoMultiplierPerBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_claimAssessor","type":"address"}],"name":"setClaimAssessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockTime","type":"uint256"}],"name":"setLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrateTo","type":"address"}],"name":"setMigrateTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLPCapital","type":"uint256"}],"name":"setMinLPCapital","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardMultiplier","type":"uint256"}],"name":"setRewardMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStakingStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syntheticSSRP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"lastWithdrawTime","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052620151806005553480156200001857600080fd5b5060405162002f1f38038062002f1f8339810160408190526200003b91620000a8565b6001600081905580546001600160a01b038085166001600160a01b03199283161790925560028054928416929091169190911790556200007f426203f480620000df565b60065550620001049050565b80516001600160a01b0381168114620000a357600080fd5b919050565b60008060408385031215620000bb578182fd5b620000c6836200008b565b9150620000d6602084016200008b565b90509250929050565b60008219821115620000ff57634e487b7160e01b81526011600452602481fd5b500190565b612e0b80620001146000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639336f4061161011a578063bc8f8828116100ad578063dcc3e06e1161007c578063dcc3e06e146103f1578063e08c5de1146103f9578063e19e71681461040c578063e3161ddd14610414578063e3824a381461041c576101fb565b8063bc8f8828146103d1578063c4e5dacf146103d9578063c6e89915146103e1578063dba6f962146103e9576101fb565b8063a3bdd632116100e9578063a3bdd63214610382578063ae04d45d1461038a578063af16d6e01461039d578063ba619457146103b0576101fb565b80639336f4061461033157806393b6b86c1461035457806398c6e760146103675780639cdf6c271461036f576101fb565b80635a2f3d091161019257806389919b711161016157806389919b71146103065780638ba04b171461030e5780638da5cb5b146103215780638fd3ab8014610329576101fb565b80635a2f3d09146102b65780635d90bad9146102cd578063736ec05c146102e05780638395206c146102f3576101fb565b80631959a002116101ce5780631959a0021461024e5780632e4a014214610279578063413d9c3a1461028c5780634c032366146102a1576101fb565b80630bd075a1146102005780630e5c011e146102155780630e9ae42014610228578063157f71ed1461023b575b600080fd5b61021361020e36600461260a565b61042f565b005b610213610223366004612421565b610487565b6102136102363660046124e2565b6104e2565b610213610249366004612421565b6107da565b61026161025c366004612421565b61084c565b60405161027093929190612cdd565b60405180910390f35b610213610287366004612522565b61086d565b6102946109f9565b6040516102709190612cc6565b6102a96109ff565b60405161027091906126ed565b6102be610a0e565b60405161027093929190612c7f565b6102136102db36600461260a565b610a2c565b6102136102ee366004612421565b610a7b565b61021361030136600461260a565b610aed565b610294610d6c565b61021361031c36600461256d565b610d78565b6102a9610f04565b610213610f13565b61034461033f366004612421565b6110fc565b6040516102709493929190612cf3565b61021361036236600461260a565b61123a565b6102a96112e9565b61021361037d366004612460565b6112f8565b6102946114a0565b61021361039836600461260a565b611522565b6102136103ab366004612498565b611571565b6103c36103be366004612421565b6116be565b604051610270929190612ccf565b610213611779565b6102a9611a17565b6102a9611a26565b610294611a35565b6102a9611a3b565b610294610407366004612421565b611a4a565b610213611bb4565b610213611caf565b61021361042a36600461260a565b611e45565b6001546001600160a01b031633146104625760405162461bcd60e51b815260040161045990612b39565b60405180910390fd5b600081116104825760405162461bcd60e51b8152600401610459906129ba565b600b55565b6006544210156104a95760405162461bcd60e51b815260040161045990612ba5565b600260005414156104cc5760405162461bcd60e51b815260040161045990612bdc565b60026000556104da81612143565b506001600055565b600260005414156105055760405162461bcd60e51b815260040161045990612bdc565b60026000556008546001600160a01b031633146105345760405162461bcd60e51b815260040161045990612c4a565b6004546001600160a01b0384811691161480159061056057506004546001600160a01b03838116911614155b156107d05761056e83612143565b6001600160a01b03808416600090815260096020526040808220600201546008549151631665744b60e11b815290939190911690632ccae896906105b69088906004016126ed565b60606040518083038186803b1580156105ce57600080fd5b505afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610606919061265d565b505090508281836106179190612d90565b10156106355760405162461bcd60e51b815260040161045990612917565b600a54600090670de0b6b3a76400009061065f90600160801b90046001600160801b031685612d71565b6106699190612d51565b600a54909150670de0b6b3a76400009061069390600160801b90046001600160801b031686612d71565b61069d9190612d51565b6106a79082612d90565b6001600160a01b0387166000908152600960205260409020600101556106cd8484612d90565b6001600160a01b038716600090815260096020526040902060020155600a54670de0b6b3a76400009061071090600160801b90046001600160801b031686612d71565b61071a9190612d51565b6001600160a01b0386166000908152600960205260409020600101546107409190612d39565b6001600160a01b038616600090815260096020526040902060018101919091556002015461076f908590612d39565b6001600160a01b0380871660008181526009602052604090819020600201939093559151908816907fe97af49bf17de46bed3f953a242569bed68114f89f39c1afe4012bba1c5963d4906107c4908890612cc6565b60405180910390a35050505b5050600160005550565b6001546001600160a01b031633146108045760405162461bcd60e51b815260040161045990612b39565b6001600160a01b03811661082a5760405162461bcd60e51b815260040161045990612815565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60096020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b031633146108975760405162461bcd60e51b815260040161045990612b39565b6006544210156108b95760405162461bcd60e51b815260040161045990612ba5565b600260005414156108dc5760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166109075760405162461bcd60e51b815260040161045990612815565b600081116109275760405162461bcd60e51b815260040161045990612a26565b60085460405163172500a160e11b81526000916001600160a01b031690632e4a01429061095a9086908690600401612786565b602060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac9190612622565b9050826001600160a01b03167f6420c9536b9a539410a930b1fd8d115dc296d8b71426dcc0ab64f2f736b7d59f826040516109e79190612cc6565b60405180910390a25050600160005550565b60055481565b6004546001600160a01b031681565b600a54600b546001600160801b0380831692600160801b9004169083565b6001546001600160a01b03163314610a565760405162461bcd60e51b815260040161045990612b39565b60008111610a765760405162461bcd60e51b8152600401610459906129f1565b600655565b6001546001600160a01b03163314610aa55760405162461bcd60e51b815260040161045990612b39565b6001600160a01b038116610acb5760405162461bcd60e51b815260040161045990612815565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600654421015610b0f5760405162461bcd60e51b815260040161045990612ba5565b60026000541415610b325760405162461bcd60e51b815260040161045990612bdc565b6002600055610b4033612143565b336000908152600960209081526040808320600201546008548251627a9fd960e91b815292519194936001600160a01b039091169263f53fb2009260048083019392829003018186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190612622565b600854604051631665744b60e11b81529192506000916001600160a01b0390911690632ccae89690610c049033906004016126ed565b60606040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c54919061265d565b5050905083670de0b6b3a7640000838386610c6f9190612d90565b610c799190612d71565b610c839190612d51565b1015610ca15760405162461bcd60e51b815260040161045990612883565b6008546040516323de6d9560e11b81526001600160a01b03909116906347bcdb2a90610cd39033908890600401612786565b600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b5050336000818152600960205260409081902042905560085490516001600160a01b0390911693509091507f940a14c75c418e7230a2e65567722d2dda5a6713cf71b369bd0fa219fdc1ac5e90610d59908890612cc6565b60405180910390a3505060016000555050565b670de0b6b3a764000081565b6001546001600160a01b03163314610da25760405162461bcd60e51b815260040161045990612b39565b60026000541415610dc55760405162461bcd60e51b815260040161045990612bdc565b60026000556008546001600160a01b031615610df35760405162461bcd60e51b81526004016104599061294e565b604051630d98e31f60e01b81526001600160a01b03841690630d98e31f90610e29908a908a908a908a9030908a906004016127c7565b602060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190612444565b600880546001600160a01b0319166001600160a01b039283161790819055600a80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117169055600b83905560405191169030907f184d7691bf4a73930a21086fa1bdf0ee3075421531a60730288325fd5838021790600090a3505060016000555050505050565b6001546001600160a01b031681565b60026000541415610f365760405162461bcd60e51b815260040161045990612bdc565b60026000556003546001600160a01b0316610f635760405162461bcd60e51b815260040161045990612815565b610f6c33612143565b3360009081526009602052604081206002810154600554915490929190610f939042612d90565b600854600354604051633613302f60e01b81529390921193506000926001600160a01b0391821692633613302f92610fd592339290911690879060040161273e565b602060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110279190612622565b60035460405163ed59344b60e01b81529192506001600160a01b03169063ed59344b9061105a903390879060040161279f565b600060405180830381600087803b15801561107457600080fd5b505af1158015611088573d6000803e3d6000fd5b505033600081815260096020526040808220600281018390556001019190915560035490516001600160a01b0390911693509091507ff0fee1f70845d356d6a3e0baa0944ce846437b6469ea89416dad2cd7067919a4906110ea908590612cc6565b60405180910390a35050600160005550565b6000806000806000600860009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190612622565b600854604051631665744b60e11b81529192506001600160a01b031690632ccae896906111bb9089906004016126ed565b60606040518083038186803b1580156111d357600080fd5b505afa1580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b919061265d565b9196509093509150670de0b6b3a76400006112268287612d71565b6112309190612d51565b9350509193509193565b6001546001600160a01b031633146112645760405162461bcd60e51b815260040161045990612b39565b600081116112845760405162461bcd60e51b815260040161045990612c13565b6008546040516324edae1b60e21b81526001600160a01b03909116906393b6b86c906112b4908490600401612cc6565b600060405180830381600087803b1580156112ce57600080fd5b505af11580156112e2573d6000803e3d6000fd5b5050505050565b6003546001600160a01b031681565b6001546001600160a01b031633146113225760405162461bcd60e51b815260040161045990612b39565b600260005414156113455760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166113705760405162461bcd60e51b815260040161045990612a94565b6001600160a01b0381166113965760405162461bcd60e51b81526004016104599061284c565b6008546001600160a01b03166113be5760405162461bcd60e51b815260040161045990612a5d565b6008546040516377b3d99760e01b81526001600160a01b03808416926377b3d997926113f09287921690600401612701565b602060405180830381600087803b15801561140a57600080fd5b505af115801561141e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114429190612444565b600480546001600160a01b0319166001600160a01b03928316179081905560085460405190831692919091169030907f3d2362862a7867eb0f64552c1fa638b6adf3907a7defe349eab238f6a0b2d83190600090a450506001600055565b6008546040805163e95aa8d360e01b815290516000926001600160a01b03169163e95aa8d3916004808301926020929190829003018186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151d9190612622565b905090565b6001546001600160a01b0316331461154c5760405162461bcd60e51b815260040161045990612b39565b6000811161156c5760405162461bcd60e51b815260040161045990612acb565b600555565b6001546001600160a01b0316331461159b5760405162461bcd60e51b815260040161045990612b39565b600260005414156115be5760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166115e95760405162461bcd60e51b815260040161045990612b70565b6040516369ee745160e01b81526001600160a01b038316906369ee7451906116199086908590309060040161271b565b602060405180830381600087803b15801561163357600080fd5b505af1158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b9190612444565b600780546001600160a01b0319166001600160a01b03928316179081905560405191169030907f6c409a36847a0a3870deae25f656f4300d45957d2643fc27faab145e19cfcf1b906110ea9085906126ed565b6001600160a01b038082166000908152600960209081526040808320600201546008548251627a9fd960e91b81529251949591948694919092169263f53fb2009260048083019392829003018186803b15801561171a57600080fd5b505afa15801561172e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117529190612622565b9050670de0b6b3a76400006117678284612d71565b6117719190612d51565b925050915091565b60065442101561179b5760405162461bcd60e51b815260040161045990612ba5565b600260005414156117be5760405162461bcd60e51b815260040161045990612bdc565b6002600090815560055433825260096020526040909120546117e09042612d90565b10156117fe5760405162461bcd60e51b815260040161045990612983565b61180733612143565b33600081815260096020526040808220600201546008549151631665744b60e11b815290936001600160a01b0390921691632ccae8969161184b91906004016126ed565b60606040518083038186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189b919061265d565b5050600a54909150600090670de0b6b3a7640000906118ca90600160801b90046001600160801b031685612d71565b6118d49190612d51565b600a54909150670de0b6b3a7640000906118fe90600160801b90046001600160801b031684612d71565b6119089190612d51565b6119129082612d90565b3360008181526009602052604080822060010193909355600854925163b20ecd1560e01b8152909283926001600160a01b039091169163b20ecd159161195a916004016126ed565b6040805180830381600087803b15801561197357600080fd5b505af1158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab919061263a565b90925090506119ba8286612d90565b33600081815260096020526040908190206002019290925590517f617c612e91653c86cd4538e3de94b98c8dd628b41e343380d1cf858f95c0674a90611a039085908590612ccf565b60405180910390a250506001600055505050565b6008546001600160a01b031681565b6002546001600160a01b031681565b60065481565b6007546001600160a01b031681565b600080600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9b57600080fd5b505afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad39190612622565b600a549091506001600160801b03600160801b82048116911643118015611af957508115155b15611b5857600a54600090611b17906001600160801b031643612d90565b600b54909150600090611b2a9083612d71565b905083611b3f670de0b6b3a764000083612d71565b611b499190612d51565b611b539084612d0e565b925050505b6001600160a01b03841660009081526009602052604090206002810154600190910154670de0b6b3a7640000611b976001600160801b03851684612d71565b611ba19190612d51565b611bab9190612d90565b95945050505050565b60026000541415611bd75760405162461bcd60e51b815260040161045990612bdc565b600260009081556008546040516306e6829960e51b815282916001600160a01b03169063dcd0532090611c0e9033906004016126ed565b6040805180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f919061263a565b91509150336001600160a01b03167f09c6481cb228ea7f61ceb67c8e708038eb74bbb68cfcc54a9cfca199087ecfb78383604051611c9e929190612ccf565b60405180910390a250506001600055565b600a546001600160801b0316431115611e4357600854604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190612622565b90508015611dcf57600a54600090611d60906001600160801b031643612d90565b600b54909150600090611d739083612d71565b905082611d88670de0b6b3a764000083612d71565b611d929190612d51565b600a54611daf9190600160801b90046001600160801b0316612d0e565b600a80546001600160801b03928316600160801b02921691909117905550505b600a80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117918290556040517f982b813c7d00a9ffce9441ba40f429b2e4a35068d75532f496d0c63585c2fa6892611e3992818116928692600160801b900490911690612ca3565b60405180910390a1505b565b600654421015611e675760405162461bcd60e51b815260040161045990612ba5565b60026000541415611e8a5760405162461bcd60e51b815260040161045990612bdc565b600260005580611eac5760405162461bcd60e51b815260040161045990612b02565b611eb4611caf565b6008546040805163e5a6b10f60e01b815290516000926001600160a01b03169163e5a6b10f916004808301926020929190829003018186803b158015611ef957600080fd5b505afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190612444565b90506000600860009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8357600080fd5b505afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190612622565b600854909150611fd890839033906001600160a01b0316866122d5565b600854604051637e348b7d60e01b81526001600160a01b0390911690637e348b7d9061200a9033908790600401612786565b600060405180830381600087803b15801561202457600080fd5b505af1158015612038573d6000803e3d6000fd5b5050600a54670de0b6b3a76400009250839150600160801b90046001600160801b03166120658684612d71565b61206f9190612d71565b6120799190612d51565b6120839190612d51565b336000908152600960205260409020600101546120a09190612d39565b33600090815260096020526040902060010155806120c684670de0b6b3a7640000612d71565b6120d09190612d51565b336000908152600960205260409020600201546120ed9190612d39565b33600081815260096020526040908190206002019290925560085491516001600160a01b03909216917fd3dba7b5565b16b7749db7d1938410a636e3c7a6ea46ed8ce7e259e19f2f3b9f906110ea908790612cc6565b61214b611caf565b6001600160a01b038116600090815260096020526040812060020154600a54909190670de0b6b3a76400009061219190600160801b90046001600160801b031684612d71565b61219b9190612d51565b6001600160a01b038416600090815260096020526040812060010154919250906121c59083612d90565b336000908152600960205260408120600101849055600754919250906001600160a01b0316158015906121f757508115155b156122835760075460405163186e465160e31b81526001600160a01b039091169063c37232889061222e9088908690600401612786565b602060405180830381600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122809190612622565b90505b846001600160a01b0316336001600160a01b03167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec26797836040516122c69190612cc6565b60405180910390a35050505050565b600080856001600160a01b03166323b872dd8686866040516024016122fc93929190612762565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161234a91906126b4565b6000604051808303816000865af19150503d8060008114612387576040519150601f19603f3d011682016040523d82523d6000602084013e61238c565b606091505b50915091508180156123b65750805115806123b65750808060200190518101906123b6919061254d565b6123d25760405162461bcd60e51b8152600401610459906128ba565b505050505050565b60008083601f8401126123eb578182fd5b50813567ffffffffffffffff811115612402578182fd5b60208301915083602082850101111561241a57600080fd5b9250929050565b600060208284031215612432578081fd5b813561243d81612dbd565b9392505050565b600060208284031215612455578081fd5b815161243d81612dbd565b60008060408385031215612472578081fd5b823561247d81612dbd565b9150602083013561248d81612dbd565b809150509250929050565b6000806000606084860312156124ac578081fd5b83356124b781612dbd565b925060208401356124c781612dbd565b915060408401356124d781612dbd565b809150509250925092565b6000806000606084860312156124f6578283fd5b833561250181612dbd565b9250602084013561251181612dbd565b929592945050506040919091013590565b60008060408385031215612534578182fd5b823561253f81612dbd565b946020939093013593505050565b60006020828403121561255e578081fd5b8151801515811461243d578182fd5b600080600080600080600060a0888a031215612587578283fd5b873567ffffffffffffffff8082111561259e578485fd5b6125aa8b838c016123da565b909950975060208a01359150808211156125c2578485fd5b506125cf8a828b016123da565b90965094505060408801356125e381612dbd565b925060608801356125f381612dbd565b809250506080880135905092959891949750929550565b60006020828403121561261b578081fd5b5035919050565b600060208284031215612633578081fd5b5051919050565b6000806040838503121561264c578182fd5b505080516020909101519092909150565b600080600060608486031215612671578283fd5b8351925060208401519150604084015190509250925092565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251815b818110156126d457602081860181015185830152016126ba565b818111156126e25782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b6000608082526127db60808301888a61268a565b82810360208401526127ee81878961268a565b9150506001600160a01b038085166040840152808416606084015250979650505050505050565b60208082526013908201527f556e6f52653a207a65726f206164647265737300000000000000000000000000604082015260600190565b6020808252601a908201527f556e6f52653a7a65726f20666163746f72792061646472657373000000000000604082015260600190565b6020808252601f908201527f556e6f52653a20776974686472617720616d6f756e74206f766572666c6f7700604082015260600190565b60208082526031908201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260408201527f616e7366657246726f6d206661696c6564000000000000000000000000000000606082015260800190565b60208082526017908201527f556e6f52653a2062616c616e6365206f766572666c6f77000000000000000000604082015260600190565b6020808252818101527f556e6f52653a207269736b20706f6f6c206372656174656420616c7265616479604082015260600190565b60208082526012908201527f556e6f52653a204c6f636b65642074696d650000000000000000000000000000604082015260600190565b60208082526011908201527f556e6f52653a207a65726f2076616c7565000000000000000000000000000000604082015260600190565b6020808252818101527f556e6f52653a206e6f7420616c6c6f77207a65726f2073746172742074696d65604082015260600190565b60208082526012908201527f556e6f52653a207a65726f20616d6f756e740000000000000000000000000000604082015260600190565b6020808252601b908201527f556e6f52653a7a65726f204c5020746f6b656e20616464726573730000000000604082015260600190565b60208082526019908201527f556e6f52653a207a65726f206f776e6572206164647265737300000000000000604082015260600190565b6020808252601f908201527f556e6f52653a206e6f7420616c6c6f77207a65726f206c6f636b2074696d6500604082015260600190565b60208082526011908201527f556e6f52653a205a45524f2056616c7565000000000000000000000000000000604082015260600190565b60208082526010908201527f556e6f52653a20466f7262696464656e00000000000000000000000000000000604082015260600190565b6020808252818101527f556e6f52653a20726577617264657220666163746f7279206e6f206578697374604082015260600190565b60208082526019908201527f556e6f52653a206e6f7420617661696c61626c652074696d6500000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601b908201527f556e6f52653a206e6f7420616c6c6f77207a65726f2076616c75650000000000604082015260600190565b6020808252818101527f556e6f52653a206e6f7420616c6c6f77206f7468657273207472616e73666572604082015260600190565b6001600160801b039384168152919092166020820152604081019190915260600190565b6001600160801b0393841681526020810192909252909116604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60006001600160801b03808316818516808303821115612d3057612d30612da7565b01949350505050565b60008219821115612d4c57612d4c612da7565b500190565b600082612d6c57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d8b57612d8b612da7565b500290565b600082821015612da257612da2612da7565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612dd257600080fd5b5056fea26469706673582212204b84feadf47b5c3f0986ff9deef2077a7eadaa903b0aa631febc80576797bd9664736f6c634300080000330000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f0000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639336f4061161011a578063bc8f8828116100ad578063dcc3e06e1161007c578063dcc3e06e146103f1578063e08c5de1146103f9578063e19e71681461040c578063e3161ddd14610414578063e3824a381461041c576101fb565b8063bc8f8828146103d1578063c4e5dacf146103d9578063c6e89915146103e1578063dba6f962146103e9576101fb565b8063a3bdd632116100e9578063a3bdd63214610382578063ae04d45d1461038a578063af16d6e01461039d578063ba619457146103b0576101fb565b80639336f4061461033157806393b6b86c1461035457806398c6e760146103675780639cdf6c271461036f576101fb565b80635a2f3d091161019257806389919b711161016157806389919b71146103065780638ba04b171461030e5780638da5cb5b146103215780638fd3ab8014610329576101fb565b80635a2f3d09146102b65780635d90bad9146102cd578063736ec05c146102e05780638395206c146102f3576101fb565b80631959a002116101ce5780631959a0021461024e5780632e4a014214610279578063413d9c3a1461028c5780634c032366146102a1576101fb565b80630bd075a1146102005780630e5c011e146102155780630e9ae42014610228578063157f71ed1461023b575b600080fd5b61021361020e36600461260a565b61042f565b005b610213610223366004612421565b610487565b6102136102363660046124e2565b6104e2565b610213610249366004612421565b6107da565b61026161025c366004612421565b61084c565b60405161027093929190612cdd565b60405180910390f35b610213610287366004612522565b61086d565b6102946109f9565b6040516102709190612cc6565b6102a96109ff565b60405161027091906126ed565b6102be610a0e565b60405161027093929190612c7f565b6102136102db36600461260a565b610a2c565b6102136102ee366004612421565b610a7b565b61021361030136600461260a565b610aed565b610294610d6c565b61021361031c36600461256d565b610d78565b6102a9610f04565b610213610f13565b61034461033f366004612421565b6110fc565b6040516102709493929190612cf3565b61021361036236600461260a565b61123a565b6102a96112e9565b61021361037d366004612460565b6112f8565b6102946114a0565b61021361039836600461260a565b611522565b6102136103ab366004612498565b611571565b6103c36103be366004612421565b6116be565b604051610270929190612ccf565b610213611779565b6102a9611a17565b6102a9611a26565b610294611a35565b6102a9611a3b565b610294610407366004612421565b611a4a565b610213611bb4565b610213611caf565b61021361042a36600461260a565b611e45565b6001546001600160a01b031633146104625760405162461bcd60e51b815260040161045990612b39565b60405180910390fd5b600081116104825760405162461bcd60e51b8152600401610459906129ba565b600b55565b6006544210156104a95760405162461bcd60e51b815260040161045990612ba5565b600260005414156104cc5760405162461bcd60e51b815260040161045990612bdc565b60026000556104da81612143565b506001600055565b600260005414156105055760405162461bcd60e51b815260040161045990612bdc565b60026000556008546001600160a01b031633146105345760405162461bcd60e51b815260040161045990612c4a565b6004546001600160a01b0384811691161480159061056057506004546001600160a01b03838116911614155b156107d05761056e83612143565b6001600160a01b03808416600090815260096020526040808220600201546008549151631665744b60e11b815290939190911690632ccae896906105b69088906004016126ed565b60606040518083038186803b1580156105ce57600080fd5b505afa1580156105e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610606919061265d565b505090508281836106179190612d90565b10156106355760405162461bcd60e51b815260040161045990612917565b600a54600090670de0b6b3a76400009061065f90600160801b90046001600160801b031685612d71565b6106699190612d51565b600a54909150670de0b6b3a76400009061069390600160801b90046001600160801b031686612d71565b61069d9190612d51565b6106a79082612d90565b6001600160a01b0387166000908152600960205260409020600101556106cd8484612d90565b6001600160a01b038716600090815260096020526040902060020155600a54670de0b6b3a76400009061071090600160801b90046001600160801b031686612d71565b61071a9190612d51565b6001600160a01b0386166000908152600960205260409020600101546107409190612d39565b6001600160a01b038616600090815260096020526040902060018101919091556002015461076f908590612d39565b6001600160a01b0380871660008181526009602052604090819020600201939093559151908816907fe97af49bf17de46bed3f953a242569bed68114f89f39c1afe4012bba1c5963d4906107c4908890612cc6565b60405180910390a35050505b5050600160005550565b6001546001600160a01b031633146108045760405162461bcd60e51b815260040161045990612b39565b6001600160a01b03811661082a5760405162461bcd60e51b815260040161045990612815565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60096020526000908152604090208054600182015460029092015490919083565b6002546001600160a01b031633146108975760405162461bcd60e51b815260040161045990612b39565b6006544210156108b95760405162461bcd60e51b815260040161045990612ba5565b600260005414156108dc5760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166109075760405162461bcd60e51b815260040161045990612815565b600081116109275760405162461bcd60e51b815260040161045990612a26565b60085460405163172500a160e11b81526000916001600160a01b031690632e4a01429061095a9086908690600401612786565b602060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac9190612622565b9050826001600160a01b03167f6420c9536b9a539410a930b1fd8d115dc296d8b71426dcc0ab64f2f736b7d59f826040516109e79190612cc6565b60405180910390a25050600160005550565b60055481565b6004546001600160a01b031681565b600a54600b546001600160801b0380831692600160801b9004169083565b6001546001600160a01b03163314610a565760405162461bcd60e51b815260040161045990612b39565b60008111610a765760405162461bcd60e51b8152600401610459906129f1565b600655565b6001546001600160a01b03163314610aa55760405162461bcd60e51b815260040161045990612b39565b6001600160a01b038116610acb5760405162461bcd60e51b815260040161045990612815565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600654421015610b0f5760405162461bcd60e51b815260040161045990612ba5565b60026000541415610b325760405162461bcd60e51b815260040161045990612bdc565b6002600055610b4033612143565b336000908152600960209081526040808320600201546008548251627a9fd960e91b815292519194936001600160a01b039091169263f53fb2009260048083019392829003018186803b158015610b9657600080fd5b505afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190612622565b600854604051631665744b60e11b81529192506000916001600160a01b0390911690632ccae89690610c049033906004016126ed565b60606040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c54919061265d565b5050905083670de0b6b3a7640000838386610c6f9190612d90565b610c799190612d71565b610c839190612d51565b1015610ca15760405162461bcd60e51b815260040161045990612883565b6008546040516323de6d9560e11b81526001600160a01b03909116906347bcdb2a90610cd39033908890600401612786565b600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b5050336000818152600960205260409081902042905560085490516001600160a01b0390911693509091507f940a14c75c418e7230a2e65567722d2dda5a6713cf71b369bd0fa219fdc1ac5e90610d59908890612cc6565b60405180910390a3505060016000555050565b670de0b6b3a764000081565b6001546001600160a01b03163314610da25760405162461bcd60e51b815260040161045990612b39565b60026000541415610dc55760405162461bcd60e51b815260040161045990612bdc565b60026000556008546001600160a01b031615610df35760405162461bcd60e51b81526004016104599061294e565b604051630d98e31f60e01b81526001600160a01b03841690630d98e31f90610e29908a908a908a908a9030908a906004016127c7565b602060405180830381600087803b158015610e4357600080fd5b505af1158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190612444565b600880546001600160a01b0319166001600160a01b039283161790819055600a80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117169055600b83905560405191169030907f184d7691bf4a73930a21086fa1bdf0ee3075421531a60730288325fd5838021790600090a3505060016000555050505050565b6001546001600160a01b031681565b60026000541415610f365760405162461bcd60e51b815260040161045990612bdc565b60026000556003546001600160a01b0316610f635760405162461bcd60e51b815260040161045990612815565b610f6c33612143565b3360009081526009602052604081206002810154600554915490929190610f939042612d90565b600854600354604051633613302f60e01b81529390921193506000926001600160a01b0391821692633613302f92610fd592339290911690879060040161273e565b602060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110279190612622565b60035460405163ed59344b60e01b81529192506001600160a01b03169063ed59344b9061105a903390879060040161279f565b600060405180830381600087803b15801561107457600080fd5b505af1158015611088573d6000803e3d6000fd5b505033600081815260096020526040808220600281018390556001019190915560035490516001600160a01b0390911693509091507ff0fee1f70845d356d6a3e0baa0944ce846437b6469ea89416dad2cd7067919a4906110ea908590612cc6565b60405180910390a35050600160005550565b6000806000806000600860009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b15801561115257600080fd5b505afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190612622565b600854604051631665744b60e11b81529192506001600160a01b031690632ccae896906111bb9089906004016126ed565b60606040518083038186803b1580156111d357600080fd5b505afa1580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b919061265d565b9196509093509150670de0b6b3a76400006112268287612d71565b6112309190612d51565b9350509193509193565b6001546001600160a01b031633146112645760405162461bcd60e51b815260040161045990612b39565b600081116112845760405162461bcd60e51b815260040161045990612c13565b6008546040516324edae1b60e21b81526001600160a01b03909116906393b6b86c906112b4908490600401612cc6565b600060405180830381600087803b1580156112ce57600080fd5b505af11580156112e2573d6000803e3d6000fd5b5050505050565b6003546001600160a01b031681565b6001546001600160a01b031633146113225760405162461bcd60e51b815260040161045990612b39565b600260005414156113455760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166113705760405162461bcd60e51b815260040161045990612a94565b6001600160a01b0381166113965760405162461bcd60e51b81526004016104599061284c565b6008546001600160a01b03166113be5760405162461bcd60e51b815260040161045990612a5d565b6008546040516377b3d99760e01b81526001600160a01b03808416926377b3d997926113f09287921690600401612701565b602060405180830381600087803b15801561140a57600080fd5b505af115801561141e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114429190612444565b600480546001600160a01b0319166001600160a01b03928316179081905560085460405190831692919091169030907f3d2362862a7867eb0f64552c1fa638b6adf3907a7defe349eab238f6a0b2d83190600090a450506001600055565b6008546040805163e95aa8d360e01b815290516000926001600160a01b03169163e95aa8d3916004808301926020929190829003018186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151d9190612622565b905090565b6001546001600160a01b0316331461154c5760405162461bcd60e51b815260040161045990612b39565b6000811161156c5760405162461bcd60e51b815260040161045990612acb565b600555565b6001546001600160a01b0316331461159b5760405162461bcd60e51b815260040161045990612b39565b600260005414156115be5760405162461bcd60e51b815260040161045990612bdc565b60026000556001600160a01b0382166115e95760405162461bcd60e51b815260040161045990612b70565b6040516369ee745160e01b81526001600160a01b038316906369ee7451906116199086908590309060040161271b565b602060405180830381600087803b15801561163357600080fd5b505af1158015611647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166b9190612444565b600780546001600160a01b0319166001600160a01b03928316179081905560405191169030907f6c409a36847a0a3870deae25f656f4300d45957d2643fc27faab145e19cfcf1b906110ea9085906126ed565b6001600160a01b038082166000908152600960209081526040808320600201546008548251627a9fd960e91b81529251949591948694919092169263f53fb2009260048083019392829003018186803b15801561171a57600080fd5b505afa15801561172e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117529190612622565b9050670de0b6b3a76400006117678284612d71565b6117719190612d51565b925050915091565b60065442101561179b5760405162461bcd60e51b815260040161045990612ba5565b600260005414156117be5760405162461bcd60e51b815260040161045990612bdc565b6002600090815560055433825260096020526040909120546117e09042612d90565b10156117fe5760405162461bcd60e51b815260040161045990612983565b61180733612143565b33600081815260096020526040808220600201546008549151631665744b60e11b815290936001600160a01b0390921691632ccae8969161184b91906004016126ed565b60606040518083038186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189b919061265d565b5050600a54909150600090670de0b6b3a7640000906118ca90600160801b90046001600160801b031685612d71565b6118d49190612d51565b600a54909150670de0b6b3a7640000906118fe90600160801b90046001600160801b031684612d71565b6119089190612d51565b6119129082612d90565b3360008181526009602052604080822060010193909355600854925163b20ecd1560e01b8152909283926001600160a01b039091169163b20ecd159161195a916004016126ed565b6040805180830381600087803b15801561197357600080fd5b505af1158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab919061263a565b90925090506119ba8286612d90565b33600081815260096020526040908190206002019290925590517f617c612e91653c86cd4538e3de94b98c8dd628b41e343380d1cf858f95c0674a90611a039085908590612ccf565b60405180910390a250506001600055505050565b6008546001600160a01b031681565b6002546001600160a01b031681565b60065481565b6007546001600160a01b031681565b600080600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9b57600080fd5b505afa158015611aaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad39190612622565b600a549091506001600160801b03600160801b82048116911643118015611af957508115155b15611b5857600a54600090611b17906001600160801b031643612d90565b600b54909150600090611b2a9083612d71565b905083611b3f670de0b6b3a764000083612d71565b611b499190612d51565b611b539084612d0e565b925050505b6001600160a01b03841660009081526009602052604090206002810154600190910154670de0b6b3a7640000611b976001600160801b03851684612d71565b611ba19190612d51565b611bab9190612d90565b95945050505050565b60026000541415611bd75760405162461bcd60e51b815260040161045990612bdc565b600260009081556008546040516306e6829960e51b815282916001600160a01b03169063dcd0532090611c0e9033906004016126ed565b6040805180830381600087803b158015611c2757600080fd5b505af1158015611c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5f919061263a565b91509150336001600160a01b03167f09c6481cb228ea7f61ceb67c8e708038eb74bbb68cfcc54a9cfca199087ecfb78383604051611c9e929190612ccf565b60405180910390a250506001600055565b600a546001600160801b0316431115611e4357600854604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611d0757600080fd5b505afa158015611d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3f9190612622565b90508015611dcf57600a54600090611d60906001600160801b031643612d90565b600b54909150600090611d739083612d71565b905082611d88670de0b6b3a764000083612d71565b611d929190612d51565b600a54611daf9190600160801b90046001600160801b0316612d0e565b600a80546001600160801b03928316600160801b02921691909117905550505b600a80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117918290556040517f982b813c7d00a9ffce9441ba40f429b2e4a35068d75532f496d0c63585c2fa6892611e3992818116928692600160801b900490911690612ca3565b60405180910390a1505b565b600654421015611e675760405162461bcd60e51b815260040161045990612ba5565b60026000541415611e8a5760405162461bcd60e51b815260040161045990612bdc565b600260005580611eac5760405162461bcd60e51b815260040161045990612b02565b611eb4611caf565b6008546040805163e5a6b10f60e01b815290516000926001600160a01b03169163e5a6b10f916004808301926020929190829003018186803b158015611ef957600080fd5b505afa158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f319190612444565b90506000600860009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8357600080fd5b505afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190612622565b600854909150611fd890839033906001600160a01b0316866122d5565b600854604051637e348b7d60e01b81526001600160a01b0390911690637e348b7d9061200a9033908790600401612786565b600060405180830381600087803b15801561202457600080fd5b505af1158015612038573d6000803e3d6000fd5b5050600a54670de0b6b3a76400009250839150600160801b90046001600160801b03166120658684612d71565b61206f9190612d71565b6120799190612d51565b6120839190612d51565b336000908152600960205260409020600101546120a09190612d39565b33600090815260096020526040902060010155806120c684670de0b6b3a7640000612d71565b6120d09190612d51565b336000908152600960205260409020600201546120ed9190612d39565b33600081815260096020526040908190206002019290925560085491516001600160a01b03909216917fd3dba7b5565b16b7749db7d1938410a636e3c7a6ea46ed8ce7e259e19f2f3b9f906110ea908790612cc6565b61214b611caf565b6001600160a01b038116600090815260096020526040812060020154600a54909190670de0b6b3a76400009061219190600160801b90046001600160801b031684612d71565b61219b9190612d51565b6001600160a01b038416600090815260096020526040812060010154919250906121c59083612d90565b336000908152600960205260408120600101849055600754919250906001600160a01b0316158015906121f757508115155b156122835760075460405163186e465160e31b81526001600160a01b039091169063c37232889061222e9088908690600401612786565b602060405180830381600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122809190612622565b90505b846001600160a01b0316336001600160a01b03167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec26797836040516122c69190612cc6565b60405180910390a35050505050565b600080856001600160a01b03166323b872dd8686866040516024016122fc93929190612762565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161234a91906126b4565b6000604051808303816000865af19150503d8060008114612387576040519150601f19603f3d011682016040523d82523d6000602084013e61238c565b606091505b50915091508180156123b65750805115806123b65750808060200190518101906123b6919061254d565b6123d25760405162461bcd60e51b8152600401610459906128ba565b505050505050565b60008083601f8401126123eb578182fd5b50813567ffffffffffffffff811115612402578182fd5b60208301915083602082850101111561241a57600080fd5b9250929050565b600060208284031215612432578081fd5b813561243d81612dbd565b9392505050565b600060208284031215612455578081fd5b815161243d81612dbd565b60008060408385031215612472578081fd5b823561247d81612dbd565b9150602083013561248d81612dbd565b809150509250929050565b6000806000606084860312156124ac578081fd5b83356124b781612dbd565b925060208401356124c781612dbd565b915060408401356124d781612dbd565b809150509250925092565b6000806000606084860312156124f6578283fd5b833561250181612dbd565b9250602084013561251181612dbd565b929592945050506040919091013590565b60008060408385031215612534578182fd5b823561253f81612dbd565b946020939093013593505050565b60006020828403121561255e578081fd5b8151801515811461243d578182fd5b600080600080600080600060a0888a031215612587578283fd5b873567ffffffffffffffff8082111561259e578485fd5b6125aa8b838c016123da565b909950975060208a01359150808211156125c2578485fd5b506125cf8a828b016123da565b90965094505060408801356125e381612dbd565b925060608801356125f381612dbd565b809250506080880135905092959891949750929550565b60006020828403121561261b578081fd5b5035919050565b600060208284031215612633578081fd5b5051919050565b6000806040838503121561264c578182fd5b505080516020909101519092909150565b600080600060608486031215612671578283fd5b8351925060208401519150604084015190509250925092565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251815b818110156126d457602081860181015185830152016126ba565b818111156126e25782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b6000608082526127db60808301888a61268a565b82810360208401526127ee81878961268a565b9150506001600160a01b038085166040840152808416606084015250979650505050505050565b60208082526013908201527f556e6f52653a207a65726f206164647265737300000000000000000000000000604082015260600190565b6020808252601a908201527f556e6f52653a7a65726f20666163746f72792061646472657373000000000000604082015260600190565b6020808252601f908201527f556e6f52653a20776974686472617720616d6f756e74206f766572666c6f7700604082015260600190565b60208082526031908201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260408201527f616e7366657246726f6d206661696c6564000000000000000000000000000000606082015260800190565b60208082526017908201527f556e6f52653a2062616c616e6365206f766572666c6f77000000000000000000604082015260600190565b6020808252818101527f556e6f52653a207269736b20706f6f6c206372656174656420616c7265616479604082015260600190565b60208082526012908201527f556e6f52653a204c6f636b65642074696d650000000000000000000000000000604082015260600190565b60208082526011908201527f556e6f52653a207a65726f2076616c7565000000000000000000000000000000604082015260600190565b6020808252818101527f556e6f52653a206e6f7420616c6c6f77207a65726f2073746172742074696d65604082015260600190565b60208082526012908201527f556e6f52653a207a65726f20616d6f756e740000000000000000000000000000604082015260600190565b6020808252601b908201527f556e6f52653a7a65726f204c5020746f6b656e20616464726573730000000000604082015260600190565b60208082526019908201527f556e6f52653a207a65726f206f776e6572206164647265737300000000000000604082015260600190565b6020808252601f908201527f556e6f52653a206e6f7420616c6c6f77207a65726f206c6f636b2074696d6500604082015260600190565b60208082526011908201527f556e6f52653a205a45524f2056616c7565000000000000000000000000000000604082015260600190565b60208082526010908201527f556e6f52653a20466f7262696464656e00000000000000000000000000000000604082015260600190565b6020808252818101527f556e6f52653a20726577617264657220666163746f7279206e6f206578697374604082015260600190565b60208082526019908201527f556e6f52653a206e6f7420617661696c61626c652074696d6500000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601b908201527f556e6f52653a206e6f7420616c6c6f77207a65726f2076616c75650000000000604082015260600190565b6020808252818101527f556e6f52653a206e6f7420616c6c6f77206f7468657273207472616e73666572604082015260600190565b6001600160801b039384168152919092166020820152604081019190915260600190565b6001600160801b0393841681526020810192909252909116604082015260600190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60006001600160801b03808316818516808303821115612d3057612d30612da7565b01949350505050565b60008219821115612d4c57612d4c612da7565b500190565b600082612d6c57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612d8b57612d8b612da7565b500290565b600082821015612da257612da2612da7565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612dd257600080fd5b5056fea26469706673582212204b84feadf47b5c3f0986ff9deef2077a7eadaa903b0aa631febc80576797bd9664736f6c63430008000033

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

0000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f0000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f

-----Decoded View---------------
Arg [0] : _owner (address): 0x8c3d5c9538256DAB8Eb4B197370574340fe3254F
Arg [1] : _claimAssessor (address): 0x8c3d5c9538256DAB8Eb4B197370574340fe3254F

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f
Arg [1] : 0000000000000000000000008c3d5c9538256dab8eb4b197370574340fe3254f


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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