ETH Price: $2,429.08 (-1.53%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw176718442023-07-11 17:25:59482 days ago1689096359IN
0x381Ca6Cf...1D1C0d832
0 ETH0.0053718335.17763051
Withdraw176718282023-07-11 17:22:47482 days ago1689096167IN
0x381Ca6Cf...1D1C0d832
0 ETH0.0055578733.20674332
Withdraw176718092023-07-11 17:18:59482 days ago1689095939IN
0x381Ca6Cf...1D1C0d832
0 ETH0.0054397832.32812605
Withdraw175661912023-06-26 21:13:59496 days ago1687814039IN
0x381Ca6Cf...1D1C0d832
0 ETH0.002169212.91965326
Deposit175660972023-06-26 20:55:11496 days ago1687812911IN
0x381Ca6Cf...1D1C0d832
0 ETH0.0030978212.71417666
0x61014060172491622023-05-13 6:03:23541 days ago1683957803IN
 Create: SavingsDai
0 ETH0.107109641.49317142

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SavingsDai

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : SavingsDAI.sol
// SPDX-License-Identifier: AGPL-3.0-or-later

/// SavingsDai.sol -- A tokenized representation DAI in the DSR (pot)

// Copyright (C) 2017, 2018, 2019 dbrock, rain, mrchico
// Copyright (C) 2021-2022 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

pragma solidity ^0.8.17;

interface IERC1271 {
    function isValidSignature(
        bytes32,
        bytes memory
    ) external view returns (bytes4);
}

interface VatLike {
    function hope(address) external;
}

interface PotLike {
    function chi() external view returns (uint256);
    function rho() external view returns (uint256);
    function dsr() external view returns (uint256);
    function drip() external returns (uint256);
    function join(uint256) external;
    function exit(uint256) external;
}

interface DaiJoinLike {
    function vat() external view returns (address);
    function dai() external view returns (address);
    function join(address, uint256) external;
    function exit(address, uint256) external;
}

interface DaiLike {
    function transferFrom(address, address, uint256) external returns (bool);
    function approve(address, uint256) external returns (bool);
}

contract SavingsDai {

    // --- ERC20 Data ---
    string  public constant name     = "Savings Dai";
    string  public constant symbol   = "sDAI";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint256)                      public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    mapping (address => uint256)                      public nonces;

    // --- Data ---
    VatLike     public immutable vat;
    DaiJoinLike public immutable daiJoin;
    DaiLike     public immutable dai;
    PotLike     public immutable pot;

    // --- Events ---
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
    event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares);
    event Referral(uint16 indexed referral, address indexed owner, uint256 assets, uint256 shares);

    // --- EIP712 niceties ---
    uint256 public immutable deploymentChainId;
    bytes32 private immutable _DOMAIN_SEPARATOR;
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    
    uint256 private constant RAY = 10 ** 27;

    constructor(address _daiJoin, address _pot) {
        daiJoin = DaiJoinLike(_daiJoin);
        vat = VatLike(daiJoin.vat());
        dai = DaiLike(daiJoin.dai());
        pot = PotLike(_pot);

        deploymentChainId = block.chainid;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(block.chainid);

        vat.hope(address(daiJoin));
        vat.hope(address(pot));

        dai.approve(address(daiJoin), type(uint256).max);
    }

    function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes(version)),
                chainId,
                address(this)
            )
        );
    }

    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid);
    }

    function _rpow(uint256 x, uint256 n) internal pure returns (uint256 z) {
        assembly {
            switch x case 0 {switch n case 0 {z := RAY} default {z := 0}}
            default {
                switch mod(n, 2) case 0 { z := RAY } default { z := x }
                let half := div(RAY, 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, RAY)
                    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, RAY)
                    }
                }
            }
        }
    }

    function _divup(uint256 x, uint256 y) internal pure returns (uint256 z) {
        unchecked {
            z = x != 0 ? ((x - 1) / y) + 1 : 0;
        }
    }

    // --- ERC20 Mutations ---

    function transfer(address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SavingsDai/invalid-address");
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "SavingsDai/insufficient-balance");

        unchecked {
            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
        }

        emit Transfer(msg.sender, to, value);

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external returns (bool) {
        require(to != address(0) && to != address(this), "SavingsDai/invalid-address");
        uint256 balance = balanceOf[from];
        require(balance >= value, "SavingsDai/insufficient-balance");

        if (from != msg.sender) {
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "SavingsDai/insufficient-allowance");

                unchecked {
                    allowance[from][msg.sender] = allowed - value;
                }
            }
        }

        unchecked {
            balanceOf[from] = balance - value;
            balanceOf[to] += value;
        }

        emit Transfer(from, to, value);

        return true;
    }

    function approve(address spender, uint256 value) external returns (bool) {
        allowance[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        uint256 newValue = allowance[msg.sender][spender] + addedValue;
        allowance[msg.sender][spender] = newValue;

        emit Approval(msg.sender, spender, newValue);

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 allowed = allowance[msg.sender][spender];
        require(allowed >= subtractedValue, "SavingsDai/insufficient-allowance");
        unchecked{
            allowed = allowed - subtractedValue;
        }
        allowance[msg.sender][spender] = allowed;

        emit Approval(msg.sender, spender, allowed);

        return true;
    }

    // --- Mint/Burn Internal ---

    function _mint(uint256 assets, uint256 shares, address receiver) internal {
        require(receiver != address(0) && receiver != address(this), "SavingsDai/invalid-address");

        dai.transferFrom(msg.sender, address(this), assets);
        daiJoin.join(address(this), assets);
        pot.join(shares);

        // note: we don't need an overflow check here b/c shares totalSupply will always be <= dai totalSupply
        unchecked {
            balanceOf[receiver] = balanceOf[receiver] + shares;
            totalSupply = totalSupply + shares;
        }

        emit Deposit(msg.sender, receiver, assets, shares);
    }

    function _burn(uint256 assets, uint256 shares, address receiver, address owner) internal {
        uint256 balance = balanceOf[owner];
        require(balance >= shares, "SavingsDai/insufficient-balance");

        if (owner != msg.sender) {
            uint256 allowed = allowance[owner][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= shares, "SavingsDai/insufficient-allowance");

                unchecked {
                    allowance[owner][msg.sender] = allowed - shares;
                }
            }
        }

        unchecked {
            balanceOf[owner] = balance - shares; // note: we don't need overflow checks b/c require(balance >= value) and balance <= totalSupply
            totalSupply      = totalSupply - shares;
        }

        pot.exit(shares);
        daiJoin.exit(receiver, assets);

        emit Withdraw(msg.sender, receiver, owner, assets, shares);
    }

    // --- ERC-4626 ---

    function asset() external view returns (address) {
        return address(dai);
    }

    function totalAssets() external view returns (uint256) {
        return convertToAssets(totalSupply);
    }

    function convertToShares(uint256 assets) public view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return assets * RAY / chi;
    }

    function convertToAssets(uint256 shares) public view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return shares * chi / RAY;
    }

    function maxDeposit(address) external pure returns (uint256) {
        return type(uint256).max;
    }

    function previewDeposit(uint256 assets) external view returns (uint256) {
        return convertToShares(assets);
    }

    function deposit(uint256 assets, address receiver) public returns (uint256 shares) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        shares = assets * RAY / chi;
        _mint(assets, shares, receiver);
    }

    function deposit(uint256 assets, address receiver, uint16 referral) external returns (uint256 shares) {
        shares = deposit(assets, receiver);
        emit Referral(referral, receiver, assets, shares);
    }

    function maxMint(address) external pure returns (uint256) {
        return type(uint256).max;
    }

    function previewMint(uint256 shares) external view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return _divup(shares * chi, RAY);
    }

    function mint(uint256 shares, address receiver) public returns (uint256 assets) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        assets = _divup(shares * chi, RAY);
        _mint(assets, shares, receiver);
    }

    function mint(uint256 shares, address receiver, uint16 referral) external returns (uint256 assets) {
        assets = mint(shares, receiver);
        emit Referral(referral, receiver, assets, shares);
    }

    function maxWithdraw(address owner) external view returns (uint256) {
        return convertToAssets(balanceOf[owner]);
    }

    function previewWithdraw(uint256 assets) external view returns (uint256) {
        uint256 rho = pot.rho();
        uint256 chi = (block.timestamp > rho) ? _rpow(pot.dsr(), block.timestamp - rho) * pot.chi() / RAY : pot.chi();
        return _divup(assets * RAY, chi);
    }

    function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        shares = _divup(assets * RAY, chi);
        _burn(assets, shares, receiver, owner);
    }

    function maxRedeem(address owner) external view returns (uint256) {
        return balanceOf[owner];
    }

    function previewRedeem(uint256 shares) external view returns (uint256) {
        return convertToAssets(shares);
    }

    function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        assets = shares * chi / RAY;
        _burn(assets, shares, receiver, owner);
    }

    // --- Approve by signature ---

    function _isValidSignature(
        address signer,
        bytes32 digest,
        bytes memory signature
    ) internal view returns (bool) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            if (signer == ecrecover(digest, v, r, s)) {
                return true;
            }
        }

        (bool success, bytes memory result) = signer.staticcall(
            abi.encodeWithSelector(IERC1271.isValidSignature.selector, digest, signature)
        );
        return (success &&
            result.length == 32 &&
            abi.decode(result, (bytes4)) == IERC1271.isValidSignature.selector);
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        bytes memory signature
    ) public {
        require(block.timestamp <= deadline, "SavingsDai/permit-expired");
        require(owner != address(0), "SavingsDai/invalid-owner");

        uint256 nonce;
        unchecked { nonce = nonces[owner]++; }

        bytes32 digest =
            keccak256(abi.encodePacked(
                "\x19\x01",
                block.chainid == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid),
                keccak256(abi.encode(
                    PERMIT_TYPEHASH,
                    owner,
                    spender,
                    value,
                    nonce,
                    deadline
                ))
            ));

        require(_isValidSignature(owner, digest, signature), "SavingsDai/invalid-permit");

        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        permit(owner, spender, value, deadline, abi.encodePacked(r, s, v));
    }

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_daiJoin","type":"address"},{"internalType":"address","name":"_pot","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"referral","type":"uint16"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Referral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract DaiLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract DaiJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"referral","type":"uint16"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pot","outputs":[{"internalType":"contract PotLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

