false
true
0

Contract Address Details

0xa483CFE6403949bf38c74F8C340651fb02246d21

Contract Name
SaverProxyActions
Creator
0x322d58–977e08 at 0x1579ba–29efdb
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
461 Transactions
Transfers
930 Transfers
Gas Used
524,289,230
Last Balance Update
26350311
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
SaverProxyActions




Optimization enabled
true
Compiler version
v0.5.12+commit.7709ece9




Optimization runs
200
EVM Version
petersburg




Verified at
2026-04-22T15:32:10.128593Z

SaverProxyActions.sol

pragma solidity ^0.5.0;

contract GemLike {
    function approve(address, uint) public;
    function transfer(address, uint) public;
    function transferFrom(address, address, uint) public;
    function deposit() public payable;
    function withdraw(uint) public;
}

contract ManagerLike {
    function cdpCan(address, uint, address) public view returns (uint);
    function ilks(uint) public view returns (bytes32);
    function owns(uint) public view returns (address);
    function urns(uint) public view returns (address);
    function vat() public view returns (address);
    function open(bytes32, address) public returns (uint);
    function give(uint, address) public;
    function cdpAllow(uint, address, uint) public;
    function urnAllow(address, uint) public;
    function frob(uint, int, int) public;
    function flux(uint, address, uint) public;
    function move(uint, address, uint) public;
    function exit(address, uint, address, uint) public;
    function quit(uint, address) public;
    function enter(address, uint) public;
    function shift(uint, uint) public;
}

contract VatLike {
    function can(address, address) public view returns (uint);
    function ilks(bytes32) public view returns (uint, uint, uint, uint, uint);
    function dai(address) public view returns (uint);
    function urns(bytes32, address) public view returns (uint, uint);
    function frob(bytes32, address, address, address, int, int) public;
    function hope(address) public;
    function move(address, address, uint) public;
}

contract GemJoinLike {
    function dec() public returns (uint);
    function gem() public returns (GemLike);
    function join(address, uint) public payable;
    function exit(address, uint) public;
}

contract GNTJoinLike {
    function bags(address) public view returns (address);
    function make(address) public returns (address);
}

contract DaiJoinLike {
    function vat() public returns (VatLike);
    function dai() public returns (GemLike);
    function join(address, uint) public payable;
    function exit(address, uint) public;
}

contract HopeLike {
    function hope(address) public;
    function nope(address) public;
}

contract ProxyRegistryInterface {
    function build(address) public returns (address);
}

contract EndLike {
    function fix(bytes32) public view returns (uint);
    function cash(bytes32, uint) public;
    function free(bytes32) public;
    function pack(uint) public;
    function skim(bytes32, address) public;
}

contract JugLike {
    function drip(bytes32) public returns (uint);
}

contract PotLike {
    function pie(address) public view returns (uint);
    function drip() public returns (uint);
    function join(uint) public;
    function exit(uint) public;
}

contract ProxyRegistryLike {
    function proxies(address) public view returns (address);
    function build(address) public returns (address);
}

contract ProxyLike {
    function owner() public view returns (address);
}

contract DSProxy {
    function execute(address _target, bytes memory _data) public payable returns (bytes32);
    function setOwner(address owner_) public;
}

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// WARNING: These functions meant to be used as a a library for a DSProxy. Some are unsafe if you call them directly.
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

contract Common {
    uint256 constant RAY = 10 ** 27;

    // Internal functions

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "mul-overflow");
    }

    // Public functions

    function daiJoin_join(address apt, address urn, uint wad) public {
        // Gets DAI from the user's wallet
        DaiJoinLike(apt).dai().transferFrom(msg.sender, address(this), wad);
        // Approves adapter to take the DAI amount
        DaiJoinLike(apt).dai().approve(apt, wad);
        // Joins DAI into the vat
        DaiJoinLike(apt).join(urn, wad);
    }
}

