ETH Price: $3,459.78 (+1.21%)

Token

Savings Dai (sDAI)
 

Overview

Max Total Supply

561,930,864.276189932170512665 sDAI

Holders

2,201

Total Transfers

-

Market

Price

$1.13 @ 0.000327 ETH (-0.53%)

Onchain Market Cap

$634,981,876.63

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Savings Dai (sDAI) is an ERC-4626 representation/wrapper of DAI in the Dai Savings Rate (DSR) module.

Market

Volume (24H):$22,847,686.00
Market Capitalization:$0.00
Circulating Supply:0.00 sDAI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SavingsDai

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

// 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);

    // --- 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) external returns (uint256 shares) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        shares = assets * RAY / chi;
        _mint(assets, shares, receiver);
    }

    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) external returns (uint256 assets) {
        uint256 chi = (block.timestamp > pot.rho()) ? pot.drip() : pot.chi();
        assets = _divup(shares * chi, RAY);
        _mint(assets, shares, receiver);
    }

    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));
    }

}

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":"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":"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"}],"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"}]

6101406040523480156200001257600080fd5b506040516200300738038062003007833981016040819052620000359162000386565b6001600160a01b03821660a0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa15801562000080573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a69190620003be565b6001600160a01b03166080816001600160a01b03168152505060a0516001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000100573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001269190620003be565b6001600160a01b0390811660c052811660e052466101008190526200021990604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6101205260805160a0516040516328ec8bf160e21b81526001600160a01b03918216600482015291169063a3b22fc490602401600060405180830381600087803b1580156200026757600080fd5b505af11580156200027c573d6000803e3d6000fd5b505060805160e0516040516328ec8bf160e21b81526001600160a01b0391821660048201529116925063a3b22fc49150602401600060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505060c05160a05160405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af11580156200033a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003609190620003e3565b50505062000407565b80516001600160a01b03811681146200038157600080fd5b919050565b600080604083850312156200039a57600080fd5b620003a58362000369565b9150620003b56020840162000369565b90509250929050565b600060208284031215620003d157600080fd5b620003dc8262000369565b9392505050565b600060208284031215620003f657600080fd5b81518015158114620003dc57600080fd5b60805160a05160c05160e0516101005161012051612aad6200055a60003960008181610d01015261124301526000818161055a01528181610cd0015261120f0152600081816103c901528181610647015281816106d401528181610767015281816107ec01528181610919015281816109a601528181610a3901528181610abe01528181610dba01528181610e4201528181610ec901528181610f860152818161100e015281816110950152818161151e015281816115ab0152818161163e015281816116c301528181611747015281816117cf015281816118560152818161190d0152818161199501528181611a1c01528181611ad301528181611b6001528181611bf301528181611c78015281816120e001526124380152600081816103780152818161060e0152611fd60152600081816105200152818161206801526124ba0152600061033c0152612aad6000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80637ecebe0011610130578063c11645bc116100b8578063d505accf1161007c578063d505accf1461058f578063d905777e146105a2578063dd62ed3e146105cb578063ef8b30f7146105f6578063f4b9fa751461060957600080fd5b8063c11645bc1461051b578063c63d75b6146103af578063c6e6f59214610542578063cd0d009614610555578063ce96cb771461057c57600080fd5b8063a457c2d7116100ff578063a457c2d7146104bc578063a9059cbb146104cf578063b3d7f6b9146104e2578063b460af94146104f5578063ba0876521461050857600080fd5b80637ecebe001461045157806394bf804d1461047157806395d89b41146104845780639fd5a6cf146104a757600080fd5b80633644e515116101be5780634ba2363a116101825780634ba2363a146103c45780634cdad506146103eb57806354fd4d50146103fe5780636e553f651461041e57806370a082311461043157600080fd5b80633644e5151461032f57806336569e771461033757806338d52e0f14610376578063395093511461039c578063402d267d146103af57600080fd5b80630a28a477116102055780630a28a477146102bf57806318160ddd146102d257806323b872dd146102db57806330adf81f146102ee578063313ce5671461031557600080fd5b806301e1d1141461023757806306fdde031461025257806307a2d13a14610289578063095ea7b31461029c575b600080fd5b61023f610630565b6040519081526020015b60405180910390f35b61027c6040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161024991906125b9565b61023f6102973660046125cc565b610642565b6102af6102aa366004612601565b6108b9565b6040519015158152602001610249565b61023f6102cd3660046125cc565b610914565b61023f60005481565b6102af6102e936600461262b565b610b4e565b61023f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61031d601281565b60405160ff9091168152602001610249565b61023f610ccc565b61035e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610249565b7f000000000000000000000000000000000000000000000000000000000000000061035e565b6102af6103aa366004612601565b610d23565b61023f6103bd366004612667565b5060001990565b61035e7f000000000000000000000000000000000000000000000000000000000000000081565b61023f6103f93660046125cc565b610daa565b61027c604051806040016040528060018152602001603160f81b81525081565b61023f61042c366004612682565b610db5565b61023f61043f366004612667565b60016020526000908152604090205481565b61023f61045f366004612667565b60036020526000908152604090205481565b61023f61047f366004612682565b610f81565b61027c604051806040016040528060048152602001637344414960e01b81525081565b6104ba6104b53660046126c4565b611144565b005b6102af6104ca366004612601565b6113be565b6102af6104dd366004612601565b61144d565b61023f6104f03660046125cc565b611519565b61023f6105033660046127aa565b611742565b61023f6105163660046127aa565b611908565b61035e7f000000000000000000000000000000000000000000000000000000000000000081565b61023f6105503660046125cc565b611ace565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b61023f61058a366004612667565b611d00565b6104ba61059d3660046127e6565b611d22565b61023f6105b0366004612667565b6001600160a01b031660009081526001602052604090205490565b61023f6105d9366004612859565b600260209081526000928352604080842090915290825290205481565b61023f6106043660046125cc565b611d79565b61035e7f000000000000000000000000000000000000000000000000000000000000000081565b600061063d600054610642565b905090565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c79190612883565b90506000814211610759577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107549190612883565b61088f565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e79190612883565b61087b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190612883565b61087686426128b2565b611d84565b61088591906128c5565b61088f91906128f2565b9050676765c793fa10079d601b1b6108a782866128c5565b6108b191906128f2565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612a58833981519152906109029086815260200190565b60405180910390a35060015b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190612883565b90506000814211610a2b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190612883565b610b2e565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190612883565b610b1a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b610b2491906128c5565b610b2e91906128f2565b90506108b1610b48676765c793fa10079d601b1b866128c5565b82611e75565b60006001600160a01b03831615801590610b7157506001600160a01b0383163014155b610b965760405162461bcd60e51b8152600401610b8d90612914565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610bcf5760405162461bcd60e51b8152600401610b8d9061294b565b6001600160a01b0385163314610c57576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610c555783811015610c2c5760405162461bcd60e51b8152600401610b8d90612982565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cb79087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610cfe5761063d46611ea3565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610d549084906129c3565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612a5883398151915291015b60405180910390a35060019392505050565b600061090e82610642565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190612883565b4211610ec7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190612883565b610f4b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612883565b905080610f63676765c793fa10079d601b1b866128c5565b610f6d91906128f2565b9150610f7a848385611f77565b5092915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190612883565b4211611093577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108e9190612883565b611117565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612883565b905061113761112682866128c5565b676765c793fa10079d601b1b611e75565b9150610f7a828585611f77565b814211156111945760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610b8d565b6001600160a01b0385166111ea5760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610b8d565b6001600160a01b038516600090815260036020526040812080546001810190915590467f0000000000000000000000000000000000000000000000000000000000000000146112415761123c46611ea3565b611263565b7f00000000000000000000000000000000000000000000000000000000000000005b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016112fc92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905061131f8782856121ab565b61136b5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610b8d565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612a58833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114025760405162461bcd60e51b8152600401610b8d90612982565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612a588339815191529101610d98565b60006001600160a01b0383161580159061147057506001600160a01b0383163014155b61148c5760405162461bcd60e51b8152600401610b8d90612914565b33600090815260016020526040902054828110156114bc5760405162461bcd60e51b8152600401610b8d9061294b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d98565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159e9190612883565b90506000814211611630577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612883565b611733565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190612883565b61171f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b61172991906128c5565b61173391906128f2565b90506108b161112682866128c5565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190612883565b4211611854577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190612883565b6118d8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d89190612883565b90506118f2610b48676765c793fa10079d601b1b876128c5565b91506119008583868661233c565b509392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198d9190612883565b4211611a1a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190612883565b611a9e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9e9190612883565b9050676765c793fa10079d601b1b611ab682876128c5565b611ac091906128f2565b91506119008286868661233c565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b539190612883565b90506000814211611be5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190612883565b611ce8565b676765c793fa10079d601b1b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612883565b611cd47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b611cde91906128c5565b611ce891906128f2565b9050806108a7676765c793fa10079d601b1b866128c5565b6001600160a01b03811660009081526001602052604081205461090e90610642565b611d7087878787868689604051602001611d5c93929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052611144565b50505050505050565b600061090e82611ace565b6000828015611e4e57600183168015611d9f57849250611dae565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611e48578485028586820414611dda57600080fd5b81810181811015611dea57600080fd5b676765c793fa10079d601b1b90049550506001841615611e3d578483028386820414158615151615611e1b57600080fd5b81810181811015611e2b57600080fd5b676765c793fa10079d601b1b90049350505b600284049350611dc3565b50610f7a565b828015611e5e5760009250611e6d565b676765c793fa10079d601b1b92505b505092915050565b600082600003611e86576000610cc5565b816001840381611e9857611e986128dc565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b03811615801590611f9857506001600160a01b0381163014155b611fb45760405162461bcd60e51b8152600401610b8d90612914565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906129d6565b50604051633b4da69f60e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156120b457600080fd5b505af11580156120c8573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561212e57600080fd5b505af1158015612142573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361224857602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa158015612216573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b0316036122445760019350505050610cc5565b5050505b600080856001600160a01b0316631626ba7e60e01b86866040516024016122709291906129f8565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122ae9190612a11565b600060405180830381855afa9150503d80600081146122e9576040519150601f19603f3d011682016040523d82523d6000602084013e6122ee565b606091505b5091509150818015612301575080516020145b801561233257508051630b135d3f60e11b906123269083016020908101908401612a2d565b6001600160e01b031916145b9695505050505050565b6001600160a01b038116600090815260016020526040902054838110156123755760405162461bcd60e51b8152600401610b8d9061294b565b6001600160a01b03821633146123fd576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146123fb57848110156123d25760405162461bcd60e51b8152600401610b8d90612982565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000000000000000000000000000000000000000000090911690637f8661a190602401600060405180830381600087803b15801561247e57600080fd5b505af1158015612492573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed9150604401600060405180830381600087803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561258457818101518382015260200161256c565b50506000910152565b600081518084526125a5816020860160208601612569565b601f01601f19169290920160200192915050565b602081526000610cc5602083018461258d565b6000602082840312156125de57600080fd5b5035919050565b80356001600160a01b03811681146125fc57600080fd5b919050565b6000806040838503121561261457600080fd5b61261d836125e5565b946020939093013593505050565b60008060006060848603121561264057600080fd5b612649846125e5565b9250612657602085016125e5565b9150604084013590509250925092565b60006020828403121561267957600080fd5b610cc5826125e5565b6000806040838503121561269557600080fd5b823591506126a5602084016125e5565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156126dc57600080fd5b6126e5866125e5565b94506126f3602087016125e5565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561271e57600080fd5b818801915088601f83011261273257600080fd5b813581811115612744576127446126ae565b604051601f8201601f19908116603f0116810190838211818310171561276c5761276c6126ae565b816040528281528b602084870101111561278557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156127bf57600080fd5b833592506127cf602085016125e5565b91506127dd604085016125e5565b90509250925092565b600080600080600080600060e0888a03121561280157600080fd5b61280a886125e5565b9650612818602089016125e5565b95506040880135945060608801359350608088013560ff8116811461283c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561286c57600080fd5b612875836125e5565b91506126a5602084016125e5565b60006020828403121561289557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561090e5761090e61289c565b808202811582820484141761090e5761090e61289c565b634e487b7160e01b600052601260045260246000fd5b60008261290f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561090e5761090e61289c565b6000602082840312156129e857600080fd5b81518015158114610cc557600080fd5b8281526040602082015260006108b1604083018461258d565b60008251612a23818460208701612569565b9190910192915050565b600060208284031215612a3f57600080fd5b81516001600160e01b031981168114610cc557600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220293e4440d9b8d809025462018f9cf991307dc9c59175e4bef40a39bc9e54670964736f6c634300081100330000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80637ecebe0011610130578063c11645bc116100b8578063d505accf1161007c578063d505accf1461058f578063d905777e146105a2578063dd62ed3e146105cb578063ef8b30f7146105f6578063f4b9fa751461060957600080fd5b8063c11645bc1461051b578063c63d75b6146103af578063c6e6f59214610542578063cd0d009614610555578063ce96cb771461057c57600080fd5b8063a457c2d7116100ff578063a457c2d7146104bc578063a9059cbb146104cf578063b3d7f6b9146104e2578063b460af94146104f5578063ba0876521461050857600080fd5b80637ecebe001461045157806394bf804d1461047157806395d89b41146104845780639fd5a6cf146104a757600080fd5b80633644e515116101be5780634ba2363a116101825780634ba2363a146103c45780634cdad506146103eb57806354fd4d50146103fe5780636e553f651461041e57806370a082311461043157600080fd5b80633644e5151461032f57806336569e771461033757806338d52e0f14610376578063395093511461039c578063402d267d146103af57600080fd5b80630a28a477116102055780630a28a477146102bf57806318160ddd146102d257806323b872dd146102db57806330adf81f146102ee578063313ce5671461031557600080fd5b806301e1d1141461023757806306fdde031461025257806307a2d13a14610289578063095ea7b31461029c575b600080fd5b61023f610630565b6040519081526020015b60405180910390f35b61027c6040518060400160405280600b81526020016a536176696e67732044616960a81b81525081565b60405161024991906125b9565b61023f6102973660046125cc565b610642565b6102af6102aa366004612601565b6108b9565b6040519015158152602001610249565b61023f6102cd3660046125cc565b610914565b61023f60005481565b6102af6102e936600461262b565b610b4e565b61023f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61031d601281565b60405160ff9091168152602001610249565b61023f610ccc565b61035e7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b6040516001600160a01b039091168152602001610249565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f61035e565b6102af6103aa366004612601565b610d23565b61023f6103bd366004612667565b5060001990565b61035e7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf781565b61023f6103f93660046125cc565b610daa565b61027c604051806040016040528060018152602001603160f81b81525081565b61023f61042c366004612682565b610db5565b61023f61043f366004612667565b60016020526000908152604090205481565b61023f61045f366004612667565b60036020526000908152604090205481565b61023f61047f366004612682565b610f81565b61027c604051806040016040528060048152602001637344414960e01b81525081565b6104ba6104b53660046126c4565b611144565b005b6102af6104ca366004612601565b6113be565b6102af6104dd366004612601565b61144d565b61023f6104f03660046125cc565b611519565b61023f6105033660046127aa565b611742565b61023f6105163660046127aa565b611908565b61035e7f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2881565b61023f6105503660046125cc565b611ace565b61023f7f000000000000000000000000000000000000000000000000000000000000000181565b61023f61058a366004612667565b611d00565b6104ba61059d3660046127e6565b611d22565b61023f6105b0366004612667565b6001600160a01b031660009081526001602052604090205490565b61023f6105d9366004612859565b600260209081526000928352604080842090915290825290205481565b61023f6106043660046125cc565b611d79565b61035e7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b600061063d600054610642565b905090565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c79190612883565b90506000814211610759577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107549190612883565b61088f565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e79190612883565b61087b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190612883565b61087686426128b2565b611d84565b61088591906128c5565b61088f91906128f2565b9050676765c793fa10079d601b1b6108a782866128c5565b6108b191906128f2565b949350505050565b3360008181526002602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612a58833981519152906109029086815260200190565b60405180910390a35060015b92915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190612883565b90506000814211610a2b577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a269190612883565b610b2e565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190612883565b610b1a7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b610b2491906128c5565b610b2e91906128f2565b90506108b1610b48676765c793fa10079d601b1b866128c5565b82611e75565b60006001600160a01b03831615801590610b7157506001600160a01b0383163014155b610b965760405162461bcd60e51b8152600401610b8d90612914565b60405180910390fd5b6001600160a01b03841660009081526001602052604090205482811015610bcf5760405162461bcd60e51b8152600401610b8d9061294b565b6001600160a01b0385163314610c57576001600160a01b03851660009081526002602090815260408083203384529091529020546000198114610c555783811015610c2c5760405162461bcd60e51b8152600401610b8d90612982565b6001600160a01b0386166000908152600260209081526040808320338452909152902084820390555b505b6001600160a01b0380861660008181526001602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cb79087815260200190565b60405180910390a360019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610cfe5761063d46611ea3565b507fb9b66c6658faaf7d181a8532a21ea61d221439b542335af9f2d4b741965a5e2c90565b3360009081526002602090815260408083206001600160a01b03861684529091528120548190610d549084906129c3565b3360008181526002602090815260408083206001600160a01b038a1680855290835292819020859055518481529394509092600080516020612a5883398151915291015b60405180910390a35060019392505050565b600061090e82610642565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a9190612883565b4211610ec7577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190612883565b610f4b565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612883565b905080610f63676765c793fa10079d601b1b866128c5565b610f6d91906128f2565b9150610f7a848385611f77565b5092915050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190612883565b4211611093577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561106a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108e9190612883565b611117565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612883565b905061113761112682866128c5565b676765c793fa10079d601b1b611e75565b9150610f7a828585611f77565b814211156111945760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f7065726d69742d65787069726564000000000000006044820152606401610b8d565b6001600160a01b0385166111ea5760405162461bcd60e51b815260206004820152601860248201527f536176696e67734461692f696e76616c69642d6f776e657200000000000000006044820152606401610b8d565b6001600160a01b038516600090815260036020526040812080546001810190915590467f0000000000000000000000000000000000000000000000000000000000000001146112415761123c46611ea3565b611263565b7fb9b66c6658faaf7d181a8532a21ea61d221439b542335af9f2d4b741965a5e2c5b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808b169282019290925290881660608201526080810187905260a0810184905260c0810186905260e001604051602081830303815290604052805190602001206040516020016112fc92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905061131f8782856121ab565b61136b5760405162461bcd60e51b815260206004820152601960248201527f536176696e67734461692f696e76616c69642d7065726d6974000000000000006044820152606401610b8d565b6001600160a01b038781166000818152600260209081526040808320948b16808452948252918290208990559051888152600080516020612a58833981519152910160405180910390a350505050505050565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156114025760405162461bcd60e51b8152600401610b8d90612982565b3360008181526002602090815260408083206001600160a01b03891680855290835292819020948790039485905551848152919291600080516020612a588339815191529101610d98565b60006001600160a01b0383161580159061147057506001600160a01b0383163014155b61148c5760405162461bcd60e51b8152600401610b8d90612914565b33600090815260016020526040902054828110156114bc5760405162461bcd60e51b8152600401610b8d9061294b565b33600081815260016020908152604080832087860390556001600160a01b03881680845292819020805488019055518681529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610d98565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561157a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159e9190612883565b90506000814211611630577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612883565b611733565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190612883565b61171f7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b61172991906128c5565b61173391906128f2565b90506108b161112682866128c5565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190612883565b4211611854577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190612883565b6118d8565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d89190612883565b90506118f2610b48676765c793fa10079d601b1b876128c5565b91506119008583868661233c565b509392505050565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198d9190612883565b4211611a1a577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190612883565b611a9e565b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9e9190612883565b9050676765c793fa10079d601b1b611ab682876128c5565b611ac091906128f2565b91506119008286868661233c565b6000807f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b03166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b539190612883565b90506000814211611be5577f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190612883565b611ce8565b676765c793fa10079d601b1b7f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c739190612883565b611cd47f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b031663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610848573d6000803e3d6000fd5b611cde91906128c5565b611ce891906128f2565b9050806108a7676765c793fa10079d601b1b866128c5565b6001600160a01b03811660009081526001602052604081205461090e90610642565b611d7087878787868689604051602001611d5c93929190928352602083019190915260f81b6001600160f81b031916604082015260410190565b604051602081830303815290604052611144565b50505050505050565b600061090e82611ace565b6000828015611e4e57600183168015611d9f57849250611dae565b676765c793fa10079d601b1b92505b506002909204916b019d971e4fe8401e740000005b8315611e48578485028586820414611dda57600080fd5b81810181811015611dea57600080fd5b676765c793fa10079d601b1b90049550506001841615611e3d578483028386820414158615151615611e1b57600080fd5b81810181811015611e2b57600080fd5b676765c793fa10079d601b1b90049350505b600284049350611dc3565b50610f7a565b828015611e5e5760009250611e6d565b676765c793fa10079d601b1b92505b505092915050565b600082600003611e86576000610cc5565b816001840381611e9857611e986128dc565b046001019392505050565b604080518082018252600b81526a536176696e67732044616960a81b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc3f7aa5322e176c1c6e3195712ea57f43ea5d4428bc4005b44d51d1c8b188bbe818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b6001600160a01b03811615801590611f9857506001600160a01b0381163014155b611fb45760405162461bcd60e51b8152600401610b8d90612914565b6040516323b872dd60e01b8152336004820152306024820152604481018490527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906129d6565b50604051633b4da69f60e01b8152306004820152602481018490527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a286001600160a01b031690633b4da69f90604401600060405180830381600087803b1580156120b457600080fd5b505af11580156120c8573d6000803e3d6000fd5b505060405163049878f360e01b8152600481018590527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf76001600160a01b0316925063049878f39150602401600060405180830381600087803b15801561212e57600080fd5b505af1158015612142573d6000803e3d6000fd5b505050506001600160a01b038116600081815260016020908152604080832080548701905582548601909255815186815290810185905233917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3505050565b6000815160410361224857602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa158015612216573d6000803e3d6000fd5b505050602060405103516001600160a01b0316876001600160a01b0316036122445760019350505050610cc5565b5050505b600080856001600160a01b0316631626ba7e60e01b86866040516024016122709291906129f8565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516122ae9190612a11565b600060405180830381855afa9150503d80600081146122e9576040519150601f19603f3d011682016040523d82523d6000602084013e6122ee565b606091505b5091509150818015612301575080516020145b801561233257508051630b135d3f60e11b906123269083016020908101908401612a2d565b6001600160e01b031916145b9695505050505050565b6001600160a01b038116600090815260016020526040902054838110156123755760405162461bcd60e51b8152600401610b8d9061294b565b6001600160a01b03821633146123fd576001600160a01b038216600090815260026020908152604080832033845290915290205460001981146123fb57848110156123d25760405162461bcd60e51b8152600401610b8d90612982565b6001600160a01b0383166000908152600260209081526040808320338452909152902085820390555b505b6001600160a01b038281166000908152600160205260408082208785039055815487900390915551637f8661a160e01b8152600481018690527f000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf790911690637f8661a190602401600060405180830381600087803b15801561247e57600080fd5b505af1158015612492573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038681166004830152602482018990527f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2816925063ef693bed9150604401600060405180830381600087803b15801561250057600080fd5b505af1158015612514573d6000803e3d6000fd5b505060408051888152602081018890526001600160a01b0380871694508716925033917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b60005b8381101561258457818101518382015260200161256c565b50506000910152565b600081518084526125a5816020860160208601612569565b601f01601f19169290920160200192915050565b602081526000610cc5602083018461258d565b6000602082840312156125de57600080fd5b5035919050565b80356001600160a01b03811681146125fc57600080fd5b919050565b6000806040838503121561261457600080fd5b61261d836125e5565b946020939093013593505050565b60008060006060848603121561264057600080fd5b612649846125e5565b9250612657602085016125e5565b9150604084013590509250925092565b60006020828403121561267957600080fd5b610cc5826125e5565b6000806040838503121561269557600080fd5b823591506126a5602084016125e5565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a086880312156126dc57600080fd5b6126e5866125e5565b94506126f3602087016125e5565b93506040860135925060608601359150608086013567ffffffffffffffff8082111561271e57600080fd5b818801915088601f83011261273257600080fd5b813581811115612744576127446126ae565b604051601f8201601f19908116603f0116810190838211818310171561276c5761276c6126ae565b816040528281528b602084870101111561278557600080fd5b8260208601602083013760006020848301015280955050505050509295509295909350565b6000806000606084860312156127bf57600080fd5b833592506127cf602085016125e5565b91506127dd604085016125e5565b90509250925092565b600080600080600080600060e0888a03121561280157600080fd5b61280a886125e5565b9650612818602089016125e5565b95506040880135945060608801359350608088013560ff8116811461283c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561286c57600080fd5b612875836125e5565b91506126a5602084016125e5565b60006020828403121561289557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561090e5761090e61289c565b808202811582820484141761090e5761090e61289c565b634e487b7160e01b600052601260045260246000fd5b60008261290f57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601a908201527f536176696e67734461692f696e76616c69642d61646472657373000000000000604082015260600190565b6020808252601f908201527f536176696e67734461692f696e73756666696369656e742d62616c616e636500604082015260600190565b60208082526021908201527f536176696e67734461692f696e73756666696369656e742d616c6c6f77616e636040820152606560f81b606082015260800190565b8082018082111561090e5761090e61289c565b6000602082840312156129e857600080fd5b81518015158114610cc557600080fd5b8281526040602082015260006108b1604083018461258d565b60008251612a23818460208701612569565b9190910192915050565b600060208284031215612a3f57600080fd5b81516001600160e01b031981168114610cc557600080fdfe8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220293e4440d9b8d809025462018f9cf991307dc9c59175e4bef40a39bc9e54670964736f6c63430008110033

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