6101406040523480156200001257600080fd5b506040516200314738038062003147833981016040819052620000359162000386565b6001600160a01b03821660a0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa15801562000080573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a69190620003be565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001269190620003be565b6001600160a01b0390811660c052811660e052466101008190526200021990604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6101205260805160a0516040516328ec8bf160e21b81526001600160a01b03918216600482015291169063a3b22fc490602401600060405180830381600087803b1580156200026757600080fd5b505af11580156200027c573d6000803e3d6000fd5b505060805160e0516040516328ec8bf160e21b81526001600160a01b0391821660048201529116925063a3b22fc49150602401600060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505060c05160a05160405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af11580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003609190620003e3565b50505062000407565b80516001600160a01b03811681146200038157600080fd5b919050565b600080604083850312156200039a57600080fd5b620003a58362000369565b9150620003b56020840162000369565b90509250929050565b600060208284031215620003d157600080fd5b620003dc8262000369565b9392505050565b600060208284031215620003f657600080fd5b81518015158114620003dc57600080fd5b60805160a05160c05160e0516101005161012051612bed6200055a60003960008181610da3015261133c01526000818161059601528181610d7201526113080152600081816103f20152818161068301528181610710015281816107a30152818161082801528181610955015281816109e201528181610a7501528181610afa01528181610e5c01528181610ee401528181610f6b01528181611028015281816110b00152818161113701528181611617015281816116a401528181611737015281816117bc01528181611840015281816118c80152818161194f01528181611a0601528181611a8e01528181611b1501528181611bcc01528181611c5901528181611cec01528181611d71015281816121d901526125310152600081816103a10152818161064a01526120cf01526000818161055c0152818161216101526125b3015260006103650152612bed6000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637ecebe001161013b578063c11645bc116100b8578063d505accf1161007c578063d505accf146105cb578063d905777e146105de578063dd62ed3e14610607578063ef8b30f714610632578063f4b9fa751461064557600080fd5b8063c11645bc14610557578063c63d75b6146103d8578063c6e6f5921461057e578063cd0d009614610591578063ce96cb77146105b857600080fd5b8063a457c2d7116100ff578063a457c2d7146104f8578063a9059cbb1461050b578063b3d7f6b91461051e578063b460af9414610531578063ba0876521461054457600080fd5b80637ecebe001461047a57806394bf804d1461049a57806395d89b41146104ad5780639b8d6d38146104d05780639fd5a6cf146104e357600080fd5b80633644e515116101c95780634ba2363a1161018d5780634ba2363a146103ed5780634cdad5061461041457806354fd4d50146104275780636e553f651461044757806370a082311461045a57600080fd5b80633644e5151461035857806336569e771461036057806338d52e0f1461039f57806339509351146103c5578063402d267d146103d857600080fd5b806318160ddd1161021057806318160ddd146102e8578063216740a0146102f157806323b872dd1461030457806330adf81f14610317578063313ce5671461033e57600080fd5b806301e1d1141461024d57806306fdde031461026857806307a2d13a1461029f578063095ea7b3146102b25780630a28a477146102d5575b600080fd5b61025561066c565b6040519081526020015b60405180910390f35b6102926040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161025f91906126b2565b6102556102ad3660046126c5565b61067e565b6102c56102c03660046126fa565b6108f5565b604051901515815260200161025f565b6102556102e33660046126c5565b610950565b61025560005481565b6102556102ff366004612724565b610b8a565b6102c561031236600461276b565b610bf0565b6102557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610346601281565b60405160ff909116815260200161025f565b610255610d6e565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161025f565b7f0000000000000000000000000000000000000000000000000000000000000000610387565b6102c56103d33660046126fa565b610dc5565b6102556103e63660046127a7565b5060001990565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b6102556104223660046126c5565b610e4c565b610292604051806040016040528060018152602001603160f81b81525081565b6102556104553660046127c2565b610e57565b6102556104683660046127a7565b60016020526000908152604090205481565b6102556104883660046127a7565b60036020526000908152604090205481565b6102556104a83660046127c2565b611023565b610292604051806040016040528060048152602001637344414960e01b81525081565b6102556104de366004612724565b6111e6565b6104f66104f1366004612804565b61123d565b005b6102c56105063660046126fa565b6114b7565b6102c56105193660046126fa565b611546565b61025561052c3660046126c5565b611612565b61025561053f3660046128ea565b61183b565b6102556105523660046128ea565b611a01565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b61025561058c3660046126c5565b611bc7565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6102556105c63660046127a7565b611df9565b6104f66105d9366004612926565b611e1b565b6102556105ec3660046127a7565b6001600160a01b031660009081526001602052604090205490565b610255610615366004612999565b600260209081526000928352604080842090915290825290205481565b6102556106403660046126c5565b611e72565b6103877f000000000000000000000000000000000000000000000000000000000000000081565b600061067960005461067e565b905090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906129c3565b90506000814211610795577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079091906129c3565b6108cb565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906129c3565b6108b77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a891906129c3565b6108b286426129f2565b611e7d565b6108c19190612a05565b6108cb9190612a32565b9050676765c793fa10079d601b1b6108e38286612a05565b6108ed9190612a32565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612b988339815191529061093e9086815260200190565b60405180910390a35060015b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129c3565b90506000814211610a67577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906129c3565b610b6a565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af591906129c3565b610b567f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b610b609190612a05565b610b6a9190612a32565b90506108ed610b84676765c793fa10079d601b1b86612a05565b82611f6e565b6000610b968484611023565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610be1929190918252602082015260400190565b60405180910390a39392505050565b60006001600160a01b03831615801590610c1357506001600160a01b0383163014155b610c385760405162461bcd60e51b8152600401610c2f90612a54565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610c715760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b0385163314610cf9576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610cf75783811015610cce5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d599087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610da05761067946611f9c565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610df6908490612b03565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612b9883398151915291015b60405180910390a35060019392505050565b600061094a8261067e565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b4211610f69577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906129c3565b610fed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906129c3565b905080611005676765c793fa10079d601b1b86612a05565b61100f9190612a32565b915061101c848385612070565b5092915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906129c3565b4211611135577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113091906129c3565b6111b9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b991906129c3565b90506111d96111c88286612a05565b676765c793fa10079d601b1b611f6e565b915061101c828585612070565b60006111f28484610e57565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610be1929190918252602082015260400190565b8142111561128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610c2f565b6001600160a01b0385166112e35760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610c2f565b6001600160a01b038516600090815260036020526040812080546001810190915590467f00000000000000000000000000000000000000000000000000000000000000001461133a5761133546611f9c565b61135c565b7f00000000000000000000000000000000000000000000000000000000000000005b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016113f592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506114188782856122a4565b6114645760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610c2f565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612b98833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114fb5760405162461bcd60e51b8152600401610c2f90612ac2565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612b988339815191529101610e3a565b60006001600160a01b0383161580159061156957506001600160a01b0383163014155b6115855760405162461bcd60e51b8152600401610c2f90612a54565b33600090815260016020526040902054828110156115b55760405162461bcd60e51b8152600401610c2f90612a8b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e3a565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169791906129c3565b90506000814211611729577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906129c3565b61182c565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906129c3565b6118187f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b6118229190612a05565b61182c9190612a32565b90506108ed6111c88286612a05565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129c3565b421161194d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194891906129c3565b6119d1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d191906129c3565b90506119eb610b84676765c793fa10079d601b1b87612a05565b91506119f985838686612435565b509392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906129c3565b4211611b13577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906129c3565b611b97565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9791906129c3565b9050676765c793fa10079d601b1b611baf8287612a05565b611bb99190612a32565b91506119f982868686612435565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c91906129c3565b90506000814211611cde577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd991906129c3565b611de1565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906129c3565b611dcd7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b611dd79190612a05565b611de19190612a32565b9050806108e3676765c793fa10079d601b1b86612a05565b6001600160a01b03811660009081526001602052604081205461094a9061067e565b611e6987878787868689604051602001611e5593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b60405160208183030381529060405261123d565b50505050505050565b600061094a82611bc7565b6000828015611f4757600183168015611e9857849250611ea7565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611f41578485028586820414611ed357600080fd5b81810181811015611ee357600080fd5b676765c793fa10079d601b1b90049550506001841615611f36578483028386820414158615151615611f1457600080fd5b81810181811015611f2457600080fd5b676765c793fa10079d601b1b90049350505b600284049350611ebc565b5061101c565b828015611f575760009250611f66565b676765c793fa10079d601b1b92505b505092915050565b600082600003611f7f576000610d67565b816001840381611f9157611f91612a1c565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b0381161580159061209157506001600160a01b0381163014155b6120ad5760405162461bcd60e51b8152600401610c2f90612a54565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190612b16565b50604051633b4da69f60e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361234157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561230f573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b03160361233d5760019350505050610d67565b5050505b600080856001600160a01b0316631626ba7e60e01b8686604051602401612369929190612b38565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123a79190612b51565b600060405180830381855afa9150503d80600081146123e2576040519150601f19603f3d011682016040523d82523d6000602084013e6123e7565b606091505b50915091508180156123fa575080516020145b801561242b57508051630b135d3f60e11b9061241f9083016020908101908401612b6d565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381166000908152600160205260409020548381101561246e5760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b03821633146124f6576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146124f457848110156124cb5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000000000000000000000000000000000000000000090911690637f8661a190602401600060405180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed9150604401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561267d578181015183820152602001612665565b50506000910152565b6000815180845261269e816020860160208601612662565b601f01601f19169290920160200192915050565b602081526000610d676020830184612686565b6000602082840312156126d757600080fd5b5035919050565b80356001600160a01b03811681146126f557600080fd5b919050565b6000806040838503121561270d57600080fd5b612716836126de565b946020939093013593505050565b60008060006060848603121561273957600080fd5b83359250612749602085016126de565b9150604084013561ffff8116811461276057600080fd5b809150509250925092565b60008060006060848603121561278057600080fd5b612789846126de565b9250612797602085016126de565b9150604084013590509250925092565b6000602082840312156127b957600080fd5b610d67826126de565b600080604083850312156127d557600080fd5b823591506127e5602084016126de565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561281c57600080fd5b612825866126de565b9450612833602087016126de565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561285e57600080fd5b818801915088601f83011261287257600080fd5b813581811115612884576128846127ee565b604051601f8201601f19908116603f011681019083821181831017156128ac576128ac6127ee565b816040528281528b60208487010111156128c557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156128ff57600080fd5b8335925061290f602085016126de565b915061291d604085016126de565b90509250925092565b600080600080600080600060e0888a03121561294157600080fd5b61294a886126de565b9650612958602089016126de565b95506040880135945060608801359350608088013560ff8116811461297c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129ac57600080fd5b6129b5836126de565b91506127e5602084016126de565b6000602082840312156129d557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094a5761094a6129dc565b808202811582820484141761094a5761094a6129dc565b634e487b7160e01b600052601260045260246000fd5b600082612a4f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561094a5761094a6129dc565b600060208284031215612b2857600080fd5b81518015158114610d6757600080fd5b8281526040602082015260006108ed6040830184612686565b60008251612b63818460208701612662565b9190910192915050565b600060208284031215612b7f57600080fd5b81516001600160e01b031981168114610d6757600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122014b93533424145cd0724c1046a0420f5342a34f56b9f5f8a56d80d63e83f075164736f6c634300081300330000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102485760003560e01c80637ecebe001161013b578063c11645bc116100b8578063d505accf1161007c578063d505accf146105cb578063d905777e146105de578063dd62ed3e14610607578063ef8b30f714610632578063f4b9fa751461064557600080fd5b8063c11645bc14610557578063c63d75b6146103d8578063c6e6f5921461057e578063cd0d009614610591578063ce96cb77146105b857600080fd5b8063a457c2d7116100ff578063a457c2d7146104f8578063a9059cbb1461050b578063b3d7f6b91461051e578063b460af9414610531578063ba0876521461054457600080fd5b80637ecebe001461047a57806394bf804d1461049a57806395d89b41146104ad5780639b8d6d38146104d05780639fd5a6cf146104e357600080fd5b80633644e515116101c95780634ba2363a1161018d5780634ba2363a146103ed5780634cdad5061461041457806354fd4d50146104275780636e553f651461044757806370a082311461045a57600080fd5b80633644e5151461035857806336569e771461036057806338d52e0f1461039f57806339509351146103c5578063402d267d146103d857600080fd5b806318160ddd1161021057806318160ddd146102e8578063216740a0146102f157806323b872dd1461030457806330adf81f14610317578063313ce5671461033e57600080fd5b806301e1d1141461024d57806306fdde031461026857806307a2d13a1461029f578063095ea7b3146102b25780630a28a477146102d5575b600080fd5b61025561066c565b6040519081526020015b60405180910390f35b6102926040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161025f91906126b2565b6102556102ad3660046126c5565b61067e565b6102c56102c03660046126fa565b6108f5565b604051901515815260200161025f565b6102556102e33660046126c5565b610950565b61025560005481565b6102556102ff366004612724565b610b8a565b6102c561031236600461276b565b610bf0565b6102557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610346601281565b60405160ff909116815260200161025f565b610255610d6e565b6103877f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b6040516001600160a01b03909116815260200161025f565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f610387565b6102c56103d33660046126fa565b610dc5565b6102556103e63660046127a7565b5060001990565b6103877f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf781565b6102556104223660046126c5565b610e4c565b610292604051806040016040528060018152602001603160f81b81525081565b6102556104553660046127c2565b610e57565b6102556104683660046127a7565b60016020526000908152604090205481565b6102556104883660046127a7565b60036020526000908152604090205481565b6102556104a83660046127c2565b611023565b610292604051806040016040528060048152602001637344414960e01b81525081565b6102556104de366004612724565b6111e6565b6104f66104f1366004612804565b61123d565b005b6102c56105063660046126fa565b6114b7565b6102c56105193660046126fa565b611546565b61025561052c3660046126c5565b611612565b61025561053f3660046128ea565b61183b565b6102556105523660046128ea565b611a01565b6103877f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2881565b61025561058c3660046126c5565b611bc7565b6102557f000000000000000000000000000000000000000000000000000000000000000181565b6102556105c63660046127a7565b611df9565b6104f66105d9366004612926565b611e1b565b6102556105ec3660046127a7565b6001600160a01b031660009081526001602052604090205490565b610255610615366004612999565b600260209081526000928352604080842090915290825290205481565b6102556106403660046126c5565b611e72565b6103877f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b600061067960005461067e565b905090565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070391906129c3565b90506000814211610795577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079091906129c3565b6108cb565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906129c3565b6108b77f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a891906129c3565b6108b286426129f2565b611e7d565b6108c19190612a05565b6108cb9190612a32565b9050676765c793fa10079d601b1b6108e38286612a05565b6108ed9190612a32565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612b988339815191529061093e9086815260200190565b60405180910390a35060015b92915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d591906129c3565b90506000814211610a67577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906129c3565b610b6a565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af591906129c3565b610b567f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b610b609190612a05565b610b6a9190612a32565b90506108ed610b84676765c793fa10079d601b1b86612a05565b82611f6e565b6000610b968484611023565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368387604051610be1929190918252602082015260400190565b60405180910390a39392505050565b60006001600160a01b03831615801590610c1357506001600160a01b0383163014155b610c385760405162461bcd60e51b8152600401610c2f90612a54565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610c715760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b0385163314610cf9576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610cf75783811015610cce5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d599087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610da05761067946611f9c565b507f29c3e0eba3720c4cd591a90235441325869935ffeb8c5653d9c437d5917c404090565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610df6908490612b03565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612b9883398151915291015b60405180910390a35060019392505050565b600061094a8261067e565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b4211610f69577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6491906129c3565b610fed565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fed91906129c3565b905080611005676765c793fa10079d601b1b86612a05565b61100f9190612a32565b915061101c848385612070565b5092915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906129c3565b4211611135577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113091906129c3565b6111b9565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b991906129c3565b90506111d96111c88286612a05565b676765c793fa10079d601b1b611f6e565b915061101c828585612070565b60006111f28484610e57565b9050826001600160a01b03168261ffff167fb30a03a0e2a407f18ae0e83491331dc069d1521e292feffb071e61c8f7f406368684604051610be1929190918252602082015260400190565b8142111561128d5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610c2f565b6001600160a01b0385166112e35760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610c2f565b6001600160a01b038516600090815260036020526040812080546001810190915590467f00000000000000000000000000000000000000000000000000000000000000011461133a5761133546611f9c565b61135c565b7f29c3e0eba3720c4cd591a90235441325869935ffeb8c5653d9c437d5917c40405b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016113f592919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506114188782856122a4565b6114645760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610c2f565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612b98833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114fb5760405162461bcd60e51b8152600401610c2f90612ac2565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612b988339815191529101610e3a565b60006001600160a01b0383161580159061156957506001600160a01b0383163014155b6115855760405162461bcd60e51b8152600401610c2f90612a54565b33600090815260016020526040902054828110156115b55760405162461bcd60e51b8152600401610c2f90612a8b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610e3a565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169791906129c3565b90506000814211611729577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172491906129c3565b61182c565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b791906129c3565b6118187f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b6118229190612a05565b61182c9190612a32565b90506108ed6111c88286612a05565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c091906129c3565b421161194d577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611924573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194891906129c3565b6119d1565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d191906129c3565b90506119eb610b84676765c793fa10079d601b1b87612a05565b91506119f985838686612435565b509392505050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8691906129c3565b4211611b13577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e91906129c3565b611b97565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9791906129c3565b9050676765c793fa10079d601b1b611baf8287612a05565b611bb99190612a32565b91506119f982868686612435565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c91906129c3565b90506000814211611cde577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd991906129c3565b611de1565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906129c3565b611dcd7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610884573d6000803e3d6000fd5b611dd79190612a05565b611de19190612a32565b9050806108e3676765c793fa10079d601b1b86612a05565b6001600160a01b03811660009081526001602052604081205461094a9061067e565b611e6987878787868689604051602001611e5593929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b60405160208183030381529060405261123d565b50505050505050565b600061094a82611bc7565b6000828015611f4757600183168015611e9857849250611ea7565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611f41578485028586820414611ed357600080fd5b81810181811015611ee357600080fd5b676765c793fa10079d601b1b90049550506001841615611f36578483028386820414158615151615611f1457600080fd5b81810181811015611f2457600080fd5b676765c793fa10079d601b1b90049350505b600284049350611ebc565b5061101c565b828015611f575760009250611f66565b676765c793fa10079d601b1b92505b505092915050565b600082600003611f7f576000610d67565b816001840381611f9157611f91612a1c565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b0381161580159061209157506001600160a01b0381163014155b6120ad5760405162461bcd60e51b8152600401610c2f90612a54565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121449190612b16565b50604051633b4da69f60e01b8152306004820152602481018490527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a286001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156121ad57600080fd5b505af11580156121c1573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361234157602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa15801561230f573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b03160361233d5760019350505050610d67565b5050505b600080856001600160a01b0316631626ba7e60e01b8686604051602401612369929190612b38565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516123a79190612b51565b600060405180830381855afa9150503d80600081146123e2576040519150601f19603f3d011682016040523d82523d6000602084013e6123e7565b606091505b50915091508180156123fa575080516020145b801561242b57508051630b135d3f60e11b9061241f9083016020908101908401612b6d565b6001600160e01b031916145b9695505050505050565b6001600160a01b0381166000908152600160205260409020548381101561246e5760405162461bcd60e51b8152600401610c2f90612a8b565b6001600160a01b03821633146124f6576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146124f457848110156124cb5760405162461bcd60e51b8152600401610c2f90612ac2565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf790911690637f8661a190602401600060405180830381600087803b15801561257757600080fd5b505af115801561258b573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2816925063ef693bed9150604401600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561267d578181015183820152602001612665565b50506000910152565b6000815180845261269e816020860160208601612662565b601f01601f19169290920160200192915050565b602081526000610d676020830184612686565b6000602082840312156126d757600080fd5b5035919050565b80356001600160a01b03811681146126f557600080fd5b919050565b6000806040838503121561270d57600080fd5b612716836126de565b946020939093013593505050565b60008060006060848603121561273957600080fd5b83359250612749602085016126de565b9150604084013561ffff8116811461276057600080fd5b809150509250925092565b60008060006060848603121561278057600080fd5b612789846126de565b9250612797602085016126de565b9150604084013590509250925092565b6000602082840312156127b957600080fd5b610d67826126de565b600080604083850312156127d557600080fd5b823591506127e5602084016126de565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561281c57600080fd5b612825866126de565b9450612833602087016126de565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561285e57600080fd5b818801915088601f83011261287257600080fd5b813581811115612884576128846127ee565b604051601f8201601f19908116603f011681019083821181831017156128ac576128ac6127ee565b816040528281528b60208487010111156128c557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156128ff57600080fd5b8335925061290f602085016126de565b915061291d604085016126de565b90509250925092565b600080600080600080600060e0888a03121561294157600080fd5b61294a886126de565b9650612958602089016126de565b95506040880135945060608801359350608088013560ff8116811461297c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129ac57600080fd5b6129b5836126de565b91506127e5602084016126de565b6000602082840312156129d557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561094a5761094a6129dc565b808202811582820484141761094a5761094a6129dc565b634e487b7160e01b600052601260045260246000fd5b600082612a4f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561094a5761094a6129dc565b600060208284031215612b2857600080fd5b81518015158114610d6757600080fd5b8281526040602082015260006108ed6040830184612686565b60008251612b63818460208701612662565b9190910192915050565b600060208284031215612b7f57600080fd5b81516001600160e01b031981168114610d6757600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122014b93533424145cd0724c1046a0420f5342a34f56b9f5f8a56d80d63e83f075164736f6c63430008130033

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

0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7

-----Decoded View---------------
Arg [0] : _daiJoin (address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
Arg [1] : _pot (address): 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28
Arg [1] : 000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7


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.