contract SaverProxyActions is Common {


    event CDPAction(string indexed, uint indexed, uint, uint);

    // Internal functions

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, "sub-overflow");
    }

    function toInt(uint x) internal pure returns (int y) {
        y = int(x);
        require(y >= 0, "int-overflow");
    }

    function toRad(uint wad) internal pure returns (uint rad) {
        rad = mul(wad, 10 ** 27);
    }

    function convertTo18(address gemJoin, uint256 amt) internal returns (uint256 wad) {
        // For those collaterals that have less than 18 decimals precision we need to do the conversion before passing to frob function
        // Adapters will automatically handle the difference of precision
        wad = mul(
            amt,
            10 ** (18 - GemJoinLike(gemJoin).dec())
        );
    }

    function _getDrawDart(
        address vat,
        address jug,
        address urn,
        bytes32 ilk,
        uint wad
    ) internal returns (int dart) {
        // Updates stability fee rate
        uint rate = JugLike(jug).drip(ilk);

        // Gets DAI balance of the urn in the vat
        uint dai = VatLike(vat).dai(urn);

        // If there was already enough DAI in the vat balance, just exits it without adding more debt
        if (dai < mul(wad, RAY)) {
            // Calculates the needed dart so together with the existing dai in the vat is enough to exit wad amount of DAI tokens
            dart = toInt(sub(mul(wad, RAY), dai) / rate);
            // This is neeeded due lack of precision. It might need to sum an extra dart wei (for the given DAI wad amount)
            dart = mul(uint(dart), rate) < mul(wad, RAY) ? dart + 1 : dart;
        }
    }

    function _getWipeDart(
        address vat,
        uint dai,
        address urn,
        bytes32 ilk
    ) internal view returns (int dart) {
        // Gets actual rate from the vat
        (, uint rate,,,) = VatLike(vat).ilks(ilk);
        // Gets actual art value of the urn
        (, uint art) = VatLike(vat).urns(ilk, urn);

        // Uses the whole dai balance in the vat to reduce the debt
        dart = toInt(dai / rate);
        // Checks the calculated dart is not higher than urn.art (total debt), otherwise uses its value
        dart = uint(dart) <= art ? - dart : - toInt(art);
    }

    function _getWipeAllWad(
        address vat,
        address usr,
        address urn,
        bytes32 ilk
    ) internal view returns (uint wad) {
        // Gets actual rate from the vat
        (, uint rate,,,) = VatLike(vat).ilks(ilk);
        // Gets actual art value of the urn
        (, uint art) = VatLike(vat).urns(ilk, urn);
        // Gets actual dai amount in the urn
        uint dai = VatLike(vat).dai(usr);

        uint rad = sub(mul(art, rate), dai);
        wad = rad / RAY;

        // If the rad precision has some dust, it will need to request for 1 extra wad wei
        wad = mul(wad, RAY) < rad ? wad + 1 : wad;
    }

    // Public functions

    function transfer(address gem, address dst, uint wad) public {
        GemLike(gem).transfer(dst, wad);
    }

    function ethJoin_join(address apt, address urn) public payable {
        // Wraps ETH in WETH
        GemJoinLike(apt).gem().deposit.value(msg.value)();
        // Approves adapter to take the WETH amount
        GemJoinLike(apt).gem().approve(address(apt), msg.value);
        // Joins WETH collateral into the vat
        GemJoinLike(apt).join(urn, msg.value);
    }

    function gemJoin_join(address apt, address urn, uint wad, bool transferFrom) public {
        // Only executes for tokens that have approval/transferFrom implementation
        if (transferFrom) {
            // Gets token from the user's wallet
            GemJoinLike(apt).gem().transferFrom(msg.sender, address(this), wad);
            // Approves adapter to take the token amount
            GemJoinLike(apt).gem().approve(apt, wad);
        }
        // Joins token collateral into the vat
        GemJoinLike(apt).join(urn, wad);
    }

    function hope(
        address obj,
        address usr
    ) public {
        HopeLike(obj).hope(usr);
    }

    function nope(
        address obj,
        address usr
    ) public {
        HopeLike(obj).nope(usr);
    }

    function open(
        address manager,
        bytes32 ilk,
        address usr
    ) public returns (uint cdp) {
        cdp = ManagerLike(manager).open(ilk, usr);
    }

    function give(
        address manager,
        uint cdp,
        address usr
    ) public {
        ManagerLike(manager).give(cdp, usr);

        emit CDPAction('give', cdp, 0, 0);
    }

    function giveToProxy(
        address proxyRegistry,
        address manager,
        uint cdp,
        address dst
    ) public {
        // Gets actual proxy address
        address proxy = ProxyRegistryLike(proxyRegistry).proxies(dst);
        // Checks if the proxy address already existed and dst address is still the owner
        if (proxy == address(0) || ProxyLike(proxy).owner() != dst) {
            uint csize;
            assembly {
                csize := extcodesize(dst)
            }
            // We want to avoid creating a proxy for a contract address that might not be able to handle proxies, then losing the CDP
            require(csize == 0, "Dst-is-a-contract");
            // Creates the proxy for the dst address
            proxy = ProxyRegistryLike(proxyRegistry).build(dst);
        }
        // Transfers CDP to the dst proxy
        give(manager, cdp, proxy);
    }

    function cdpAllow(
        address manager,
        uint cdp,
        address usr,
        uint ok
    ) public {
        ManagerLike(manager).cdpAllow(cdp, usr, ok);
    }

    function urnAllow(
        address manager,
        address usr,
        uint ok
    ) public {
        ManagerLike(manager).urnAllow(usr, ok);
    }

    function flux(
        address manager,
        uint cdp,
        address dst,
        uint wad
    ) public {
        ManagerLike(manager).flux(cdp, dst, wad);
    }

    function move(
        address manager,
        uint cdp,
        address dst,
        uint rad
    ) public {
        ManagerLike(manager).move(cdp, dst, rad);
    }

    function frob(
        address manager,
        uint cdp,
        int dink,
        int dart
    ) public {
        ManagerLike(manager).frob(cdp, dink, dart);
    }

    function quit(
        address manager,
        uint cdp,
        address dst
    ) public {
        ManagerLike(manager).quit(cdp, dst);
    }

    function enter(
        address manager,
        address src,
        uint cdp
    ) public {
        ManagerLike(manager).enter(src, cdp);
    }

    function shift(
        address manager,
        uint cdpSrc,
        uint cdpOrg
    ) public {
        ManagerLike(manager).shift(cdpSrc, cdpOrg);
    }

    function makeGemBag(
        address gemJoin
    ) public returns (address bag) {
        bag = GNTJoinLike(gemJoin).make(address(this));
    }

    function lockETH(
        address manager,
        address ethJoin,
        uint cdp
    ) public payable {
        // Receives ETH amount, converts it to WETH and joins it into the vat
        ethJoin_join(ethJoin, address(this));
        // Locks WETH amount into the CDP
        VatLike(ManagerLike(manager).vat()).frob(
            ManagerLike(manager).ilks(cdp),
            ManagerLike(manager).urns(cdp),
            address(this),
            address(this),
            toInt(msg.value),
            0
        );

        emit CDPAction('lockETH', cdp, msg.value, 0);
    }

    function lockGem(
        address manager,
        address gemJoin,
        uint cdp,
        uint wad,
        bool transferFrom
    ) public {
        // Takes token amount from user's wallet and joins into the vat
        gemJoin_join(gemJoin, address(this), wad, transferFrom);
        // Locks token amount into the CDP
        VatLike(ManagerLike(manager).vat()).frob(
            ManagerLike(manager).ilks(cdp),
            ManagerLike(manager).urns(cdp),
            address(this),
            address(this),
            toInt(convertTo18(gemJoin, wad)),
            0
        );

        emit CDPAction('lockGem', cdp, wad, 0);
    }

    function freeETH(
        address manager,
        address ethJoin,
        uint cdp,
        uint wad
    ) public {
        // Unlocks WETH amount from the CDP
        frob(manager, cdp, -toInt(wad), 0);
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wad);
        // Exits WETH amount to proxy address as a token
        GemJoinLike(ethJoin).exit(address(this), wad);
        // Converts WETH to ETH
        GemJoinLike(ethJoin).gem().withdraw(wad);
        // Sends ETH back to the user's wallet
        msg.sender.transfer(wad);

        emit CDPAction('freeETH', cdp, wad, 0);
    }

    function freeGem(
        address manager,
        address gemJoin,
        uint cdp,
        uint wad
    ) public {
        uint wad18 = convertTo18(gemJoin, wad);
        // Unlocks token amount from the CDP
        frob(manager, cdp, -toInt(wad18), 0);
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wad18);
        // Exits token amount to the user's wallet as a token
        GemJoinLike(gemJoin).exit(msg.sender, wad);

        emit CDPAction('freeGem', cdp, wad, 0);
    }

    function exitETH(
        address manager,
        address ethJoin,
        uint cdp,
        uint wad
    ) public {
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wad);

        // Exits WETH amount to proxy address as a token
        GemJoinLike(ethJoin).exit(address(this), wad);
        // Converts WETH to ETH
        GemJoinLike(ethJoin).gem().withdraw(wad);
        // Sends ETH back to the user's wallet
        msg.sender.transfer(wad);
    }

    function exitGem(
        address manager,
        address gemJoin,
        uint cdp,
        uint wad
    ) public {
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), convertTo18(gemJoin, wad));

        // Exits token amount to the user's wallet as a token
        GemJoinLike(gemJoin).exit(msg.sender, wad);
    }

    function draw(
        address manager,
        address jug,
        address daiJoin,
        uint cdp,
        uint wad
    ) public {
        address urn = ManagerLike(manager).urns(cdp);
        address vat = ManagerLike(manager).vat();
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        // Generates debt in the CDP
        frob(manager, cdp, 0, _getDrawDart(vat, jug, urn, ilk, wad));
        // Moves the DAI amount (balance in the vat in rad) to proxy's address
        move(manager, cdp, address(this), toRad(wad));
        // Allows adapter to access to proxy's DAI balance in the vat
        if (VatLike(vat).can(address(this), address(daiJoin)) == 0) {
            VatLike(vat).hope(daiJoin);
        }
        // Exits DAI to the user's wallet as a token
        DaiJoinLike(daiJoin).exit(msg.sender, wad);

        emit CDPAction('draw', cdp, 0, wad);
    }

    function wipe(
        address manager,
        address daiJoin,
        uint cdp,
        uint wad
    ) public {
        address vat = ManagerLike(manager).vat();
        address urn = ManagerLike(manager).urns(cdp);
        bytes32 ilk = ManagerLike(manager).ilks(cdp);

        address own = ManagerLike(manager).owns(cdp);
        if (own == address(this) || ManagerLike(manager).cdpCan(own, cdp, address(this)) == 1) {
            // Joins DAI amount into the vat
            daiJoin_join(daiJoin, urn, wad);
            // Paybacks debt to the CDP
            frob(manager, cdp, 0, _getWipeDart(vat, VatLike(vat).dai(urn), urn, ilk));
        } else {
             // Joins DAI amount into the vat
            daiJoin_join(daiJoin, address(this), wad);
            // Paybacks debt to the CDP
            VatLike(vat).frob(
                ilk,
                urn,
                address(this),
                address(this),
                0,
                _getWipeDart(vat, wad * RAY, urn, ilk)
            );
        }

        emit CDPAction('wipe', cdp, 0, wad);
    }

    function wipeAll(
        address manager,
        address daiJoin,
        uint cdp
    ) public {
        address vat = ManagerLike(manager).vat();
        address urn = ManagerLike(manager).urns(cdp);
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        (, uint art) = VatLike(vat).urns(ilk, urn);

        address own = ManagerLike(manager).owns(cdp);
        if (own == address(this) || ManagerLike(manager).cdpCan(own, cdp, address(this)) == 1) {
            // Joins DAI amount into the vat
            daiJoin_join(daiJoin, urn, _getWipeAllWad(vat, urn, urn, ilk));
            // Paybacks debt to the CDP
            frob(manager, cdp, 0, -int(art));
        } else {
            // Joins DAI amount into the vat
            daiJoin_join(daiJoin, address(this), _getWipeAllWad(vat, address(this), urn, ilk));
            // Paybacks debt to the CDP
            VatLike(vat).frob(
                ilk,
                urn,
                address(this),
                address(this),
                0,
                -int(art)
            );
        }

        emit CDPAction('wipeAll', cdp, 0, art);
    }

    function lockETHAndDraw(
        address manager,
        address jug,
        address ethJoin,
        address daiJoin,
        uint cdp,
        uint wadD
    ) public payable {
        address urn = ManagerLike(manager).urns(cdp);
        address vat = ManagerLike(manager).vat();
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        // Receives ETH amount, converts it to WETH and joins it into the vat
        ethJoin_join(ethJoin, urn);
        // Locks WETH amount into the CDP and generates debt
        frob(manager, cdp, toInt(msg.value), _getDrawDart(vat, jug, urn, ilk, wadD));
        // Moves the DAI amount (balance in the vat in rad) to proxy's address
        move(manager, cdp, address(this), toRad(wadD));
        // Allows adapter to access to proxy's DAI balance in the vat
        if (VatLike(vat).can(address(this), address(daiJoin)) == 0) {
            VatLike(vat).hope(daiJoin);
        }
        // Exits DAI to the user's wallet as a token
        DaiJoinLike(daiJoin).exit(msg.sender, wadD);
    }

    function openLockETHAndDraw(
        address manager,
        address jug,
        address ethJoin,
        address daiJoin,
        bytes32 ilk,
        uint wadD
    ) public payable returns (uint cdp) {
        cdp = open(manager, ilk, address(this));
        lockETHAndDraw(manager, jug, ethJoin, daiJoin, cdp, wadD);

        emit CDPAction('openLockETHAndDraw', cdp, msg.value, wadD);
    }

    function lockGemAndDraw(
        address manager,
        address jug,
        address gemJoin,
        address daiJoin,
        uint cdp,
        uint wadC,
        uint wadD,
        bool transferFrom
    ) public {
        address urn = ManagerLike(manager).urns(cdp);
        address vat = ManagerLike(manager).vat();
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        // Takes token amount from user's wallet and joins into the vat
        gemJoin_join(gemJoin, urn, wadC, transferFrom);
        // Locks token amount into the CDP and generates debt
        frob(manager, cdp, toInt(convertTo18(gemJoin, wadC)), _getDrawDart(vat, jug, urn, ilk, wadD));
        // Moves the DAI amount (balance in the vat in rad) to proxy's address
        move(manager, cdp, address(this), toRad(wadD));
        // Allows adapter to access to proxy's DAI balance in the vat
        if (VatLike(vat).can(address(this), address(daiJoin)) == 0) {
            VatLike(vat).hope(daiJoin);
        }
        // Exits DAI to the user's wallet as a token
        DaiJoinLike(daiJoin).exit(msg.sender, wadD);

    }

    function openLockGemAndDraw(
        address manager,
        address jug,
        address gemJoin,
        address daiJoin,
        bytes32 ilk,
        uint wadC,
        uint wadD,
        bool transferFrom
    ) public returns (uint cdp) {
        cdp = open(manager, ilk, address(this));
        lockGemAndDraw(manager, jug, gemJoin, daiJoin, cdp, wadC, wadD, transferFrom);

        emit CDPAction('openLockGemAndDraw', cdp, wadC, wadD);

    }

    function wipeAllAndFreeETH(
        address manager,
        address ethJoin,
        address daiJoin,
        uint cdp,
        uint wadC
    ) public {
        address vat = ManagerLike(manager).vat();
        address urn = ManagerLike(manager).urns(cdp);
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        (, uint art) = VatLike(vat).urns(ilk, urn);

        // Joins DAI amount into the vat
        daiJoin_join(daiJoin, urn, _getWipeAllWad(vat, urn, urn, ilk));
        // Paybacks debt to the CDP and unlocks WETH amount from it
        frob(
            manager,
            cdp,
            -toInt(wadC),
            -int(art)
        );
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wadC);
        // Exits WETH amount to proxy address as a token
        GemJoinLike(ethJoin).exit(address(this), wadC);
        // Converts WETH to ETH
        GemJoinLike(ethJoin).gem().withdraw(wadC);
        // Sends ETH back to the user's wallet
        msg.sender.transfer(wadC);

        emit CDPAction('wipeAllAndFreeETH', cdp, wadC, art);
    }

    function wipeAndFreeGem(
        address manager,
        address gemJoin,
        address daiJoin,
        uint cdp,
        uint wadC,
        uint wadD
    ) public {
        address urn = ManagerLike(manager).urns(cdp);
        // Joins DAI amount into the vat
        daiJoin_join(daiJoin, urn, wadD);
        uint wad18 = convertTo18(gemJoin, wadC);
        // Paybacks debt to the CDP and unlocks token amount from it
        frob(
            manager,
            cdp,
            -toInt(wad18),
            _getWipeDart(ManagerLike(manager).vat(), VatLike(ManagerLike(manager).vat()).dai(urn), urn, ManagerLike(manager).ilks(cdp))
        );
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wad18);
        // Exits token amount to the user's wallet as a token
        GemJoinLike(gemJoin).exit(msg.sender, wadC);
    }

    function wipeAllAndFreeGem(
        address manager,
        address gemJoin,
        address daiJoin,
        uint cdp,
        uint wadC
    ) public {
        address vat = ManagerLike(manager).vat();
        address urn = ManagerLike(manager).urns(cdp);
        bytes32 ilk = ManagerLike(manager).ilks(cdp);
        (, uint art) = VatLike(vat).urns(ilk, urn);

        // Joins DAI amount into the vat
        daiJoin_join(daiJoin, urn, _getWipeAllWad(vat, urn, urn, ilk));
        uint wad18 = convertTo18(gemJoin, wadC);
        // Paybacks debt to the CDP and unlocks token amount from it
        frob(
            manager,
            cdp,
            -toInt(wad18),
            -int(art)
        );
        // Moves the amount from the CDP urn to proxy's address
        flux(manager, cdp, address(this), wad18);
        // Exits token amount to the user's wallet as a token
        GemJoinLike(gemJoin).exit(msg.sender, wadC);

        emit CDPAction('wipeAllAndFreeGem', cdp, wadC, art);
    }

    function createProxyAndCDP(
        address manager,
        address jug,
        address ethJoin,
        address daiJoin,
        bytes32 ilk,
        uint wadD,
        address registry
        ) public payable returns(uint) {
      
            address proxy = ProxyRegistryInterface(registry).build(msg.sender);
            
            uint cdp = openLockETHAndDraw(manager,
                jug,
                ethJoin,
                daiJoin,
                ilk,
                wadD
                );
            
            give(manager, cdp, address(proxy));
            
            return cdp;

    }

    function createProxyAndGemCDP(
        address manager,
        address jug,
        address gemJoin,
        address daiJoin,
        bytes32 ilk,
        uint wadC,
        uint wadD,
        bool transferFrom,
        address registry
        ) public returns(uint) {
            

            address proxy = ProxyRegistryInterface(registry).build(msg.sender);
            
            uint cdp = openLockGemAndDraw(manager,
                jug,
                gemJoin,
                daiJoin,
                ilk,
                wadC,
                wadD,
                transferFrom);
            
            give(manager, cdp, address(proxy));
            
            return cdp;
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"petersburg","compilationTarget":{"SaverProxyActions.sol":"SaverProxyActions"}}
              