Deployed Bytecode Sourcemap

1848:13240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9750:109;;;:::i;:::-;;;160:25:1;;;148:2;133:18;9750:109:0;;;;;;;;1904:48;;;;;;;;;;;;;;;-1:-1:-1;;;1904:48:0;;;;;;;;;;;;:::i;10144:269::-;;;;;;:::i;:::-;;:::i;6978:208::-;;;;;;:::i;:::-;;:::i;:::-;;;1739:14:1;;1732:22;1714:41;;1702:2;1687:18;6978:208:0;1574:187:1;11712:278:0;;;;;;:::i;:::-;;:::i;2096:26::-;;;;;;6114:856;;;;;;:::i;:::-;;:::i;3075:137::-;;3117:95;3075:137;;2052:37;;2087:2;2052:37;;;;;2453:4:1;2441:17;;;2423:36;;2411:2;2396:18;2052:37:0;2281:184:1;4167:183:0;;;:::i;2370:32::-;;;;;;;;-1:-1:-1;;;;;2648:32:1;;;2630:51;;2618:2;2603:18;2370:32:0;2470:217:1;9655:87:0;9730:3;9655:87;;7194:302;;;;;;:::i;:::-;;:::i;10421:104::-;;;;;;:::i;:::-;-1:-1:-1;;;10500:17:0;10421:104;2491:32;;;;;12404:120;;;;;;:::i;:::-;;:::i;2007:38::-;;;;;;;;;;;;;;;-1:-1:-1;;;2007:38:0;;;;;10662:252;;;;;;:::i;:::-;;:::i;2131:66::-;;;;;;:::i;:::-;;;;;;;;;;;;;;2277:63;;;;;;:::i;:::-;;;;;;;;;;;;;;11313:256;;;;;;:::i;:::-;;:::i;1959:41::-;;;;;;;;;;;;;;;-1:-1:-1;;;1959:41:0;;;;;13751:1048;;;;;;:::i;:::-;;:::i;:::-;;7504:455;;;;;;:::i;:::-;;:::i;5621:485::-;;;;;;:::i;:::-;;:::i;11031:274::-;;;;;;:::i;:::-;;:::i;11998:282::-;;;;;;:::i;:::-;;:::i;12532:273::-;;;;;;:::i;:::-;;:::i;2409:36::-;;;;;9867:269;;;;;;:::i;:::-;;:::i;2976:42::-;;;;;11577:127;;;;;;:::i;:::-;;:::i;14807:276::-;;;;;;:::i;:::-;;:::i;12288:108::-;;;;;;:::i;:::-;-1:-1:-1;;;;;12372:16:0;12345:7;12372:16;;;:9;:16;;;;;;;12288:108;2204:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10533:121;;;;;;:::i;:::-;;:::i;2452:32::-;;;;;9750:109;9796:7;9823:28;9839:11;;9823:15;:28::i;:::-;9816:35;;9750:109;:::o;10144:269::-;10206:7;10226:11;10240:3;-1:-1:-1;;;;;10240:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10226:23;;10260:11;10293:3;10275:15;:21;10274:95;;10360:3;-1:-1:-1;;;;;10360:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10274:95;;;-1:-1:-1;;;10342:3:0;-1:-1:-1;;;;;10342:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10300:39;10306:3;-1:-1:-1;;;;;10306:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10317:21;10335:3;10317:15;:21;:::i;:::-;10300:5;:39::i;:::-;:51;;;;:::i;:::-;:57;;;;:::i;:::-;10260:109;-1:-1:-1;;;;10387:12:0;10260:109;10387:6;:12;:::i;:::-;:18;;;;:::i;:::-;10380:25;10144:269;-1:-1:-1;;;;10144:269:0:o;6978:208::-;7072:10;7045:4;7062:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7062:30:0;;;;;;;;;;:38;;;7118:36;7045:4;;7062:30;;-1:-1:-1;;;;;;;;;;;7118:36:0;;;7095:5;160:25:1;;148:2;133:18;;14:177;7118:36:0;;;;;;;;-1:-1:-1;7174:4:0;6978:208;;;;;:::o;11712:278::-;11776:7;11796:11;11810:3;-1:-1:-1;;;;;11810:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11796:23;;11830:11;11863:3;11845:15;:21;11844:95;;11930:3;-1:-1:-1;;;;;11930:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11844:95;;;-1:-1:-1;;;11912:3:0;-1:-1:-1;;;;;11912:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11870:39;11876:3;-1:-1:-1;;;;;11876:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11870:39;:51;;;;:::i;:::-;:57;;;;:::i;:::-;11830:109;-1:-1:-1;11957:25:0;11964:12;-1:-1:-1;;;11964:6:0;:12;:::i;:::-;11978:3;11957:6;:25::i;6114:856::-;6195:4;-1:-1:-1;;;;;6220:16:0;;;;;;:39;;-1:-1:-1;;;;;;6240:19:0;;6254:4;6240:19;;6220:39;6212:78;;;;-1:-1:-1;;;6212:78:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;6319:15:0;;6301;6319;;;:9;:15;;;;;;6353:16;;;;6345:60;;;;-1:-1:-1;;;6345:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6422:18:0;;6430:10;6422:18;6418:359;;-1:-1:-1;;;;;6475:15:0;;6457;6475;;;:9;:15;;;;;;;;6491:10;6475:27;;;;;;;;-1:-1:-1;;6521:28:0;;6517:249;;6589:5;6578:7;:16;;6570:62;;;;-1:-1:-1;;;6570:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6686:15:0;;;;;;:9;:15;;;;;;;;6702:10;6686:27;;;;;;;6716:15;;;6686:45;;6517:249;6442:335;6418:359;-1:-1:-1;;;;;6814:15:0;;;;;;;:9;:15;;;;;;6832;;;6814:33;;6862:13;;;;;;;;;;:22;;;;;;6913:25;;;;;;6842:5;160:25:1;;148:2;133:18;;14:177;6913:25:0;;;;;;;;6958:4;6951:11;;;6114:856;;;;;;:::o;4167:183::-;4218:7;4262:17;4245:13;:34;:97;;4302:40;4328:13;4302:25;:40::i;4245:97::-;-1:-1:-1;4282:17:0;;4167:183::o;7194:302::-;7322:10;7276:4;7312:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7312:30:0;;;;;;;;;;7276:4;;7312:43;;7345:10;;7312:43;:::i;:::-;7376:10;7366:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7366:30:0;;;;;;;;;;;;:41;;;7425:39;160:25:1;;;7366:41:0;;-1:-1:-1;7366:30:0;;-1:-1:-1;;;;;;;;;;;7425:39:0;133:18:1;7425:39:0;;;;;;;;-1:-1:-1;7484:4:0;;7194:302;-1:-1:-1;;;7194:302:0:o;12404:120::-;12466:7;12493:23;12509:6;12493:15;:23::i;10662:252::-;10731:14;10758:11;10791:3;-1:-1:-1;;;;;10791:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10773:15;:27;10772:54;;10817:3;-1:-1:-1;;;;;10817:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10772:54;;;10804:3;-1:-1:-1;;;;;10804:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10758:68;-1:-1:-1;10758:68:0;10846:12;-1:-1:-1;;;10846:6:0;:12;:::i;:::-;:18;;;;:::i;:::-;10837:27;;10875:31;10881:6;10889;10897:8;10875:5;:31::i;:::-;10747:167;10662:252;;;;:::o;11313:256::-;11379:14;11406:11;11439:3;-1:-1:-1;;;;;11439:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11421:15;:27;11420:54;;11465:3;-1:-1:-1;;;;;11465:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11420:54;;;11452:3;-1:-1:-1;;;;;11452:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11406:68;-1:-1:-1;11494:25:0;11501:12;11406:68;11501:6;:12;:::i;:::-;-1:-1:-1;;;11494:6:0;:25::i;:::-;11485:34;;11530:31;11536:6;11544;11552:8;11530:5;:31::i;13751:1048::-;13953:8;13934:15;:27;;13926:65;;;;-1:-1:-1;;;13926:65:0;;9090:2:1;13926:65:0;;;9072:21:1;9129:2;9109:18;;;9102:30;9168:27;9148:18;;;9141:55;9213:18;;13926:65:0;8888:349:1;13926:65:0;-1:-1:-1;;;;;14010:19:0;;14002:56;;;;-1:-1:-1;;;14002:56:0;;9444:2:1;14002:56:0;;;9426:21:1;9483:2;9463:18;;;9456:30;9522:26;9502:18;;;9495:54;9566:18;;14002:56:0;9242:348:1;14002:56:0;-1:-1:-1;;;;;14115:13:0;;14071;14115;;;:6;:13;;;;;:15;;;;;;;;;14249:13;14266:17;14249:34;:97;;14306:40;14332:13;14306:25;:40::i;:::-;14249:97;;;14286:17;14249:97;14375:212;;;3117:95;14375:212;;;9882:25:1;-1:-1:-1;;;;;9981:15:1;;;9961:18;;;9954:43;;;;10033:15;;;10013:18;;;10006:43;10065:18;;;10058:34;;;10108:19;;;10101:35;;;10152:19;;;10145:35;;;9854:19;;14375:212:0;;;;;;;;;;;;14365:223;;;;;;14185:418;;;;;;;;-1:-1:-1;;;10449:27:1;;10501:1;10492:11;;10485:27;;;;10537:2;10528:12;;10521:28;10574:2;10565:12;;10191:392;14185:418:0;;;;;;;;;;;;;14175:429;;;;;;14145:459;;14625:43;14643:5;14650:6;14658:9;14625:17;:43::i;:::-;14617:81;;;;-1:-1:-1;;;14617:81:0;;10790:2:1;14617:81:0;;;10772:21:1;10829:2;10809:18;;;10802:30;10868:27;10848:18;;;10841:55;10913:18;;14617:81:0;10588:349:1;14617:81:0;-1:-1:-1;;;;;14711:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;14760:31;;160:25:1;;;-1:-1:-1;;;;;;;;;;;14760:31:0;133:18:1;14760:31:0;;;;;;;13915:884;;13751:1048;;;;;:::o;7504:455::-;7636:10;7591:4;7626:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7626:30:0;;;;;;;;;;7675:26;;;;7667:72;;;;-1:-1:-1;;;7667:72:0;;;;;;;:::i;:::-;7841:10;7831:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;7831:30:0;;;;;;;;;;;;7784:25;;;;7831:40;;;;7889:38;160:25:1;;;7831:30:0;;7841:10;-1:-1:-1;;;;;;;;;;;7889:38:0;133:18:1;7889:38:0;14:177:1;5621:485:0;5684:4;-1:-1:-1;;;;;5709:16:0;;;;;;:39;;-1:-1:-1;;;;;;5729:19:0;;5743:4;5729:19;;5709:39;5701:78;;;;-1:-1:-1;;;5701:78:0;;;;;;;:::i;:::-;5818:10;5790:15;5808:21;;;:9;:21;;;;;;5848:16;;;;5840:60;;;;-1:-1:-1;;;5840:60:0;;;;;;;:::i;:::-;5948:10;5938:21;;;;:9;:21;;;;;;;;5962:15;;;5938:39;;-1:-1:-1;;;;;5992:13:0;;;;;;;;;:22;;;;;;6043:31;160:25:1;;;5992:13:0;;5948:10;6043:31;;133:18:1;6043:31:0;14:177:1;11031:274:0;11091:7;11111:11;11125:3;-1:-1:-1;;;;;11125:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11111:23;;11145:11;11178:3;11160:15;:21;11159:95;;11245:3;-1:-1:-1;;;;;11245:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11159:95;;;-1:-1:-1;;;11227:3:0;-1:-1:-1;;;;;11227:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11185:39;11191:3;-1:-1:-1;;;;;11191:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11185:39;:51;;;;:::i;:::-;:57;;;;:::i;:::-;11145:109;-1:-1:-1;11272:25:0;11279:12;11145:109;11279:6;:12;:::i;11998:282::-;12083:14;12110:11;12143:3;-1:-1:-1;;;;;12143:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12125:15;:27;12124:54;;12169:3;-1:-1:-1;;;;;12169:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12124:54;;;12156:3;-1:-1:-1;;;;;12156:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12110:68;-1:-1:-1;12198:25:0;12205:12;-1:-1:-1;;;12205:6:0;:12;:::i;12198:25::-;12189:34;;12234:38;12240:6;12248;12256:8;12266:5;12234;:38::i;:::-;12099:181;11998:282;;;;;:::o;12532:273::-;12615:14;12642:11;12675:3;-1:-1:-1;;;;;12675:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12657:15;:27;12656:54;;12701:3;-1:-1:-1;;;;;12701:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12656:54;;;12688:3;-1:-1:-1;;;;;12688:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12642:68;-1:-1:-1;;;;12730:12:0;12642:68;12730:6;:12;:::i;:::-;:18;;;;:::i;:::-;12721:27;;12759:38;12765:6;12773;12781:8;12791:5;12759;:38::i;9867:269::-;9929:7;9949:11;9963:3;-1:-1:-1;;;;;9963:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9949:23;;9983:11;10016:3;9998:15;:21;9997:95;;10083:3;-1:-1:-1;;;;;10083:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9997:95;;;-1:-1:-1;;;10065:3:0;-1:-1:-1;;;;;10065:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10023:39;10029:3;-1:-1:-1;;;;;10029:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10023:39;:51;;;;:::i;:::-;:57;;;;:::i;:::-;9983:109;-1:-1:-1;9983:109:0;10110:12;-1:-1:-1;;;10110:6:0;:12;:::i;11577:127::-;-1:-1:-1;;;;;11679:16:0;;11636:7;11679:16;;;:9;:16;;;;;;11663:33;;:15;:33::i;14807:276::-;15009:66;15016:5;15023:7;15032:5;15039:8;15066:1;15069;15072;15049:25;;;;;;;;;11123:19:1;;;11167:2;11158:12;;11151:28;;;;11235:3;11213:16;-1:-1:-1;;;;;;11209:36:1;11204:2;11195:12;;11188:58;11271:2;11262:12;;10942:338;15049:25:0;;;;;;;;;;;;;15009:6;:66::i;:::-;14807:276;;;;;;;:::o;10533:121::-;10596:7;10623:23;10639:6;10623:15;:23::i;4358:1052::-;4418:9;4471:1;4473:52;;;;4573:9;;;4583:19;;;;4618:1;4613:6;;4566:55;;4583:19;-1:-1:-1;;;4592:8:0;;4566:55;-1:-1:-1;4660:1:0;4709:9;;;;4651:11;4698:679;4721:1;4698:679;;;4781:1;4778;4774:9;4830:1;4826;4822:2;4818:10;4815:17;4805:44;;4845:1;4843;4836:11;4805:44;4894:4;4890:2;4886:13;4936:2;4927:7;4924:15;4921:34;;;4951:1;4949;4942:11;4921:34;-1:-1:-1;;;4982:17:0;;;-1:-1:-1;;5024:8:0;;;5021:337;;;5077:1;5074;5070:9;5153:1;5149;5145:2;5141:10;5138:17;5131:25;5126:1;5119:9;5112:17;5108:49;5105:68;;;5169:1;5167;5160:11;5105:68;5222:4;5218:2;5214:13;5268:2;5259:7;5256:15;5253:34;;;5283:1;5281;5274:11;5253:34;-1:-1:-1;;;5318:17:0;;;-1:-1:-1;;5021:337:0;4736:1;4734;4730:8;4725:13;;4698:679;;;4702:18;4464:928;;4473:52;4488:1;4490:17;;;;4522:1;4517:6;;4481:43;;4490:17;-1:-1:-1;;;4498:8:0;;4481:43;;4464:928;4358:1052;;;;:::o;5418:161::-;5479:9;5530:1;5535;5530:6;:30;;5559:1;5530:30;;;5550:1;5545;5541;:5;5540:11;;;;;:::i;:::-;;5555:1;5539:17;5526:34;5418:161;-1:-1:-1;;;5418:161:0:o;3733:426::-;4017:4;;;;;;;;;;;-1:-1:-1;;;4017:4:0;;;;;4058:7;;;;;;;;;;-1:-1:-1;;;4058:7:0;;;;3858:282;;3887:95;3858:282;;;11544:25:1;4001:22:0;11585:18:1;;;11578:34;4042:25:0;11628:18:1;;;11621:34;11671:18;;;11664:34;;;;4120:4:0;11714:19:1;;;;11707:61;;;;3858:282:0;;;;;;;;;;11516:19:1;;;;3858:282:0;;;3834:317;;;;;;3733:426::o;8004:643::-;-1:-1:-1;;;;;8097:22:0;;;;;;:51;;-1:-1:-1;;;;;;8123:25:0;;8143:4;8123:25;;8097:51;8089:90;;;;-1:-1:-1;;;8089:90:0;;;;;;;:::i;:::-;8192:51;;-1:-1:-1;;;8192:51:0;;8209:10;8192:51;;;12019:34:1;8229:4:0;12069:18:1;;;12062:43;12121:18;;;12114:34;;;8192:3:0;-1:-1:-1;;;;;8192:16:0;;;;11954:18:1;;8192:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8254:35:0;;-1:-1:-1;;;8254:35:0;;8275:4;8254:35;;;12615:51:1;12682:18;;;12675:34;;;8254:7:0;-1:-1:-1;;;;;8254:12:0;;;;12588:18:1;;8254:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8300:16:0;;-1:-1:-1;;;8300:16:0;;;;;160:25:1;;;8300:3:0;-1:-1:-1;;;;;8300:8:0;;-1:-1:-1;8300:8:0;;-1:-1:-1;133:18:1;;8300:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;8488:19:0;;;;;;:9;:19;;;;;;;;;;:28;;8466:50;;8545:11;;:20;;8531:34;;;8594:45;;12894:25:1;;;12935:18;;;12928:34;;;8602:10:0;;8594:45;;12867:18:1;8594:45:0;;;;;;;8004:643;;;:::o;12852:891::-;12992:4;13013:9;:16;13033:2;13013:22;13009:410;;13176:4;13161:20;;;13155:27;13226:4;13211:20;;;13205:27;13284:4;13269:20;;;13263:27;13334:26;;13052:9;13334:26;;;;;;;;;13200:25:1;;;13255:36:0;;13241:18:1;;;13234:45;;;13295:18;;13288:34;;;13338:18;;;13331:34;;;13155:27:0;;13334:26;;13172:19:1;;13334:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13324:36:0;:6;-1:-1:-1;;;;;13324:36:0;;13320:88;;13388:4;13381:11;;;;;;;13320:88;13037:382;;;13009:410;13432:12;13446:19;13469:6;-1:-1:-1;;;;;13469:17:0;13524:34;;;13560:6;13568:9;13501:77;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13501:77:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13501:77:0;-1:-1:-1;;;;;;13501:77:0;;;;;;;;;;13469:120;;;;13501:77;13469:120;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13431:158;;;;13608:7;:43;;;;;13632:6;:13;13649:2;13632:19;13608:43;:126;;;;-1:-1:-1;13668:28:0;;-1:-1:-1;;;13700:34:0;13668:28;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;13668:66:0;;13608:126;13600:135;12852:891;-1:-1:-1;;;;;;12852:891:0:o;8655:965::-;-1:-1:-1;;;;;8773:16:0;;8755:15;8773:16;;;:9;:16;;;;;;8808:17;;;;8800:61;;;;-1:-1:-1;;;8800:61:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8878:19:0;;8887:10;8878:19;8874:364;;-1:-1:-1;;;;;8932:16:0;;8914:15;8932:16;;;:9;:16;;;;;;;;8949:10;8932:28;;;;;;;;-1:-1:-1;;8979:28:0;;8975:252;;9047:6;9036:7;:17;;9028:63;;;;-1:-1:-1;;;9028:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9145:16:0;;;;;;:9;:16;;;;;;;;9162:10;9145:28;;;;;;;9176:16;;;9145:47;;8975:252;8899:339;8874:364;-1:-1:-1;;;;;9275:16:0;;;;;;;:9;:16;;;;;;9294;;;9275:35;;9440:11;;:20;;;9421:39;;;9484:16;-1:-1:-1;;;9484:16:0;;;;;160:25:1;;;9484:3:0;:8;;;;;;133:18:1;;9484:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9511:30:0;;-1:-1:-1;;;9511:30:0;;-1:-1:-1;;;;;12633:32:1;;;9511:30:0;;;12615:51:1;12682:18;;;12675:34;;;9511:7:0;:12;;-1:-1:-1;9511:12:0;;-1:-1:-1;12588:18:1;;9511:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9559:53:0;;;12894:25:1;;;12950:2;12935:18;;12928:34;;;-1:-1:-1;;;;;9559:53:0;;;;-1:-1:-1;9559:53:0;;;-1:-1:-1;9568:10:0;;9559:53;;12867:18:1;9559:53:0;;;;;;;8744:876;8655:965;;;;:::o;196:250:1:-;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:271::-;493:3;531:5;525:12;558:6;553:3;546:19;574:76;643:6;636:4;631:3;627:14;620:4;613:5;609:16;574:76;:::i;:::-;704:2;683:15;-1:-1:-1;;679:29:1;670:39;;;;711:4;666:50;;451:271;-1:-1:-1;;451:271:1:o;727:220::-;876:2;865:9;858:21;839:4;896:45;937:2;926:9;922:18;914:6;896:45;:::i;952:180::-;1011:6;1064:2;1052:9;1043:7;1039:23;1035:32;1032:52;;;1080:1;1077;1070:12;1032:52;-1:-1:-1;1103:23:1;;952:180;-1:-1:-1;952:180:1:o;1137:173::-;1205:20;;-1:-1:-1;;;;;1254:31:1;;1244:42;;1234:70;;1300:1;1297;1290:12;1234:70;1137:173;;;:::o;1315:254::-;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1483:29;1502:9;1483:29;:::i;:::-;1473:39;1559:2;1544:18;;;;1531:32;;-1:-1:-1;;;1315:254:1:o;1766:328::-;1843:6;1851;1859;1912:2;1900:9;1891:7;1887:23;1883:32;1880:52;;;1928:1;1925;1918:12;1880:52;1951:29;1970:9;1951:29;:::i;:::-;1941:39;;1999:38;2033:2;2022:9;2018:18;1999:38;:::i;:::-;1989:48;;2084:2;2073:9;2069:18;2056:32;2046:42;;1766:328;;;;;:::o;2900:186::-;2959:6;3012:2;3000:9;2991:7;2987:23;2983:32;2980:52;;;3028:1;3025;3018:12;2980:52;3051:29;3070:9;3051:29;:::i;3313:254::-;3381:6;3389;3442:2;3430:9;3421:7;3417:23;3413:32;3410:52;;;3458:1;3455;3448:12;3410:52;3494:9;3481:23;3471:33;;3523:38;3557:2;3546:9;3542:18;3523:38;:::i;:::-;3513:48;;3313:254;;;;;:::o;3572:127::-;3633:10;3628:3;3624:20;3621:1;3614:31;3664:4;3661:1;3654:15;3688:4;3685:1;3678:15;3704:1207;3808:6;3816;3824;3832;3840;3893:3;3881:9;3872:7;3868:23;3864:33;3861:53;;;3910:1;3907;3900:12;3861:53;3933:29;3952:9;3933:29;:::i;:::-;3923:39;;3981:38;4015:2;4004:9;4000:18;3981:38;:::i;:::-;3971:48;;4066:2;4055:9;4051:18;4038:32;4028:42;;4117:2;4106:9;4102:18;4089:32;4079:42;;4172:3;4161:9;4157:19;4144:33;4196:18;4237:2;4229:6;4226:14;4223:34;;;4253:1;4250;4243:12;4223:34;4291:6;4280:9;4276:22;4266:32;;4336:7;4329:4;4325:2;4321:13;4317:27;4307:55;;4358:1;4355;4348:12;4307:55;4394:2;4381:16;4416:2;4412;4409:10;4406:36;;;4422:18;;:::i;:::-;4497:2;4491:9;4465:2;4551:13;;-1:-1:-1;;4547:22:1;;;4571:2;4543:31;4539:40;4527:53;;;4595:18;;;4615:22;;;4592:46;4589:72;;;4641:18;;:::i;:::-;4681:10;4677:2;4670:22;4716:2;4708:6;4701:18;4756:7;4751:2;4746;4742;4738:11;4734:20;4731:33;4728:53;;;4777:1;4774;4767:12;4728:53;4833:2;4828;4824;4820:11;4815:2;4807:6;4803:15;4790:46;4878:1;4873:2;4868;4860:6;4856:15;4852:24;4845:35;4899:6;4889:16;;;;;;;3704:1207;;;;;;;;:::o;4916:328::-;4993:6;5001;5009;5062:2;5050:9;5041:7;5037:23;5033:32;5030:52;;;5078:1;5075;5068:12;5030:52;5114:9;5101:23;5091:33;;5143:38;5177:2;5166:9;5162:18;5143:38;:::i;:::-;5133:48;;5200:38;5234:2;5223:9;5219:18;5200:38;:::i;:::-;5190:48;;4916:328;;;;;:::o;5475:693::-;5586:6;5594;5602;5610;5618;5626;5634;5687:3;5675:9;5666:7;5662:23;5658:33;5655:53;;;5704:1;5701;5694:12;5655:53;5727:29;5746:9;5727:29;:::i;:::-;5717:39;;5775:38;5809:2;5798:9;5794:18;5775:38;:::i;:::-;5765:48;;5860:2;5849:9;5845:18;5832:32;5822:42;;5911:2;5900:9;5896:18;5883:32;5873:42;;5965:3;5954:9;5950:19;5937:33;6010:4;6003:5;5999:16;5992:5;5989:27;5979:55;;6030:1;6027;6020:12;5979:55;5475:693;;;;-1:-1:-1;5475:693:1;;;;6053:5;6105:3;6090:19;;6077:33;;-1:-1:-1;6157:3:1;6142:19;;;6129:33;;5475:693;-1:-1:-1;;5475:693:1:o;6173:260::-;6241:6;6249;6302:2;6290:9;6281:7;6277:23;6273:32;6270:52;;;6318:1;6315;6308:12;6270:52;6341:29;6360:9;6341:29;:::i;:::-;6331:39;;6389:38;6423:2;6412:9;6408:18;6389:38;:::i;6660:184::-;6730:6;6783:2;6771:9;6762:7;6758:23;6754:32;6751:52;;;6799:1;6796;6789:12;6751:52;-1:-1:-1;6822:16:1;;6660:184;-1:-1:-1;6660:184:1:o;6849:127::-;6910:10;6905:3;6901:20;6898:1;6891:31;6941:4;6938:1;6931:15;6965:4;6962:1;6955:15;6981:128;7048:9;;;7069:11;;;7066:37;;;7083:18;;:::i;7114:168::-;7187:9;;;7218;;7235:15;;;7229:22;;7215:37;7205:71;;7256:18;;:::i;7287:127::-;7348:10;7343:3;7339:20;7336:1;7329:31;7379:4;7376:1;7369:15;7403:4;7400:1;7393:15;7419:217;7459:1;7485;7475:132;;7529:10;7524:3;7520:20;7517:1;7510:31;7564:4;7561:1;7554:15;7592:4;7589:1;7582:15;7475:132;-1:-1:-1;7621:9:1;;7419:217::o;7641:350::-;7843:2;7825:21;;;7882:2;7862:18;;;7855:30;7921:28;7916:2;7901:18;;7894:56;7982:2;7967:18;;7641:350::o;7996:355::-;8198:2;8180:21;;;8237:2;8217:18;;;8210:30;8276:33;8271:2;8256:18;;8249:61;8342:2;8327:18;;7996:355::o;8356:397::-;8558:2;8540:21;;;8597:2;8577:18;;;8570:30;8636:34;8631:2;8616:18;;8609:62;-1:-1:-1;;;8702:2:1;8687:18;;8680:31;8743:3;8728:19;;8356:397::o;8758:125::-;8823:9;;;8844:10;;;8841:36;;;8857:18;;:::i;12159:277::-;12226:6;12279:2;12267:9;12258:7;12254:23;12250:32;12247:52;;;12295:1;12292;12285:12;12247:52;12327:9;12321:16;12380:5;12373:13;12366:21;12359:5;12356:32;12346:60;;12402:1;12399;12392:12;13376:289;13551:6;13540:9;13533:25;13594:2;13589;13578:9;13574:18;13567:30;13514:4;13614:45;13655:2;13644:9;13640:18;13632:6;13614:45;:::i;13670:287::-;13799:3;13837:6;13831:13;13853:66;13912:6;13907:3;13900:4;13892:6;13888:17;13853:66;:::i;:::-;13935:16;;;;;13670:287;-1:-1:-1;;13670:287:1:o;13962:290::-;14031:6;14084:2;14072:9;14063:7;14059:23;14055:32;14052:52;;;14100:1;14097;14090:12;14052:52;14126:16;;-1:-1:-1;;;;;;14171:32:1;;14161:43;;14151:71;;14218:1;14215;14208:12

Swarm Source

ipfs://293e4440d9b8d809025462018f9cf991307dc9c59175e4bef40a39bc9e546709
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.