ETH Price: $3,747.61 (-3.00%)
Gas: 12 Gwei

Contract

0x2de894805e1c8F955a81219F1D32b902E919a855
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Recompute Collat...198097522024-05-06 8:08:4723 days ago1714982927IN
0x2de89480...2E919a855
0 ETH0.001290855.63730137
Recompute Collat...194888772024-03-22 8:08:4768 days ago1711094927IN
0x2de89480...2E919a855
0 ETH0.0052728723.15193627
Recompute Collat...191679182024-02-06 8:08:47113 days ago1707206927IN
0x2de89480...2E919a855
0 ETH0.0101403244.28379707
Recompute Collat...188472272023-12-23 8:08:47158 days ago1703318927IN
0x2de89480...2E919a855
0 ETH0.0053032723.28542275
Recompute Collat...185259482023-11-08 8:08:47203 days ago1699430927IN
0x2de89480...2E919a855
0 ETH0.0063809627.8662806
Recompute Collat...182043682023-09-24 8:08:47248 days ago1695542927IN
0x2de89480...2E919a855
0 ETH0.00193858.3929416
Recompute Collat...178831982023-08-10 8:08:35293 days ago1691654915IN
0x2de89480...2E919a855
0 ETH0.0040622917.74045248
Recompute Collat...175623152023-06-26 8:08:35338 days ago1687766915IN
0x2de89480...2E919a855
0 ETH0.003323914.31809595
Recompute Collat...172428492023-05-12 8:08:23383 days ago1683878903IN
0x2de89480...2E919a855
0 ETH0.02337791102.72259748
Recompute Collat...169245532023-03-28 8:08:23428 days ago1679990903IN
0x2de89480...2E919a855
0 ETH0.0203864488.97752976
Recompute Collat...166042252023-02-11 8:08:23473 days ago1676102903IN
0x2de89480...2E919a855
0 ETH0.0172546675.30874178
Recompute Collat...162819542022-12-28 8:08:23518 days ago1672214903IN
0x2de89480...2E919a855
0 ETH0.0216854894.64725136
Recompute Collat...159598082022-11-13 8:08:23563 days ago1668326903IN
0x2de89480...2E919a855
0 ETH0.02288817100.06851085
Recompute Collat...156377102022-09-29 8:08:23608 days ago1664438903IN
0x2de89480...2E919a855
0 ETH0.0032949514.40324781
Recompute Collat...153448922022-08-15 8:08:01653 days ago1660550881IN
0x2de89480...2E919a855
0 ETH0.00034414.50566275
Recompute Collat...150554602022-07-01 8:07:33698 days ago1656662853IN
0x2de89480...2E919a855
0 ETH0.0026849215.934733
Add Authorizatio...150377642022-06-28 3:45:32702 days ago1656387932IN
0x2de89480...2E919a855
0 ETH0.0011558724.48423913
0x60806040150377552022-06-28 3:43:51702 days ago1656387831IN
 Create: SingleDebtFloorAdjuster
0 ETH0.0648350626.55382461

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SingleDebtFloorAdjuster

Compiler Version
v0.6.7+commit.b8d736ae

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-28
*/

pragma solidity 0.6.7;

contract GebMath {
    uint256 public constant RAY = 10 ** 27;
    uint256 public constant WAD = 10 ** 18;

    function ray(uint x) public pure returns (uint z) {
        z = multiply(x, 10 ** 9);
    }
    function rad(uint x) public pure returns (uint z) {
        z = multiply(x, 10 ** 27);
    }
    function minimum(uint x, uint y) public pure returns (uint z) {
        z = (x <= y) ? x : y;
    }
    function addition(uint x, uint y) public pure returns (uint z) {
        z = x + y;
        require(z >= x, "uint-uint-add-overflow");
    }
    function subtract(uint x, uint y) public pure returns (uint z) {
        z = x - y;
        require(z <= x, "uint-uint-sub-underflow");
    }
    function multiply(uint x, uint y) public pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "uint-uint-mul-overflow");
    }
    function rmultiply(uint x, uint y) public pure returns (uint z) {
        z = multiply(x, y) / RAY;
    }
    function rdivide(uint x, uint y) public pure returns (uint z) {
        z = multiply(x, RAY) / y;
    }
    function wdivide(uint x, uint y) public pure returns (uint z) {
        z = multiply(x, WAD) / y;
    }
    function wmultiply(uint x, uint y) public pure returns (uint z) {
        z = multiply(x, y) / WAD;
    }
    function rpower(uint x, uint n, uint base) public pure returns (uint z) {
        assembly {
            switch x case 0 {switch n case 0 {z := base} default {z := 0}}
            default {
                switch mod(n, 2) case 0 { z := base } default { z := x }
                let half := div(base, 2)  // for rounding.
                for { n := div(n, 2) } n { n := div(n,2) } {
                    let xx := mul(x, x)
                    if iszero(eq(div(xx, x), x)) { revert(0,0) }
                    let xxRound := add(xx, half)
                    if lt(xxRound, xx) { revert(0,0) }
                    x := div(xxRound, base)
                    if mod(n,2) {
                        let zx := mul(z, x)
                        if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) }
                        let zxRound := add(zx, half)
                        if lt(zxRound, zx) { revert(0,0) }
                        z := div(zxRound, base)
                    }
                }
            }
        }
    }
}

abstract contract StabilityFeeTreasuryLike {
    function getAllowance(address) virtual external view returns (uint, uint);
    function systemCoin() virtual external view returns (address);
    function pullFunds(address, address, uint) virtual external;
}

contract IncreasingTreasuryReimbursement is GebMath {
    // --- Auth ---
    mapping (address => uint) public authorizedAccounts;
    /**
     * @notice Add auth to an account
     * @param account Account to add auth to
     */
    function addAuthorization(address account) virtual external isAuthorized {
        authorizedAccounts[account] = 1;
        emit AddAuthorization(account);
    }
    /**
     * @notice Remove auth from an account
     * @param account Account to remove auth from
     */
    function removeAuthorization(address account) virtual external isAuthorized {
        authorizedAccounts[account] = 0;
        emit RemoveAuthorization(account);
    }
    /**
    * @notice Checks whether msg.sender can call an authed function
    **/
    modifier isAuthorized {
        require(authorizedAccounts[msg.sender] == 1, "IncreasingTreasuryReimbursement/account-not-authorized");
        _;
    }

    // --- Variables ---
    // Starting reward for the fee receiver/keeper
    uint256 public baseUpdateCallerReward;          // [wad]
    // Max possible reward for the fee receiver/keeper
    uint256 public maxUpdateCallerReward;           // [wad]
    // Max delay taken into consideration when calculating the adjusted reward
    uint256 public maxRewardIncreaseDelay;          // [seconds]
    // Rate applied to baseUpdateCallerReward every extra second passed beyond a certain point (e.g next time when a specific function needs to be called)
    uint256 public perSecondCallerRewardIncrease;   // [ray]

    // SF treasury
    StabilityFeeTreasuryLike  public treasury;

    // --- Events ---
    event AddAuthorization(address account);
    event RemoveAuthorization(address account);
    event ModifyParameters(
      bytes32 parameter,
      address addr
    );
    event ModifyParameters(
      bytes32 parameter,
      uint256 val
    );
    event FailRewardCaller(bytes revertReason, address feeReceiver, uint256 amount);

    constructor(
      address treasury_,
      uint256 baseUpdateCallerReward_,
      uint256 maxUpdateCallerReward_,
      uint256 perSecondCallerRewardIncrease_
    ) public {
        if (address(treasury_) != address(0)) {
          require(StabilityFeeTreasuryLike(treasury_).systemCoin() != address(0), "IncreasingTreasuryReimbursement/treasury-coin-not-set");
        }
        require(maxUpdateCallerReward_ >= baseUpdateCallerReward_, "IncreasingTreasuryReimbursement/invalid-max-caller-reward");
        require(perSecondCallerRewardIncrease_ >= RAY, "IncreasingTreasuryReimbursement/invalid-per-second-reward-increase");
        authorizedAccounts[msg.sender] = 1;

        treasury                        = StabilityFeeTreasuryLike(treasury_);
        baseUpdateCallerReward          = baseUpdateCallerReward_;
        maxUpdateCallerReward           = maxUpdateCallerReward_;
        perSecondCallerRewardIncrease   = perSecondCallerRewardIncrease_;
        maxRewardIncreaseDelay          = uint(-1);

        emit AddAuthorization(msg.sender);
        emit ModifyParameters("treasury", treasury_);
        emit ModifyParameters("baseUpdateCallerReward", baseUpdateCallerReward);
        emit ModifyParameters("maxUpdateCallerReward", maxUpdateCallerReward);
        emit ModifyParameters("perSecondCallerRewardIncrease", perSecondCallerRewardIncrease);
    }

    // --- Boolean Logic ---
    function either(bool x, bool y) internal pure returns (bool z) {
        assembly{ z := or(x, y)}
    }

    // --- Treasury ---
    /**
    * @notice This returns the stability fee treasury allowance for this contract by taking the minimum between the per block and the total allowances
    **/
    function treasuryAllowance() public view returns (uint256) {
        (uint total, uint perBlock) = treasury.getAllowance(address(this));
        return minimum(total, perBlock);
    }
    /*
    * @notice Get the SF reward that can be sent to a function caller right now
    * @param timeOfLastUpdate The last time when the function that the treasury pays for has been updated
    * @param defaultDelayBetweenCalls Enforced delay between calls to the function for which the treasury reimburses callers
    */
    function getCallerReward(uint256 timeOfLastUpdate, uint256 defaultDelayBetweenCalls) public view returns (uint256) {
        // If the rewards are null or if the time of the last update is in the future, return 0
        bool nullRewards = (baseUpdateCallerReward == 0 && maxUpdateCallerReward == 0);
        if (either(timeOfLastUpdate >= now, nullRewards)) return 0;

        // If the time elapsed is smaller than defaultDelayBetweenCalls or if the base reward is zero, return 0
        uint256 timeElapsed = (timeOfLastUpdate == 0) ? defaultDelayBetweenCalls : subtract(now, timeOfLastUpdate);
        if (either(timeElapsed < defaultDelayBetweenCalls, baseUpdateCallerReward == 0)) {
            return 0;
        }

        // If too much time elapsed, return the max reward
        uint256 adjustedTime      = subtract(timeElapsed, defaultDelayBetweenCalls);
        uint256 maxPossibleReward = minimum(maxUpdateCallerReward, treasuryAllowance() / RAY);
        if (adjustedTime > maxRewardIncreaseDelay) {
            return maxPossibleReward;
        }

        // Calculate the reward
        uint256 calculatedReward = baseUpdateCallerReward;
        if (adjustedTime > 0) {
            calculatedReward = rmultiply(rpower(perSecondCallerRewardIncrease, adjustedTime, RAY), calculatedReward);
        }

        // If the reward is higher than max, set it to max
        if (calculatedReward > maxPossibleReward) {
            calculatedReward = maxPossibleReward;
        }
        return calculatedReward;
    }
    /**
    * @notice Send a stability fee reward to an address
    * @param proposedFeeReceiver The SF receiver
    * @param reward The system coin amount to send
    **/
    function rewardCaller(address proposedFeeReceiver, uint256 reward) internal {
        // If the receiver is the treasury itself or if the treasury is null or if the reward is zero, return
        if (address(treasury) == proposedFeeReceiver) return;
        if (either(address(treasury) == address(0), reward == 0)) return;

        // Determine the actual receiver and send funds
        address finalFeeReceiver = (proposedFeeReceiver == address(0)) ? msg.sender : proposedFeeReceiver;
        try treasury.pullFunds(finalFeeReceiver, treasury.systemCoin(), reward) {}
        catch(bytes memory revertReason) {
            emit FailRewardCaller(revertReason, finalFeeReceiver, reward);
        }
    }
}