Contract ABI

[{"type":"event","name":"CDPAction","inputs":[{"type":"string","name":"","internalType":"string","indexed":true},{"type":"uint256","name":"","internalType":"uint256","indexed":true},{"type":"uint256","name":"","internalType":"uint256","indexed":false},{"type":"uint256","name":"","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"cdpAllow","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"ok","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"createProxyAndCDP","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"wadD","internalType":"uint256"},{"type":"address","name":"registry","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"createProxyAndGemCDP","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"wadC","internalType":"uint256"},{"type":"uint256","name":"wadD","internalType":"uint256"},{"type":"bool","name":"transferFrom","internalType":"bool"},{"type":"address","name":"registry","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"daiJoin_join","inputs":[{"type":"address","name":"apt","internalType":"address"},{"type":"address","name":"urn","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"draw","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"enter","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"src","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"ethJoin_join","inputs":[{"type":"address","name":"apt","internalType":"address"},{"type":"address","name":"urn","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"exitETH","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"exitGem","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"flux","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"freeETH","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"freeGem","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"frob","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"int256","name":"dink","internalType":"int256"},{"type":"int256","name":"dart","internalType":"int256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"gemJoin_join","inputs":[{"type":"address","name":"apt","internalType":"address"},{"type":"address","name":"urn","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"},{"type":"bool","name":"transferFrom","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"give","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"usr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"giveToProxy","inputs":[{"type":"address","name":"proxyRegistry","internalType":"address"},{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"dst","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"hope","inputs":[{"type":"address","name":"obj","internalType":"address"},{"type":"address","name":"usr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"lockETH","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"lockETHAndDraw","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wadD","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"lockGem","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"},{"type":"bool","name":"transferFrom","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"lockGemAndDraw","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wadC","internalType":"uint256"},{"type":"uint256","name":"wadD","internalType":"uint256"},{"type":"bool","name":"transferFrom","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"address","name":"bag","internalType":"address"}],"name":"makeGemBag","inputs":[{"type":"address","name":"gemJoin","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"move","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"rad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"nope","inputs":[{"type":"address","name":"obj","internalType":"address"},{"type":"address","name":"usr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"cdp","internalType":"uint256"}],"name":"open","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"address","name":"usr","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[{"type":"uint256","name":"cdp","internalType":"uint256"}],"name":"openLockETHAndDraw","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"wadD","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"cdp","internalType":"uint256"}],"name":"openLockGemAndDraw","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"jug","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"bytes32","name":"ilk","internalType":"bytes32"},{"type":"uint256","name":"wadC","internalType":"uint256"},{"type":"uint256","name":"wadD","internalType":"uint256"},{"type":"bool","name":"transferFrom","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"quit","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"address","name":"dst","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"shift","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"uint256","name":"cdpSrc","internalType":"uint256"},{"type":"uint256","name":"cdpOrg","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transfer","inputs":[{"type":"address","name":"gem","internalType":"address"},{"type":"address","name":"dst","internalType":"address"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"urnAllow","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"usr","internalType":"address"},{"type":"uint256","name":"ok","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"wipe","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wad","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"wipeAll","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"wipeAllAndFreeETH","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"ethJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wadC","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"wipeAllAndFreeGem","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wadC","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"wipeAndFreeGem","inputs":[{"type":"address","name":"manager","internalType":"address"},{"type":"address","name":"gemJoin","internalType":"address"},{"type":"address","name":"daiJoin","internalType":"address"},{"type":"uint256","name":"cdp","internalType":"uint256"},{"type":"uint256","name":"wadC","internalType":"uint256"},{"type":"uint256","name":"wadD","internalType":"uint256"}],"constant":false}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b506146eb806100206000396000f3fe60806040526004361061020f5760003560e01c80637df2eb2511610118578063bcd6deec116100a0578063db802a321161006f578063db802a3214610b07578063e205c10814610b6f578063e685cc0414610ba5578063eb0b9a8514610bf1578063fba7591d14610c345761020f565b8063bcd6deec146109ca578063beabacc814610a19578063c56167c614610a5c578063cbd4be3f14610a9f5761020f565b8063a033df12116100e7578063a033df1214610854578063a6add01114610882578063b50a5869146108d7578063ba727a9514610912578063bae45f01146109595761020f565b80637df2eb251461073a57806396e8d72c146107855780639f6f3d5b146107ca5780639f887fde146108195761020f565b80634592aca71161019b5780636aa3ee111161016a5780636aa3ee11146105d75780636ab6a4911461061a5780636d68b70b146106635780637b5a3b43146106b25780637bc3bd53146106fb5761020f565b80634592aca7146104bf578063493c2049146105025780634b6661991461054b5780635f6ef447146105945761020f565b80631c02d846116101e25780631c02d8461461034f5780631d10f2311461039b57806325cf37d0146103de5780633e29e5651461042557806342dd11bb146104765761020f565b8063021c56c714610214578063036a23951461027a57806308f00e34146102bf5780631558b04814610308575b600080fd5b610268600480360360e081101561022a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c09091013516610c83565b60408051918252519081900360200190f35b34801561028657600080fd5b506102bd6004803603606081101561029d57600080fd5b506001600160a01b03813581169160208101359091169060400135610d27565b005b3480156102cb57600080fd5b506102bd600480360360808110156102e257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611127565b34801561031457600080fd5b506102bd6004803603608081101561032b57600080fd5b506001600160a01b0381358116916020810135916040820135169060600135611296565b6102bd600480360360c081101561036557600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561130d565b3480156103a757600080fd5b506102bd600480360360608110156103be57600080fd5b506001600160a01b0381358116916020810135916040909101351661160c565b3480156103ea57600080fd5b506102bd6004803603608081101561040157600080fd5b506001600160a01b03813581169160208101359160408201351690606001356116cb565b34801561043157600080fd5b506102bd600480360360a081101561044857600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001351515611724565b34801561048257600080fd5b506102bd6004803603608081101561049957600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611969565b3480156104cb57600080fd5b506102bd600480360360608110156104e257600080fd5b506001600160a01b038135811691602081013591604090910135166119cc565b34801561050e57600080fd5b506102bd6004803603608081101561052557600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516611a49565b34801561055757600080fd5b506102bd6004803603608081101561056e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611c3c565b3480156105a057600080fd5b506102bd600480360360608110156105b757600080fd5b506001600160a01b0381358116916020810135909116906040013561207e565b3480156105e357600080fd5b50610268600480360360608110156105fa57600080fd5b506001600160a01b038135811691602081013591604090910135166120de565b34801561062657600080fd5b506102bd6004803603608081101561063d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612165565b34801561066f57600080fd5b506102bd600480360360a081101561068657600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612249565b3480156106be57600080fd5b506102bd600480360360808110156106d557600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612611565b34801561070757600080fd5b506102bd6004803603606081101561071e57600080fd5b506001600160a01b0381351690602081013590604001356127d1565b34801561074657600080fd5b506102bd6004803603608081101561075d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135151561281f565b34801561079157600080fd5b506102bd600480360360808110156107a857600080fd5b506001600160a01b038135169060208101359060408101359060600135612a2c565b3480156107d657600080fd5b506102bd600480360360a08110156107ed57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612a82565b34801561082557600080fd5b506102bd6004803603604081101561083c57600080fd5b506001600160a01b0381358116916020013516612da8565b6102bd6004803603604081101561086a57600080fd5b506001600160a01b0381358116916020013516612e1c565b34801561088e57600080fd5b506102bd600480360360c08110156108a557600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135613001565b3480156108e357600080fd5b506102bd600480360360408110156108fa57600080fd5b506001600160a01b03813581169160200135166132f2565b34801561091e57600080fd5b506102bd6004803603608081101561093557600080fd5b506001600160a01b038135811691602081013591604082013516906060013561334a565b34801561096557600080fd5b50610268600480360361012081101561097d57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e081013515159161010090910135166133a3565b3480156109d657600080fd5b506102bd600480360360a08110156109ed57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561344b565b348015610a2557600080fd5b506102bd60048036036060811015610a3c57600080fd5b506001600160a01b0381358116916020810135909116906040013561372d565b348015610a6857600080fd5b506102bd60048036036060811015610a7f57600080fd5b506001600160a01b0381358116916020810135909116906040013561378d565b348015610aab57600080fd5b506102bd6004803603610100811015610ac357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613993565b348015610b1357600080fd5b506102686004803603610100811015610b2b57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613c90565b6102bd60048036036060811015610b8557600080fd5b506001600160a01b03813581169160208101359091169060400135613d09565b610268600480360360c0811015610bbb57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a00135613f41565b348015610bfd57600080fd5b506102bd60048036036060811015610c1457600080fd5b506001600160a01b03813581169160208101359091169060400135613fb6565b348015610c4057600080fd5b50610c6760048036036020811015610c5757600080fd5b50356001600160a01b0316614016565b604080516001600160a01b039092168252519081900360200190f35b604080516379b80ed160e11b8152336004820152905160009182916001600160a01b0385169163f3701da291602480830192602092919082900301818787803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050506040513d6020811015610cf957600080fd5b505190506000610d0d8a8a8a8a8a8a613f41565b9050610d1a8a828461160c565b9998505050505050505050565b6000836001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d6020811015610d8c57600080fd5b505160408051632726b07360e01b81526004810185905290519192506000916001600160a01b03871691632726b073916024808301926020929190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051632c2cb9fd60e01b81526004810186905290519192506000916001600160a01b03881691632c2cb9fd916024808301926020929190829003018186803b158015610e5457600080fd5b505afa158015610e68573d6000803e3d6000fd5b505050506040513d6020811015610e7e57600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d6040811015610efc57600080fd5b506020908101516040805163040b0d8960e51b81526004810189905290519193506000926001600160a01b038b1692638161b120926024808201939291829003018186803b158015610f4d57600080fd5b505afa158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b505190506001600160a01b0381163014806110145750604080516302d75da360e51b81526001600160a01b038381166004830152602482018990523060448301529151918a1691635aebb46091606480820192602092909190829003018186803b158015610fe457600080fd5b505afa158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b50516001145b156110445761102f878561102a88888989614093565b61378d565b61103f8887600085600003612a2c565b6110d9565b611055873061102a88308989614093565b60408051637608870360e01b8152600481018590526001600160a01b0386811660248301523060448301819052606483015260006084830181905285810360a484015292519088169263760887039260c4808201939182900301818387803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050505b60408051661dda5c19505b1b60ca1b81528151908190036007018120600082526020820185905282518993919260008051602061469783398151915292908290030190a35050505050505050565b61113384833084611296565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561118157600080fd5b505af1158015611195573d6000803e3d6000fd5b50505050826001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d60208110156111fe57600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f1935050505015801561128f573d6000803e3d6000fd5b5050505050565b604080516313771f0760e31b8152600481018590526001600160a01b03848116602483015260448201849052915191861691639bb8f8389160648082019260009290919082900301818387803b1580156112ef57600080fd5b505af1158015611303573d6000803e3d6000fd5b5050505050505050565b6000866001600160a01b0316632726b073846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561135357600080fd5b505afa158015611367573d6000803e3d6000fd5b505050506040513d602081101561137d57600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038a16916336569e77916004808301926020929190829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038b1691632c2cb9fd916024808301926020929190829003018186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d602081101561146857600080fd5b505190506114768784612e1c565b611496898661148434614260565b611491868d89888c6142ab565b612a2c565b6114aa8986306114a588614428565b6116cb565b60408051634538c4eb60e01b81523060048201526001600160a01b038881166024830152915191841691634538c4eb91604480820192602092909190829003018186803b1580156114fa57600080fd5b505afa15801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b505161159b57816001600160a01b031663a3b22fc4876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0388169163ef693bed91604480830192600092919082900301818387803b1580156115e957600080fd5b505af11580156115fd573d6000803e3d6000fd5b50505050505050505050505050565b826001600160a01b031663fcafcc6883836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505060408051636769766560e01b81528151908190036004018120600080835260208301528251879550909350600080516020614697833981519152929181900390910190a3505050565b60408051637cf986db60e11b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163f9f30db69160648082019260009290919082900301818387803b1580156112ef57600080fd5b6117308430848461281f565b846001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b505050506040513d602081101561179357600080fd5b505160408051632c2cb9fd60e01b81526004810186905290516001600160a01b039283169263760887039290891691632c2cb9fd91602480820192602092909190829003018186803b1580156117e857600080fd5b505afa1580156117fc573d6000803e3d6000fd5b505050506040513d602081101561181257600080fd5b505160408051632726b07360e01b81526004810188905290516001600160a01b038a1691632726b073916024808301926020929190829003018186803b15801561185b57600080fd5b505afa15801561186f573d6000803e3d6000fd5b505050506040513d602081101561188557600080fd5b5051308061189b6118968b8a614445565b614260565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561190557600080fd5b505af1158015611919573d6000803e3d6000fd5b505060408051666c6f636b47656d60c81b81528151908190036007018120868252600060208301528251889550909350600080516020614697833981519152929181900390910190a35050505050565b61197e8483306119798786614445565b611296565b6040805163ef693bed60e01b81523360048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b1580156112ef57600080fd5b826001600160a01b0316631b0dbf7283836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b50505050505050565b6000846001600160a01b031663c4552791836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611aa157600080fd5b505afa158015611ab5573d6000803e3d6000fd5b505050506040513d6020811015611acb57600080fd5b505190506001600160a01b0381161580611b5b5750816001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2357600080fd5b505afa158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50516001600160a01b031614155b15611c3157813b8015611ba9576040805162461bcd60e51b8152602060048201526011602482015270111cdd0b5a5ccb584b58dbdb9d1c9858dd607a1b604482015290519081900360640190fd5b856001600160a01b031663f3701da2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b505050506040513d6020811015611c2b57600080fd5b50519150505b61128f84848361160c565b6000846001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7757600080fd5b505afa158015611c8b573d6000803e3d6000fd5b505050506040513d6020811015611ca157600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03881691632726b073916024808301926020929190829003018186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d6020811015611d1a57600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b03891691632c2cb9fd916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b50516040805163040b0d8960e51b81526004810188905290519192506000916001600160a01b038a1691638161b120916024808301926020929190829003018186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d6020811015611e0c57600080fd5b505190506001600160a01b038116301480611ea95750604080516302d75da360e51b81526001600160a01b038381166004830152602482018990523060448301529151918a1691635aebb46091606480820192602092909190829003018186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d6020811015611ea357600080fd5b50516001145b15611f5257611eb987848761378d565b611f4d8887600061149188896001600160a01b0316636c25b3468a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d6020811015611f4457600080fd5b505189896144c4565b612033565b611f5d87308761378d565b836001600160a01b03166376088703838530306000611f8b8b676765c793fa10079d601b1b8e028c8c6144c4565b6040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561201a57600080fd5b505af115801561202e573d6000803e3d6000fd5b505050505b60408051637769706560e01b81528151908190036004018120600082526020820188905282518993919260008051602061469783398151915292908290030190a35050505050505050565b826001600160a01b031663b68f400483836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b60408051636090dec560e01b8152600481018490526001600160a01b0383811660248301529151600092861691636090dec591604480830192602092919082900301818787803b15801561213157600080fd5b505af1158015612145573d6000803e3d6000fd5b505050506040513d602081101561215b57600080fd5b5051949350505050565b60006121718483614445565b905061218b858461218184614260565b6000036000612a2c565b61219785843084611296565b6040805163ef693bed60e01b81523360048201526024810184905290516001600160a01b0386169163ef693bed91604480830192600092919082900301818387803b1580156121e557600080fd5b505af11580156121f9573d6000803e3d6000fd5b505060408051666672656547656d60c81b81528151908190036007018120868252600060208301528251889550909350600080516020614697833981519152929181900390910190a35050505050565b6000856001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03891691632726b073916024808301926020929190829003018186803b1580156122fd57600080fd5b505afa158015612311573d6000803e3d6000fd5b505050506040513d602081101561232757600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b15801561237657600080fd5b505afa15801561238a573d6000803e3d6000fd5b505050506040513d60208110156123a057600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b1580156123f457600080fd5b505afa158015612408573d6000803e3d6000fd5b505050506040513d604081101561241e57600080fd5b50602001519050612436878461102a87828088614093565b612450898761244488614260565b60000384600003612a2c565b61245c89873088611296565b6040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b50505050876001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156124fd57600080fd5b505af1158015612511573d6000803e3d6000fd5b505050506040513d602081101561252757600080fd5b505160408051632e1a7d4d60e01b81526004810188905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561257357600080fd5b505af1158015612587573d6000803e3d6000fd5b505060405133925087156108fc02915087906000818181858888f193505050501580156125b8573d6000803e3d6000fd5b5060408051700eed2e0ca82d8d882dcc88ce4caca8aa89607b1b815281519081900360110181208782526020820184905282518993919260008051602061469783398151915292908290030190a3505050505050505050565b61261f848361218184614260565b61262b84833084611296565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561267957600080fd5b505af115801561268d573d6000803e3d6000fd5b50505050826001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156126cc57600080fd5b505af11580156126e0573d6000803e3d6000fd5b505050506040513d60208110156126f657600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561274257600080fd5b505af1158015612756573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f19350505050158015612787573d6000803e3d6000fd5b5060408051660cce4caca8aa8960cb1b815281519081900360070181208382526000602083015282518593919260008051602061469783398151915292908290030190a350505050565b826001600160a01b031663e50322a283836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b80156129cc57836001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506040513d602081101561288a57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b50505050836001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b505050506040513d602081101561295f57600080fd5b50516040805163095ea7b360e01b81526001600160a01b038781166004830152602482018690529151919092169163095ea7b391604480830192600092919082900301818387803b1580156129b357600080fd5b505af11580156129c7573d6000803e3d6000fd5b505050505b836001600160a01b0316633b4da69f84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112ef57600080fd5b836001600160a01b03166345e6bdcd8484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b1580156112ef57600080fd5b6000856001600160a01b0316632726b073846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612ac857600080fd5b505afa158015612adc573d6000803e3d6000fd5b505050506040513d6020811015612af257600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038916916336569e77916004808301926020929190829003018186803b158015612b3a57600080fd5b505afa158015612b4e573d6000803e3d6000fd5b505050506040513d6020811015612b6457600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b158015612bb357600080fd5b505afa158015612bc7573d6000803e3d6000fd5b505050506040513d6020811015612bdd57600080fd5b50519050612bf588866000611491868c89888c6142ab565b612c048886306114a588614428565b60408051634538c4eb60e01b81523060048201526001600160a01b038881166024830152915191841691634538c4eb91604480820192602092909190829003018186803b158015612c5457600080fd5b505afa158015612c68573d6000803e3d6000fd5b505050506040513d6020811015612c7e57600080fd5b5051612cf557816001600160a01b031663a3b22fc4876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612cdc57600080fd5b505af1158015612cf0573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0388169163ef693bed91604480830192600092919082900301818387803b158015612d4357600080fd5b505af1158015612d57573d6000803e3d6000fd5b505060408051636472617760e01b81528151908190036004018120600082526020820189905282518a9550909350600080516020614697833981519152929181900390910190a35050505050505050565b816001600160a01b031663dc4d20fa826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e0057600080fd5b505af1158015612e14573d6000803e3d6000fd5b505050505050565b816001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612e5757600080fd5b505af1158015612e6b573d6000803e3d6000fd5b505050506040513d6020811015612e8157600080fd5b505160408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b158015612ec757600080fd5b505af1158015612edb573d6000803e3d6000fd5b5050505050816001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050506040513d6020811015612f4557600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301523460248301529151919092169163095ea7b391604480830192600092919082900301818387803b158015612f9857600080fd5b505af1158015612fac573d6000803e3d6000fd5b505060408051633b4da69f60e01b81526001600160a01b03858116600483015234602483015291519186169350633b4da69f925060448082019260009290919082900301818387803b158015612e0057600080fd5b6000866001600160a01b0316632726b073856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561304757600080fd5b505afa15801561305b573d6000803e3d6000fd5b505050506040513d602081101561307157600080fd5b5051905061308085828461378d565b600061308c8785614445565b9050613276888661309c84614260565b6000036114918c6001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b1580156130db57600080fd5b505afa1580156130ef573d6000803e3d6000fd5b505050506040513d602081101561310557600080fd5b81019080805190602001909291905050508d6001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561314f57600080fd5b505afa158015613163573d6000803e3d6000fd5b505050506040513d602081101561317957600080fd5b505160408051633612d9a360e11b81526001600160a01b038b8116600483015291519190921691636c25b346916024808301926020929190829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d60208110156131ef57600080fd5b8101908080519060200190929190505050888f6001600160a01b0316632c2cb9fd8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561324557600080fd5b505afa158015613259573d6000803e3d6000fd5b505050506040513d602081101561326f57600080fd5b50516144c4565b61328288863084611296565b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b1580156132d057600080fd5b505af11580156132e4573d6000803e3d6000fd5b505050505050505050505050565b816001600160a01b031663a3b22fc4826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e0057600080fd5b604080516305b1fdb160e11b8152600481018590526001600160a01b03848116602483015260448201849052915191861691630b63fb629160648082019260009290919082900301818387803b1580156112ef57600080fd5b604080516379b80ed160e11b8152336004820152905160009182916001600160a01b0385169163f3701da291602480830192602092919082900301818787803b1580156133ef57600080fd5b505af1158015613403573d6000803e3d6000fd5b505050506040513d602081101561341957600080fd5b50519050600061342f8c8c8c8c8c8c8c8c613c90565b905061343c8c828461160c565b9b9a5050505050505050505050565b6000856001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561348657600080fd5b505afa15801561349a573d6000803e3d6000fd5b505050506040513d60208110156134b057600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03891691632726b073916024808301926020929190829003018186803b1580156134ff57600080fd5b505afa158015613513573d6000803e3d6000fd5b505050506040513d602081101561352957600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b15801561357857600080fd5b505afa15801561358c573d6000803e3d6000fd5b505050506040513d60208110156135a257600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b1580156135f657600080fd5b505afa15801561360a573d6000803e3d6000fd5b505050506040513d604081101561362057600080fd5b50602001519050613638878461102a87828088614093565b60006136448987614445565b90506136608a8861365484614260565b60000385600003612a2c565b61366c8a883084611296565b6040805163ef693bed60e01b81523360048201526024810188905290516001600160a01b038b169163ef693bed91604480830192600092919082900301818387803b1580156136ba57600080fd5b505af11580156136ce573d6000803e3d6000fd5b5050604080517077697065416c6c416e644672656547656d60781b815281519081900360110181208a82526020820187905282518c9550909350600080516020614697833981519152929181900390910190a350505050505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b826001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156137c857600080fd5b505af11580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50505050826001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561389d57600080fd5b505af11580156138b1573d6000803e3d6000fd5b505050506040513d60208110156138c757600080fd5b50516040805163095ea7b360e01b81526001600160a01b038681166004830152602482018590529151919092169163095ea7b391604480830192600092919082900301818387803b15801561391b57600080fd5b505af115801561392f573d6000803e3d6000fd5b50505050826001600160a01b0316633b4da69f83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b6000886001600160a01b0316632726b073866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156139d957600080fd5b505afa1580156139ed573d6000803e3d6000fd5b505050506040513d6020811015613a0357600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038c16916336569e77916004808301926020929190829003018186803b158015613a4b57600080fd5b505afa158015613a5f573d6000803e3d6000fd5b505050506040513d6020811015613a7557600080fd5b505160408051632c2cb9fd60e01b81526004810189905290519192506000916001600160a01b038d1691632c2cb9fd916024808301926020929190829003018186803b158015613ac457600080fd5b505afa158015613ad8573d6000803e3d6000fd5b505050506040513d6020811015613aee57600080fd5b50519050613afe8984888761281f565b613b1d8b88613b106118968d8b614445565b611491868f89888d6142ab565b613b2c8b88306114a589614428565b60408051634538c4eb60e01b81523060048201526001600160a01b038a81166024830152915191841691634538c4eb91604480820192602092909190829003018186803b158015613b7c57600080fd5b505afa158015613b90573d6000803e3d6000fd5b505050506040513d6020811015613ba657600080fd5b5051613c1d57816001600160a01b031663a3b22fc4896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015613c0457600080fd5b505af1158015613c18573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b158015613c6b57600080fd5b505af1158015613c7f573d6000803e3d6000fd5b505050505050505050505050505050565b6000613c9d8986306120de565b9050613caf8989898985898989613993565b60408051716f70656e4c6f636b47656d416e644472617760701b815281519081900360120181208682526020820186905282518493919260008051602061469783398151915292908290030190a398975050505050505050565b613d138230612e1c565b826001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4c57600080fd5b505afa158015613d60573d6000803e3d6000fd5b505050506040513d6020811015613d7657600080fd5b505160408051632c2cb9fd60e01b81526004810184905290516001600160a01b039283169263760887039290871691632c2cb9fd91602480820192602092909190829003018186803b158015613dcb57600080fd5b505afa158015613ddf573d6000803e3d6000fd5b505050506040513d6020811015613df557600080fd5b505160408051632726b07360e01b81526004810186905290516001600160a01b03881691632726b073916024808301926020929190829003018186803b158015613e3e57600080fd5b505afa158015613e52573d6000803e3d6000fd5b505050506040513d6020811015613e6857600080fd5b50513080613e7534614260565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b158015613edf57600080fd5b505af1158015613ef3573d6000803e3d6000fd5b505060408051660d8dec6d68aa8960cb1b81528151908190036007018120348252600060208301528251869550909350600080516020614697833981519152929181900390910190a3505050565b6000613f4e8784306120de565b9050613f5e87878787858761130d565b60408051716f70656e4c6f636b455448416e644472617760701b815281519081900360120181203482526020820185905282518493919260008051602061469783398151915292908290030190a39695505050505050565b826001600160a01b0316637e348b7d83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b60408051631060930d60e01b815230600482015290516000916001600160a01b03841691631060930d9160248082019260209290919082900301818787803b15801561406157600080fd5b505af1158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505192915050565b600080856001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b1580156140da57600080fd5b505afa1580156140ee573d6000803e3d6000fd5b505050506040513d60a081101561410457600080fd5b5060200151604080516309092f9760e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692632424be5c9260448082019391829003018186803b15801561415b57600080fd5b505afa15801561416f573d6000803e3d6000fd5b505050506040513d604081101561418557600080fd5b5060209081015160408051633612d9a360e11b81526001600160a01b038a811660048301529151929450600093918b1692636c25b34692602480840193919291829003018186803b1580156141d957600080fd5b505afa1580156141ed573d6000803e3d6000fd5b505050506040513d602081101561420357600080fd5b50519050600061421c61421684866145f4565b8361464f565b9050676765c793fa10079d601b1b810494508061424486676765c793fa10079d601b1b6145f4565b1061424f5784610d1a565b846001019998505050505050505050565b8060008112156142a6576040805162461bcd60e51b815260206004820152600c60248201526b696e742d6f766572666c6f7760a01b604482015290519081900360640190fd5b919050565b600080856001600160a01b03166344e2a5a8856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156142f457600080fd5b505af1158015614308573d6000803e3d6000fd5b505050506040513d602081101561431e57600080fd5b505160408051633612d9a360e11b81526001600160a01b0388811660048301529151929350600092918a1691636c25b34691602480820192602092909190829003018186803b15801561437057600080fd5b505afa158015614384573d6000803e3d6000fd5b505050506040513d602081101561439a57600080fd5b505190506143b384676765c793fa10079d601b1b6145f4565b81101561441d576143e9826143dc6143d687676765c793fa10079d601b1b6145f4565b8461464f565b816143e357fe5b04614260565b925061440084676765c793fa10079d601b1b6145f4565b61440a84846145f4565b10614415578261441a565b826001015b92505b505095945050505050565b600061443f82676765c793fa10079d601b1b6145f4565b92915050565b60006144bd82846001600160a01b031663b3bcfa826040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561448657600080fd5b505af115801561449a573d6000803e3d6000fd5b505050506040513d60208110156144b057600080fd5b5051601203600a0a6145f4565b9392505050565b600080856001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561450b57600080fd5b505afa15801561451f573d6000803e3d6000fd5b505050506040513d60a081101561453557600080fd5b5060200151604080516309092f9760e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692632424be5c9260448082019391829003018186803b15801561458c57600080fd5b505afa1580156145a0573d6000803e3d6000fd5b505050506040513d60408110156145b657600080fd5b506020015190506145c98287816143e357fe5b9250808311156145e4576145dc81614260565b6000036145e9565b826000035b979650505050505050565b600081158061460f5750508082028282828161460c57fe5b04145b61443f576040805162461bcd60e51b815260206004820152600c60248201526b6d756c2d6f766572666c6f7760a01b604482015290519081900360640190fd5b8082038281111561443f576040805162461bcd60e51b815260206004820152600c60248201526b7375622d6f766572666c6f7760a01b604482015290519081900360640190fdfee4275ad86602c8a988ebb068f79af14314fce39b7863b231e4883d5726b61c55a265627a7a723158202d0ccb74b75d9cf3ce7a19b9378fc12c02deca8ee34a456f08dd7bf28fdaa75f64736f6c634300050c0032

Deployed ByteCode

0x60806040526004361061020f5760003560e01c80637df2eb2511610118578063bcd6deec116100a0578063db802a321161006f578063db802a3214610b07578063e205c10814610b6f578063e685cc0414610ba5578063eb0b9a8514610bf1578063fba7591d14610c345761020f565b8063bcd6deec146109ca578063beabacc814610a19578063c56167c614610a5c578063cbd4be3f14610a9f5761020f565b8063a033df12116100e7578063a033df1214610854578063a6add01114610882578063b50a5869146108d7578063ba727a9514610912578063bae45f01146109595761020f565b80637df2eb251461073a57806396e8d72c146107855780639f6f3d5b146107ca5780639f887fde146108195761020f565b80634592aca71161019b5780636aa3ee111161016a5780636aa3ee11146105d75780636ab6a4911461061a5780636d68b70b146106635780637b5a3b43146106b25780637bc3bd53146106fb5761020f565b80634592aca7146104bf578063493c2049146105025780634b6661991461054b5780635f6ef447146105945761020f565b80631c02d846116101e25780631c02d8461461034f5780631d10f2311461039b57806325cf37d0146103de5780633e29e5651461042557806342dd11bb146104765761020f565b8063021c56c714610214578063036a23951461027a57806308f00e34146102bf5780631558b04814610308575b600080fd5b610268600480360360e081101561022a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c09091013516610c83565b60408051918252519081900360200190f35b34801561028657600080fd5b506102bd6004803603606081101561029d57600080fd5b506001600160a01b03813581169160208101359091169060400135610d27565b005b3480156102cb57600080fd5b506102bd600480360360808110156102e257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611127565b34801561031457600080fd5b506102bd6004803603608081101561032b57600080fd5b506001600160a01b0381358116916020810135916040820135169060600135611296565b6102bd600480360360c081101561036557600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561130d565b3480156103a757600080fd5b506102bd600480360360608110156103be57600080fd5b506001600160a01b0381358116916020810135916040909101351661160c565b3480156103ea57600080fd5b506102bd6004803603608081101561040157600080fd5b506001600160a01b03813581169160208101359160408201351690606001356116cb565b34801561043157600080fd5b506102bd600480360360a081101561044857600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001351515611724565b34801561048257600080fd5b506102bd6004803603608081101561049957600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611969565b3480156104cb57600080fd5b506102bd600480360360608110156104e257600080fd5b506001600160a01b038135811691602081013591604090910135166119cc565b34801561050e57600080fd5b506102bd6004803603608081101561052557600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516611a49565b34801561055757600080fd5b506102bd6004803603608081101561056e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611c3c565b3480156105a057600080fd5b506102bd600480360360608110156105b757600080fd5b506001600160a01b0381358116916020810135909116906040013561207e565b3480156105e357600080fd5b50610268600480360360608110156105fa57600080fd5b506001600160a01b038135811691602081013591604090910135166120de565b34801561062657600080fd5b506102bd6004803603608081101561063d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612165565b34801561066f57600080fd5b506102bd600480360360a081101561068657600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612249565b3480156106be57600080fd5b506102bd600480360360808110156106d557600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612611565b34801561070757600080fd5b506102bd6004803603606081101561071e57600080fd5b506001600160a01b0381351690602081013590604001356127d1565b34801561074657600080fd5b506102bd6004803603608081101561075d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135151561281f565b34801561079157600080fd5b506102bd600480360360808110156107a857600080fd5b506001600160a01b038135169060208101359060408101359060600135612a2c565b3480156107d657600080fd5b506102bd600480360360a08110156107ed57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612a82565b34801561082557600080fd5b506102bd6004803603604081101561083c57600080fd5b506001600160a01b0381358116916020013516612da8565b6102bd6004803603604081101561086a57600080fd5b506001600160a01b0381358116916020013516612e1c565b34801561088e57600080fd5b506102bd600480360360c08110156108a557600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135613001565b3480156108e357600080fd5b506102bd600480360360408110156108fa57600080fd5b506001600160a01b03813581169160200135166132f2565b34801561091e57600080fd5b506102bd6004803603608081101561093557600080fd5b506001600160a01b038135811691602081013591604082013516906060013561334a565b34801561096557600080fd5b50610268600480360361012081101561097d57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e081013515159161010090910135166133a3565b3480156109d657600080fd5b506102bd600480360360a08110156109ed57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060810135906080013561344b565b348015610a2557600080fd5b506102bd60048036036060811015610a3c57600080fd5b506001600160a01b0381358116916020810135909116906040013561372d565b348015610a6857600080fd5b506102bd60048036036060811015610a7f57600080fd5b506001600160a01b0381358116916020810135909116906040013561378d565b348015610aab57600080fd5b506102bd6004803603610100811015610ac357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613993565b348015610b1357600080fd5b506102686004803603610100811015610b2b57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613c90565b6102bd60048036036060811015610b8557600080fd5b506001600160a01b03813581169160208101359091169060400135613d09565b610268600480360360c0811015610bbb57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a00135613f41565b348015610bfd57600080fd5b506102bd60048036036060811015610c1457600080fd5b506001600160a01b03813581169160208101359091169060400135613fb6565b348015610c4057600080fd5b50610c6760048036036020811015610c5757600080fd5b50356001600160a01b0316614016565b604080516001600160a01b039092168252519081900360200190f35b604080516379b80ed160e11b8152336004820152905160009182916001600160a01b0385169163f3701da291602480830192602092919082900301818787803b158015610ccf57600080fd5b505af1158015610ce3573d6000803e3d6000fd5b505050506040513d6020811015610cf957600080fd5b505190506000610d0d8a8a8a8a8a8a613f41565b9050610d1a8a828461160c565b9998505050505050505050565b6000836001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d6020811015610d8c57600080fd5b505160408051632726b07360e01b81526004810185905290519192506000916001600160a01b03871691632726b073916024808301926020929190829003018186803b158015610ddb57600080fd5b505afa158015610def573d6000803e3d6000fd5b505050506040513d6020811015610e0557600080fd5b505160408051632c2cb9fd60e01b81526004810186905290519192506000916001600160a01b03881691632c2cb9fd916024808301926020929190829003018186803b158015610e5457600080fd5b505afa158015610e68573d6000803e3d6000fd5b505050506040513d6020811015610e7e57600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d6040811015610efc57600080fd5b506020908101516040805163040b0d8960e51b81526004810189905290519193506000926001600160a01b038b1692638161b120926024808201939291829003018186803b158015610f4d57600080fd5b505afa158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b505190506001600160a01b0381163014806110145750604080516302d75da360e51b81526001600160a01b038381166004830152602482018990523060448301529151918a1691635aebb46091606480820192602092909190829003018186803b158015610fe457600080fd5b505afa158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b50516001145b156110445761102f878561102a88888989614093565b61378d565b61103f8887600085600003612a2c565b6110d9565b611055873061102a88308989614093565b60408051637608870360e01b8152600481018590526001600160a01b0386811660248301523060448301819052606483015260006084830181905285810360a484015292519088169263760887039260c4808201939182900301818387803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050505b60408051661dda5c19505b1b60ca1b81528151908190036007018120600082526020820185905282518993919260008051602061469783398151915292908290030190a35050505050505050565b61113384833084611296565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561118157600080fd5b505af1158015611195573d6000803e3d6000fd5b50505050826001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d60208110156111fe57600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f1935050505015801561128f573d6000803e3d6000fd5b5050505050565b604080516313771f0760e31b8152600481018590526001600160a01b03848116602483015260448201849052915191861691639bb8f8389160648082019260009290919082900301818387803b1580156112ef57600080fd5b505af1158015611303573d6000803e3d6000fd5b5050505050505050565b6000866001600160a01b0316632726b073846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561135357600080fd5b505afa158015611367573d6000803e3d6000fd5b505050506040513d602081101561137d57600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038a16916336569e77916004808301926020929190829003018186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d60208110156113ef57600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038b1691632c2cb9fd916024808301926020929190829003018186803b15801561143e57600080fd5b505afa158015611452573d6000803e3d6000fd5b505050506040513d602081101561146857600080fd5b505190506114768784612e1c565b611496898661148434614260565b611491868d89888c6142ab565b612a2c565b6114aa8986306114a588614428565b6116cb565b60408051634538c4eb60e01b81523060048201526001600160a01b038881166024830152915191841691634538c4eb91604480820192602092909190829003018186803b1580156114fa57600080fd5b505afa15801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b505161159b57816001600160a01b031663a3b22fc4876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0388169163ef693bed91604480830192600092919082900301818387803b1580156115e957600080fd5b505af11580156115fd573d6000803e3d6000fd5b50505050505050505050505050565b826001600160a01b031663fcafcc6883836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505060408051636769766560e01b81528151908190036004018120600080835260208301528251879550909350600080516020614697833981519152929181900390910190a3505050565b60408051637cf986db60e11b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163f9f30db69160648082019260009290919082900301818387803b1580156112ef57600080fd5b6117308430848461281f565b846001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b505050506040513d602081101561179357600080fd5b505160408051632c2cb9fd60e01b81526004810186905290516001600160a01b039283169263760887039290891691632c2cb9fd91602480820192602092909190829003018186803b1580156117e857600080fd5b505afa1580156117fc573d6000803e3d6000fd5b505050506040513d602081101561181257600080fd5b505160408051632726b07360e01b81526004810188905290516001600160a01b038a1691632726b073916024808301926020929190829003018186803b15801561185b57600080fd5b505afa15801561186f573d6000803e3d6000fd5b505050506040513d602081101561188557600080fd5b5051308061189b6118968b8a614445565b614260565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561190557600080fd5b505af1158015611919573d6000803e3d6000fd5b505060408051666c6f636b47656d60c81b81528151908190036007018120868252600060208301528251889550909350600080516020614697833981519152929181900390910190a35050505050565b61197e8483306119798786614445565b611296565b6040805163ef693bed60e01b81523360048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b1580156112ef57600080fd5b826001600160a01b0316631b0dbf7283836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b50505050505050565b6000846001600160a01b031663c4552791836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611aa157600080fd5b505afa158015611ab5573d6000803e3d6000fd5b505050506040513d6020811015611acb57600080fd5b505190506001600160a01b0381161580611b5b5750816001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2357600080fd5b505afa158015611b37573d6000803e3d6000fd5b505050506040513d6020811015611b4d57600080fd5b50516001600160a01b031614155b15611c3157813b8015611ba9576040805162461bcd60e51b8152602060048201526011602482015270111cdd0b5a5ccb584b58dbdb9d1c9858dd607a1b604482015290519081900360640190fd5b856001600160a01b031663f3701da2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b505050506040513d6020811015611c2b57600080fd5b50519150505b61128f84848361160c565b6000846001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7757600080fd5b505afa158015611c8b573d6000803e3d6000fd5b505050506040513d6020811015611ca157600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03881691632726b073916024808301926020929190829003018186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d6020811015611d1a57600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b03891691632c2cb9fd916024808301926020929190829003018186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d6020811015611d9357600080fd5b50516040805163040b0d8960e51b81526004810188905290519192506000916001600160a01b038a1691638161b120916024808301926020929190829003018186803b158015611de257600080fd5b505afa158015611df6573d6000803e3d6000fd5b505050506040513d6020811015611e0c57600080fd5b505190506001600160a01b038116301480611ea95750604080516302d75da360e51b81526001600160a01b038381166004830152602482018990523060448301529151918a1691635aebb46091606480820192602092909190829003018186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d6020811015611ea357600080fd5b50516001145b15611f5257611eb987848761378d565b611f4d8887600061149188896001600160a01b0316636c25b3468a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d6020811015611f4457600080fd5b505189896144c4565b612033565b611f5d87308761378d565b836001600160a01b03166376088703838530306000611f8b8b676765c793fa10079d601b1b8e028c8c6144c4565b6040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018281526020019650505050505050600060405180830381600087803b15801561201a57600080fd5b505af115801561202e573d6000803e3d6000fd5b505050505b60408051637769706560e01b81528151908190036004018120600082526020820188905282518993919260008051602061469783398151915292908290030190a35050505050505050565b826001600160a01b031663b68f400483836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b60408051636090dec560e01b8152600481018490526001600160a01b0383811660248301529151600092861691636090dec591604480830192602092919082900301818787803b15801561213157600080fd5b505af1158015612145573d6000803e3d6000fd5b505050506040513d602081101561215b57600080fd5b5051949350505050565b60006121718483614445565b905061218b858461218184614260565b6000036000612a2c565b61219785843084611296565b6040805163ef693bed60e01b81523360048201526024810184905290516001600160a01b0386169163ef693bed91604480830192600092919082900301818387803b1580156121e557600080fd5b505af11580156121f9573d6000803e3d6000fd5b505060408051666672656547656d60c81b81528151908190036007018120868252600060208301528251889550909350600080516020614697833981519152929181900390910190a35050505050565b6000856001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561228457600080fd5b505afa158015612298573d6000803e3d6000fd5b505050506040513d60208110156122ae57600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03891691632726b073916024808301926020929190829003018186803b1580156122fd57600080fd5b505afa158015612311573d6000803e3d6000fd5b505050506040513d602081101561232757600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b15801561237657600080fd5b505afa15801561238a573d6000803e3d6000fd5b505050506040513d60208110156123a057600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b1580156123f457600080fd5b505afa158015612408573d6000803e3d6000fd5b505050506040513d604081101561241e57600080fd5b50602001519050612436878461102a87828088614093565b612450898761244488614260565b60000384600003612a2c565b61245c89873088611296565b6040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b50505050876001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156124fd57600080fd5b505af1158015612511573d6000803e3d6000fd5b505050506040513d602081101561252757600080fd5b505160408051632e1a7d4d60e01b81526004810188905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561257357600080fd5b505af1158015612587573d6000803e3d6000fd5b505060405133925087156108fc02915087906000818181858888f193505050501580156125b8573d6000803e3d6000fd5b5060408051700eed2e0ca82d8d882dcc88ce4caca8aa89607b1b815281519081900360110181208782526020820184905282518993919260008051602061469783398151915292908290030190a3505050505050505050565b61261f848361218184614260565b61262b84833084611296565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561267957600080fd5b505af115801561268d573d6000803e3d6000fd5b50505050826001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156126cc57600080fd5b505af11580156126e0573d6000803e3d6000fd5b505050506040513d60208110156126f657600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561274257600080fd5b505af1158015612756573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f19350505050158015612787573d6000803e3d6000fd5b5060408051660cce4caca8aa8960cb1b815281519081900360070181208382526000602083015282518593919260008051602061469783398151915292908290030190a350505050565b826001600160a01b031663e50322a283836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b80156129cc57836001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506040513d602081101561288a57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b1580156128e257600080fd5b505af11580156128f6573d6000803e3d6000fd5b50505050836001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561293557600080fd5b505af1158015612949573d6000803e3d6000fd5b505050506040513d602081101561295f57600080fd5b50516040805163095ea7b360e01b81526001600160a01b038781166004830152602482018690529151919092169163095ea7b391604480830192600092919082900301818387803b1580156129b357600080fd5b505af11580156129c7573d6000803e3d6000fd5b505050505b836001600160a01b0316633b4da69f84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156112ef57600080fd5b836001600160a01b03166345e6bdcd8484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b1580156112ef57600080fd5b6000856001600160a01b0316632726b073846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612ac857600080fd5b505afa158015612adc573d6000803e3d6000fd5b505050506040513d6020811015612af257600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038916916336569e77916004808301926020929190829003018186803b158015612b3a57600080fd5b505afa158015612b4e573d6000803e3d6000fd5b505050506040513d6020811015612b6457600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b158015612bb357600080fd5b505afa158015612bc7573d6000803e3d6000fd5b505050506040513d6020811015612bdd57600080fd5b50519050612bf588866000611491868c89888c6142ab565b612c048886306114a588614428565b60408051634538c4eb60e01b81523060048201526001600160a01b038881166024830152915191841691634538c4eb91604480820192602092909190829003018186803b158015612c5457600080fd5b505afa158015612c68573d6000803e3d6000fd5b505050506040513d6020811015612c7e57600080fd5b5051612cf557816001600160a01b031663a3b22fc4876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612cdc57600080fd5b505af1158015612cf0573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0388169163ef693bed91604480830192600092919082900301818387803b158015612d4357600080fd5b505af1158015612d57573d6000803e3d6000fd5b505060408051636472617760e01b81528151908190036004018120600082526020820189905282518a9550909350600080516020614697833981519152929181900390910190a35050505050505050565b816001600160a01b031663dc4d20fa826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e0057600080fd5b505af1158015612e14573d6000803e3d6000fd5b505050505050565b816001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612e5757600080fd5b505af1158015612e6b573d6000803e3d6000fd5b505050506040513d6020811015612e8157600080fd5b505160408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0913491600480830192600092919082900301818588803b158015612ec757600080fd5b505af1158015612edb573d6000803e3d6000fd5b5050505050816001600160a01b0316637bd2bea76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612f1b57600080fd5b505af1158015612f2f573d6000803e3d6000fd5b505050506040513d6020811015612f4557600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301523460248301529151919092169163095ea7b391604480830192600092919082900301818387803b158015612f9857600080fd5b505af1158015612fac573d6000803e3d6000fd5b505060408051633b4da69f60e01b81526001600160a01b03858116600483015234602483015291519186169350633b4da69f925060448082019260009290919082900301818387803b158015612e0057600080fd5b6000866001600160a01b0316632726b073856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561304757600080fd5b505afa15801561305b573d6000803e3d6000fd5b505050506040513d602081101561307157600080fd5b5051905061308085828461378d565b600061308c8785614445565b9050613276888661309c84614260565b6000036114918c6001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b1580156130db57600080fd5b505afa1580156130ef573d6000803e3d6000fd5b505050506040513d602081101561310557600080fd5b81019080805190602001909291905050508d6001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561314f57600080fd5b505afa158015613163573d6000803e3d6000fd5b505050506040513d602081101561317957600080fd5b505160408051633612d9a360e11b81526001600160a01b038b8116600483015291519190921691636c25b346916024808301926020929190829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d60208110156131ef57600080fd5b8101908080519060200190929190505050888f6001600160a01b0316632c2cb9fd8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561324557600080fd5b505afa158015613259573d6000803e3d6000fd5b505050506040513d602081101561326f57600080fd5b50516144c4565b61328288863084611296565b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b1580156132d057600080fd5b505af11580156132e4573d6000803e3d6000fd5b505050505050505050505050565b816001600160a01b031663a3b22fc4826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e0057600080fd5b604080516305b1fdb160e11b8152600481018590526001600160a01b03848116602483015260448201849052915191861691630b63fb629160648082019260009290919082900301818387803b1580156112ef57600080fd5b604080516379b80ed160e11b8152336004820152905160009182916001600160a01b0385169163f3701da291602480830192602092919082900301818787803b1580156133ef57600080fd5b505af1158015613403573d6000803e3d6000fd5b505050506040513d602081101561341957600080fd5b50519050600061342f8c8c8c8c8c8c8c8c613c90565b905061343c8c828461160c565b9b9a5050505050505050505050565b6000856001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b15801561348657600080fd5b505afa15801561349a573d6000803e3d6000fd5b505050506040513d60208110156134b057600080fd5b505160408051632726b07360e01b81526004810186905290519192506000916001600160a01b03891691632726b073916024808301926020929190829003018186803b1580156134ff57600080fd5b505afa158015613513573d6000803e3d6000fd5b505050506040513d602081101561352957600080fd5b505160408051632c2cb9fd60e01b81526004810187905290519192506000916001600160a01b038a1691632c2cb9fd916024808301926020929190829003018186803b15801561357857600080fd5b505afa15801561358c573d6000803e3d6000fd5b505050506040513d60208110156135a257600080fd5b5051604080516309092f9760e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692632424be5c9260448082019391829003018186803b1580156135f657600080fd5b505afa15801561360a573d6000803e3d6000fd5b505050506040513d604081101561362057600080fd5b50602001519050613638878461102a87828088614093565b60006136448987614445565b90506136608a8861365484614260565b60000385600003612a2c565b61366c8a883084611296565b6040805163ef693bed60e01b81523360048201526024810188905290516001600160a01b038b169163ef693bed91604480830192600092919082900301818387803b1580156136ba57600080fd5b505af11580156136ce573d6000803e3d6000fd5b5050604080517077697065416c6c416e644672656547656d60781b815281519081900360110181208a82526020820187905282518c9550909350600080516020614697833981519152929181900390910190a350505050505050505050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b826001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156137c857600080fd5b505af11580156137dc573d6000803e3d6000fd5b505050506040513d60208110156137f257600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b15801561384a57600080fd5b505af115801561385e573d6000803e3d6000fd5b50505050826001600160a01b031663f4b9fa756040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561389d57600080fd5b505af11580156138b1573d6000803e3d6000fd5b505050506040513d60208110156138c757600080fd5b50516040805163095ea7b360e01b81526001600160a01b038681166004830152602482018590529151919092169163095ea7b391604480830192600092919082900301818387803b15801561391b57600080fd5b505af115801561392f573d6000803e3d6000fd5b50505050826001600160a01b0316633b4da69f83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b6000886001600160a01b0316632726b073866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156139d957600080fd5b505afa1580156139ed573d6000803e3d6000fd5b505050506040513d6020811015613a0357600080fd5b5051604080516336569e7760e01b815290519192506000916001600160a01b038c16916336569e77916004808301926020929190829003018186803b158015613a4b57600080fd5b505afa158015613a5f573d6000803e3d6000fd5b505050506040513d6020811015613a7557600080fd5b505160408051632c2cb9fd60e01b81526004810189905290519192506000916001600160a01b038d1691632c2cb9fd916024808301926020929190829003018186803b158015613ac457600080fd5b505afa158015613ad8573d6000803e3d6000fd5b505050506040513d6020811015613aee57600080fd5b50519050613afe8984888761281f565b613b1d8b88613b106118968d8b614445565b611491868f89888d6142ab565b613b2c8b88306114a589614428565b60408051634538c4eb60e01b81523060048201526001600160a01b038a81166024830152915191841691634538c4eb91604480820192602092909190829003018186803b158015613b7c57600080fd5b505afa158015613b90573d6000803e3d6000fd5b505050506040513d6020811015613ba657600080fd5b5051613c1d57816001600160a01b031663a3b22fc4896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015613c0457600080fd5b505af1158015613c18573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b158015613c6b57600080fd5b505af1158015613c7f573d6000803e3d6000fd5b505050505050505050505050505050565b6000613c9d8986306120de565b9050613caf8989898985898989613993565b60408051716f70656e4c6f636b47656d416e644472617760701b815281519081900360120181208682526020820186905282518493919260008051602061469783398151915292908290030190a398975050505050505050565b613d138230612e1c565b826001600160a01b03166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4c57600080fd5b505afa158015613d60573d6000803e3d6000fd5b505050506040513d6020811015613d7657600080fd5b505160408051632c2cb9fd60e01b81526004810184905290516001600160a01b039283169263760887039290871691632c2cb9fd91602480820192602092909190829003018186803b158015613dcb57600080fd5b505afa158015613ddf573d6000803e3d6000fd5b505050506040513d6020811015613df557600080fd5b505160408051632726b07360e01b81526004810186905290516001600160a01b03881691632726b073916024808301926020929190829003018186803b158015613e3e57600080fd5b505afa158015613e52573d6000803e3d6000fd5b505050506040513d6020811015613e6857600080fd5b50513080613e7534614260565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b158015613edf57600080fd5b505af1158015613ef3573d6000803e3d6000fd5b505060408051660d8dec6d68aa8960cb1b81528151908190036007018120348252600060208301528251869550909350600080516020614697833981519152929181900390910190a3505050565b6000613f4e8784306120de565b9050613f5e87878787858761130d565b60408051716f70656e4c6f636b455448416e644472617760701b815281519081900360120181203482526020820185905282518493919260008051602061469783398151915292908290030190a39695505050505050565b826001600160a01b0316637e348b7d83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611a2c57600080fd5b60408051631060930d60e01b815230600482015290516000916001600160a01b03841691631060930d9160248082019260209290919082900301818787803b15801561406157600080fd5b505af1158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505192915050565b600080856001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b1580156140da57600080fd5b505afa1580156140ee573d6000803e3d6000fd5b505050506040513d60a081101561410457600080fd5b5060200151604080516309092f9760e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692632424be5c9260448082019391829003018186803b15801561415b57600080fd5b505afa15801561416f573d6000803e3d6000fd5b505050506040513d604081101561418557600080fd5b5060209081015160408051633612d9a360e11b81526001600160a01b038a811660048301529151929450600093918b1692636c25b34692602480840193919291829003018186803b1580156141d957600080fd5b505afa1580156141ed573d6000803e3d6000fd5b505050506040513d602081101561420357600080fd5b50519050600061421c61421684866145f4565b8361464f565b9050676765c793fa10079d601b1b810494508061424486676765c793fa10079d601b1b6145f4565b1061424f5784610d1a565b846001019998505050505050505050565b8060008112156142a6576040805162461bcd60e51b815260206004820152600c60248201526b696e742d6f766572666c6f7760a01b604482015290519081900360640190fd5b919050565b600080856001600160a01b03166344e2a5a8856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156142f457600080fd5b505af1158015614308573d6000803e3d6000fd5b505050506040513d602081101561431e57600080fd5b505160408051633612d9a360e11b81526001600160a01b0388811660048301529151929350600092918a1691636c25b34691602480820192602092909190829003018186803b15801561437057600080fd5b505afa158015614384573d6000803e3d6000fd5b505050506040513d602081101561439a57600080fd5b505190506143b384676765c793fa10079d601b1b6145f4565b81101561441d576143e9826143dc6143d687676765c793fa10079d601b1b6145f4565b8461464f565b816143e357fe5b04614260565b925061440084676765c793fa10079d601b1b6145f4565b61440a84846145f4565b10614415578261441a565b826001015b92505b505095945050505050565b600061443f82676765c793fa10079d601b1b6145f4565b92915050565b60006144bd82846001600160a01b031663b3bcfa826040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561448657600080fd5b505af115801561449a573d6000803e3d6000fd5b505050506040513d60208110156144b057600080fd5b5051601203600a0a6145f4565b9392505050565b600080856001600160a01b031663d9638d36846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561450b57600080fd5b505afa15801561451f573d6000803e3d6000fd5b505050506040513d60a081101561453557600080fd5b5060200151604080516309092f9760e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692632424be5c9260448082019391829003018186803b15801561458c57600080fd5b505afa1580156145a0573d6000803e3d6000fd5b505050506040513d60408110156145b657600080fd5b506020015190506145c98287816143e357fe5b9250808311156145e4576145dc81614260565b6000036145e9565b826000035b979650505050505050565b600081158061460f5750508082028282828161460c57fe5b04145b61443f576040805162461bcd60e51b815260206004820152600c60248201526b6d756c2d6f766572666c6f7760a01b604482015290519081900360640190fd5b8082038281111561443f576040805162461bcd60e51b815260206004820152600c60248201526b7375622d6f766572666c6f7760a01b604482015290519081900360640190fdfee4275ad86602c8a988ebb068f79af14314fce39b7863b231e4883d5726b61c55a265627a7a723158202d0ccb74b75d9cf3ce7a19b9378fc12c02deca8ee34a456f08dd7bf28fdaa75f64736f6c634300050c0032