ETH Price: $2,004.50 (+1.06%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
To Pie111902612020-11-04 10:57:201599 days ago1604487440IN
0xca9aF520...5a0e6bB0E
16.49661597 ETH0.0458762127
To Pie111896262020-11-04 8:34:141599 days ago1604478854IN
0xca9aF520...5a0e6bB0E
12.80848807 ETH0.0357696921
To Pie111894632020-11-04 7:59:561599 days ago1604476796IN
0xca9aF520...5a0e6bB0E
9.42828645 ETH0.0256044420
To Pie111870162020-11-03 22:56:451600 days ago1604444205IN
0xca9aF520...5a0e6bB0E
9.54996732 ETH0.0308835122.1
To Pie111853002020-11-03 16:42:111600 days ago1604421731IN
0xca9aF520...5a0e6bB0E
25.91090286 ETH0.0681327640
To Pie111816672020-11-03 3:02:221601 days ago1604372542IN
0xca9aF520...5a0e6bB0E
18.50178102 ETH0.054506232
To Pie111781712020-11-02 14:20:391601 days ago1604326839IN
0xca9aF520...5a0e6bB0E
28.60271064 ETH0.0681327640
To Pie111754942020-11-02 4:34:031602 days ago1604291643IN
0xca9aF520...5a0e6bB0E
10.93179347 ETH0.0323805525
To Pie111731122020-11-01 19:34:141602 days ago1604259254IN
0xca9aF520...5a0e6bB0E
67.89854577 ETH0.0340663820
To Pie111726002020-11-01 17:40:511602 days ago1604252451IN
0xca9aF520...5a0e6bB0E
65.68313368 ETH0.0194285115
To Pie111725652020-11-01 17:34:441602 days ago1604252084IN
0xca9aF520...5a0e6bB0E
67.95962502 ETH0.0360846921
To Pie111718192020-11-01 14:46:491602 days ago1604242009IN
0xca9aF520...5a0e6bB0E
14.67254543 ETH0.0306597418
To Pie111712722020-11-01 12:46:141602 days ago1604234774IN
0xca9aF520...5a0e6bB0E
10.00872515 ETH0.0194283315
To Pie111700962020-11-01 8:35:291602 days ago1604219729IN
0xca9aF520...5a0e6bB0E
14.78411972 ETH0.0287521517
To Pie111684692020-11-01 2:25:441603 days ago1604197544IN
0xca9aF520...5a0e6bB0E
13.91630363 ETH0.0289564217
To Pie111670402020-10-31 21:16:201603 days ago1604178980IN
0xca9aF520...5a0e6bB0E
13.97248618 ETH0.027253116
To Pie111644022020-10-31 11:38:181603 days ago1604144298IN
0xca9aF520...5a0e6bB0E
15.21039453 ETH0.0374730122
To Pie111638442020-10-31 9:37:271603 days ago1604137047IN
0xca9aF520...5a0e6bB0E
12.02864815 ETH0.0320055525
To Pie111597672020-10-30 18:28:171604 days ago1604082497IN
0xca9aF520...5a0e6bB0E
0.67593776 ETH0.0457454227
To Pie111597212020-10-30 18:17:111604 days ago1604081831IN
0xca9aF520...5a0e6bB0E
0.6754606 ETH0.0581754627
To Pie111596912020-10-30 18:10:221604 days ago1604081422IN
0xca9aF520...5a0e6bB0E
0.67563274 ETH0.0444164420
To Pie111588432020-10-30 15:05:471604 days ago1604070347IN
0xca9aF520...5a0e6bB0E
2.22061554 ETH0.0794906747
To Pie111574652020-10-30 9:54:561604 days ago1604051696IN
0xca9aF520...5a0e6bB0E
15.53090622 ETH0.0841894365
To Pie111565182020-10-30 6:27:231605 days ago1604039243IN
0xca9aF520...5a0e6bB0E
12.73517096 ETH0.053104141
To Pie111563142020-10-30 5:38:461605 days ago1604036326IN
0xca9aF520...5a0e6bB0E
40.52544907 ETH0.0518093640
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-128913262021-07-24 21:00:101337 days ago1627160410
0xca9aF520...5a0e6bB0E
0.07775978 ETH
-128913262021-07-24 21:00:101337 days ago1627160410
0xca9aF520...5a0e6bB0E
1.55519539 ETH
-128913262021-07-24 21:00:101337 days ago1627160410
0xca9aF520...5a0e6bB0E
1.63295518 ETH
-128716422021-07-21 19:23:311340 days ago1626895411
0xca9aF520...5a0e6bB0E
0.09131279 ETH
-128716422021-07-21 19:23:311340 days ago1626895411
0xca9aF520...5a0e6bB0E
1.82625582 ETH
-128716422021-07-21 19:23:311340 days ago1626895411
0xca9aF520...5a0e6bB0E
1.91756861 ETH
-128700872021-07-21 13:33:351340 days ago1626874415
0xca9aF520...5a0e6bB0E
0.09182574 ETH
-128700872021-07-21 13:33:351340 days ago1626874415
0xca9aF520...5a0e6bB0E
1.83651069 ETH
-128700872021-07-21 13:33:351340 days ago1626874415
0xca9aF520...5a0e6bB0E
1.92833644 ETH
-128629322021-07-20 10:41:051341 days ago1626777665
0xca9aF520...5a0e6bB0E
0.09221173 ETH
-128629322021-07-20 10:41:051341 days ago1626777665
0xca9aF520...5a0e6bB0E
1.844234 ETH
-128629322021-07-20 10:41:051341 days ago1626777665
0xca9aF520...5a0e6bB0E
1.93644573 ETH
-128178542021-07-13 8:58:041348 days ago1626166684
0xca9aF520...5a0e6bB0E
0.10992445 ETH
-128178542021-07-13 8:58:041348 days ago1626166684
0xca9aF520...5a0e6bB0E
2.19848795 ETH
-128178542021-07-13 8:58:041348 days ago1626166684
0xca9aF520...5a0e6bB0E
2.3084124 ETH
-127707072021-07-06 0:24:231356 days ago1625531063
0xca9aF520...5a0e6bB0E
0.05599197 ETH
-127707072021-07-06 0:24:231356 days ago1625531063
0xca9aF520...5a0e6bB0E
1.11983914 ETH
-127707072021-07-06 0:24:231356 days ago1625531063
0xca9aF520...5a0e6bB0E
1.17583111 ETH
-127705892021-07-05 23:59:501356 days ago1625529590
0xca9aF520...5a0e6bB0E
0.12447314 ETH
-127705892021-07-05 23:59:501356 days ago1625529590
0xca9aF520...5a0e6bB0E
2.48946228 ETH
-127705892021-07-05 23:59:501356 days ago1625529590
0xca9aF520...5a0e6bB0E
2.61393543 ETH
-127695052021-07-05 19:50:501356 days ago1625514650
0xca9aF520...5a0e6bB0E
0.06909535 ETH
-127695052021-07-05 19:50:501356 days ago1625514650
0xca9aF520...5a0e6bB0E
1.3951012 ETH
-127695052021-07-05 19:50:501356 days ago1625514650
0xca9aF520...5a0e6bB0E
1.46419656 ETH
-127512642021-07-02 23:52:501359 days ago1625269970
0xca9aF520...5a0e6bB0E
0.0686896 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Recipe

Compiler Version
v0.6.4+commit.1dca32f3

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-28
*/

pragma solidity ^0.6.4;

interface IERC20 {
    event Approval(address indexed _src, address indexed _dst, uint _amount);
    event Transfer(address indexed _src, address indexed _dst, uint _amount);

    function totalSupply() external view returns (uint);
    function balanceOf(address _whom) external view returns (uint);
    function allowance(address _src, address _dst) external view returns (uint);

    function approve(address _dst, uint _amount) external returns (bool);
    function transfer(address _dst, uint _amount) external returns (bool);
    function transferFrom(
        address _src, address _dst, uint _amount
    ) external returns (bool);
}
// File: localhost/contracts/interfaces/IWETH.sol

// File: @emilianobonassi/gas-saver/ChiGasSaver.sol

pragma solidity ^0.6.0;

interface IFreeFromUpTo {
    function freeFromUpTo(address from, uint256 value) external returns(uint256 freed);
}

contract ChiGasSaver {

    modifier saveGas(address payable sponsor) {
        uint256 gasStart = gasleft();
        _;
        uint256 gasSpent = 21000 + gasStart - gasleft() + 16 * msg.data.length;

        IFreeFromUpTo chi = IFreeFromUpTo(0x0000000000004946c0e9F43F4Dee607b0eF1fA1c);
        chi.freeFromUpTo(sponsor, (gasSpent + 14154) / 41947);
    }
}

// File: localhost/contracts/Ownable.sol

pragma solidity 0.6.4;

// TODO move this generic contract to a seperate repo with all generic smart contracts

contract Ownable {

    bytes32 constant public oSlot = keccak256("Ownable.storage.location");

    event OwnerChanged(address indexed previousOwner, address indexed newOwner);

    // Ownable struct
    struct os {
        address owner;
    }

    modifier onlyOwner(){
        require(msg.sender == los().owner, "Ownable.onlyOwner: msg.sender not owner");
        _;
    }

    /**
        @notice Transfer ownership to a new address
        @param _newOwner Address of the new owner
    */
    function transferOwnership(address _newOwner) onlyOwner external {
        _setOwner(_newOwner);
    }

    /**
        @notice Internal method to set the owner
        @param _newOwner Address of the new owner
    */
    function _setOwner(address _newOwner) internal {
        emit OwnerChanged(los().owner, _newOwner);
        los().owner = _newOwner;
    }

    /**
        @notice Load ownable storage
        @return s Storage pointer to the Ownable storage struct
    */
    function los() internal pure returns (os storage s) {
        bytes32 loc = oSlot;
        assembly {
            s_slot := loc
        }
    }

}
// File: localhost/contracts/interfaces/ISmartPoolRegistry.sol

pragma solidity 0.6.4;

interface ISmartPoolRegistry {
    function inRegistry(address _pool) external view returns(bool);
    function entries(uint256 _index) external view returns(address);
    function addSmartPool(address _smartPool) external;
    function removeSmartPool(uint256 _index) external;
}
// File: localhost/contracts/interfaces/IUniswapV2Exchange.sol

interface IUniswapV2Exchange {
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
// File: localhost/contracts/interfaces/IUniswapV2Factory.sol

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}
// File: localhost/contracts/interfaces/IPSmartPool.sol

pragma solidity ^0.6.4;

interface IPSmartPool is IERC20 {
    function joinPool(uint256 _amount) external;
    function exitPool(uint256 _amount) external;
    function getController() external view returns(address);
    function getTokens() external view returns(address[] memory);
    function calcTokensForAmount(uint256 _amount) external view  returns(address[] memory tokens, uint256[] memory amounts);
}
// File: localhost/contracts/recipes/LibSafeApproval.sol



library LibSafeApprove {
    function safeApprove(IERC20 _token, address _spender, uint256 _amount) internal {
        uint256 currentAllowance = _token.allowance(address(this), _spender);

        // Do nothing if allowance is already set to this value
        if(currentAllowance == _amount) {
            return;
        }

        // If approval is not zero reset it to zero first
        if(currentAllowance != 0) {
            _token.approve(_spender, 0);
        }

        // do the actual approval
        _token.approve(_spender, _amount);
    }
}
// File: localhost/contracts/recipes/SafeMath.sol


// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: localhost/contracts/recipes/UniLib.sol

pragma solidity >=0.5.0;



library UniLib {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniLib: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniLib: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniLib: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniLib: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniLib: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniLib: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniLib: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniLib: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniLib: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniLib: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}
// File: localhost/contracts/interfaces/IERC20.sol




interface IWETH is IERC20 {
    function deposit() external payable;
    function withdraw(uint wad) external;
}
// File: localhost/contracts/recipes/UniswapV2Recipe.sol

pragma solidity 0.6.4;










contract UniswapV2Recipe is Ownable, ChiGasSaver {
    using LibSafeApprove for IERC20;

    IWETH constant public WETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    IUniswapV2Factory constant uniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    ISmartPoolRegistry constant public registry = ISmartPoolRegistry(0x412a5d5eC35fF185D6BfF32a367a985e1FB7c296);
    address payable public constant gasSponsor = 0x3bFdA5285416eB06Ebc8bc0aBf7d105813af06d0;
    bool private isPaused = false;
    
    // Pauzer
    modifier revertIfPaused {
        if (isPaused) {
            revert("[UniswapV2Recipe] is Paused");
        } else {
            _;
        }
    }
    
    function togglePause() public onlyOwner {
        isPaused = !isPaused;
    }

    constructor() public {
        _setOwner(msg.sender);
    }

    // Max eth amount enforced by msg.value
    function toPie(address _pie, uint256 _poolAmount) external payable revertIfPaused saveGas(gasSponsor) {
        require(registry.inRegistry(_pie), "Not a Pie");
        uint256 totalEth = calcToPie(_pie, _poolAmount);
        require(msg.value >= totalEth, "Amount ETH too low");

        WETH.deposit{value: totalEth}();

        _toPie(_pie, _poolAmount);

        // return excess ETH
        if(address(this).balance != 0) {
            // Send any excess ETH back
            msg.sender.transfer(address(this).balance);
        }

        // Transfer pool tokens to msg.sender
        IERC20 pie = IERC20(_pie);

        IERC20(pie).transfer(msg.sender, pie.balanceOf(address(this)));
    }

    function _toPie(address _pie, uint256 _poolAmount) internal {
        (address[] memory tokens, uint256[] memory amounts) = IPSmartPool(_pie).calcTokensForAmount(_poolAmount);

        for(uint256 i = 0; i < tokens.length; i++) {
            if(registry.inRegistry(tokens[i])) {
                _toPie(tokens[i], amounts[i]);
            } else {
                IUniswapV2Exchange pair = IUniswapV2Exchange(UniLib.pairFor(address(uniswapFactory), tokens[i], address(WETH)));

                (uint256 reserveA, uint256 reserveB) = UniLib.getReserves(address(uniswapFactory), address(WETH), tokens[i]);
                uint256 amountIn = UniLib.getAmountIn(amounts[i], reserveA, reserveB);

                // UniswapV2 does not pull the token
                WETH.transfer(address(pair), amountIn);

                if(token0Or1(address(WETH), tokens[i]) == 0) {
                    pair.swap(amounts[i], 0, address(this), new bytes(0));
                } else {
                    pair.swap(0, amounts[i], address(this), new bytes(0));
                }
            }

            IERC20(tokens[i]).safeApprove(_pie, amounts[i]);
        }

        IPSmartPool pie = IPSmartPool(_pie);
        pie.joinPool(_poolAmount);
    }

    function calcToPie(address _pie, uint256 _poolAmount) public view returns(uint256) {
        (address[] memory tokens, uint256[] memory amounts) = IPSmartPool(_pie).calcTokensForAmount(_poolAmount);

        uint256 totalEth = 0;

        for(uint256 i = 0; i < tokens.length; i++) {
            if(registry.inRegistry(tokens[i])) {
                totalEth += calcToPie(tokens[i], amounts[i]);
            } else {
                (uint256 reserveA, uint256 reserveB) = UniLib.getReserves(address(uniswapFactory), address(WETH), tokens[i]);
                totalEth += UniLib.getAmountIn(amounts[i], reserveA, reserveB);
            }
        }

        return totalEth;
    }


    // TODO recursive exit
    function toEth(address _pie, uint256 _poolAmount, uint256 _minEthAmount) external revertIfPaused saveGas(gasSponsor) {
        uint256 totalEth = calcToPie(_pie, _poolAmount);
        require(_minEthAmount <= totalEth, "Output ETH amount too low");
        IPSmartPool pie = IPSmartPool(_pie);

        (address[] memory tokens, uint256[] memory amounts) = IPSmartPool(_pie).calcTokensForAmount(_poolAmount);
        pie.transferFrom(msg.sender, address(this), _poolAmount);
        pie.exitPool(_poolAmount);

        for(uint256 i = 0; i < tokens.length; i++) {
            (uint256 reserveA, uint256 reserveB) = UniLib.getReserves(address(uniswapFactory), tokens[i], address(WETH));
            uint256 wethAmountOut = UniLib.getAmountOut(amounts[i], reserveA, reserveB);
            IUniswapV2Exchange pair = IUniswapV2Exchange(UniLib.pairFor(address(uniswapFactory), tokens[i], address(WETH)));

            // Uniswap V2 does not pull the token
            IERC20(tokens[i]).transfer(address(pair), amounts[i]);

            if(token0Or1(address(WETH), tokens[i]) == 0) {
                pair.swap(0, wethAmountOut, address(this), new bytes(0));
            } else {
                pair.swap(wethAmountOut, 0, address(this), new bytes(0));
            }
        }

        WETH.withdraw(totalEth);
        msg.sender.transfer(address(this).balance);
    }

    function calcToEth(address _pie, uint256 _poolAmountOut) external view returns(uint256) {
        (address[] memory tokens, uint256[] memory amounts) = IPSmartPool(_pie).calcTokensForAmount(_poolAmountOut);

        uint256 totalEth = 0;

        for(uint256 i = 0; i < tokens.length; i++) {
            (uint256 reserveA, uint256 reserveB) = UniLib.getReserves(address(uniswapFactory), tokens[i], address(WETH));
            totalEth += UniLib.getAmountOut(amounts[i], reserveA, reserveB);
        }

        return totalEth;
    }

    function token0Or1(address tokenA, address tokenB) internal view returns(uint256) {
        (address token0, address token1) = UniLib.sortTokens(tokenA, tokenB);

        if(token0 == tokenB) {
            return 0;
        }

        return 1;
    }
    
    function die() public onlyOwner {
        address payable _to = payable(los().owner);
        selfdestruct(_to);
    }

    function saveEth() external onlyOwner {
        msg.sender.transfer(address(this).balance);
    }

    function saveToken(address _token) external onlyOwner {
        IERC20 token = IERC20(_token);
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pie","type":"address"},{"internalType":"uint256","name":"_poolAmountOut","type":"uint256"}],"name":"calcToEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pie","type":"address"},{"internalType":"uint256","name":"_poolAmount","type":"uint256"}],"name":"calcToPie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"die","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasSponsor","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registry","outputs":[{"internalType":"contract ISmartPoolRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saveEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"saveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pie","type":"address"},{"internalType":"uint256","name":"_poolAmount","type":"uint256"},{"internalType":"uint256","name":"_minEthAmount","type":"uint256"}],"name":"toEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pie","type":"address"},{"internalType":"uint256","name":"_poolAmount","type":"uint256"}],"name":"toPie","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000805460ff191690553480156200001b57600080fd5b5062000030336001600160e01b036200003616565b620000f3565b6001600160a01b038116620000536001600160e01b03620000be16565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3806200009d6001600160e01b03620000be16565b80546001600160a01b0319166001600160a01b039290921691909117905550565b604080517f4f776e61626c652e73746f726167652e6c6f636174696f6e00000000000000008152905190819003601801902090565b61274080620001036000396000f3fe6080604052600436106100c25760003560e01c80637b1039991161007f578063c4ae316811610059578063c4ae31681461023d578063e560ce9c14610252578063f090784314610285578063f2fde38b1461029a576100c2565b80637b103999146101fe5780639528432b14610213578063ad5c464814610228576100c2565b80630a8eafe2146100c75780632040f65414610108578063335d15e31461015357806335f469941461018c5780636edfcd23146101a1578063731dae7e146101d2575b600080fd5b3480156100d357600080fd5b50610106600480360360608110156100ea57600080fd5b506001600160a01b0381351690602081013590604001356102cd565b005b34801561011457600080fd5b506101416004803603604081101561012b57600080fd5b506001600160a01b038135169060200135610b37565b60408051918252519081900360200190f35b34801561015f57600080fd5b506101416004803603604081101561017657600080fd5b506001600160a01b038135169060200135610d48565b34801561019857600080fd5b50610106611057565b3480156101ad57600080fd5b506101b66110bf565b604080516001600160a01b039092168252519081900360200190f35b610106600480360360408110156101e857600080fd5b506001600160a01b0381351690602001356110d7565b34801561020a57600080fd5b506101b66114c0565b34801561021f57600080fd5b506101066114d8565b34801561023457600080fd5b506101b6611556565b34801561024957600080fd5b5061010661156e565b34801561025e57600080fd5b506101066004803603602081101561027557600080fd5b50356001600160a01b03166115d1565b34801561029157600080fd5b5061014161171d565b3480156102a657600080fd5b50610106600480360360208110156102bd57600080fd5b50356001600160a01b031661174d565b60005460ff1615610325576040805162461bcd60e51b815260206004820152601b60248201527f5b556e697377617056325265636970655d206973205061757365640000000000604482015290519081900360640190fd5b733bfda5285416eb06ebc8bc0abf7d105813af06d060005a9050600061034b8686610d48565b9050808411156103a2576040805162461bcd60e51b815260206004820152601960248201527f4f75747075742045544820616d6f756e7420746f6f206c6f7700000000000000604482015290519081900360640190fd5b6000869050606080886001600160a01b031663371babdc896040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156103ee57600080fd5b505afa158015610402573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561042b57600080fd5b8101908080516040519392919084600160201b82111561044a57600080fd5b90830190602082018581111561045f57600080fd5b82518660208202830111600160201b8211171561047b57600080fd5b82525081516020918201928201910280838360005b838110156104a8578181015183820152602001610490565b5050505090500160405260200180516040519392919084600160201b8211156104d057600080fd5b9083019060208201858111156104e557600080fd5b82518660208202830111600160201b8211171561050157600080fd5b82525081516020918201928201910280838360005b8381101561052e578181015183820152602001610516565b5050505090500160405250505091509150826001600160a01b03166323b872dd33308b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050506040513d60208110156105e357600080fd5b50506040805163be1d24ad60e01b8152600481018a905290516001600160a01b0385169163be1d24ad91602480830192600092919082900301818387803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b506000925050505b82518110156109d75760008061069b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f86858151811061067957fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26117a5565b9150915060006106bf8585815181106106b057fe5b60200260200101518484611873565b90506000610709735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8887815181106106e757fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611979565b905086858151811061071757fe5b60200260200101516001600160a01b031663a9059cbb8288888151811061073a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561079157600080fd5b505af11580156107a5573d6000803e3d6000fd5b505050506040513d60208110156107bb57600080fd5b505086516107f29073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2908990889081106107e557fe5b6020026020010151611a39565b6108e057604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018690523060648401819052608060848501908152845160a486018190526001600160a01b0388169663022c0d9f968a9590939092909160c48501918083838b5b8381101561087457818101518382015260200161085c565b50505050905090810190601f1680156108a15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050506109c7565b604080516000808252602082019283905263022c0d9f60e01b835260248201858152604483018290523060648401819052608060848501908152845160a486018190526001600160a01b0388169663022c0d9f968a969590939092909160c48501918083838a5b8381101561095f578181015183820152602001610947565b50505050905090810190601f16801561098c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505b5050600190920191506106499050565b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610a77573d6000803e3d6000fd5b506000935050601036029150505a830301615208810191506d4946c0e9f43f4dee607b0ef1fa1c90819063079d229f90869061a3db9061895201046040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610b0157600080fd5b505af1158015610b15573d6000803e3d6000fd5b505050506040513d6020811015610b2b57600080fd5b5050505050505b505050565b6000606080846001600160a01b031663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610bbd57600080fd5b8101908080516040519392919084600160201b821115610bdc57600080fd5b908301906020820185811115610bf157600080fd5b82518660208202830111600160201b82111715610c0d57600080fd5b82525081516020918201928201910280838360005b83811015610c3a578181015183820152602001610c22565b5050505090500160405260200180516040519392919084600160201b821115610c6257600080fd5b908301906020820185811115610c7757600080fd5b82518660208202830111600160201b82111715610c9357600080fd5b82525081516020918201928201910280838360005b83811015610cc0578181015183820152602001610ca8565b5050505090500160405250505091509150600080905060008090505b8351811015610d3c57600080610d0c735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f87858151811061067957fe5b91509150610d2e858481518110610d1f57fe5b60200260200101518383611873565b909301925050600101610cdc565b50925050505b92915050565b6000606080846001600160a01b031663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610dce57600080fd5b8101908080516040519392919084600160201b821115610ded57600080fd5b908301906020820185811115610e0257600080fd5b82518660208202830111600160201b82111715610e1e57600080fd5b82525081516020918201928201910280838360005b83811015610e4b578181015183820152602001610e33565b5050505090500160405260200180516040519392919084600160201b821115610e7357600080fd5b908301906020820185811115610e8857600080fd5b82518660208202830111600160201b82111715610ea457600080fd5b82525081516020918201928201910280838360005b83811015610ed1578181015183820152602001610eb9565b5050505090500160405250505091509150600080905060008090505b8351811015610d3c5773412a5d5ec35ff185d6bff32a367a985e1fb7c2966001600160a01b031663e4ec552b858381518110610f2557fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f7357600080fd5b505afa158015610f87573d6000803e3d6000fd5b505050506040513d6020811015610f9d57600080fd5b505115610fdd57610fd4848281518110610fb357fe5b6020026020010151848381518110610fc757fe5b6020026020010151610d48565b8201915061104f565b600080611026735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288868151811061101957fe5b60200260200101516117a5565b9150915061104885848151811061103957fe5b60200260200101518383611a7c565b8401935050505b600101610eed565b61105f611b82565b546001600160a01b031633146110a65760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b60006110b0611b82565b546001600160a01b0316905080ff5b733bfda5285416eb06ebc8bc0abf7d105813af06d081565b60005460ff161561112f576040805162461bcd60e51b815260206004820152601b60248201527f5b556e697377617056325265636970655d206973205061757365640000000000604482015290519081900360640190fd5b733bfda5285416eb06ebc8bc0abf7d105813af06d060005a6040805163e4ec552b60e01b81526001600160a01b0387166004820152905191925073412a5d5ec35ff185d6bff32a367a985e1fb7c2969163e4ec552b91602480820192602092909190829003018186803b1580156111a557600080fd5b505afa1580156111b9573d6000803e3d6000fd5b505050506040513d60208110156111cf57600080fd5b505161120e576040805162461bcd60e51b81526020600482015260096024820152684e6f7420612050696560b81b604482015290519081900360640190fd5b600061121a8585610d48565b905080341015611266576040805162461bcd60e51b8152602060048201526012602482015271416d6f756e742045544820746f6f206c6f7760701b604482015290519081900360640190fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50505050506112d88585611bb2565b471561130c5760405133904780156108fc02916000818181858888f1935050505015801561130a573d6000803e3d6000fd5b505b604080516370a0823160e01b8152306004820152905186916001600160a01b0383169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d602081101561138857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156113d957600080fd5b505af11580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b5060009250506010360290505a830301615208810191506d4946c0e9f43f4dee607b0ef1fa1c90819063079d229f90869061a3db9061895201046040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561148c57600080fd5b505af11580156114a0573d6000803e3d6000fd5b505050506040513d60208110156114b657600080fd5b5050505050505050565b73412a5d5ec35ff185d6bff32a367a985e1fb7c29681565b6114e0611b82565b546001600160a01b031633146115275760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b60405133904780156108fc02916000818181858888f19350505050158015611553573d6000803e3d6000fd5b50565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b611576611b82565b546001600160a01b031633146115bd5760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b6000805460ff19811660ff90911615179055565b6115d9611b82565b546001600160a01b031633146116205760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916001600160a01b0383169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561167257600080fd5b505afa158015611686573d6000803e3d6000fd5b505050506040513d602081101561169c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b505050506040513d602081101561171757600080fd5b50505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b611755611b82565b546001600160a01b0316331461179c5760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b6115538161228e565b60008060006117b48585612300565b5090506000806117c5888888611979565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156117fd57600080fd5b505afa158015611811573d6000803e3d6000fd5b505050506040513d606081101561182757600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611861578082611864565b81815b90999098509650505050505050565b60008084116118b35760405162461bcd60e51b81526004018080602001828103825260218152602001806126c36021913960400191505060405180910390fd5b6000831180156118c35750600082115b611914576040805162461bcd60e51b815260206004820152601e60248201527f556e694c69623a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b6000611928856103e563ffffffff6123eb16565b9050600061193c828563ffffffff6123eb16565b9050600061196283611956886103e863ffffffff6123eb16565b9063ffffffff61244e16565b905080828161196d57fe5b04979650505050505050565b60008060006119888585612300565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000806000611a488585612300565b91509150836001600160a01b0316826001600160a01b03161415611a7157600092505050610d42565b506001949350505050565b6000808411611abc5760405162461bcd60e51b81526004018080602001828103825260228152602001806126a16022913960400191505060405180910390fd5b600083118015611acc5750600082115b611b1d576040805162461bcd60e51b815260206004820152601e60248201527f556e694c69623a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b6000611b416103e8611b35868863ffffffff6123eb16565b9063ffffffff6123eb16565b90506000611b5b6103e5611b35868963ffffffff61249d16565b9050611b786001828481611b6b57fe5b049063ffffffff61244e16565b9695505050505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b606080836001600160a01b031663371babdc846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611bf957600080fd5b505afa158015611c0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015611c3657600080fd5b8101908080516040519392919084600160201b821115611c5557600080fd5b908301906020820185811115611c6a57600080fd5b82518660208202830111600160201b82111715611c8657600080fd5b82525081516020918201928201910280838360005b83811015611cb3578181015183820152602001611c9b565b5050505090500160405260200180516040519392919084600160201b821115611cdb57600080fd5b908301906020820185811115611cf057600080fd5b82518660208202830111600160201b82111715611d0c57600080fd5b82525081516020918201928201910280838360005b83811015611d39578181015183820152602001611d21565b505050509050016040525050509150915060008090505b825181101561222e5773412a5d5ec35ff185d6bff32a367a985e1fb7c2966001600160a01b031663e4ec552b848381518110611d8857fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611dd657600080fd5b505afa158015611dea573d6000803e3d6000fd5b505050506040513d6020811015611e0057600080fd5b505115611e3c57611e37838281518110611e1657fe5b6020026020010151838381518110611e2a57fe5b6020026020010151611bb2565b6121e2565b6000611e62735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8584815181106106e757fe5b9050600080611ea0735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288878151811061101957fe5b915091506000611ec4868681518110611eb557fe5b60200260200101518484611a7c565b6040805163a9059cbb60e01b81526001600160a01b038716600482015260248101839052905191925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29163a9059cbb916044808201926020929091908290030181600087803b158015611f2b57600080fd5b505af1158015611f3f573d6000803e3d6000fd5b505050506040513d6020811015611f5557600080fd5b50508651611f7f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2908990889081106107e557fe5b6120b257836001600160a01b031663022c0d9f878781518110611f9e57fe5b602002602001015160003060006040519080825280601f01601f191660200182016040528015611fd5576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561204657818101518382015260200161202e565b50505050905090810190601f1680156120735780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561209557600080fd5b505af11580156120a9573d6000803e3d6000fd5b505050506121dd565b836001600160a01b031663022c0d9f60008888815181106120cf57fe5b60200260200101513060006040519080825280601f01601f191660200182016040528015612104576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217557818101518382015260200161215d565b50505050905090810190601f1680156121a25780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156121c457600080fd5b505af11580156121d8573d6000803e3d6000fd5b505050505b505050505b612226858383815181106121f257fe5b602002602001015185848151811061220657fe5b60200260200101516001600160a01b03166124ed9092919063ffffffff16565b600101611d50565b506000849050806001600160a01b03166334e7a19f856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561227a57600080fd5b505af1158015610b2b573d6000803e3d6000fd5b806001600160a01b03166122a0611b82565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3806122df611b82565b80546001600160a01b0319166001600160a01b039290921691909117905550565b600080826001600160a01b0316846001600160a01b0316141561236a576040805162461bcd60e51b815260206004820152601b60248201527f556e694c69623a204944454e544943414c5f4144445245535345530000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061238a57828461238d565b83835b90925090506001600160a01b0382166123e4576040805162461bcd60e51b8152602060048201526014602482015273556e694c69623a205a45524f5f4144445245535360601b604482015290519081900360640190fd5b9250929050565b60008115806124065750508082028282828161240357fe5b04145b610d42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610d42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610d42576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561253e57600080fd5b505afa158015612552573d6000803e3d6000fd5b505050506040513d602081101561256857600080fd5b505190508181141561257a5750610b32565b801561260e57836001600160a01b031663095ea7b38460006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d602081101561260b57600080fd5b50505b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b50505050505056fe556e694c69623a20494e53554646494349454e545f4f55545055545f414d4f554e54556e694c69623a20494e53554646494349454e545f494e5055545f414d4f554e544f776e61626c652e6f6e6c794f776e65723a206d73672e73656e646572206e6f74206f776e6572a26469706673582212205c2f498802ddb8648fccbd501744fa8547cfd85c500cfd23e4f6d3afc53ae78864736f6c63430006040033

Deployed Bytecode

0x6080604052600436106100c25760003560e01c80637b1039991161007f578063c4ae316811610059578063c4ae31681461023d578063e560ce9c14610252578063f090784314610285578063f2fde38b1461029a576100c2565b80637b103999146101fe5780639528432b14610213578063ad5c464814610228576100c2565b80630a8eafe2146100c75780632040f65414610108578063335d15e31461015357806335f469941461018c5780636edfcd23146101a1578063731dae7e146101d2575b600080fd5b3480156100d357600080fd5b50610106600480360360608110156100ea57600080fd5b506001600160a01b0381351690602081013590604001356102cd565b005b34801561011457600080fd5b506101416004803603604081101561012b57600080fd5b506001600160a01b038135169060200135610b37565b60408051918252519081900360200190f35b34801561015f57600080fd5b506101416004803603604081101561017657600080fd5b506001600160a01b038135169060200135610d48565b34801561019857600080fd5b50610106611057565b3480156101ad57600080fd5b506101b66110bf565b604080516001600160a01b039092168252519081900360200190f35b610106600480360360408110156101e857600080fd5b506001600160a01b0381351690602001356110d7565b34801561020a57600080fd5b506101b66114c0565b34801561021f57600080fd5b506101066114d8565b34801561023457600080fd5b506101b6611556565b34801561024957600080fd5b5061010661156e565b34801561025e57600080fd5b506101066004803603602081101561027557600080fd5b50356001600160a01b03166115d1565b34801561029157600080fd5b5061014161171d565b3480156102a657600080fd5b50610106600480360360208110156102bd57600080fd5b50356001600160a01b031661174d565b60005460ff1615610325576040805162461bcd60e51b815260206004820152601b60248201527f5b556e697377617056325265636970655d206973205061757365640000000000604482015290519081900360640190fd5b733bfda5285416eb06ebc8bc0abf7d105813af06d060005a9050600061034b8686610d48565b9050808411156103a2576040805162461bcd60e51b815260206004820152601960248201527f4f75747075742045544820616d6f756e7420746f6f206c6f7700000000000000604482015290519081900360640190fd5b6000869050606080886001600160a01b031663371babdc896040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b1580156103ee57600080fd5b505afa158015610402573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561042b57600080fd5b8101908080516040519392919084600160201b82111561044a57600080fd5b90830190602082018581111561045f57600080fd5b82518660208202830111600160201b8211171561047b57600080fd5b82525081516020918201928201910280838360005b838110156104a8578181015183820152602001610490565b5050505090500160405260200180516040519392919084600160201b8211156104d057600080fd5b9083019060208201858111156104e557600080fd5b82518660208202830111600160201b8211171561050157600080fd5b82525081516020918201928201910280838360005b8381101561052e578181015183820152602001610516565b5050505090500160405250505091509150826001600160a01b03166323b872dd33308b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b505050506040513d60208110156105e357600080fd5b50506040805163be1d24ad60e01b8152600481018a905290516001600160a01b0385169163be1d24ad91602480830192600092919082900301818387803b15801561062d57600080fd5b505af1158015610641573d6000803e3d6000fd5b506000925050505b82518110156109d75760008061069b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f86858151811061067957fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26117a5565b9150915060006106bf8585815181106106b057fe5b60200260200101518484611873565b90506000610709735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8887815181106106e757fe5b602002602001015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611979565b905086858151811061071757fe5b60200260200101516001600160a01b031663a9059cbb8288888151811061073a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561079157600080fd5b505af11580156107a5573d6000803e3d6000fd5b505050506040513d60208110156107bb57600080fd5b505086516107f29073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2908990889081106107e557fe5b6020026020010151611a39565b6108e057604080516000808252602082019283905263022c0d9f60e01b835260248201818152604483018690523060648401819052608060848501908152845160a486018190526001600160a01b0388169663022c0d9f968a9590939092909160c48501918083838b5b8381101561087457818101518382015260200161085c565b50505050905090810190601f1680156108a15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050506109c7565b604080516000808252602082019283905263022c0d9f60e01b835260248201858152604483018290523060648401819052608060848501908152845160a486018190526001600160a01b0388169663022c0d9f968a969590939092909160c48501918083838a5b8381101561095f578181015183820152602001610947565b50505050905090810190601f16801561098c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156109ae57600080fd5b505af11580156109c2573d6000803e3d6000fd5b505050505b5050600190920191506106499050565b5073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610a3257600080fd5b505af1158015610a46573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610a77573d6000803e3d6000fd5b506000935050601036029150505a830301615208810191506d4946c0e9f43f4dee607b0ef1fa1c90819063079d229f90869061a3db9061895201046040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610b0157600080fd5b505af1158015610b15573d6000803e3d6000fd5b505050506040513d6020811015610b2b57600080fd5b5050505050505b505050565b6000606080846001600160a01b031663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610b8057600080fd5b505afa158015610b94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610bbd57600080fd5b8101908080516040519392919084600160201b821115610bdc57600080fd5b908301906020820185811115610bf157600080fd5b82518660208202830111600160201b82111715610c0d57600080fd5b82525081516020918201928201910280838360005b83811015610c3a578181015183820152602001610c22565b5050505090500160405260200180516040519392919084600160201b821115610c6257600080fd5b908301906020820185811115610c7757600080fd5b82518660208202830111600160201b82111715610c9357600080fd5b82525081516020918201928201910280838360005b83811015610cc0578181015183820152602001610ca8565b5050505090500160405250505091509150600080905060008090505b8351811015610d3c57600080610d0c735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f87858151811061067957fe5b91509150610d2e858481518110610d1f57fe5b60200260200101518383611873565b909301925050600101610cdc565b50925050505b92915050565b6000606080846001600160a01b031663371babdc856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015610d9157600080fd5b505afa158015610da5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610dce57600080fd5b8101908080516040519392919084600160201b821115610ded57600080fd5b908301906020820185811115610e0257600080fd5b82518660208202830111600160201b82111715610e1e57600080fd5b82525081516020918201928201910280838360005b83811015610e4b578181015183820152602001610e33565b5050505090500160405260200180516040519392919084600160201b821115610e7357600080fd5b908301906020820185811115610e8857600080fd5b82518660208202830111600160201b82111715610ea457600080fd5b82525081516020918201928201910280838360005b83811015610ed1578181015183820152602001610eb9565b5050505090500160405250505091509150600080905060008090505b8351811015610d3c5773412a5d5ec35ff185d6bff32a367a985e1fb7c2966001600160a01b031663e4ec552b858381518110610f2557fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610f7357600080fd5b505afa158015610f87573d6000803e3d6000fd5b505050506040513d6020811015610f9d57600080fd5b505115610fdd57610fd4848281518110610fb357fe5b6020026020010151848381518110610fc757fe5b6020026020010151610d48565b8201915061104f565b600080611026735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288868151811061101957fe5b60200260200101516117a5565b9150915061104885848151811061103957fe5b60200260200101518383611a7c565b8401935050505b600101610eed565b61105f611b82565b546001600160a01b031633146110a65760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b60006110b0611b82565b546001600160a01b0316905080ff5b733bfda5285416eb06ebc8bc0abf7d105813af06d081565b60005460ff161561112f576040805162461bcd60e51b815260206004820152601b60248201527f5b556e697377617056325265636970655d206973205061757365640000000000604482015290519081900360640190fd5b733bfda5285416eb06ebc8bc0abf7d105813af06d060005a6040805163e4ec552b60e01b81526001600160a01b0387166004820152905191925073412a5d5ec35ff185d6bff32a367a985e1fb7c2969163e4ec552b91602480820192602092909190829003018186803b1580156111a557600080fd5b505afa1580156111b9573d6000803e3d6000fd5b505050506040513d60208110156111cf57600080fd5b505161120e576040805162461bcd60e51b81526020600482015260096024820152684e6f7420612050696560b81b604482015290519081900360640190fd5b600061121a8585610d48565b905080341015611266576040805162461bcd60e51b8152602060048201526012602482015271416d6f756e742045544820746f6f206c6f7760701b604482015290519081900360640190fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50505050506112d88585611bb2565b471561130c5760405133904780156108fc02916000818181858888f1935050505015801561130a573d6000803e3d6000fd5b505b604080516370a0823160e01b8152306004820152905186916001600160a01b0383169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d602081101561138857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156113d957600080fd5b505af11580156113ed573d6000803e3d6000fd5b505050506040513d602081101561140357600080fd5b5060009250506010360290505a830301615208810191506d4946c0e9f43f4dee607b0ef1fa1c90819063079d229f90869061a3db9061895201046040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561148c57600080fd5b505af11580156114a0573d6000803e3d6000fd5b505050506040513d60208110156114b657600080fd5b5050505050505050565b73412a5d5ec35ff185d6bff32a367a985e1fb7c29681565b6114e0611b82565b546001600160a01b031633146115275760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b60405133904780156108fc02916000818181858888f19350505050158015611553573d6000803e3d6000fd5b50565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b611576611b82565b546001600160a01b031633146115bd5760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b6000805460ff19811660ff90911615179055565b6115d9611b82565b546001600160a01b031633146116205760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916001600160a01b0383169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b15801561167257600080fd5b505afa158015611686573d6000803e3d6000fd5b505050506040513d602081101561169c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156116ed57600080fd5b505af1158015611701573d6000803e3d6000fd5b505050506040513d602081101561171757600080fd5b50505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902081565b611755611b82565b546001600160a01b0316331461179c5760405162461bcd60e51b81526004018080602001828103825260278152602001806126e46027913960400191505060405180910390fd5b6115538161228e565b60008060006117b48585612300565b5090506000806117c5888888611979565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156117fd57600080fd5b505afa158015611811573d6000803e3d6000fd5b505050506040513d606081101561182757600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614611861578082611864565b81815b90999098509650505050505050565b60008084116118b35760405162461bcd60e51b81526004018080602001828103825260218152602001806126c36021913960400191505060405180910390fd5b6000831180156118c35750600082115b611914576040805162461bcd60e51b815260206004820152601e60248201527f556e694c69623a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b6000611928856103e563ffffffff6123eb16565b9050600061193c828563ffffffff6123eb16565b9050600061196283611956886103e863ffffffff6123eb16565b9063ffffffff61244e16565b905080828161196d57fe5b04979650505050505050565b60008060006119888585612300565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6000806000611a488585612300565b91509150836001600160a01b0316826001600160a01b03161415611a7157600092505050610d42565b506001949350505050565b6000808411611abc5760405162461bcd60e51b81526004018080602001828103825260228152602001806126a16022913960400191505060405180910390fd5b600083118015611acc5750600082115b611b1d576040805162461bcd60e51b815260206004820152601e60248201527f556e694c69623a20494e53554646494349454e545f4c49515549444954590000604482015290519081900360640190fd5b6000611b416103e8611b35868863ffffffff6123eb16565b9063ffffffff6123eb16565b90506000611b5b6103e5611b35868963ffffffff61249d16565b9050611b786001828481611b6b57fe5b049063ffffffff61244e16565b9695505050505050565b604080517727bbb730b136329739ba37b930b3b2973637b1b0ba34b7b760411b8152905190819003601801902090565b606080836001600160a01b031663371babdc846040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b158015611bf957600080fd5b505afa158015611c0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015611c3657600080fd5b8101908080516040519392919084600160201b821115611c5557600080fd5b908301906020820185811115611c6a57600080fd5b82518660208202830111600160201b82111715611c8657600080fd5b82525081516020918201928201910280838360005b83811015611cb3578181015183820152602001611c9b565b5050505090500160405260200180516040519392919084600160201b821115611cdb57600080fd5b908301906020820185811115611cf057600080fd5b82518660208202830111600160201b82111715611d0c57600080fd5b82525081516020918201928201910280838360005b83811015611d39578181015183820152602001611d21565b505050509050016040525050509150915060008090505b825181101561222e5773412a5d5ec35ff185d6bff32a367a985e1fb7c2966001600160a01b031663e4ec552b848381518110611d8857fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611dd657600080fd5b505afa158015611dea573d6000803e3d6000fd5b505050506040513d6020811015611e0057600080fd5b505115611e3c57611e37838281518110611e1657fe5b6020026020010151838381518110611e2a57fe5b6020026020010151611bb2565b6121e2565b6000611e62735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8584815181106106e757fe5b9050600080611ea0735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc288878151811061101957fe5b915091506000611ec4868681518110611eb557fe5b60200260200101518484611a7c565b6040805163a9059cbb60e01b81526001600160a01b038716600482015260248101839052905191925073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29163a9059cbb916044808201926020929091908290030181600087803b158015611f2b57600080fd5b505af1158015611f3f573d6000803e3d6000fd5b505050506040513d6020811015611f5557600080fd5b50508651611f7f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2908990889081106107e557fe5b6120b257836001600160a01b031663022c0d9f878781518110611f9e57fe5b602002602001015160003060006040519080825280601f01601f191660200182016040528015611fd5576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561204657818101518382015260200161202e565b50505050905090810190601f1680156120735780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561209557600080fd5b505af11580156120a9573d6000803e3d6000fd5b505050506121dd565b836001600160a01b031663022c0d9f60008888815181106120cf57fe5b60200260200101513060006040519080825280601f01601f191660200182016040528015612104576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561217557818101518382015260200161215d565b50505050905090810190601f1680156121a25780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156121c457600080fd5b505af11580156121d8573d6000803e3d6000fd5b505050505b505050505b612226858383815181106121f257fe5b602002602001015185848151811061220657fe5b60200260200101516001600160a01b03166124ed9092919063ffffffff16565b600101611d50565b506000849050806001600160a01b03166334e7a19f856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561227a57600080fd5b505af1158015610b2b573d6000803e3d6000fd5b806001600160a01b03166122a0611b82565b546040516001600160a01b03909116907fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c90600090a3806122df611b82565b80546001600160a01b0319166001600160a01b039290921691909117905550565b600080826001600160a01b0316846001600160a01b0316141561236a576040805162461bcd60e51b815260206004820152601b60248201527f556e694c69623a204944454e544943414c5f4144445245535345530000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061238a57828461238d565b83835b90925090506001600160a01b0382166123e4576040805162461bcd60e51b8152602060048201526014602482015273556e694c69623a205a45524f5f4144445245535360601b604482015290519081900360640190fd5b9250929050565b60008115806124065750508082028282828161240357fe5b04145b610d42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610d42576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610d42576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038481166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b15801561253e57600080fd5b505afa158015612552573d6000803e3d6000fd5b505050506040513d602081101561256857600080fd5b505190508181141561257a5750610b32565b801561260e57836001600160a01b031663095ea7b38460006040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d602081101561260b57600080fd5b50505b836001600160a01b031663095ea7b384846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050506040513d602081101561269857600080fd5b50505050505056fe556e694c69623a20494e53554646494349454e545f4f55545055545f414d4f554e54556e694c69623a20494e53554646494349454e545f494e5055545f414d4f554e544f776e61626c652e6f6e6c794f776e65723a206d73672e73656e646572206e6f74206f776e6572a26469706673582212205c2f498802ddb8648fccbd501744fa8547cfd85c500cfd23e4f6d3afc53ae78864736f6c63430006040033

Deployed Bytecode Sourcemap

12574:6271:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;16216:1388:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16216:1388:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16216:1388:0;;;;;;;;;;;;;:::i;:::-;;17612:543;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17612:543:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17612:543:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15486:692;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15486:692:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;15486:692:0;;;;;;;;:::i;18433:121::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18433:121:0;;;:::i;12982:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12982:87:0;;;:::i;:::-;;;;-1:-1:-1;;;;;12982:87:0;;;;;;;;;;;;;;13500:714;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13500:714:0;;;;;;;;:::i;12867:108::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12867:108:0;;;:::i;18562:99::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18562:99:0;;;:::i;12670:78::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12670:78:0;;;:::i;13299:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13299:79:0;;;:::i;18669:171::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18669:171:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18669:171:0;-1:-1:-1;;;;;18669:171:0;;:::i;1497:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1497:69:0;;;:::i;1989:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1989:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1989:104:0;-1:-1:-1;;;;;1989:104:0;;:::i;16216:1388::-;13172:8;;;;13168:112;;;13197:37;;;-1:-1:-1;;;13197:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13168:112;13027:42:::1;1021:16;1040:9;1021:28;;16344:16:::2;16363:28;16373:4;16379:11;16363:9;:28::i;:::-;16344:47;;16427:8;16410:13;:25;;16402:63;;;::::0;;-1:-1:-1;;;16402:63:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;16476:15;16506:4;16476:35;;16525:23;16550:24:::0;16590:4:::2;-1:-1:-1::0;;;;;16578:37:0::2;;16616:11;16578:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;16578:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;16578:50:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;16578:50:0;80:15:-1::0;;::::2;-1:-1:::0;;76:31:::2;65:43:::0;::::2;120:4;113:20:::0;;;7:11;::::2;4:2;;;31:1;28::::0;21:12:::2;4:2;16578:50:0;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::2;11:20;8:2;;;44:1;41::::0;34:12:::2;8:2;62:21:::0;;::::2;::::0;123:4:::2;114:14:::0;::::2;138:31:::0;;::::2;135:2;;;182:1;179::::0;172:12:::2;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::2;244:29;233:116;230:2;;;362:1;359::::0;352:12:::2;230:2;373:25:::0;;-1:-1;16578:50:0;;421:4:-1::2;412:14:::0;;::::2;::::0;16578:50:0;::::2;::::0;::::2;::::0;412:14:-1;16578:50:0;23:1:-1::2;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::2;84:18:::0;71:11;;::::2;64:39:::0;52:2:::2;45:10;8:100;;;12:14;16578:50:0;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;14:3:::2;11:20;8:2;;;44:1;41::::0;34:12:::2;8:2;62:21:::0;;::::2;::::0;123:4:::2;114:14:::0;::::2;138:31:::0;;::::2;135:2;;;182:1;179::::0;172:12:::2;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1:::0;;;247:12:::2;244:29;233:116;230:2;;;362:1;359::::0;352:12:::2;230:2;373:25:::0;;-1:-1;16578:50:0;;421:4:-1::2;412:14:::0;;::::2;::::0;16578:50:0;::::2;::::0;::::2;::::0;412:14:-1;16578:50:0;23:1:-1::2;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::2;84:18:::0;71:11;;::::2;64:39:::0;52:2:::2;45:10;8:100;;;12:14;16578:50:0;;;;;;;;::::0;::::2;;16524:104;;;;16639:3;-1:-1:-1::0;;;;;16639:16:0::2;;16656:10;16676:4;16683:11;16639:56;;;;;;;;;;;;;-1:-1:-1::0;;;;;16639:56:0::2;-1:-1:-1::0;;;;;16639:56:0::2;;;;;;-1:-1:-1::0;;;;;16639:56:0::2;-1:-1:-1::0;;;;;16639:56:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;16639:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;16639:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;;16706:25:0::2;::::0;;-1:-1:-1;;;16706:25:0;;::::2;::::0;::::2;::::0;;;;;-1:-1:-1;;;;;16706:12:0;::::2;::::0;::::2;::::0;:25;;;;;-1:-1:-1;;16706:25:0;;;;;;;-1:-1:-1;16706:12:0;:25;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;16706:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;-1:-1:::0;16748:9:0::2;::::0;-1:-1:-1;;;16744:764:0::2;16767:6;:13;16763:1;:17;16744:764;;;16803:16;16821::::0;16841:69:::2;12817:42;16885:6;16892:1;16885:9;;;;;;;;;;;;;;12705:42;16841:18;:69::i;:::-;16802:108;;;;16925:21;16949:51;16969:7;16977:1;16969:10;;;;;;;;;;;;;;16981:8;16991;16949:19;:51::i;:::-;16925:75;;17015:23;17060:65;12817:42;17100:6;17107:1;17100:9;;;;;;;;;;;;;;12705:42;17060:14;:65::i;:::-;17015:111;;17201:6;17208:1;17201:9;;;;;;;;;;;;;;-1:-1:-1::0;;;;;17194:26:0::2;;17229:4;17236:7;17244:1;17236:10;;;;;;;;;;;;;;17194:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;17194:53:0::2;-1:-1:-1::0;;;;;17194:53:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;17194:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;17194:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;;17292:9:0;;17267:35:::2;::::0;12705:42:::2;::::0;17292:6;;17299:1;;17292:9;::::2;;;;;;;;;;;17267;:35::i;:::-;17264:233;;17371:12;::::0;;17338:1:::2;17371:12:::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;17328:56:0;;;;;;;;;;;;;;17364:4:::2;17328:56:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17328:9:0;::::2;::::0;::::2;::::0;17341:13;;17371:12;;17328:56;;;;;;;;;;17371:12;17338:1;8:100:-1::2;33:3;30:1;27:10;8:100;;;90:11:::0;;::::2;84:18:::0;71:11;;::::2;64:39:::0;52:2:::2;45:10;8:100;;;12:14;17328:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;17328:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;17328:56:0;;;;17264:233;;;17468:12;::::0;;17450:1:::2;17468:12:::0;;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;17425:56:0;;;;;;;;;;;;;;17461:4:::2;17425:56:::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17425:9:0;::::2;::::0;::::2;::::0;17435:13;;17450:1;17468:12;;17425:56;;;;;;;;;;17468:12;17450:1;8:100:-1::2;33:3;30:1;27:10;8:100;;;90:11:::0;;::::2;84:18:::0;71:11;;::::2;64:39:::0;52:2:::2;45:10;8:100;;;12:14;17425:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;17425:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;17425:56:0;;;;17264:233;-1:-1:-1::0;;16782:3:0::2;::::0;;::::2;::::0;-1:-1:-1;16744:764:0::2;::::0;-1:-1:-1;16744:764:0::2;;;12705:42;-1:-1:-1::0;;;;;17520:13:0::2;;17534:8;17520:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;17520:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;-1:-1:::0;;17554:42:0::2;::::0;:10:::2;::::0;-1:-1:-1;17574:21:0::2;17554:42:::0;::::2;;;::::0;-1:-1:-1;17574:21:0;17554:42:::2;::::0;;;17574:21;17554:10;:42;::::2;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;-1:-1:::0;1072:16:0::1;::::0;-1:-1:-1;;1122:2:0::1;1127:8;1122:20;::::0;-1:-1:-1;;1110:9:0::1;1091:28:::0;;:51;:5:::1;:51:::0;;;-1:-1:-1;1189:42:0::1;::::0;;;1243:16:::1;::::0;1260:7;;1290:5:::1;::::0;1270:16;;1269:26:::1;1243:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;1243:53:0::1;-1:-1:-1::0;;;;;1243:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;1243:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;1243:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;;13168:112:0;16216:1388;;;:::o;17612:543::-;17691:7;17712:23;17737:24;17777:4;-1:-1:-1;;;;;17765:37:0;;17803:14;17765:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17765:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17765:53:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;17765:53:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;7:11;;4:2;;;31:1;28;21:12;4:2;17765:53:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;17765:53:0;;421:4:-1;412:14;;;;17765:53:0;;;;;412:14:-1;17765:53:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17765:53:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;17765:53:0;;421:4:-1;412:14;;;;17765:53:0;;;;;412:14:-1;17765:53:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17765:53:0;;;;;;;;;;;17711:107;;;;17831:16;17850:1;17831:20;;17868:9;17880:1;17868:13;;17864:256;17887:6;:13;17883:1;:17;17864:256;;;17923:16;17941;17961:69;12817:42;18005:6;18012:1;18005:9;;;;;;;17961:69;17922:108;;;;18057:51;18077:7;18085:1;18077:10;;;;;;;;;;;;;;18089:8;18099;18057:19;:51::i;:::-;18045:63;;;;-1:-1:-1;;17902:3:0;;17864:256;;;-1:-1:-1;18139:8:0;-1:-1:-1;;;17612:543:0;;;;;:::o;15486:692::-;15560:7;15581:23;15606:24;15646:4;-1:-1:-1;;;;;15634:37:0;;15672:11;15634:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15634:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15634:50:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;15634:50:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;7:11;;4:2;;;31:1;28;21:12;4:2;15634:50:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;15634:50:0;;421:4:-1;412:14;;;;15634:50:0;;;;;412:14:-1;15634:50:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15634:50:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;15634:50:0;;421:4:-1;412:14;;;;15634:50:0;;;;;412:14:-1;15634:50:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15634:50:0;;;;;;;;;;;15580:104;;;;15697:16;15716:1;15697:20;;15734:9;15746:1;15734:13;;15730:413;15753:6;:13;15749:1;:17;15730:413;;;12932:42;-1:-1:-1;;;;;15791:19:0;;15811:6;15818:1;15811:9;;;;;;;;;;;;;;15791:30;;;;;;;;;;;;;-1:-1:-1;;;;;15791:30:0;-1:-1:-1;;;;;15791:30:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15791:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15791:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15791:30:0;15788:344;;;15854:32;15864:6;15871:1;15864:9;;;;;;;;;;;;;;15875:7;15883:1;15875:10;;;;;;;;;;;;;;15854:9;:32::i;:::-;15842:44;;;;15788:344;;;15928:16;15946;15966:69;12817:42;12705;16025:6;16032:1;16025:9;;;;;;;;;;;;;;15966:18;:69::i;:::-;15927:108;;;;16066:50;16085:7;16093:1;16085:10;;;;;;;;;;;;;;16097:8;16107;16066:18;:50::i;:::-;16054:62;;;;15788:344;;;15768:3;;15730:413;;18433:121;1785:5;:3;:5::i;:::-;:11;-1:-1:-1;;;;;1785:11:0;1771:10;:25;1763:77;;;;-1:-1:-1;;;1763:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18476:19:::1;18506:5;:3;:5::i;:::-;:11:::0;-1:-1:-1;;;;;18506:11:0::1;::::0;-1:-1:-1;18506:11:0;18529:17:::1;12982:87:::0;13027:42;12982:87;:::o;13500:714::-;13172:8;;;;13168:112;;;13197:37;;;-1:-1:-1;;;13197:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13168:112;13027:42:::1;1021:16;1040:9;13621:25:::2;::::0;;-1:-1:-1;;;13621:25:0;;-1:-1:-1;;;;;13621:25:0;::::2;;::::0;::::2;::::0;;;1021:28;;-1:-1:-1;12932:42:0::2;::::0;13621:19:::2;::::0;:25;;;;;::::2;::::0;;;;;;;;;12932:42;13621:25;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;13621:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13621:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;13621:25:0;13613:47:::2;;;::::0;;-1:-1:-1;;;13613:47:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13613:47:0;;;;;;;;;;;;;::::2;;13671:16;13690:28;13700:4;13706:11;13690:9;:28::i;:::-;13671:47;;13750:8;13737:9;:21;;13729:52;;;::::0;;-1:-1:-1;;;13729:52:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13729:52:0;;;;;;;;;;;;;::::2;;12705:42;-1:-1:-1::0;;;;;13794:12:0::2;;13814:8;13794:31;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;13794:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13794:31:0;;;;;13838:25;13845:4;13851:11;13838:6;:25::i;:::-;13909:21;:26:::0;13906:141:::2;;13993:42;::::0;:10:::2;::::0;14013:21:::2;13993:42:::0;::::2;;;::::0;::::2;::::0;;;14013:21;13993:10;:42;::::2;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13993:42:0;13906:141;14177:28;::::0;;-1:-1:-1;;;14177:28:0;;14199:4:::2;14177:28;::::0;::::2;::::0;;;14126:4;;-1:-1:-1;;;;;14144:20:0;::::2;::::0;::::2;::::0;14165:10:::2;::::0;14144:20;;14177:13:::2;::::0;:28;;;;;::::2;::::0;;;;;;;;14144:20;14177:28;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;14177:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;14177:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;14177:28:0;14144:62:::2;::::0;;-1:-1:-1;;;;;;14144:62:0::2;::::0;;;;;;-1:-1:-1;;;;;14144:62:0;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;14177:28:::2;::::0;14144:62;;;;;;;-1:-1:-1;14144:62:0;;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;14144:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;14144:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;1072:16:0::1;::::0;-1:-1:-1;;1122:2:0::1;1127:8;1122:20;::::0;-1:-1:-1;1110:9:0::1;1091:28:::0;;:51;:5:::1;:51:::0;;;-1:-1:-1;1189:42:0::1;::::0;;;1243:16:::1;::::0;1260:7;;1290:5:::1;::::0;1270:16;;1269:26:::1;1243:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;1243:53:0::1;-1:-1:-1::0;;;;;1243:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;1243:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;1243:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;;;13500:714:0;;:::o;12867:108::-;12932:42;12867:108;:::o;18562:99::-;1785:5;:3;:5::i;:::-;:11;-1:-1:-1;;;;;1785:11:0;1771:10;:25;1763:77;;;;-1:-1:-1;;;1763:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18611:42:::1;::::0;:10:::1;::::0;18631:21:::1;18611:42:::0;::::1;;;::::0;::::1;::::0;;;18631:21;18611:10;:42;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18611:42:0;18562:99::o:0;12670:78::-;12705:42;12670:78;:::o;13299:79::-;1785:5;:3;:5::i;:::-;:11;-1:-1:-1;;;;;1785:11:0;1771:10;:25;1763:77;;;;-1:-1:-1;;;1763:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13362:8:::1;::::0;;-1:-1:-1;;13350:20:0;::::1;13362:8;::::0;;::::1;13361:9;13350:20;::::0;;13299:79::o;18669:171::-;1785:5;:3;:5::i;:::-;:11;-1:-1:-1;;;;;1785:11:0;1771:10;:25;1763:77;;;;-1:-1:-1;;;1763:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18801:30:::1;::::0;;-1:-1:-1;;;18801:30:0;;18825:4:::1;18801:30;::::0;::::1;::::0;;;18756:6;;-1:-1:-1;;;;;18774:14:0;::::1;::::0;::::1;::::0;18789:10:::1;::::0;18774:14;;18801:15:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;18774:14;18801:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18801:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18801:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18801:30:0;18774:58:::1;::::0;;-1:-1:-1;;;;;;18774:58:0::1;::::0;;;;;;-1:-1:-1;;;;;18774:58:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;18801:30:::1;::::0;18774:58;;;;;;;-1:-1:-1;18774:58:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18774:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18774:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;;;18669:171:0:o;1497:69::-;1529:37;;;-1:-1:-1;;;1529:37:0;;;;;;;;;;;;1497:69;:::o;1989:104::-;1785:5;:3;:5::i;:::-;:11;-1:-1:-1;;;;;1785:11:0;1771:10;:25;1763:77;;;;-1:-1:-1;;;1763:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2065:20:::1;2075:9;2065;:20::i;9105:391::-:0;9198:13;9213;9240:14;9259:26;9270:6;9278;9259:10;:26::i;:::-;9239:46;;;9297:13;9312;9345:32;9353:7;9362:6;9370;9345:7;:32::i;:::-;-1:-1:-1;;;;;9330:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9330:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9330:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9330:62:0;;;;;;;9296:96;;;;;-1:-1:-1;9296:96:0;;-1:-1:-1;;;;;;9426:16:0;;;;;;;:62;;9469:8;9479;9426:62;;;9446:8;9456;9426:62;9403:85;;;;-1:-1:-1;9105:391:0;-1:-1:-1;;;;;;;9105:391:0:o;10032:497::-;10125:14;10171:1;10160:8;:12;10152:58;;;;-1:-1:-1;;;10152:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10241:1;10229:9;:13;:31;;;;;10259:1;10246:10;:14;10229:31;10221:74;;;;;-1:-1:-1;;;10221:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10306:20;10329:17;:8;10342:3;10329:17;:12;:17;:::i;:::-;10306:40;-1:-1:-1;10357:14:0;10374:31;10306:40;10394:10;10374:31;:19;:31;:::i;:::-;10357:48;-1:-1:-1;10416:16:0;10435:40;10459:15;10435:19;:9;10449:4;10435:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;10416:59;;10510:11;10498:9;:23;;;;;;;10032:497;-1:-1:-1;;;;;;;10032:497:0:o;8569:478::-;8658:12;8684:14;8700;8718:26;8729:6;8737;8718:10;:26::i;:::-;8882:32;;;-1:-1:-1;;8882:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;8882:32:0;;;;;8872:43;;;;;;-1:-1:-1;;;;;;8785:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8785:251:0;;;;;;;8775:262;;;;;;;;;8569:478;-1:-1:-1;;;;;8569:478:0:o;18163:258::-;18236:7;18257:14;18273;18291:33;18309:6;18317;18291:17;:33::i;:::-;18256:68;;;;18350:6;-1:-1:-1;;;;;18340:16:0;:6;-1:-1:-1;;;;;18340:16:0;;18337:56;;;18380:1;18373:8;;;;;;18337:56;-1:-1:-1;18412:1:0;;18163:258;-1:-1:-1;;;;18163:258:0:o;10650:452::-;10743:13;10789:1;10777:9;:13;10769:60;;;;-1:-1:-1;;;10769:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10860:1;10848:9;:13;:31;;;;;10878:1;10865:10;:14;10848:31;10840:74;;;;;-1:-1:-1;;;10840:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10925:14;10942:34;10971:4;10942:24;:9;10956;10942:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;10925:51;-1:-1:-1;10987:16:0;11006:34;11036:3;11006:25;:10;11021:9;11006:25;:14;:25;:::i;:34::-;10987:53;;11062:32;11092:1;11075:11;11063:9;:23;;;;;;;11062:32;:29;:32;:::i;:::-;11051:43;10650:452;-1:-1:-1;;;;;;10650:452:0:o;2488:148::-;1529:37;;;-1:-1:-1;;;1529:37:0;;;;;;;;;;;;;2590:39::o;14222:1256::-;14294:23;14319:24;14359:4;-1:-1:-1;;;;;14347:37:0;;14385:11;14347:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14347:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14347:50:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;14347:50:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;7:11;;4:2;;;31:1;28;21:12;4:2;14347:50:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;14347:50:0;;421:4:-1;412:14;;;;14347:50:0;;;;;412:14:-1;14347:50:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14347:50:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;14347:50:0;;421:4:-1;412:14;;;;14347:50:0;;;;;412:14:-1;14347:50:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14347:50:0;;;;;;;;;;;14293:104;;;;14414:9;14426:1;14414:13;;14410:977;14433:6;:13;14429:1;:17;14410:977;;;12932:42;-1:-1:-1;;;;;14471:19:0;;14491:6;14498:1;14491:9;;;;;;;;;;;;;;14471:30;;;;;;;;;;;;;-1:-1:-1;;;;;14471:30:0;-1:-1:-1;;;;;14471:30:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14471:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14471:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14471:30:0;14468:844;;;14522:29;14529:6;14536:1;14529:9;;;;;;;;;;;;;;14540:7;14548:1;14540:10;;;;;;;;;;;;;;14522:6;:29::i;:::-;14468:844;;;14592:23;14637:65;12817:42;14677:6;14684:1;14677:9;;;;;;;14637:65;14592:111;;14725:16;14743;14763:69;12817:42;12705;14822:6;14829:1;14822:9;;;;;;;14763:69;14724:108;;;;14851:16;14870:50;14889:7;14897:1;14889:10;;;;;;;;;;;;;;14901:8;14911;14870:18;:50::i;:::-;14995:38;;;-1:-1:-1;;;14995:38:0;;-1:-1:-1;;;;;14995:38:0;;;;;;;;;;;;;;14851:69;;-1:-1:-1;12705:42:0;;14995:13;;:38;;;;;;;;;;;;;;;-1:-1:-1;12705:42:0;14995:38;;;2:2:-1;;;;27:1;24;17:12;2:2;14995:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14995:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;15082:9:0;;15057:35;;12705:42;;15082:6;;15089:1;;15082:9;;;;;15057:35;15054:243;;15122:4;-1:-1:-1;;;;;15122:9:0;;15132:7;15140:1;15132:10;;;;;;;;;;;;;;15144:1;15155:4;15172:1;15162:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;15162:12:0;87:42:-1;143:17;;-1:-1;15162:12:0;;15122:53;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15122:53:0;-1:-1:-1;;;;;15122:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15122:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15122:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15122:53:0;;;;15054:243;;;15224:4;-1:-1:-1;;;;;15224:9:0;;15234:1;15237:7;15245:1;15237:10;;;;;;;;;;;;;;15257:4;15274:1;15264:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;15264:12:0;87:42:-1;143:17;;-1:-1;15264:12:0;;15224:53;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15224:53:0;-1:-1:-1;;;;;15224:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15224:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15224:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15224:53:0;;;;15054:243;14468:844;;;;;15328:47;15358:4;15364:7;15372:1;15364:10;;;;;;;;;;;;;;15335:6;15342:1;15335:9;;;;;;;;;;;;;;-1:-1:-1;;;;;15328:29:0;;;:47;;;;;:::i;:::-;14448:3;;14410:977;;;;15399:15;15429:4;15399:35;;15445:3;-1:-1:-1;;;;;15445:12:0;;15458:11;15445:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15445:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;2219:141:0;2308:9;-1:-1:-1;;;;;2282:36:0;2295:5;:3;:5::i;:::-;:11;2282:36;;-1:-1:-1;;;;;2295:11:0;;;;2282:36;;2295:11;;2282:36;2343:9;2329:5;:3;:5::i;:::-;:23;;-1:-1:-1;;;;;;2329:23:0;-1:-1:-1;;;;;2329:23:0;;;;;;;;;;-1:-1:-1;2219:141:0:o;8148:329::-;8223:14;8239;8284:6;-1:-1:-1;;;;;8274:16:0;:6;-1:-1:-1;;;;;8274:16:0;;;8266:56;;;;;-1:-1:-1;;;8266:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8361:6;-1:-1:-1;;;;;8352:15:0;:6;-1:-1:-1;;;;;8352:15:0;;:53;;8390:6;8398;8352:53;;;8371:6;8379;8352:53;8333:72;;-1:-1:-1;8333:72:0;-1:-1:-1;;;;;;8424:20:0;;8416:53;;;;;-1:-1:-1;;;8416:53:0;;;;;;;;;;;;-1:-1:-1;;;8416:53:0;;;;;;;;;;;;;;;8148:329;;;;;:::o;5216:142::-;5268:6;5295;;;:30;;-1:-1:-1;;5310:5:0;;;5324:1;5319;5310:5;5319:1;5305:15;;;;;:20;5295:30;5287:63;;;;;-1:-1:-1;;;5287:63:0;;;;;;;;;;;;-1:-1:-1;;;5287:63:0;;;;;;;;;;;;;;4943:128;5027:5;;;5022:16;;;;5014:49;;;;;-1:-1:-1;;;5014:49:0;;;;;;;;;;;;-1:-1:-1;;;5014:49:0;;;;;;;;;;;;;;5079:129;5163:5;;;5158:16;;;;5150:50;;;;;-1:-1:-1;;;5150:50:0;;;;;;;;;;;;-1:-1:-1;;;5150:50:0;;;;;;;;;;;;;;4210:541;4328:41;;;-1:-1:-1;;;4328:41:0;;4353:4;4328:41;;;;-1:-1:-1;;;;;4328:41:0;;;;;;;;;4301:24;;4328:16;;;;;:41;;;;;;;;;;;;;;:16;:41;;;2:2:-1;;;;27:1;24;17:12;2:2;4328:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4328:41:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4328:41:0;;-1:-1:-1;4450:27:0;;;4447:65;;;4494:7;;;4447:65;4586:21;;4583:80;;4624:6;-1:-1:-1;;;;;4624:14:0;;4639:8;4649:1;4624:27;;;;;;;;;;;;;-1:-1:-1;;;;;4624:27:0;-1:-1:-1;;;;;4624:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4624:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4624:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;4583:80:0;4710:6;-1:-1:-1;;;;;4710:14:0;;4725:8;4735:7;4710:33;;;;;;;;;;;;;-1:-1:-1;;;;;4710:33:0;-1:-1:-1;;;;;4710:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4710:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4710:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;4210:541:0;;;:::o

Swarm Source

ipfs://5c2f498802ddb8648fccbd501744fa8547cfd85c500cfd23e4f6d3afc53ae788

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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