abstract contract SAFEEngineLike {
    function modifyParameters(
        bytes32 collateralType,
        bytes32 parameter,
        uint256 data
    ) virtual external;
    function collateralTypes(bytes32) virtual public view returns (
        uint256 debtAmount,        // [wad]
        uint256 accumulatedRate,   // [ray]
        uint256 safetyPrice,       // [ray]
        uint256 debtCeiling        // [rad]
    );
}
abstract contract OracleRelayerLike {
    function redemptionPrice() virtual public returns (uint256);
}
abstract contract OracleLike {
    function read() virtual external view returns (uint256);
}

contract SingleDebtFloorAdjuster is IncreasingTreasuryReimbursement {
    // --- Auth ---
    // Mapping of addresses that are allowed to manually recompute the debt floor (without being rewarded for it)
    mapping (address => uint256) public manualSetters;
    /*
    * @notify Add a new manual setter
    * @param account The address of the new manual setter
    */
    function addManualSetter(address account) external isAuthorized {
        manualSetters[account] = 1;
        emit AddManualSetter(account);
    }
    /*
    * @notify Remove a manual setter
    * @param account The address of the manual setter to remove
    */
    function removeManualSetter(address account) external isAuthorized {
        manualSetters[account] = 0;
        emit RemoveManualSetter(account);
    }
    /*
    * @notice Modifier for checking that the msg.sender is a whitelisted manual setter
    */
    modifier isManualSetter {
        require(manualSetters[msg.sender] == 1, "SingleDebtFloorAdjuster/not-manual-setter");
        _;
    }

    // --- Variables ---
    // The collateral's name
    bytes32 public collateralName;
    // Gas amount needed to liquidate a Safe backed by the collateral type with the collateralName
    uint256 public gasAmountForLiquidation;
    // The max value for the debt floor
    uint256 public maxDebtFloor;                         // [rad]
    // The min amount of system coins that must be generated using this collateral type
    uint256 public minDebtFloor;                         // [rad]
    // Max expected deviation, to ensure bids are profitable in a scenario price of collateral is severely devaluing
    uint256 public maxPriceDeviation = 1.2e27;           // [ray], default 20%
    // Liquidation Ratio of Collateral
    uint256 public auctionDiscount = 80000000000000000;  // [wad], default 8%
    // When the debt floor was last updated
    uint256 public lastUpdateTime;                       // [timestamp]
    // Enforced gap between calls
    uint256 public updateDelay;                          // [seconds]
    // Last timestamp of a manual update
    uint256 public lastManualUpdateTime;                 // [seconds]

    // The SAFEEngine contract
    SAFEEngineLike    public safeEngine;
    // The OracleRelayer contract
    OracleRelayerLike public oracleRelayer;
    // The gas price oracle
    OracleLike        public gasPriceOracle;
    // The ETH price oracle
    OracleLike        public ethPriceOracle;

    // --- Events ---
    event AddManualSetter(address account);
    event RemoveManualSetter(address account);
    event UpdateFloor(uint256 nextDebtFloor);

    constructor(
      address safeEngine_,
      address oracleRelayer_,
      address treasury_,
      address gasPriceOracle_,
      address ethPriceOracle_,
      bytes32 collateralName_,
      uint256 baseUpdateCallerReward_,
      uint256 maxUpdateCallerReward_,
      uint256 perSecondCallerRewardIncrease_,
      uint256 updateDelay_,
      uint256 gasAmountForLiquidation_,
      uint256 maxDebtFloor_,
      uint256 minDebtFloor_
    ) public IncreasingTreasuryReimbursement(treasury_, baseUpdateCallerReward_, maxUpdateCallerReward_, perSecondCallerRewardIncrease_) {
        require(safeEngine_ != address(0), "SingleDebtFloorAdjuster/invalid-safe-engine");
        require(oracleRelayer_ != address(0), "SingleDebtFloorAdjuster/invalid-oracle-relayer");
        require(gasPriceOracle_ != address(0), "SingleDebtFloorAdjuster/invalid-gas-price-oracle");
        require(ethPriceOracle_ != address(0), "SingleDebtFloorAdjuster/invalid-eth-price-oracle");
        require(updateDelay_ > 0, "SingleDebtFloorAdjuster/invalid-update-delay");
        require(both(gasAmountForLiquidation_ > 0, gasAmountForLiquidation_ < block.gaslimit), "SingleDebtFloorAdjuster/invalid-liq-gas-amount");
        require(minDebtFloor_ > 0, "SingleDebtFloorAdjuster/invalid-min-floor");
        require(both(maxDebtFloor_ > 0, maxDebtFloor_ > minDebtFloor_), "SingleDebtFloorAdjuster/invalid-max-floor");

        manualSetters[msg.sender] = 1;

        safeEngine              = SAFEEngineLike(safeEngine_);
        oracleRelayer           = OracleRelayerLike(oracleRelayer_);
        gasPriceOracle          = OracleLike(gasPriceOracle_);
        ethPriceOracle          = OracleLike(ethPriceOracle_);
        collateralName          = collateralName_;
        gasAmountForLiquidation = gasAmountForLiquidation_;
        updateDelay             = updateDelay_;
        maxDebtFloor            = maxDebtFloor_;
        minDebtFloor            = minDebtFloor_;
        lastManualUpdateTime    = now;

        oracleRelayer.redemptionPrice();

        emit AddManualSetter(msg.sender);
        emit ModifyParameters("oracleRelayer", oracleRelayer_);
        emit ModifyParameters("gasPriceOracle", gasPriceOracle_);
        emit ModifyParameters("ethPriceOracle", ethPriceOracle_);
        emit ModifyParameters("gasAmountForLiquidation", gasAmountForLiquidation);
        emit ModifyParameters("updateDelay", updateDelay);
        emit ModifyParameters("maxDebtFloor", maxDebtFloor);
        emit ModifyParameters("minDebtFloor", minDebtFloor);
    }

    // --- Boolean Logic ---
    function both(bool x, bool y) internal pure returns (bool z) {
        assembly{ z := and(x, y)}
    }

    // --- Math ---
    uint256 internal constant RAD = 10**45;
    function divide(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y > 0, "SingleDebtFloorAdjuster/div-y-null");
        z = x / y;
        require(z <= x, "SingleDebtFloorAdjuster/div-invalid");
    }

    // --- Administration ---
    /*
    * @notify Update the address of a contract that this adjuster is connected to
    * @param parameter The name of the contract to update the address for
    * @param addr The new contract address
    */
    function modifyParameters(bytes32 parameter, address addr) external isAuthorized {
        require(addr != address(0), "SingleDebtFloorAdjuster/null-address");
        if (parameter == "treasury") {
            treasury = StabilityFeeTreasuryLike(addr);
        }
        else if (parameter == "oracleRelayer") {
            oracleRelayer = OracleRelayerLike(addr);
            oracleRelayer.redemptionPrice();
        }
        else if (parameter == "gasPriceOracle") {
            gasPriceOracle = OracleLike(addr);
            gasPriceOracle.read();
        }
        else if (parameter == "ethPriceOracle") {
            ethPriceOracle = OracleLike(addr);
            ethPriceOracle.read();
        }
        else revert("SingleDebtFloorAdjuster/modify-unrecognized-params");
        emit ModifyParameters(parameter, addr);
    }
    /*
    * @notify Modify an uint256 param
    * @param parameter The name of the parameter to modify
    * @param val The new parameter value
    */
    function modifyParameters(bytes32 parameter, uint256 val) external isAuthorized {
        if (parameter == "baseUpdateCallerReward") {
          require(val <= maxUpdateCallerReward, "SingleDebtFloorAdjuster/invalid-base-caller-reward");
          baseUpdateCallerReward = val;
        }
        else if (parameter == "maxUpdateCallerReward") {
          require(val >= baseUpdateCallerReward, "SingleDebtFloorAdjuster/invalid-max-caller-reward");
          maxUpdateCallerReward = val;
        }
        else if (parameter == "perSecondCallerRewardIncrease") {
          require(val >= RAY, "SingleDebtFloorAdjuster/invalid-caller-reward-increase");
          perSecondCallerRewardIncrease = val;
        }
        else if (parameter == "maxRewardIncreaseDelay") {
          require(val > 0, "SingleDebtFloorAdjuster/invalid-max-increase-delay");
          maxRewardIncreaseDelay = val;
        }
        else if (parameter == "updateDelay") {
          require(val >= 0, "SingleDebtFloorAdjuster/invalid-call-gap-length");
          updateDelay = val;
        }
        else if (parameter == "maxDebtFloor") {
          require(both(val > 0, val > minDebtFloor), "SingleDebtFloorAdjuster/invalid-max-floor");
          maxDebtFloor = val;
        }
        else if (parameter == "minDebtFloor") {
          require(both(val > 0, val < maxDebtFloor), "SingleDebtFloorAdjuster/invalid-min-floor");
          minDebtFloor = val;
        }
        else if (parameter == "lastUpdateTime") {
          require(val > now, "SingleDebtFloorAdjuster/invalid-update-time");
          lastUpdateTime = val;
        }
        else if (parameter == "gasAmountForLiquidation") {
          require(both(val > 0, val < block.gaslimit), "SingleDebtFloorAdjuster/invalid-liq-gas-amount");
          gasAmountForLiquidation = val;
        }
        else if (parameter == "maxPriceDeviation") {
          require(val >= RAY, "SingleDebtFloorAdjuster/invalid-max-price-deviation");
          maxPriceDeviation = val;
        }
        else if (parameter == "auctionDiscount") {
          require(val <= WAD, "SingleDebtFloorAdjuster/invalid-cauction-discount");
          auctionDiscount = val;
        }
        else revert("SingleDebtFloorAdjuster/modify-unrecognized-param");
        emit ModifyParameters(
          parameter,
          val
        );
    }

    // --- Utils ---
    /*
    * @notify Internal function meant to modify the collateral's debt floor
    * @param nextDebtFloor The new floor to set
    */
    function setFloor(uint256 nextDebtFloor) internal {
        require(nextDebtFloor > 0, "SingleDebtFloorAdjuster/null-debt-floor");
        safeEngine.modifyParameters(collateralName, "debtFloor", nextDebtFloor);
        emit UpdateFloor(nextDebtFloor);
    }

    // --- Core Logic ---
    /*
    * @notify Automatically recompute and set a new debt floor for the collateral type with collateralName
    * @param feeReceiver The address that will receive the reward for calling this function
    */
    function recomputeCollateralDebtFloor(address feeReceiver) external {
        // Check that the update time is not in the future
        require(lastUpdateTime < now, "SingleDebtFloorAdjuster/update-time-in-the-future");
        // Check delay between calls
        require(either(subtract(now, lastUpdateTime) >= updateDelay, lastUpdateTime == 0), "SingleDebtFloorAdjuster/wait-more");

        // Get the caller's reward
        uint256 callerReward = getCallerReward(lastUpdateTime, updateDelay);
        // Update lastUpdateTime
        lastUpdateTime = now;

        // Get the next floor and set it
        uint256 nextCollateralFloor = getNextCollateralFloor();
        setFloor(nextCollateralFloor);

        // Pay the caller for updating the floor
        rewardCaller(feeReceiver, callerReward);
    }
    /*
    * @notice Manually recompute and set a new debt floor for the collateral type with collateralName
    */
    function manualRecomputeCollateralDebtFloor() external isManualSetter {
        require(now > lastManualUpdateTime, "SingleDebtFloorAdjuster/cannot-update-twice-same-block");
        uint256 nextCollateralFloor = getNextCollateralFloor();
        lastManualUpdateTime = now;
        setFloor(nextCollateralFloor);
    }

    // --- Getters ---
    /*
    * @notify View function meant to return the new and upcoming debt floor. It checks for min/max bounds for newly computed floors
    */
    function getNextCollateralFloor() public returns (uint256) {
        (, , , uint256 debtCeiling) = safeEngine.collateralTypes(collateralName);
        uint256 lowestPossibleFloor  = minimum(debtCeiling, minDebtFloor);
        uint256 highestPossibleFloor = minimum(debtCeiling, maxDebtFloor);

        // Read the gas and the ETH prices
        uint256 gasPrice = gasPriceOracle.read();
        uint256 ethPrice = ethPriceOracle.read();

        // Calculate the USD denominated value of the gas cost to liquidate
        uint256 liquidationCostUSD = multiply(divide(multiply(gasPrice, ethPrice), WAD), gasAmountForLiquidation);

        // Calculate the liquidation cost in RAI
        uint256 redemptionPrice     = oracleRelayer.redemptionPrice() / 10**9; // Scaled down to WAD to keep mul overflow bounds lower
        uint256 liquidationCostRAI  = divide(multiply(liquidationCostUSD, WAD), redemptionPrice);

        // Debt floor in order for a keeper to break even on a collateral auction (accounting for price movements)
        uint256 systemCoinDebtFloor = multiply(divide(multiply(liquidationCostRAI, WAD), auctionDiscount), maxPriceDeviation);

        // Check boundaries
        if (systemCoinDebtFloor <= lowestPossibleFloor) return lowestPossibleFloor;
        else if (systemCoinDebtFloor >= highestPossibleFloor) return highestPossibleFloor;
        return systemCoinDebtFloor;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"safeEngine_","type":"address"},{"internalType":"address","name":"oracleRelayer_","type":"address"},{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"address","name":"gasPriceOracle_","type":"address"},{"internalType":"address","name":"ethPriceOracle_","type":"address"},{"internalType":"bytes32","name":"collateralName_","type":"bytes32"},{"internalType":"uint256","name":"baseUpdateCallerReward_","type":"uint256"},{"internalType":"uint256","name":"maxUpdateCallerReward_","type":"uint256"},{"internalType":"uint256","name":"perSecondCallerRewardIncrease_","type":"uint256"},{"internalType":"uint256","name":"updateDelay_","type":"uint256"},{"internalType":"uint256","name":"gasAmountForLiquidation_","type":"uint256"},{"internalType":"uint256","name":"maxDebtFloor_","type":"uint256"},{"internalType":"uint256","name":"minDebtFloor_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"AddManualSetter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"revertReason","type":"bytes"},{"indexed":false,"internalType":"address","name":"feeReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FailRewardCaller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"parameter","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"val","type":"uint256"}],"name":"ModifyParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RemoveManualSetter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextDebtFloor","type":"uint256"}],"name":"UpdateFloor","type":"event"},{"inputs":[],"name":"RAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addManualSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"addition","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"auctionDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUpdateCallerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collateralName","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceOracle","outputs":[{"internalType":"contract OracleLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasAmountForLiquidation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasPriceOracle","outputs":[{"internalType":"contract OracleLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeOfLastUpdate","type":"uint256"},{"internalType":"uint256","name":"defaultDelayBetweenCalls","type":"uint256"}],"name":"getCallerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextCollateralFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastManualUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRecomputeCollateralDebtFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"manualSetters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDebtFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPriceDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRewardIncreaseDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxUpdateCallerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDebtFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"minimum","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"address","name":"addr","type":"address"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"parameter","type":"bytes32"},{"internalType":"uint256","name":"val","type":"uint256"}],"name":"modifyParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"multiply","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"oracleRelayer","outputs":[{"internalType":"contract OracleRelayerLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perSecondCallerRewardIncrease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"rad","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"ray","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rdivide","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"feeReceiver","type":"address"}],"name":"recomputeCollateralDebtFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeManualSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rmultiply","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"uint256","name":"base","type":"uint256"}],"name":"rpower","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"safeEngine","outputs":[{"internalType":"contract SAFEEngineLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"subtract","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract StabilityFeeTreasuryLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"wdivide","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"wmultiply","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"}]

60806040526b03e09de2596099e2b0000000600b5567011c37937e080000600c553480156200002d57600080fd5b5060405162002dc038038062002dc083398181016040526101a08110156200005457600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e08801516101008901516101208a01516101408b01516101608c0151610180909c01519a9b999a989997989697959694959394929391929091908a8787876001600160a01b038416156200017f5760006001600160a01b0316846001600160a01b031663a7e944556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200010957600080fd5b505afa1580156200011e573d6000803e3d6000fd5b505050506040513d60208110156200013557600080fd5b50516001600160a01b031614156200017f5760405162461bcd60e51b815260040180806020018281038252603581526020018062002cf66035913960400191505060405180910390fd5b82821015620001c05760405162461bcd60e51b815260040180806020018281038252603981526020018062002d2b6039913960400191505060405180910390fd5b6b033b2e3c9fd0803ce80000008110156200020d5760405162461bcd60e51b815260040180806020018281038252604281526020018062002b6b6042913960600191505060405180910390fd5b3360008181526020818152604091829020600190819055600580546001600160a01b0319166001600160a01b038a1617905586905560028590556004849055600019600355815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a16040805167747265617375727960c01b81526001600160a01b0386166020820152815160008051602062002c51833981519152929181900390910190a1600154604080517f6261736555706461746543616c6c65725265776172640000000000000000000081526020810192909252805160008051602062002c068339815191529281900390910190a1600254604080517f6d617855706461746543616c6c6572526577617264000000000000000000000081526020810192909252805160008051602062002c068339815191529281900390910190a1600454604080517f7065725365636f6e6443616c6c6572526577617264496e63726561736500000081526020810192909252805160008051602062002c068339815191529281900390910190a1505050506001600160a01b038d16620003f25760405162461bcd60e51b815260040180806020018281038252602b81526020018062002c26602b913960400191505060405180910390fd5b6001600160a01b038c16620004395760405162461bcd60e51b815260040180806020018281038252602e81526020018062002d64602e913960400191505060405180910390fd5b6001600160a01b038a16620004805760405162461bcd60e51b815260040180806020018281038252603081526020018062002bd66030913960400191505060405180910390fd5b6001600160a01b038916620004c75760405162461bcd60e51b815260040180806020018281038252603081526020018062002cc66030913960400191505060405180910390fd5b60008411620005085760405162461bcd60e51b815260040180806020018281038252602c81526020018062002c71602c913960400191505060405180910390fd5b620005218315154585106001600160e01b036200097316565b6200055e5760405162461bcd60e51b815260040180806020018281038252602e81526020018062002d92602e913960400191505060405180910390fd5b600081116200059f5760405162461bcd60e51b815260040180806020018281038252602981526020018062002bad6029913960400191505060405180910390fd5b620005b88215158284116001600160e01b036200097316565b620005f55760405162461bcd60e51b815260040180806020018281038252602981526020018062002c9d6029913960400191505060405180910390fd5b600160066000336001600160a01b03166001600160a01b03168152602001908152602001600020819055508c601060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555089601260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555088601360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550876007819055508260088190555083600e819055508160098190555080600a8190555042600f81905550601160009054906101000a90046001600160a01b03166001600160a01b031663c5b748c06040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200073757600080fd5b505af11580156200074c573d6000803e3d6000fd5b505050506040513d60208110156200076357600080fd5b50506040805133815290517fb2d3440bd743b2beba13ff1f44d8a39d34191a66c89341b5cae82421e17057969181900360200190a1604080516c37b930b1b632a932b630bcb2b960991b81526001600160a01b038e166020820152815160008051602062002c51833981519152929181900390910190a1604080516d67617350726963654f7261636c6560901b81526001600160a01b038c166020820152815160008051602062002c51833981519152929181900390910190a1604080516d65746850726963654f7261636c6560901b81526001600160a01b038b166020820152815160008051602062002c51833981519152929181900390910190a1600854604080517f676173416d6f756e74466f724c69717569646174696f6e00000000000000000081526020810192909252805160008051602062002c068339815191529281900390910190a1600e54604080516a75706461746544656c617960a81b81526020810192909252805160008051602062002c068339815191529281900390910190a1600954604080516b36b0bc2232b13a233637b7b960a11b81526020810192909252805160008051602062002c068339815191529281900390910190a1600a54604080516b36b4b72232b13a233637b7b960a11b81526020810192909252805160008051602062002c068339815191529281900390910190a15050505050505050505050505062000977565b1690565b6121e480620009876000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80636a14602411610151578063b3603889116100c3578063dd2d2a1211610087578063dd2d2a121461059e578063e08c2756146105c1578063ee66a77c146105c9578063f238ffd2146105ef578063f752fdc314610612578063fe4f58901461063557610274565b8063b360388914610519578063c6e591e614610521578063c8f33c9114610547578063cc1c5b0e1461054f578063d6e882dc1461057557610274565b80639b42127f116101155780639b42127f146104ce5780639b6eb3dc146104d65780639ddae26e146104de578063a0871637146104e6578063a3f43e4714610509578063ac0e47f51461051157610274565b80636a146024146104885780636f6dc5ae14610490578063930995de1461049857806394f3f81d146104a0578063975b8662146104c657610274565b806343943b6b116101ea578063554f94db116101ae578063554f94db146104345780635a2275071461043c57806361d027b3146104445780636614f0101461044c57806367aea3131461047857806369dec2761461048057610274565b806343943b6b146103c057806346f3e81c146103c85780634faf61ab146103e557806354f363a314610409578063552033c41461042c57610274565b806324ba58841161023c57806324ba5884146102fe578063341369c1146103245780633425677e1461034c57806335b28153146103545780633c8bb3e61461037a5780633ef5e4451461039d57610274565b8063056640b71461027957806310213447146102ae578063165c4a16146102cb5780631c1f908c146102ee5780632009e568146102f6575b600080fd5b61029c6004803603604081101561028f57600080fd5b5080359060200135610658565b60408051918252519081900360200190f35b61029c600480360360208110156102c457600080fd5b503561067f565b61029c600480360360408110156102e157600080fd5b5080359060200135610695565b61029c6106fa565b61029c610700565b61029c6004803603602081101561031457600080fd5b50356001600160a01b0316610706565b61034a6004803603602081101561033a57600080fd5b50356001600160a01b0316610718565b005b61029c6107ec565b61034a6004803603602081101561036a57600080fd5b50356001600160a01b0316610884565b61029c6004803603604081101561039057600080fd5b5080359060200135610924565b61029c600480360360408110156103b357600080fd5b5080359060200135610939565b61029c610991565b61029c600480360360208110156103de57600080fd5b5035610997565b6103ed6109ae565b604080516001600160a01b039092168252519081900360200190f35b61029c6004803603604081101561041f57600080fd5b50803590602001356109bd565b61029c610a0e565b61029c610a1d565b61029c610a23565b6103ed610a29565b61034a6004803603604081101561046257600080fd5b50803590602001356001600160a01b0316610a38565b6103ed610d22565b61029c610d31565b61029c610d37565b6103ed610d43565b61029c610d52565b61034a600480360360208110156104b657600080fd5b50356001600160a01b0316610d58565b61029c610df7565b61029c610dfd565b61029c610e03565b61029c610e09565b61029c600480360360408110156104fc57600080fd5b50803590602001356110e6565b61034a6110fe565b6103ed6111a8565b61029c6111b7565b61034a6004803603602081101561053757600080fd5b50356001600160a01b03166111bd565b61029c61125f565b61029c6004803603602081101561056557600080fd5b50356001600160a01b0316611265565b61029c6004803603606081101561058b57600080fd5b5080359060208101359060400135611277565b61029c600480360360408110156105b457600080fd5b5080359060200135611335565b61029c61134e565b61034a600480360360208110156105df57600080fd5b50356001600160a01b0316611354565b61029c6004803603604081101561060557600080fd5b50803590602001356113f5565b61029c6004803603604081101561062857600080fd5b50803590602001356114f5565b61034a6004803603604081101561064b57600080fd5b508035906020013561150a565b6000676765c793fa10079d601b1b6106708484610695565b8161067757fe5b049392505050565b600061068f82633b9aca00610695565b92915050565b60008115806106b0575050808202828282816106ad57fe5b04145b61068f576040805162461bcd60e51b815260206004820152601660248201527575696e742d75696e742d6d756c2d6f766572666c6f7760501b604482015290519081900360640190fd5b60015481565b60035481565b60006020819052908152604090205481565b42600d54106107585760405162461bcd60e51b81526004018080602001828103825260318152602001806120416031913960400191505060405180910390fd5b610777600e5461076a42600d54610939565b1015600d54600014611a3d565b6107b25760405162461bcd60e51b8152600401808060200182810382526021815260200180611f1e6021913960400191505060405180910390fd5b60006107c2600d54600e546113f5565b42600d55905060006107d2610e09565b90506107dd81611a41565b6107e78383611b38565b505050565b600554604080516375ad331760e11b81523060048201528151600093849384936001600160a01b039092169263eb5a662e926024808201939291829003018186803b15801561083a57600080fd5b505afa15801561084e573d6000803e3d6000fd5b505050506040513d604081101561086457600080fd5b508051602090910151909250905061087c8282611335565b925050505b90565b336000908152602081905260409020546001146108d25760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b6000670de0b6b3a76400006106708484610695565b8082038281111561068f576040805162461bcd60e51b815260206004820152601760248201527f75696e742d75696e742d7375622d756e646572666c6f77000000000000000000604482015290519081900360640190fd5b60045481565b600061068f82676765c793fa10079d601b1b610695565b6011546001600160a01b031681565b8181018281101561068f576040805162461bcd60e51b815260206004820152601660248201527575696e742d75696e742d6164642d6f766572666c6f7760501b604482015290519081900360640190fd5b676765c793fa10079d601b1b81565b600e5481565b60095481565b6005546001600160a01b031681565b33600090815260208190526040902054600114610a865760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b038116610acb5760405162461bcd60e51b8152600401808060200182810382526024815260200180611e246024913960400191505060405180910390fd5b8167747265617375727960c01b1415610afe57600580546001600160a01b0319166001600160a01b038316179055610cdb565b816c37b930b1b632a932b630bcb2b960991b1415610ba657601180546001600160a01b0319166001600160a01b03838116919091179182905560408051630316dd2360e61b81529051929091169163c5b748c0916004808201926020929091908290030181600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b505050506040513d6020811015610b9e57600080fd5b50610cdb9050565b816d67617350726963654f7261636c6560901b1415610c2f57601280546001600160a01b0319166001600160a01b038381169190911791829055604080516315f789a960e21b8152905192909116916357de26a491600480820192602092909190829003018186803b158015610c1b57600080fd5b505afa158015610b88573d6000803e3d6000fd5b816d65746850726963654f7261636c6560901b1415610ca457601380546001600160a01b0319166001600160a01b038381169190911791829055604080516315f789a960e21b8152905192909116916357de26a491600480820192602092909190829003018186803b158015610c1b57600080fd5b60405162461bcd60e51b81526004018080602001828103825260328152602001806120ed6032913960400191505060405180910390fd5b604080518381526001600160a01b038316602082015281517fd91f38cf03346b5dc15fb60f9076f866295231ad3c3841a1051f8443f25170d1929181900390910190a15050565b6010546001600160a01b031681565b60025481565b670de0b6b3a764000081565b6012546001600160a01b031681565b600a5481565b33600090815260208190526040902054600114610da65760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b5481565b60075481565b600c5481565b6010546007546040805163d07900bb60e01b815260048101929092525160009283926001600160a01b039091169163d07900bb91602480820192608092909190829003018186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d6080811015610e8757600080fd5b5060600151600a54909150600090610ea0908390611335565b90506000610eb083600954611335565b90506000601260009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d6020811015610f2c57600080fd5b5051601354604080516315f789a960e21b815290519293506000926001600160a01b03909216916357de26a491600480820192602092909190829003018186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d6020811015610fa357600080fd5b505190506000610fcf610fc7610fb98585610695565b670de0b6b3a7640000611d6b565b600854610695565b90506000633b9aca00601160009054906101000a90046001600160a01b03166001600160a01b031663c5b748c06040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561102857600080fd5b505af115801561103c573d6000803e3d6000fd5b505050506040513d602081101561105257600080fd5b50518161105b57fe5b049050600061107b61107584670de0b6b3a7640000610695565b83611d6b565b905060006110a761109f61109784670de0b6b3a7640000610695565b600c54611d6b565b600b54610695565b90508781116110c157879950505050505050505050610881565b8681106110d957869950505050505050505050610881565b9850505050505050505090565b60008161067084676765c793fa10079d601b1b610695565b3360009081526006602052604090205460011461114c5760405162461bcd60e51b8152600401808060200182810382526029815260200180611e736029913960400191505060405180910390fd5b600f54421161118c5760405162461bcd60e51b8152600401808060200182810382526036815260200180611fa46036913960400191505060405180910390fd5b6000611196610e09565b42600f5590506111a581611a41565b50565b6013546001600160a01b031681565b600f5481565b3360009081526020819052604090205460011461120b5760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b03811660008181526006602090815260409182902060019055815192835290517fb2d3440bd743b2beba13ff1f44d8a39d34191a66c89341b5cae82421e17057969281900390910190a150565b600d5481565b60066020526000908152604090205481565b60008380156113175760018416801561129257859250611296565b8392505b50600283046002850494505b84156113115785860286878204146112b957600080fd5b818101818110156112c957600080fd5b85900496505060018516156113065785830283878204141587151516156112ef57600080fd5b818101818110156112ff57600080fd5b8590049350505b6002850494506112a2565b5061132d565b838015611327576000925061132b565b8392505b505b509392505050565b6000818311156113455781611347565b825b9392505050565b60085481565b336000908152602081905260409020546001146113a25760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b038116600081815260066020908152604080832092909255815192835290517f7e4727913037a841b8298b7991b3c87c689c0f07cee47da4a21aa7e2b8f5ec499281900390910190a150565b600080600154600014801561140a5750600254155b90506114194285101582611a3d565b1561142857600091505061068f565b6000841561143f5761143a4286610939565b611441565b835b9050611454848210600154600014611a3d565b156114645760009250505061068f565b60006114708286610939565b9050600061149b600254676765c793fa10079d601b1b61148e6107ec565b8161149557fe5b04611335565b90506003548211156114b257935061068f92505050565b60015482156114df576114dc6114d660045485676765c793fa10079d601b1b611277565b82610658565b90505b818111156114ea5750805b979650505050505050565b60008161067084670de0b6b3a7640000610695565b336000908152602081905260409020546001146115585760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b817518985cd9555c19185d1950d85b1b195c94995dd85c9960521b14156115c4576002548111156115ba5760405162461bcd60e51b8152600401808060200182810382526032815260200180611f3f6032913960400191505060405180910390fd5b60018190556119fe565b81741b585e155c19185d1950d85b1b195c94995dd85c99605a1b141561162f576001548110156116255760405162461bcd60e51b815260040180806020018281038252603181526020018061211f6031913960400191505060405180910390fd5b60028190556119fe565b817f7065725365636f6e6443616c6c6572526577617264496e63726561736500000014156116ab57676765c793fa10079d601b1b8110156116a15760405162461bcd60e51b815260040180806020018281038252603681526020018061200b6036913960400191505060405180910390fd5b60048190556119fe565b81756d6178526577617264496e63726561736544656c617960501b1415611715576000811161170b5760405162461bcd60e51b8152600401808060200182810382526032815260200180611eec6032913960400191505060405180910390fd5b60038190556119fe565b816a75706461746544656c617960a81b141561173557600e8190556119fe565b816b36b0bc2232b13a233637b7b960a11b14156117a25761175d60008211600a548311611df6565b6117985760405162461bcd60e51b8152600401808060200182810382526029815260200180611ec36029913960400191505060405180910390fd5b60098190556119fe565b816b36b4b72232b13a233637b7b960a11b141561180f576117ca600082116009548310611df6565b6118055760405162461bcd60e51b8152600401808060200182810382526029815260200180611dfb6029913960400191505060405180910390fd5b600a8190556119fe565b816d6c61737455706461746554696d6560901b1415611870574281116118665760405162461bcd60e51b815260040180806020018281038252602b815260200180611e48602b913960400191505060405180910390fd5b600d8190556119fe565b817f676173416d6f756e74466f724c69717569646174696f6e00000000000000000014156118ec576118a760008211458310611df6565b6118e25760405162461bcd60e51b815260040180806020018281038252602e815260200180612181602e913960400191505060405180910390fd5b60088190556119fe565b817036b0bc283934b1b2a232bb34b0ba34b7b760791b141561195c57676765c793fa10079d601b1b8110156119525760405162461bcd60e51b8152600401808060200182810382526033815260200180611f716033913960400191505060405180910390fd5b600b8190556119fe565b816e185d58dd1a5bdb911a5cd8dbdd5b9d608a1b14156119c757670de0b6b3a76400008111156119bd5760405162461bcd60e51b81526004018080602001828103825260318152602001806121506031913960400191505060405180910390fd5b600c8190556119fe565b60405162461bcd60e51b8152600401808060200182810382526031815260200180611fda6031913960400191505060405180910390fd5b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b1790565b60008111611a805760405162461bcd60e51b8152600401808060200182810382526027815260200180611e9c6027913960400191505060405180910390fd5b6010546007546040805163d4b9311d60e01b81526004810192909252683232b13a233637b7b960b91b602483015260448201849052516001600160a01b039092169163d4b9311d9160648082019260009290919082900301818387803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50506040805184815290517f51dc4c639698cef2aa5b95e701e2818457c758999650310ceb8b00c3ea0bd2449350908190036020019150a150565b6005546001600160a01b0383811691161415611b5357611d67565b600554611b6b906001600160a01b0316158215611a3d565b15611b7557611d67565b60006001600160a01b03831615611b8c5782611b8e565b335b6005546040805163a7e9445560e01b815290519293506001600160a01b039091169163201add9b918491849163a7e94455916004808301926020929190829003018186803b158015611bdf57600080fd5b505afa158015611bf3573d6000803e3d6000fd5b505050506040513d6020811015611c0957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820186905251606480830192600092919082900301818387803b158015611c6157600080fd5b505af1925050508015611c72575060015b6107e7573d808015611ca0576040519150601f19603f3d011682016040523d82523d6000602084013e611ca5565b606091505b507ff7bf1f7447ce563690edb2abe40636178ff64fc766b07bf3e171b16102794a548183856040518080602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611d25578181015183820152602001611d0d565b50505050905090810190601f168015611d525780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506107e7565b5050565b6000808211611dab5760405162461bcd60e51b81526004018080602001828103825260228152602001806120cb6022913960400191505060405180910390fd5b818381611db457fe5b0490508281111561068f5760405162461bcd60e51b81526004018080602001828103825260238152602001806120726023913960400191505060405180910390fd5b169056fe53696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d696e2d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f6e756c6c2d6164647265737353696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d7570646174652d74696d6553696e676c6544656274466c6f6f7241646a75737465722f6e6f742d6d616e75616c2d73657474657253696e676c6544656274466c6f6f7241646a75737465722f6e756c6c2d646562742d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d696e6372656173652d64656c617953696e676c6544656274466c6f6f7241646a75737465722f776169742d6d6f726553696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d626173652d63616c6c65722d72657761726453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d70726963652d646576696174696f6e53696e676c6544656274466c6f6f7241646a75737465722f63616e6e6f742d7570646174652d74776963652d73616d652d626c6f636b53696e676c6544656274466c6f6f7241646a75737465722f6d6f646966792d756e7265636f676e697a65642d706172616d53696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d63616c6c65722d7265776172642d696e63726561736553696e676c6544656274466c6f6f7241646a75737465722f7570646174652d74696d652d696e2d7468652d66757475726553696e676c6544656274466c6f6f7241646a75737465722f6469762d696e76616c6964496e6372656173696e6754726561737572795265696d62757273656d656e742f6163636f756e742d6e6f742d617574686f72697a656453696e676c6544656274466c6f6f7241646a75737465722f6469762d792d6e756c6c53696e676c6544656274466c6f6f7241646a75737465722f6d6f646966792d756e7265636f676e697a65642d706172616d7353696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d63616c6c65722d72657761726453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6361756374696f6e2d646973636f756e7453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6c69712d6761732d616d6f756e74a264697066735822122005cb393b2e87213ce896050f4b92858e02e8414c31e7c42141d4d405cc1d582a64736f6c63430006070033496e6372656173696e6754726561737572795265696d62757273656d656e742f696e76616c69642d7065722d7365636f6e642d7265776172642d696e63726561736553696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d696e2d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6761732d70726963652d6f7261636c65ac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a53696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d736166652d656e67696e65d91f38cf03346b5dc15fb60f9076f866295231ad3c3841a1051f8443f25170d153696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d7570646174652d64656c617953696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6574682d70726963652d6f7261636c65496e6372656173696e6754726561737572795265696d62757273656d656e742f74726561737572792d636f696e2d6e6f742d736574496e6372656173696e6754726561737572795265696d62757273656d656e742f696e76616c69642d6d61782d63616c6c65722d72657761726453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6f7261636c652d72656c6179657253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6c69712d6761732d616d6f756e74000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a69620000000000000000000000004ed9c0dca0479bc64d8f4eb3007126d5791f785100000000000000000000000083533fdd3285f48204215e9cf38c785371258e760000000000000000000000006a8757d4ec5630ebf86a5dbbe2e65423195a47f4000000000000000000000000b825e25856bd98b3f2faf2aeb6cb8742b38c40254554482d41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000733181e32dd2d9ce000000000000000000000000000000000000000000000000e66303c65ba5b39c0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000000000000000003b5380000000000000000000000000000000000000000000000000000000000007a1200000000000000000000a70c3c40a64e6c51999090b65f67d9240000000000000000000000000000000000000002cd76fe086b93ce2f768a00b22a00000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102745760003560e01c80636a14602411610151578063b3603889116100c3578063dd2d2a1211610087578063dd2d2a121461059e578063e08c2756146105c1578063ee66a77c146105c9578063f238ffd2146105ef578063f752fdc314610612578063fe4f58901461063557610274565b8063b360388914610519578063c6e591e614610521578063c8f33c9114610547578063cc1c5b0e1461054f578063d6e882dc1461057557610274565b80639b42127f116101155780639b42127f146104ce5780639b6eb3dc146104d65780639ddae26e146104de578063a0871637146104e6578063a3f43e4714610509578063ac0e47f51461051157610274565b80636a146024146104885780636f6dc5ae14610490578063930995de1461049857806394f3f81d146104a0578063975b8662146104c657610274565b806343943b6b116101ea578063554f94db116101ae578063554f94db146104345780635a2275071461043c57806361d027b3146104445780636614f0101461044c57806367aea3131461047857806369dec2761461048057610274565b806343943b6b146103c057806346f3e81c146103c85780634faf61ab146103e557806354f363a314610409578063552033c41461042c57610274565b806324ba58841161023c57806324ba5884146102fe578063341369c1146103245780633425677e1461034c57806335b28153146103545780633c8bb3e61461037a5780633ef5e4451461039d57610274565b8063056640b71461027957806310213447146102ae578063165c4a16146102cb5780631c1f908c146102ee5780632009e568146102f6575b600080fd5b61029c6004803603604081101561028f57600080fd5b5080359060200135610658565b60408051918252519081900360200190f35b61029c600480360360208110156102c457600080fd5b503561067f565b61029c600480360360408110156102e157600080fd5b5080359060200135610695565b61029c6106fa565b61029c610700565b61029c6004803603602081101561031457600080fd5b50356001600160a01b0316610706565b61034a6004803603602081101561033a57600080fd5b50356001600160a01b0316610718565b005b61029c6107ec565b61034a6004803603602081101561036a57600080fd5b50356001600160a01b0316610884565b61029c6004803603604081101561039057600080fd5b5080359060200135610924565b61029c600480360360408110156103b357600080fd5b5080359060200135610939565b61029c610991565b61029c600480360360208110156103de57600080fd5b5035610997565b6103ed6109ae565b604080516001600160a01b039092168252519081900360200190f35b61029c6004803603604081101561041f57600080fd5b50803590602001356109bd565b61029c610a0e565b61029c610a1d565b61029c610a23565b6103ed610a29565b61034a6004803603604081101561046257600080fd5b50803590602001356001600160a01b0316610a38565b6103ed610d22565b61029c610d31565b61029c610d37565b6103ed610d43565b61029c610d52565b61034a600480360360208110156104b657600080fd5b50356001600160a01b0316610d58565b61029c610df7565b61029c610dfd565b61029c610e03565b61029c610e09565b61029c600480360360408110156104fc57600080fd5b50803590602001356110e6565b61034a6110fe565b6103ed6111a8565b61029c6111b7565b61034a6004803603602081101561053757600080fd5b50356001600160a01b03166111bd565b61029c61125f565b61029c6004803603602081101561056557600080fd5b50356001600160a01b0316611265565b61029c6004803603606081101561058b57600080fd5b5080359060208101359060400135611277565b61029c600480360360408110156105b457600080fd5b5080359060200135611335565b61029c61134e565b61034a600480360360208110156105df57600080fd5b50356001600160a01b0316611354565b61029c6004803603604081101561060557600080fd5b50803590602001356113f5565b61029c6004803603604081101561062857600080fd5b50803590602001356114f5565b61034a6004803603604081101561064b57600080fd5b508035906020013561150a565b6000676765c793fa10079d601b1b6106708484610695565b8161067757fe5b049392505050565b600061068f82633b9aca00610695565b92915050565b60008115806106b0575050808202828282816106ad57fe5b04145b61068f576040805162461bcd60e51b815260206004820152601660248201527575696e742d75696e742d6d756c2d6f766572666c6f7760501b604482015290519081900360640190fd5b60015481565b60035481565b60006020819052908152604090205481565b42600d54106107585760405162461bcd60e51b81526004018080602001828103825260318152602001806120416031913960400191505060405180910390fd5b610777600e5461076a42600d54610939565b1015600d54600014611a3d565b6107b25760405162461bcd60e51b8152600401808060200182810382526021815260200180611f1e6021913960400191505060405180910390fd5b60006107c2600d54600e546113f5565b42600d55905060006107d2610e09565b90506107dd81611a41565b6107e78383611b38565b505050565b600554604080516375ad331760e11b81523060048201528151600093849384936001600160a01b039092169263eb5a662e926024808201939291829003018186803b15801561083a57600080fd5b505afa15801561084e573d6000803e3d6000fd5b505050506040513d604081101561086457600080fd5b508051602090910151909250905061087c8282611335565b925050505b90565b336000908152602081905260409020546001146108d25760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b0381166000818152602081815260409182902060019055815192835290517f599a298163e1678bb1c676052a8930bf0b8a1261ed6e01b8a2391e55f70001029281900390910190a150565b6000670de0b6b3a76400006106708484610695565b8082038281111561068f576040805162461bcd60e51b815260206004820152601760248201527f75696e742d75696e742d7375622d756e646572666c6f77000000000000000000604482015290519081900360640190fd5b60045481565b600061068f82676765c793fa10079d601b1b610695565b6011546001600160a01b031681565b8181018281101561068f576040805162461bcd60e51b815260206004820152601660248201527575696e742d75696e742d6164642d6f766572666c6f7760501b604482015290519081900360640190fd5b676765c793fa10079d601b1b81565b600e5481565b60095481565b6005546001600160a01b031681565b33600090815260208190526040902054600114610a865760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b038116610acb5760405162461bcd60e51b8152600401808060200182810382526024815260200180611e246024913960400191505060405180910390fd5b8167747265617375727960c01b1415610afe57600580546001600160a01b0319166001600160a01b038316179055610cdb565b816c37b930b1b632a932b630bcb2b960991b1415610ba657601180546001600160a01b0319166001600160a01b03838116919091179182905560408051630316dd2360e61b81529051929091169163c5b748c0916004808201926020929091908290030181600087803b158015610b7457600080fd5b505af1158015610b88573d6000803e3d6000fd5b505050506040513d6020811015610b9e57600080fd5b50610cdb9050565b816d67617350726963654f7261636c6560901b1415610c2f57601280546001600160a01b0319166001600160a01b038381169190911791829055604080516315f789a960e21b8152905192909116916357de26a491600480820192602092909190829003018186803b158015610c1b57600080fd5b505afa158015610b88573d6000803e3d6000fd5b816d65746850726963654f7261636c6560901b1415610ca457601380546001600160a01b0319166001600160a01b038381169190911791829055604080516315f789a960e21b8152905192909116916357de26a491600480820192602092909190829003018186803b158015610c1b57600080fd5b60405162461bcd60e51b81526004018080602001828103825260328152602001806120ed6032913960400191505060405180910390fd5b604080518381526001600160a01b038316602082015281517fd91f38cf03346b5dc15fb60f9076f866295231ad3c3841a1051f8443f25170d1929181900390910190a15050565b6010546001600160a01b031681565b60025481565b670de0b6b3a764000081565b6012546001600160a01b031681565b600a5481565b33600090815260208190526040902054600114610da65760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b03811660008181526020818152604080832092909255815192835290517f8834a87e641e9716be4f34527af5d23e11624f1ddeefede6ad75a9acfc31b9039281900390910190a150565b600b5481565b60075481565b600c5481565b6010546007546040805163d07900bb60e01b815260048101929092525160009283926001600160a01b039091169163d07900bb91602480820192608092909190829003018186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d6080811015610e8757600080fd5b5060600151600a54909150600090610ea0908390611335565b90506000610eb083600954611335565b90506000601260009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0257600080fd5b505afa158015610f16573d6000803e3d6000fd5b505050506040513d6020811015610f2c57600080fd5b5051601354604080516315f789a960e21b815290519293506000926001600160a01b03909216916357de26a491600480820192602092909190829003018186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d6020811015610fa357600080fd5b505190506000610fcf610fc7610fb98585610695565b670de0b6b3a7640000611d6b565b600854610695565b90506000633b9aca00601160009054906101000a90046001600160a01b03166001600160a01b031663c5b748c06040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561102857600080fd5b505af115801561103c573d6000803e3d6000fd5b505050506040513d602081101561105257600080fd5b50518161105b57fe5b049050600061107b61107584670de0b6b3a7640000610695565b83611d6b565b905060006110a761109f61109784670de0b6b3a7640000610695565b600c54611d6b565b600b54610695565b90508781116110c157879950505050505050505050610881565b8681106110d957869950505050505050505050610881565b9850505050505050505090565b60008161067084676765c793fa10079d601b1b610695565b3360009081526006602052604090205460011461114c5760405162461bcd60e51b8152600401808060200182810382526029815260200180611e736029913960400191505060405180910390fd5b600f54421161118c5760405162461bcd60e51b8152600401808060200182810382526036815260200180611fa46036913960400191505060405180910390fd5b6000611196610e09565b42600f5590506111a581611a41565b50565b6013546001600160a01b031681565b600f5481565b3360009081526020819052604090205460011461120b5760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b03811660008181526006602090815260409182902060019055815192835290517fb2d3440bd743b2beba13ff1f44d8a39d34191a66c89341b5cae82421e17057969281900390910190a150565b600d5481565b60066020526000908152604090205481565b60008380156113175760018416801561129257859250611296565b8392505b50600283046002850494505b84156113115785860286878204146112b957600080fd5b818101818110156112c957600080fd5b85900496505060018516156113065785830283878204141587151516156112ef57600080fd5b818101818110156112ff57600080fd5b8590049350505b6002850494506112a2565b5061132d565b838015611327576000925061132b565b8392505b505b509392505050565b6000818311156113455781611347565b825b9392505050565b60085481565b336000908152602081905260409020546001146113a25760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b6001600160a01b038116600081815260066020908152604080832092909255815192835290517f7e4727913037a841b8298b7991b3c87c689c0f07cee47da4a21aa7e2b8f5ec499281900390910190a150565b600080600154600014801561140a5750600254155b90506114194285101582611a3d565b1561142857600091505061068f565b6000841561143f5761143a4286610939565b611441565b835b9050611454848210600154600014611a3d565b156114645760009250505061068f565b60006114708286610939565b9050600061149b600254676765c793fa10079d601b1b61148e6107ec565b8161149557fe5b04611335565b90506003548211156114b257935061068f92505050565b60015482156114df576114dc6114d660045485676765c793fa10079d601b1b611277565b82610658565b90505b818111156114ea5750805b979650505050505050565b60008161067084670de0b6b3a7640000610695565b336000908152602081905260409020546001146115585760405162461bcd60e51b81526004018080602001828103825260368152602001806120956036913960400191505060405180910390fd5b817518985cd9555c19185d1950d85b1b195c94995dd85c9960521b14156115c4576002548111156115ba5760405162461bcd60e51b8152600401808060200182810382526032815260200180611f3f6032913960400191505060405180910390fd5b60018190556119fe565b81741b585e155c19185d1950d85b1b195c94995dd85c99605a1b141561162f576001548110156116255760405162461bcd60e51b815260040180806020018281038252603181526020018061211f6031913960400191505060405180910390fd5b60028190556119fe565b817f7065725365636f6e6443616c6c6572526577617264496e63726561736500000014156116ab57676765c793fa10079d601b1b8110156116a15760405162461bcd60e51b815260040180806020018281038252603681526020018061200b6036913960400191505060405180910390fd5b60048190556119fe565b81756d6178526577617264496e63726561736544656c617960501b1415611715576000811161170b5760405162461bcd60e51b8152600401808060200182810382526032815260200180611eec6032913960400191505060405180910390fd5b60038190556119fe565b816a75706461746544656c617960a81b141561173557600e8190556119fe565b816b36b0bc2232b13a233637b7b960a11b14156117a25761175d60008211600a548311611df6565b6117985760405162461bcd60e51b8152600401808060200182810382526029815260200180611ec36029913960400191505060405180910390fd5b60098190556119fe565b816b36b4b72232b13a233637b7b960a11b141561180f576117ca600082116009548310611df6565b6118055760405162461bcd60e51b8152600401808060200182810382526029815260200180611dfb6029913960400191505060405180910390fd5b600a8190556119fe565b816d6c61737455706461746554696d6560901b1415611870574281116118665760405162461bcd60e51b815260040180806020018281038252602b815260200180611e48602b913960400191505060405180910390fd5b600d8190556119fe565b817f676173416d6f756e74466f724c69717569646174696f6e00000000000000000014156118ec576118a760008211458310611df6565b6118e25760405162461bcd60e51b815260040180806020018281038252602e815260200180612181602e913960400191505060405180910390fd5b60088190556119fe565b817036b0bc283934b1b2a232bb34b0ba34b7b760791b141561195c57676765c793fa10079d601b1b8110156119525760405162461bcd60e51b8152600401808060200182810382526033815260200180611f716033913960400191505060405180910390fd5b600b8190556119fe565b816e185d58dd1a5bdb911a5cd8dbdd5b9d608a1b14156119c757670de0b6b3a76400008111156119bd5760405162461bcd60e51b81526004018080602001828103825260318152602001806121506031913960400191505060405180910390fd5b600c8190556119fe565b60405162461bcd60e51b8152600401808060200182810382526031815260200180611fda6031913960400191505060405180910390fd5b604080518381526020810183905281517fac7c5c1afaef770ec56ac6268cd3f2fbb1035858ead2601d6553157c33036c3a929181900390910190a15050565b1790565b60008111611a805760405162461bcd60e51b8152600401808060200182810382526027815260200180611e9c6027913960400191505060405180910390fd5b6010546007546040805163d4b9311d60e01b81526004810192909252683232b13a233637b7b960b91b602483015260448201849052516001600160a01b039092169163d4b9311d9160648082019260009290919082900301818387803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50506040805184815290517f51dc4c639698cef2aa5b95e701e2818457c758999650310ceb8b00c3ea0bd2449350908190036020019150a150565b6005546001600160a01b0383811691161415611b5357611d67565b600554611b6b906001600160a01b0316158215611a3d565b15611b7557611d67565b60006001600160a01b03831615611b8c5782611b8e565b335b6005546040805163a7e9445560e01b815290519293506001600160a01b039091169163201add9b918491849163a7e94455916004808301926020929190829003018186803b158015611bdf57600080fd5b505afa158015611bf3573d6000803e3d6000fd5b505050506040513d6020811015611c0957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820186905251606480830192600092919082900301818387803b158015611c6157600080fd5b505af1925050508015611c72575060015b6107e7573d808015611ca0576040519150601f19603f3d011682016040523d82523d6000602084013e611ca5565b606091505b507ff7bf1f7447ce563690edb2abe40636178ff64fc766b07bf3e171b16102794a548183856040518080602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019080838360005b83811015611d25578181015183820152602001611d0d565b50505050905090810190601f168015611d525780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506107e7565b5050565b6000808211611dab5760405162461bcd60e51b81526004018080602001828103825260228152602001806120cb6022913960400191505060405180910390fd5b818381611db457fe5b0490508281111561068f5760405162461bcd60e51b81526004018080602001828103825260238152602001806120726023913960400191505060405180910390fd5b169056fe53696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d696e2d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f6e756c6c2d6164647265737353696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d7570646174652d74696d6553696e676c6544656274466c6f6f7241646a75737465722f6e6f742d6d616e75616c2d73657474657253696e676c6544656274466c6f6f7241646a75737465722f6e756c6c2d646562742d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d666c6f6f7253696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d696e6372656173652d64656c617953696e676c6544656274466c6f6f7241646a75737465722f776169742d6d6f726553696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d626173652d63616c6c65722d72657761726453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d70726963652d646576696174696f6e53696e676c6544656274466c6f6f7241646a75737465722f63616e6e6f742d7570646174652d74776963652d73616d652d626c6f636b53696e676c6544656274466c6f6f7241646a75737465722f6d6f646966792d756e7265636f676e697a65642d706172616d53696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d63616c6c65722d7265776172642d696e63726561736553696e676c6544656274466c6f6f7241646a75737465722f7570646174652d74696d652d696e2d7468652d66757475726553696e676c6544656274466c6f6f7241646a75737465722f6469762d696e76616c6964496e6372656173696e6754726561737572795265696d62757273656d656e742f6163636f756e742d6e6f742d617574686f72697a656453696e676c6544656274466c6f6f7241646a75737465722f6469762d792d6e756c6c53696e676c6544656274466c6f6f7241646a75737465722f6d6f646966792d756e7265636f676e697a65642d706172616d7353696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6d61782d63616c6c65722d72657761726453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6361756374696f6e2d646973636f756e7453696e676c6544656274466c6f6f7241646a75737465722f696e76616c69642d6c69712d6761732d616d6f756e74a264697066735822122005cb393b2e87213ce896050f4b92858e02e8414c31e7c42141d4d405cc1d582a64736f6c63430006070033

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

000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a69620000000000000000000000004ed9c0dca0479bc64d8f4eb3007126d5791f785100000000000000000000000083533fdd3285f48204215e9cf38c785371258e760000000000000000000000006a8757d4ec5630ebf86a5dbbe2e65423195a47f4000000000000000000000000b825e25856bd98b3f2faf2aeb6cb8742b38c40254554482d41000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000733181e32dd2d9ce000000000000000000000000000000000000000000000000e66303c65ba5b39c0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000000000000000003b5380000000000000000000000000000000000000000000000000000000000007a1200000000000000000000a70c3c40a64e6c51999090b65f67d9240000000000000000000000000000000000000002cd76fe086b93ce2f768a00b22a00000000000

-----Decoded View---------------
Arg [0] : safeEngine_ (address): 0xCC88a9d330da1133Df3A7bD823B95e52511A6962
Arg [1] : oracleRelayer_ (address): 0x4ed9C0dCa0479bC64d8f4EB3007126D5791f7851
Arg [2] : treasury_ (address): 0x83533fdd3285f48204215E9CF38C785371258E76
Arg [3] : gasPriceOracle_ (address): 0x6a8757d4eC5630EbF86A5DBBe2e65423195a47f4
Arg [4] : ethPriceOracle_ (address): 0xb825e25856bD98b3f2FAF2aEb6Cb8742B38C4025
Arg [5] : collateralName_ (bytes32): 0x4554482d41000000000000000000000000000000000000000000000000000000
Arg [6] : baseUpdateCallerReward_ (uint256): 8300558400946887118
Arg [7] : maxUpdateCallerReward_ (uint256): 16601116801893774236
Arg [8] : perSecondCallerRewardIncrease_ (uint256): 1000000000000000000000000000
Arg [9] : updateDelay_ (uint256): 3888000
Arg [10] : gasAmountForLiquidation_ (uint256): 500000
Arg [11] : maxDebtFloor_ (uint256): 1000000000000000000000000000000000000000000000000000000
Arg [12] : minDebtFloor_ (uint256): 1000000000000000000000000000000000000000000000

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 000000000000000000000000cc88a9d330da1133df3a7bd823b95e52511a6962
Arg [1] : 0000000000000000000000004ed9c0dca0479bc64d8f4eb3007126d5791f7851
Arg [2] : 00000000000000000000000083533fdd3285f48204215e9cf38c785371258e76
Arg [3] : 0000000000000000000000006a8757d4ec5630ebf86a5dbbe2e65423195a47f4
Arg [4] : 000000000000000000000000b825e25856bd98b3f2faf2aeb6cb8742b38c4025
Arg [5] : 4554482d41000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000733181e32dd2d9ce
Arg [7] : 000000000000000000000000000000000000000000000000e66303c65ba5b39c
Arg [8] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [9] : 00000000000000000000000000000000000000000000000000000000003b5380
Arg [10] : 000000000000000000000000000000000000000000000000000000000007a120
Arg [11] : 0000000000000000000a70c3c40a64e6c51999090b65f67d9240000000000000
Arg [12] : 000000000000000000000000002cd76fe086b93ce2f768a00b22a00000000000


Deployed Bytecode Sourcemap

10055:12956:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10055:12956:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;900:107:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;900:107:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;142:93;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;142:93:0;;:::i;747:147::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;747:147:0;;;;;;;:::i;3706:37::-;;;:::i;3966:::-;;;:::i;2758:51::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2758:51:0;-1:-1:-1;;;;;2758:51:0;;:::i;20126:829::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20126:829:0;-1:-1:-1;;;;;20126:829:0;;:::i;:::-;;6432:186;;;:::i;2919:164::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2919:164:0;-1:-1:-1;;;;;2919:164:0;;:::i;1235:107::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1235:107:0;;;;;;;:::i;597:144::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;597:144:0;;;;;;;:::i;4188:44::-;;;:::i;241:94::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;241:94:0;;:::i;12388:38::-;;;:::i;:::-;;;;-1:-1:-1;;;;;12388:38:0;;;;;;;;;;;;;;448:143;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;448:143:0;;;;;;;:::i;50:38::-;;;:::i;12093:26::-;;;:::i;11400:27::-;;;:::i;4272:41::-;;;:::i;16034:852::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16034:852:0;;;;;;-1:-1:-1;;;;;16034:852:0;;:::i;12311:35::-;;;:::i;3824:36::-;;;:::i;95:38::-;;;:::i;12462:39::-;;;:::i;11556:27::-;;;:::i;3202:170::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3202:170:0;-1:-1:-1;;;;;3202:170:0;;:::i;11741:41::-;;;:::i;11178:29::-;;;:::i;11861:50::-;;;:::i;21585:1423::-;;;:::i;1013:105::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1013:105:0;;;;;;;:::i;21080:324::-;;;:::i;12537:39::-;;;:::i;12206:35::-;;;:::i;10436:149::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10436:149:0;-1:-1:-1;;;;;10436:149:0;;:::i;11985:29::-;;;:::i;10266:49::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10266:49:0;-1:-1:-1;;;;;10266:49:0;;:::i;1348:1058::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1348:1058:0;;;;;;;;;;;;:::i;341:101::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;341:101:0;;;;;;;:::i;11314:38::-;;;:::i;10710:155::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10710:155:0;-1:-1:-1;;;;;10710:155:0;;:::i;6954:1553::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6954:1553:0;;;;;;;:::i;1124:105::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1124:105:0;;;;;;;:::i;17049:2391::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17049:2391:0;;;;;;;:::i;900:107::-;956:6;-1:-1:-1;;;979:14:0;988:1;991;979:8;:14::i;:::-;:20;;;;;;;900:107;-1:-1:-1;;;900:107:0:o;142:93::-;184:6;207:20;216:1;219:7;207:8;:20::i;:::-;203:24;142:93;-1:-1:-1;;142:93:0:o;747:147::-;802:6;829;;;:30;;-1:-1:-1;;844:5:0;;;858:1;853;844:5;853:1;839:15;;;;;:20;829:30;821:65;;;;;-1:-1:-1;;;821:65:0;;;;;;;;;;;;-1:-1:-1;;;821:65:0;;;;;;;;;;;;;;3706:37;;;;:::o;3966:::-;;;;:::o;2758:51::-;;;;;;;;;;;;;;:::o;20126:829::-;20290:3;20273:14;;:20;20265:82;;;;-1:-1:-1;;;20265:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20404:73;20444:11;;20411:29;20420:3;20425:14;;20411:8;:29::i;:::-;:44;;20457:14;;20475:1;20457:19;20404:6;:73::i;:::-;20396:119;;;;-1:-1:-1;;;20396:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20564:20;20587:44;20603:14;;20619:11;;20587:15;:44::i;:::-;20693:3;20676:14;:20;20564:67;-1:-1:-1;20751:27:0;20781:24;:22;:24::i;:::-;20751:54;;20816:29;20825:19;20816:8;:29::i;:::-;20908:39;20921:11;20934:12;20908;:39::i;:::-;20126:829;;;:::o;6432:186::-;6532:8;;:36;;;-1:-1:-1;;;6532:36:0;;6562:4;6532:36;;;;;;6482:7;;;;;;-1:-1:-1;;;;;6532:8:0;;;;:21;;:36;;;;;;;;;;;;:8;:36;;;2:2:-1;;;;27:1;24;17:12;2:2;6532:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6532:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6532:36:0;;;;;;;;;-1:-1:-1;6532:36:0;-1:-1:-1;6586:24:0;6532:36;;6586:7;:24::i;:::-;6579:31;;;;6432:186;;:::o;2919:164::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3003:27:0;::::1;:18;:27:::0;;;::::1;::::0;;;;;;;;3033:1:::1;3003:31:::0;;3050:25;;;;;;;::::1;::::0;;;;;;;;::::1;2919:164:::0;:::o;1235:107::-;1291:6;125:8;1314:14;1323:1;1326;1314:8;:14::i;597:144::-;675:5;;;699:6;;;;691:42;;;;;-1:-1:-1;;;691:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4188:44;;;;:::o;241:94::-;283:6;306:21;315:1;-1:-1:-1;;;306:8:0;:21::i;12388:38::-;;;-1:-1:-1;;;;;12388:38:0;;:::o;448:143::-;526:5;;;550:6;;;;542:41;;;;;-1:-1:-1;;;542:41:0;;;;;;;;;;;;-1:-1:-1;;;542:41:0;;;;;;;;;;;;;;50:38;-1:-1:-1;;;50:38:0;:::o;12093:26::-;;;;:::o;11400:27::-;;;;:::o;4272:41::-;;;-1:-1:-1;;;;;4272:41:0;;:::o;16034:852::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16134:18:0;::::1;16126:67;;;;-1:-1:-1::0;;;16126:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16208:9;-1:-1:-1::0;;;16208:23:0::1;16204:625;;;16248:8;:41:::0;;-1:-1:-1;;;;;;16248:41:0::1;-1:-1:-1::0;;;;;16248:41:0;::::1;;::::0;;16204:625:::1;;;16320:9;-1:-1:-1::0;;;16320:28:0::1;16316:513;;;16365:13;:39:::0;;-1:-1:-1;;;;;;16365:39:0::1;-1:-1:-1::0;;;;;16365:39:0;;::::1;::::0;;;::::1;::::0;;;;16419:31:::1;::::0;;-1:-1:-1;;;16419:31:0;;;;:13;;;::::1;::::0;:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;16419:13:0;:31;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16419:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16419:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16316:513:0::1;::::0;-1:-1:-1;16316:513:0::1;;16481:9;-1:-1:-1::0;;;16481:29:0::1;16477:352;;;16527:14;:33:::0;;-1:-1:-1;;;;;;16527:33:0::1;-1:-1:-1::0;;;;;16527:33:0;;::::1;::::0;;;::::1;::::0;;;;16575:21:::1;::::0;;-1:-1:-1;;;16575:21:0;;;;:14;;;::::1;::::0;:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:14;:21;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16575:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;16477:352:0;16627:9;-1:-1:-1::0;;;16627:29:0::1;16623:206;;;16673:14;:33:::0;;-1:-1:-1;;;;;;16673:33:0::1;-1:-1:-1::0;;;;;16673:33:0;;::::1;::::0;;;::::1;::::0;;;;16721:21:::1;::::0;;-1:-1:-1;;;16721:21:0;;;;:14;;;::::1;::::0;:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:14;:21;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;16623:206:0;16769:60;;-1:-1:-1::0;;;16769:60:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16623:206;16845:33;::::0;;;;;-1:-1:-1;;;;;16845:33:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;16034:852:::0;;:::o;12311:35::-;;;-1:-1:-1;;;;;12311:35:0;;:::o;3824:36::-;;;;:::o;95:38::-;125:8;95:38;:::o;12462:39::-;;;-1:-1:-1;;;;;12462:39:0;;:::o;11556:27::-;;;;:::o;3202:170::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3289:27:0;::::1;3319:1;3289:27:::0;;;::::1;::::0;;;;;;;:31;;;;3336:28;;;;;;;::::1;::::0;;;;;;;;::::1;3202:170:::0;:::o;11741:41::-;;;;:::o;11178:29::-;;;;:::o;11861:50::-;;;;:::o;21585:1423::-;21685:10;;21712:14;;21685:42;;;-1:-1:-1;;;21685:42:0;;;;;;;;;;21635:7;;;;-1:-1:-1;;;;;21685:10:0;;;;:26;;:42;;;;;;;;;;;;;;;:10;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;21685:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21685:42:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21685:42:0;;;21790:12;;21685:42;;-1:-1:-1;21738:27:0;;21769:34;;21685:42;;21769:7;:34::i;:::-;21738:65;;21814:28;21845:34;21853:11;21866:12;;21845:7;:34::i;:::-;21814:65;;21936:16;21955:14;;;;;;;;;-1:-1:-1;;;;;21955:14:0;-1:-1:-1;;;;;21955:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21955:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21955:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21955:21:0;22006:14;;:21;;;-1:-1:-1;;;22006:21:0;;;;21955;;-1:-1:-1;21987:16:0;;-1:-1:-1;;;;;22006:14:0;;;;:19;;:21;;;;;21955;;22006;;;;;;;;:14;:21;;;2:2:-1;;;;27:1;24;17:12;2:2;22006:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22006:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22006:21:0;;-1:-1:-1;22117:26:0;22146:76;22155:41;22162:28;22171:8;22006:21;22162:8;:28::i;:::-;125:8;22155:6;:41::i;:::-;22198:23;;22146:8;:76::i;:::-;22117:105;;22285:23;22349:5;22315:13;;;;;;;;;-1:-1:-1;;;;;22315:13:0;-1:-1:-1;;;;;22315:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22315:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22315:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22315:31:0;:39;;;;;;22285:69;;22421:26;22451:58;22458:33;22467:18;125:8;22458;:33::i;:::-;22493:15;22451:6;:58::i;:::-;22421:88;;22638:27;22668:87;22677:58;22684:33;22693:18;125:8;22684;:33::i;:::-;22719:15;;22677:6;:58::i;:::-;22737:17;;22668:8;:87::i;:::-;22638:117;;22824:19;22801;:42;22797:166;;22852:19;22845:26;;;;;;;;;;;;;22797:166;22914:20;22891:19;:43;22887:76;;22943:20;22936:27;;;;;;;;;;;;;22887:76;22981:19;-1:-1:-1;;;;;;;;;21585:1423:0;:::o;1013:105::-;1067:6;1109:1;1090:16;1099:1;-1:-1:-1;;;1090:8:0;:16::i;21080:324::-;11032:10;11018:25;;;;:13;:25;;;;;;11047:1;11018:30;11010:84;;;;-1:-1:-1;;;11010:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21175:20:::1;;21169:3;:26;21161:93;;;;-1:-1:-1::0;;;21161:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21265:27;21295:24;:22;:24::i;:::-;21353:3;21330:20;:26:::0;21265:54;-1:-1:-1;21367:29:0::1;21265:54:::0;21367:8:::1;:29::i;:::-;11105:1;21080:324::o:0;12537:39::-;;;-1:-1:-1;;;;;12537:39:0;;:::o;12206:35::-;;;;:::o;10436:149::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10511:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;;;;10536:1:::1;10511:26:::0;;10553:24;;;;;;;::::1;::::0;;;;;;;;::::1;10436:149:::0;:::o;11985:29::-;;;;:::o;10266:49::-;;;;;;;;;;;;;:::o;1348:1058::-;1412:6;1462:1;1464:53;;;;1565:9;;;1575:20;;;;1611:1;1606:6;;1558:56;;1575:20;1589:4;1584:9;;1558:56;;1654:1;1648:4;1644:12;1710:1;1707;1703:9;1698:14;;1692:681;1715:1;1692:681;;;1775:1;1772;1768:9;1824:1;1820;1816:2;1812:10;1809:17;1799:2;;1839:1;1837;1830:11;1799:2;1888:4;1884:2;1880:13;1930:2;1921:7;1918:15;1915:2;;;1945:1;1943;1936:11;1915:2;1976:18;;;;-1:-1:-1;;2019:8:0;;;2016:2;;;2072:1;2069;2065:9;2148:1;2144;2140:2;2136:10;2133:17;2126:25;2121:1;2114:9;2107:17;2103:49;2100:2;;;2164:1;2162;2155:11;2100:2;2217:4;2213:2;2209:13;2263:2;2254:7;2251:15;2248:2;;;2278:1;2276;2269:11;2248:2;2313:18;;;;-1:-1:-1;;2016:2:0;1730:1;1728;1724:8;1719:13;;1692:681;;;1696:18;1455:933;;1464:53;1479:1;1481:18;;;;1514:1;1509:6;;1472:44;;1481:18;1494:4;1489:9;;1472:44;;1455:933;;1440:959;;;;;:::o;341:101::-;395:6;424:1;419;:6;;418:16;;433:1;418:16;;;429:1;418:16;414:20;341:101;-1:-1:-1;;;341:101:0:o;11314:38::-;;;;:::o;10710:155::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10788:22:0;::::1;10813:1;10788:22:::0;;;:13:::1;:22;::::0;;;;;;;:26;;;;10830:27;;;;;;;::::1;::::0;;;;;;;;::::1;10710:155:::0;:::o;6954:1553::-;7060:7;7177:16;7197:22;;7223:1;7197:27;:57;;;;-1:-1:-1;7228:21:0;;:26;7197:57;7177:78;;7270:44;7297:3;7277:16;:23;;7302:11;7270:6;:44::i;:::-;7266:58;;;7323:1;7316:8;;;;;7266:58;7450:19;7473:21;;7472:84;;7525:31;7534:3;7539:16;7525:8;:31::i;:::-;7472:84;;;7498:24;7472:84;7450:106;;7571:75;7592:24;7578:11;:38;7618:22;;7644:1;7618:27;7571:6;:75::i;:::-;7567:116;;;7670:1;7663:8;;;;;;7567:116;7755:20;7783:47;7792:11;7805:24;7783:8;:47::i;:::-;7755:75;;7841:25;7869:57;7877:21;;-1:-1:-1;;;7900:19:0;:17;:19::i;:::-;:25;;;;;;7869:7;:57::i;:::-;7841:85;;7956:22;;7941:12;:37;7937:94;;;8002:17;-1:-1:-1;7995:24:0;;-1:-1:-1;;;7995:24:0;7937:94;8103:22;;8140:16;;8136:153;;8192:85;8202:56;8209:29;;8240:12;-1:-1:-1;;;8202:6:0;:56::i;:::-;8260:16;8192:9;:85::i;:::-;8173:104;;8136:153;8384:17;8365:16;:36;8361:105;;;-1:-1:-1;8437:17:0;8361:105;8483:16;6954:1553;-1:-1:-1;;;;;;;6954:1553:0:o;1124:105::-;1178:6;1220:1;1201:16;1210:1;125:8;1201;:16::i;17049:2391::-;3525:10;3506:18;:30;;;;;;;;;;;3540:1;3506:35;3498:102;;;;-1:-1:-1;;;3498:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17144:9:::1;-1:-1:-1::0;;;17144:37:0::1;17140:2211;;;17211:21;;17204:3;:28;;17196:91;;;;-1:-1:-1::0;;;17196:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17300:22;:28:::0;;;17140:2211:::1;;;17359:9;-1:-1:-1::0;;;17359:36:0::1;17355:1996;;;17425:22;;17418:3;:29;;17410:91;;;;-1:-1:-1::0;;;17410:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17514:21;:27:::0;;;17355:1996:::1;;;17572:9;:44;;17568:1783;;;-1:-1:-1::0;;;17639:3:0::1;:10;;17631:77;;;;-1:-1:-1::0;;;17631:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17721:29;:35:::0;;;17568:1783:::1;;;17787:9;-1:-1:-1::0;;;17787:37:0::1;17783:1568;;;17853:1;17847:3;:7;17839:70;;;;-1:-1:-1::0;;;17839:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17922:22;:28:::0;;;17783:1568:::1;;;17981:9;-1:-1:-1::0;;;17981:26:0::1;17977:1374;;;18103:11;:17:::0;;;17977:1374:::1;;;18151:9;-1:-1:-1::0;;;18151:27:0::1;18147:1204;;;18201:33;18212:1;18206:3;:7;18221:12;;18215:3;:18;18201:4;:33::i;:::-;18193:87;;;;-1:-1:-1::0;;;18193:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18293:12;:18:::0;;;18147:1204:::1;;;18342:9;-1:-1:-1::0;;;18342:27:0::1;18338:1013;;;18392:33;18403:1;18397:3;:7;18412:12;;18406:3;:18;18392:4;:33::i;:::-;18384:87;;;;-1:-1:-1::0;;;18384:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18484:12;:18:::0;;;18338:1013:::1;;;18533:9;-1:-1:-1::0;;;18533:29:0::1;18529:822;;;18591:3;18585;:9;18577:65;;;;-1:-1:-1::0;;;18577:65:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18655:14;:20:::0;;;18529:822:::1;;;18706:9;:38;;18702:649;;;18767:35;18778:1;18772:3;:7;18787:14;18781:3;:20;18767:4;:35::i;:::-;18759:94;;;;-1:-1:-1::0;;;18759:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18866:23;:29:::0;;;18702:649:::1;;;18926:9;-1:-1:-1::0;;;18926:32:0::1;18922:429;;;-1:-1:-1::0;;;18981:3:0::1;:10;;18973:74;;;;-1:-1:-1::0;;;18973:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19060:17;:23:::0;;;18922:429:::1;;;19114:9;-1:-1:-1::0;;;19114:30:0::1;19110:241;;;125:8;19167:3;:10;;19159:72;;;;-1:-1:-1::0;;;19159:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19244:15;:21:::0;;;19110:241:::1;;;19292:59;;-1:-1:-1::0;;;19292:59:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19110:241;19367:65;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;17049:2391:::0;;:::o;6124:105::-;6213:8;;6206:16::o;19612:262::-;19697:1;19681:13;:17;19673:69;;;;-1:-1:-1;;;19673:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19753:10;;19781:14;;19753:71;;;-1:-1:-1;;;19753:71:0;;;;;;;;;-1:-1:-1;;;19753:71:0;;;;;;;;;;;-1:-1:-1;;;;;19753:10:0;;;;:27;;:71;;;;;:10;;:71;;;;;;;;:10;;:71;;;2:2:-1;;;;27:1;24;17:12;2:2;19753:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19840:26:0;;;;;;;;;;-1:-1:-1;19840:26:0;;;;;;;-1:-1:-1;19840:26:0;19612:262;:::o;8690:715::-;8900:8;;-1:-1:-1;;;;;8892:40:0;;;8900:8;;8892:40;8888:53;;;8934:7;;8888:53;8970:8;;8955:52;;-1:-1:-1;;;;;8970:8:0;8962:31;8995:11;;8955:6;:52::i;:::-;8951:65;;;9009:7;;8951:65;9085:24;-1:-1:-1;;;;;9113:33:0;;;9112:70;;9163:19;9112:70;;;9150:10;9112:70;9197:8;;9234:21;;;-1:-1:-1;;;9234:21:0;;;;9085:97;;-1:-1:-1;;;;;;9197:8:0;;;;:18;;9085:97;;9197:8;;9234:19;;:21;;;;;;;;;;;;;;9197:8;9234:21;;;2:2:-1;;;;27:1;24;17:12;2:2;9234:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9234:21:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9234:21:0;9197:67;;;-1:-1:-1;;;;;;9197:67:0;;;;;;;-1:-1:-1;;;;;9197:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9197:67:0;;;;;;;-1:-1:-1;9197:67:0;;;;2:2:-1;;;;27:1;24;17:12;2:2;9197:67:0;;;;;;;;;;;;;;9193:205;;;;14:27:-1;;;;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;;9330:56:0;9347:12;9361:16;9379:6;9330:56;;;;;;;-1:-1:-1;;;;;9330:56:0;-1:-1:-1;;;;;9330:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9330:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9277:121;9193:205;;8690:715;;;:::o;15549:228::-;15610:9;15644:1;15640;:5;15632:52;;;;-1:-1:-1;;;15632:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15703:1;15699;:5;;;;;;15695:9;;15728:1;15723;:6;;15715:54;;;;-1:-1:-1;;;15715:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15371:104;15458:9;;15451:17::o

Swarm Source

ipfs://05cb393b2e87213ce896050f4b92858e02e8414c31e7c42141d4d405cc1d582a

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.