Contract 0x9bFcf685e641206115dadc0C9ab17181e1d4975c

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x4ed7a8a4a1e7b294250933380f3d1f65f4c139f5f9e6211b8e788a4389148271Approve32175892023-03-25 23:33:363 days 21 hrs ago0xc21c23e7f54bd5350236e4d68d01e2c3d95f7447 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x5db4bbe89b704fc2710c63258a3086250b688b6499d9ae74d0469ed0b3740bf9Approve32080492023-03-24 14:27:365 days 6 hrs ago0x86d67879ce0ad6bb4f58e87c792890ded462b565 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.00247146
0x79b814dddb3033493b22438790e05ca55115473547bdd39f439d471d46f6e489Approve32003242023-03-23 11:49:006 days 8 hrs ago0x9997f27fcf2d463196ee6b2e3b7596d48d8e7c5e IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x768e1fb58f936dd6f0a40dbe95b55f4eb177b3b3495ef2ce66ecc949e973209cApprove32001802023-03-23 11:19:006 days 9 hrs ago0x9997f27fcf2d463196ee6b2e3b7596d48d8e7c5e IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x6496ad1c9cf4c260a9c5f6f48dea10d28cac9e1bbeeab41bcf39625e6852b72aApprove31943442023-03-22 15:13:127 days 5 hrs ago0x695d390b93e4cd8e09daf3dfae8e86e1ee4105b8 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0xe0cd58f49916468cbadba127825834500a4a1830e9adfe0ff7ab1b306698ef05Approve31927312023-03-22 9:40:307 days 11 hrs ago0x1ec83f24f016e6b455002f15e5a6933e9f199fcd IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002623
0x942aeb402e60dfab07fd161e621745607f9e6eb25b99c40a7c0e528581985bb1Approve31927292023-03-22 9:40:067 days 11 hrs ago0x1ec83f24f016e6b455002f15e5a6933e9f199fcd IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002623
0x1f94cd437eb8d87aa2b8e76495344584d2252ecb6410f1d266f85a3c8bb353a7Approve31927282023-03-22 9:39:547 days 11 hrs ago0x1ec83f24f016e6b455002f15e5a6933e9f199fcd IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x901246a06d7618a32db35c876729e508d831173876a265773bcd12b8e83ab2eaApprove31351352023-03-14 4:28:0015 days 16 hrs ago0x4f27ee7ad5ef8d881f62511a36a245e99eaed800 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0xd114a82c222ed05f1c449c18da09243528207ff30f13bc3f6f53a767300a1a56Approve31107342023-03-09 19:08:3620 days 1 hr ago0xf025066cb626bd6b3ff45231d31c26a1604b471b IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x7cf3c211780a6ed0c18fc6010efcdd96abef5fc16e6ce49604c0350688f3ff33Approve30942252023-03-07 10:50:1222 days 9 hrs ago0xf64aee929b7bf79aee510a5a162b02866677e524 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x8167732add56be02c3f6942a06bed2c104365a04159030a0121daf8df398d33dApprove30891092023-03-06 17:29:1223 days 3 hrs ago0xa01905fd0db6aaa356dcd7e6ac4bccf5168f815d IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x39049b0cdf559473de0490859c44edf44f21f258ab03e8562be31530ffd8d24cApprove30539152023-03-01 17:38:4228 days 3 hrs ago0x5c703f5131bb3268e0dc32913a3c0994eda215fe IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0xb43f40436d5540095fdd95b2c77f67df688684c66396c0a625af3719ed54914bApprove30306492023-02-26 10:03:5431 days 10 hrs ago0x084b4c540f524918f46cd82995c45b559cb0c8b7 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x91852e012b3d7ae0c664d2bc9f5ae6b39bf3ccab4266375bc1c8465992abb939Approve30304502023-02-26 9:22:3631 days 11 hrs ago0xab167b15ecb38bfdfaeffd5b787ecfb1d8b8c43e IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0xe4276842617a2a100d61a5bd98ce51f6f1b33e0c180bf28cbbf21a731d5b2d19Approve30190262023-02-24 18:24:1833 days 2 hrs ago0x6cfee68930295f9d2b5a364eab3bc11d905b2dad IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002459345
0xa3736419c8be37b8d2c2107380ab059b55d1c54a2062c7304af4072047b78de9Approve29516022023-02-15 3:21:0042 days 17 hrs ago0xc21c23e7f54bd5350236e4d68d01e2c3d95f7447 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x0d98be6f97f06e10e42bf283f666855dd4e8a72ff12b420e6864d6acf99d7900Approve29515712023-02-15 3:14:3042 days 17 hrs ago0xc1e7ca17274c36a3358460f93ce30200916688b6 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x767c045e0aacb84b76bc77a9b63146a31dfecd5cccf196db388969311246af2aApprove29515492023-02-15 3:10:0042 days 17 hrs ago0xc1e7ca17274c36a3358460f93ce30200916688b6 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002423
0x7f94679bf23ad923829363e73a5f564e17a52978f570b478b49f093fe909e026Approve29268112023-02-11 15:01:3646 days 5 hrs ago0xfaf58420de97584c6b06f5fe375918f626cf26d7 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0xef8f40cf15b0436828f09a0cc2644492e26e2b1cadc51288334becbc5a9d53c1Approve28517552023-02-01 0:23:1256 days 20 hrs ago0x2710f2cdb4c921bd166bf58c8bff9697e97eb5b1 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0xbb9b806b630524480576945eed0d6f9d6bdb8fb8cebcb09c503409a350293eacApprove27943032023-01-23 21:30:2464 days 23 hrs ago0x574ea2015337754a601744ab5908e037b2001c5d IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x39a647438477b1c070d4e8f6d3a50ccba1f723e95097f01ad9632ad4ee871a01Approve27378272023-01-15 22:01:1272 days 22 hrs ago0xb1d25002139a62e9e0889eae9db99f5c0f763952 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x41c145f81eb4393a5ba819c8e649aaf927e1c25739f0886fcf4e7833cbe81342Approve27269092023-01-14 9:02:1274 days 11 hrs ago0x0a7680f8ee6155307bde02dc34e7cb2c887fb59f IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.004721171
0x12d9662ccd19b27b1bfc8471771aa590258d7e87b351979ddea780860a544a41Approve26616642023-01-05 4:35:5483 days 16 hrs ago0x896c20da40c2a4df9b7c98b16a8d5a95129161a5 IN  0x9bfcf685e641206115dadc0c9ab17181e1d4975c0 GLMR0.002459345
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xfa3a618bf4a95506ceef742d39af1d86124c36bc1642d3d0bdbe3e4c85c982eb9568422022-05-04 14:44:36329 days 5 hrs ago StellaSwap: Factory V1  Contract Creation0 GLMR
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x0aa48bf937ee8f41f1a52d225ef5a6f6961e39fa

Contract Name:
StellaSwapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-02-09
*/

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IStellaSwapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}


// File contracts/amm/libraries/SafeMath.sol



pragma solidity =0.6.12;

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

library SafeMathStellaSwap {
    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 contracts/amm/StellaSwapV2ERC20.sol



pragma solidity =0.6.12;

contract StellaSwapV2ERC20 {
    using SafeMathStellaSwap for uint;

    string public constant name = 'Stella LP';
    string public constant symbol = 'STELLA LP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

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

    constructor() public {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes(name)),
                keccak256(bytes('1')),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'StellaSwapV2: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'StellaSwapV2: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


// File contracts/amm/libraries/Math.sol



pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}


// File contracts/amm/libraries/UQ112x112.sol



pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}


// File contracts/amm/interfaces/IERC20.sol



pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}


// File contracts/amm/interfaces/IStellaSwapV2Callee.sol



pragma solidity >=0.5.0;

interface IStellaSwapV2Callee {
    function stellaswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}


// File contracts/amm/StellaSwapV2Pair.sol



pragma solidity =0.6.12;






interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract StellaSwapV2Pair is StellaSwapV2ERC20 {
    using SafeMathStellaSwap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint32 public swapFee = 25; // uses 0.25% default
    uint32 public devFee = 5; // uses 0.05% default from swap fee

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'StellaSwapV2: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'StellaSwapV2: TRANSFER_FAILED');
    }

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

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'StellaSwapV2: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    function setSwapFee(uint32 _swapFee) external {
        require(_swapFee > 0, "StellaSwapV2: lower then 0");
        require(msg.sender == factory, 'StellaSwapV2: FORBIDDEN');
        require(_swapFee <= 1000, 'StellaSwapV2: FORBIDDEN_FEE');
        swapFee = _swapFee;
    }
    
    function setDevFee(uint32 _devFee) external {
        require(_devFee > 0, "StellaSwapV2: lower then 0");
        require(msg.sender == factory, 'StellaSwapV2: FORBIDDEN');
        require(_devFee <= 500, 'StellaSwapV2: FORBIDDEN_FEE');
        devFee = _devFee;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'StellaSwapV2: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/5th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IStellaSwapV2Factory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(devFee).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20StellaSwap(token0).balanceOf(address(this));
        uint balance1 = IERC20StellaSwap(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IStellaSwapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'StellaSwapV2: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20StellaSwap(_token0).balanceOf(address(this));
        uint balance1 = IERC20StellaSwap(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'StellaSwapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20StellaSwap(_token0).balanceOf(address(this));
        balance1 = IERC20StellaSwap(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'StellaSwapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'StellaSwapV2: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'StellaSwapV2: INVALID_TO');
        if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
        if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
        if (data.length > 0) IStellaSwapV2Callee(to).stellaswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20StellaSwap(_token0).balanceOf(address(this));
        balance1 = IERC20StellaSwap(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'StellaSwapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint _swapFee = swapFee;
        uint balance0Adjusted = balance0.mul(10000).sub(amount0In.mul(_swapFee));
        uint balance1Adjusted = balance1.mul(10000).sub(amount1In.mul(_swapFee));

        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'StellaSwapV2: K');
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20StellaSwap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20StellaSwap(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20StellaSwap(token0).balanceOf(address(this)), IERC20StellaSwap(token1).balanceOf(address(this)), reserve0, reserve1);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_devFee","type":"uint32"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_swapFee","type":"uint32"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526019600c60006101000a81548163ffffffff021916908363ffffffff1602179055506005600c60046101000a81548163ffffffff021916908363ffffffff1602179055506001600d5534801561005957600080fd5b5060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600981526020017f5374656c6c61204c500000000000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206003819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061403d806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636827e7641161010f578063ba9a7a56116100a2578063d505accf11610071578063d505accf14610955578063d6d788c3146109ee578063dd62ed3e14610a22578063fff6cae914610a9a576101e5565b8063ba9a7a561461088b578063bc25cf77146108a9578063c45a0155146108ed578063d21220a714610921576101e5565b80637ecebe00116100de5780637ecebe00146106ed57806389afcb441461074557806395d89b41146107a4578063a9059cbb14610827576101e5565b80636827e764146105fb5780636a6278421461061f57806370a08231146106775780637464fc3d146106cf576101e5565b806323b872dd11610187578063485cc95511610156578063485cc9551461053757806354cf2aeb1461059b5780635909c0d5146105bf5780635a3d5493146105dd576101e5565b806323b872dd1461045657806330adf81f146104da578063313ce567146104f85780633644e51514610519576101e5565b80630902f1ac116101c35780630902f1ac1461034e578063095ea7b3146103a05780630dfe16811461040457806318160ddd14610438576101e5565b8063022c0d9f146101ea57806303c150b01461029757806306fdde03146102cb575b600080fd5b6102956004803603608081101561020057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561025157600080fd5b82018360208201111561026357600080fd5b8035906020019184600183028401116401000000008311171561028557600080fd5b9091929391929390505050610aa4565b005b6102c9600480360360208110156102ad57600080fd5b81019080803563ffffffff16906020019092919050505061126c565b005b6102d361144d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103135780820151818401526020810190506102f8565b50505050905090810190601f1680156103405780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610356611486565b60405180846dffffffffffffffffffffffffffff168152602001836dffffffffffffffffffffffffffff1681526020018263ffffffff168152602001935050505060405180910390f35b6103ec600480360360408110156103b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e3565b60405180821515815260200191505060405180910390f35b61040c6114fa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610440611520565b6040518082815260200191505060405180910390f35b6104c26004803603606081101561046c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b60405180821515815260200191505060405180910390f35b6104e26116f1565b6040518082815260200191505060405180910390f35b610500611718565b604051808260ff16815260200191505060405180910390f35b61052161171d565b6040518082815260200191505060405180910390f35b6105996004803603604081101561054d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611723565b005b6105a361186c565b604051808263ffffffff16815260200191505060405180910390f35b6105c7611882565b6040518082815260200191505060405180910390f35b6105e5611888565b6040518082815260200191505060405180910390f35b61060361188e565b604051808263ffffffff16815260200191505060405180910390f35b6106616004803603602081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118a4565b6040518082815260200191505060405180910390f35b6106b96004803603602081101561068d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd2565b6040518082815260200191505060405180910390f35b6106d7611fea565b6040518082815260200191505060405180910390f35b61072f6004803603602081101561070357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff0565b6040518082815260200191505060405180910390f35b6107876004803603602081101561075b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612008565b604051808381526020018281526020019250505060405180910390f35b6107ac61259d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107ec5780820151818401526020810190506107d1565b50505050905090810190601f1680156108195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108736004803603604081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125d6565b60405180821515815260200191505060405180910390f35b6108936125ed565b6040518082815260200191505060405180910390f35b6108eb600480360360208110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125f3565b005b6108f56128a2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109296128c8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109ec600480360360e081101561096b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506128ee565b005b610a2060048036036020811015610a0457600080fd5b81019080803563ffffffff169060200190929190505050612c03565b005b610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612de4565b6040518082815260200191505060405180910390f35b610aa2612e09565b005b6001600d5414610b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000851180610b335750600084115b610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613f3f6028913960400191505060405180910390fd5b600080610b93611486565b5091509150816dffffffffffffffffffffffffffff1687108015610bc65750806dffffffffffffffffffffffffffff1686105b610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f676024913960400191505060405180910390fd5b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015610cd457508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5374656c6c615377617056323a20494e56414c49445f544f000000000000000081525060200191505060405180910390fd5b60008b1115610d5b57610d5a828a8d61305d565b5b60008a1115610d7057610d6f818a8c61305d565b5b6000888890501115610e42578873ffffffffffffffffffffffffffffffffffffffff1663d3f7e539338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610e2957600080fd5b505af1158015610e3d573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610ea957600080fd5b505afa158015610ebd573d6000803e3d6000fd5b505050506040513d6020811015610ed357600080fd5b810190808051906020019092919050505093508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f4d57600080fd5b505afa158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b810190808051906020019092919050505092505050600089856dffffffffffffffffffffffffffff16038311610fae576000610fc4565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610fe8576000610ffe565b89856dffffffffffffffffffffffffffff160383035b9050600082118061100f5750600081115b611064576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613fb66027913960400191505060405180910390fd5b6000600c60009054906101000a900463ffffffff1663ffffffff16905060006110bc611099838661329490919063ffffffff16565b6110ae6127108961329490919063ffffffff16565b61332990919063ffffffff16565b905060006110f96110d6848661329490919063ffffffff16565b6110eb6127108961329490919063ffffffff16565b61332990919063ffffffff16565b90506111446305f5e1006111368a6dffffffffffffffffffffffffffff168c6dffffffffffffffffffffffffffff1661329490919063ffffffff16565b61329490919063ffffffff16565b611157828461329490919063ffffffff16565b10156111cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5374656c6c615377617056323a204b000000000000000000000000000000000081525060200191505060405180910390fd5b5050506111da848488886133ac565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050506001600d819055505050505050565b60008163ffffffff16116112e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5374656c6c615377617056323a206c6f776572207468656e203000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b6101f48163ffffffff161115611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5374656c6c615377617056323a20464f5242494444454e5f464545000000000081525060200191505060405180910390fd5b80600c60046101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600981526020017f5374656c6c61204c50000000000000000000000000000000000000000000000081525081565b6000806000600860009054906101000a90046dffffffffffffffffffffffffffff1692506008600e9054906101000a90046dffffffffffffffffffffffffffff1691506008601c9054906101000a900463ffffffff169050909192565b60006114f033848461370a565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146116db5761165a82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6116e68484846137f5565b600190509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600c60009054906101000a900463ffffffff1681565b60095481565b600a5481565b600c60049054906101000a900463ffffffff1681565b60006001600d541461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550600080611931611486565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d60208110156119eb57600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a8957600080fd5b505afa158015611a9d573d6000803e3d6000fd5b505050506040513d6020811015611ab357600080fd5b810190808051906020019092919050505090506000611aeb856dffffffffffffffffffffffffffff168461332990919063ffffffff16565b90506000611b12856dffffffffffffffffffffffffffff168461332990919063ffffffff16565b90506000611b208787613989565b90506000805490506000811415611e1d576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637cd07e476040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9b57600080fd5b505afa158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d36578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5257600080fd5b505afa158015611c66573d6000803e3d6000fd5b505050506040513d6020811015611c7c57600080fd5b8101908080519060200190929190505050995060008a118015611cbf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b611d31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4261642064657369726564206c6971756964697479000000000000000000000081525060200191505060405180910390fd5b611e17565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d757374206e6f742068617665206d69677261746f720000000000000000000081525060200191505060405180910390fd5b611e076103e8611df9611df4878961329490919063ffffffff16565b613b81565b61332990919063ffffffff16565b9950611e1660006103e8613be3565b5b50611e80565b611e7d886dffffffffffffffffffffffffffff16611e44838761329490919063ffffffff16565b81611e4b57fe5b04886dffffffffffffffffffffffffffff16611e70848761329490919063ffffffff16565b81611e7757fe5b04613cfd565b98505b60008911611ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613fdd602b913960400191505060405180910390fd5b611ee38a8a613be3565b611eef86868a8a6133ac565b8115611f6757611f606008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661329490919063ffffffff16565b600b819055505b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250505050505050506001600d81905550919050565b60016020528060005260406000206000915090505481565b600b5481565b60046020528060005260406000206000915090505481565b6000806001600d5414612083576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550600080612096611486565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121f857600080fd5b505afa15801561220c573d6000803e3d6000fd5b505050506040513d602081101561222257600080fd5b810190808051906020019092919050505090506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006122858888613989565b9050600080549050806122a1868561329490919063ffffffff16565b816122a857fe5b049a50806122bf858561329490919063ffffffff16565b816122c657fe5b04995060008b1180156122d9575060008a115b61232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f8b602b913960400191505060405180910390fd5b6123383084613d16565b612343878d8d61305d565b61234e868d8c61305d565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d60208110156123df57600080fd5b810190808051906020019092919050505094508573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561245957600080fd5b505afa15801561246d573d6000803e3d6000fd5b505050506040513d602081101561248357600080fd5b810190808051906020019092919050505093506124a285858b8b6133ac565b811561251a576125136008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661329490919063ffffffff16565b600b819055505b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600981526020017f5354454c4c41204c50000000000000000000000000000000000000000000000081525081565b60006125e33384846137f5565b6001905092915050565b6103e881565b6001600d541461266b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506127ab82846127a6600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561275d57600080fd5b505afa158015612771573d6000803e3d6000fd5b505050506040513d602081101561278757600080fd5b810190808051906020019092919050505061332990919063ffffffff16565b61305d565b61289581846128906008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561284757600080fd5b505afa15801561285b573d6000803e3d6000fd5b505050506040513d602081101561287157600080fd5b810190808051906020019092919050505061332990919063ffffffff16565b61305d565b50506001600d8190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b42841015612964576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5374656c6c615377617056323a2045585049524544000000000000000000000081525060200191505060405180910390fd5b60006003547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612b07573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b7b57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5374656c6c615377617056323a20494e56414c49445f5349474e41545552450081525060200191505060405180910390fd5b612bf889898961370a565b505050505050505050565b60008163ffffffff1611612c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5374656c6c615377617056323a206c6f776572207468656e203000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5374656c6c615377617056323a20464f5242494444454e00000000000000000081525060200191505060405180910390fd5b6103e88163ffffffff161115612dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5374656c6c615377617056323a20464f5242494444454e5f464545000000000081525060200191505060405180910390fd5b80600c60006101000a81548163ffffffff021916908363ffffffff16021790555050565b6002602052816000526040600020602052806000526040600020600091509150505481565b6001600d5414612e81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5374656c6c615377617056323a204c4f434b454400000000000000000000000081525060200191505060405180910390fd5b6000600d81905550613053600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d6020811015612f3f57600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612fd957600080fd5b505afa158015612fed573d6000803e3d6000fd5b505050506040513d602081101561300357600080fd5b8101908080519060200190929190505050600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff166133ac565b6001600d81905550565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106131745780518252602082019150602081019050602083039250613151565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131d6576040519150601f19603f3d011682016040523d82523d6000602084013e6131db565b606091505b509150915081801561321b575060008151148061321a575080806020019051602081101561320857600080fd5b81019080805190602001909291905050505b5b61328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5374656c6c615377617056323a205452414e534645525f4641494c454400000081525060200191505060405180910390fd5b5050505050565b6000808214806132b157508282838502925082816132ae57fe5b04145b613323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840391508111156133a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff16841115801561341c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168311155b61348e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5374656c6c615377617056323a204f564552464c4f570000000000000000000081525060200191505060405180910390fd5b6000640100000000428161349e57fe5b06905060006008601c9054906101000a900463ffffffff168203905060008163ffffffff161180156134e157506000846dffffffffffffffffffffffffffff1614155b80156134fe57506000836dffffffffffffffffffffffffffff1614155b156135e0578063ffffffff166135438561351786613e30565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613e5b90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16026009600082825401925050819055508063ffffffff166135b18461358587613e30565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613e5b90919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600a600082825401925050819055505b85600860006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550846008600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550816008601c6101000a81548163ffffffff021916908363ffffffff1602179055507f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff1660405180836dffffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61384781600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138dc81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ebb90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156139f457600080fd5b505afa158015613a08573d6000803e3d6000fd5b505050506040513d6020811015613a1e57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141591506000600b5490508215613b675760008114613b62576000613ab6613ab1866dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff1661329490919063ffffffff16565b613b81565b90506000613ac383613b81565b905080821115613b5f576000613af6613ae5838561332990919063ffffffff16565b60005461329490919063ffffffff16565b90506000613b3783613b29600c60049054906101000a900463ffffffff1663ffffffff168761329490919063ffffffff16565b613ebb90919063ffffffff16565b90506000818381613b4457fe5b0490506000811115613b5b57613b5a8782613be3565b5b5050505b50505b613b79565b60008114613b78576000600b819055505b5b505092915050565b60006003821115613bd0578190506000600160028481613b9d57fe5b040190505b81811015613bca57809150600281828581613bb957fe5b040181613bc257fe5b049050613ba2565b50613bde565b60008214613bdd57600190505b5b919050565b613bf881600054613ebb90919063ffffffff16565b600081905550613c5081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ebb90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310613d0c5781613d0e565b825b905092915050565b613d6881600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461332990919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dc08160005461332990919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681613eb257fe5b04905092915050565b6000828284019150811015613f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe5374656c6c615377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e45445374656c6c615377617056323a20494e53554646494349454e545f494e5055545f414d4f554e545374656c6c615377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a264697066735822122064dc4327e2006ee77e4a3acc162bce7df613ab59d31906adbc43de2dc2e04c7164736f6c634300060c0033

Deployed ByteCode Sourcemap

7714:11006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16104:1983;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10438:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1628:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8862:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3679:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8024:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1768:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3981:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2060:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1726:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1917:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9925:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8559:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8375:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8414;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8614:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12706:1665;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1799:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8453:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2175:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14483:1509;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1676:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7845:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18136:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7995:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8052:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4290:680;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10146:280;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1847:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18539:178;;;:::i;:::-;;16104:1983;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;16231:1:::1;16218:10;:14;:32;;;;16249:1;16236:10;:14;16218:32;16210:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16307:17;16326::::0;16348:13:::1;:11;:13::i;:::-;16306:55;;;;;16408:9;16395:22;;:10;:22;:48;;;;;16434:9;16421:22;;:10;:22;16395:48;16387:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16497:13;16521::::0;16611:15:::1;16629:6;;;;;;;;;;;16611:24;;16646:15;16664:6;;;;;;;;;;;16646:24;;16695:7;16689:13;;:2;:13;;;;:30;;;;;16712:7;16706:13;;:2;:13;;;;16689:30;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16776:1;16763:10;:14;16759:58;;;16779:38;16793:7;16802:2;16806:10;16779:13;:38::i;:::-;16759:58;16879:1;16866:10;:14;16862:58;;;16882:38;16896:7;16905:2;16909:10;16882:13;:38::i;:::-;16862:58;16983:1;16969:4;;:11;;:15;16965:103;;;17006:2;16986:40;;;17027:10;17039;17051;17063:4;;16986:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16965:103;17107:7;17090:35;;;17134:4;17090:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17079:61;;17179:7;17162:35;;;17206:4;17162:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;17151:61;;8822:1;;17234:14;17274:10;17262:9;:22;;;17251:8;:33;:75;;17325:1;17251:75;;;17311:10;17299:9;:22;;;17287:8;:35;17251:75;17234:92;;17337:14;17377:10;17365:9;:22;;;17354:8;:33;:75;;17428:1;17354:75;;;17414:10;17402:9;:22;;;17390:8;:35;17354:75;17337:92;;17460:1;17448:9;:13;:30;;;;17477:1;17465:9;:13;17448:30;17440:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:13;17624:7;;;;;;;;;;;17608:23;;;;17642:21;17666:48;17690:23;17704:8;17690:9;:13;;:23;;;;:::i;:::-;17666:19;17679:5;17666:8;:12;;:19;;;;:::i;:::-;:23;;:48;;;;:::i;:::-;17642:72;;17725:21;17749:48;17773:23;17787:8;17773:9;:13;;:23;;;;:::i;:::-;17749:19;17762:5;17749:8;:12;;:19;;;;:::i;:::-;:23;;:48;;;;:::i;:::-;17725:72;;17860:44;17895:8;17860:30;17880:9;17860:30;;17865:9;17860:15;;:19;;:30;;;;:::i;:::-;:34;;:44;;;;:::i;:::-;17818:38;17839:16;17818;:20;;:38;;;;:::i;:::-;:86;;17810:114;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8822:1;;;17948:49;17956:8;17966;17976:9;17987;17948:7;:49::i;:::-;18076:2;18013:66;;18018:10;18013:66;;;18030:9;18041;18052:10;18064;18013:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;8845::::0;8834:8;:12;;;;16104:1983;;;;;:::o;10438:273::-;10511:1;10501:7;:11;;;10493:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10576:7;;;;;;;;;;;10562:21;;:10;:21;;;10554:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10641:3;10630:7;:14;;;;10622:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:7;10687:6;;:16;;;;;;;;;;;;;;;;;;10438:273;:::o;1628:41::-;;;;;;;;;;;;;;;;;;;:::o;8862:231::-;8906:17;8925;8944:26;8995:8;;;;;;;;;;;8983:20;;9026:8;;;;;;;;;;;9014:20;;9067:18;;;;;;;;;;;9045:40;;8862:231;;;:::o;3679:147::-;3743:4;3760:36;3769:10;3781:7;3790:5;3760:8;:36::i;:::-;3814:4;3807:11;;3679:147;;;;:::o;8024:21::-;;;;;;;;;;;;;:::o;1768:24::-;;;;:::o;3981:301::-;4059:4;4116:2;4080:9;:15;4090:4;4080:15;;;;;;;;;;;;;;;:27;4096:10;4080:27;;;;;;;;;;;;;;;;:39;4076:140;;4166:38;4198:5;4166:9;:15;4176:4;4166:15;;;;;;;;;;;;;;;:27;4182:10;4166:27;;;;;;;;;;;;;;;;:31;;:38;;;;:::i;:::-;4136:9;:15;4146:4;4136:15;;;;;;;;;;;;;;;:27;4152:10;4136:27;;;;;;;;;;;;;;;:68;;;;4076:140;4226:26;4236:4;4242:2;4246:5;4226:9;:26::i;:::-;4270:4;4263:11;;3981:301;;;;;:::o;2060:108::-;2102:66;2060:108;;;:::o;1726:35::-;1759:2;1726:35;:::o;1917:31::-;;;;:::o;9925:213::-;10021:7;;;;;;;;;;;10007:21;;:10;:21;;;9999:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10096:7;10087:6;;:16;;;;;;;;;;;;;;;;;;10123:7;10114:6;;:16;;;;;;;;;;;;;;;;;;9925:213;;:::o;8559:26::-;;;;;;;;;;;;;:::o;8375:32::-;;;;:::o;8414:::-;;;;:::o;8614:24::-;;;;;;;;;;;;;:::o;12706:1665::-;12755:14;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;12783:17:::1;12802::::0;12824:13:::1;:11;:13::i;:::-;12782:55;;;;;12863:13;12896:6;;;;;;;;;;;12879:34;;;12922:4;12879:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12863:65;;12939:13;12972:6;;;;;;;;;;;12955:34;;;12998:4;12955:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12939:65;;13015:12;13030:23;13043:9;13030:23;;:8;:12;;:23;;;;:::i;:::-;13015:38;;13064:12;13079:23;13092:9;13079:23;;:8;:12;;:23;;;;:::i;:::-;13064:38;;13115:10;13128:30;13137:9;13148;13128:8;:30::i;:::-;13115:43;;13169:17;13189:11:::0;::::1;13169:31;;13309:1;13293:12;:17;13289:754;;;13327:16;13367:7;;;;;;;;;;;13346:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13327:59;;13419:8;13405:22;;:10;:22;;;13401:500;;;13470:8;13460:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13448:50;;13537:1;13525:9;:13;:41;;;;;13563:2;13542:9;:24;;13525:41;13517:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13401:500;;;13661:1;13641:22;;:8;:22;;;13633:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13721:54;7886:5;13721:31;13731:20;13743:7;13731;:11;;:20;;;;:::i;:::-;13721:9;:31::i;:::-;:35;;:54;;;;:::i;:::-;13709:66;;13794:36;13808:1;7886:5;13794;:36::i;:::-;13401:500;13289:754;;;;13945:86;13982:9;13954:37;;:25;13966:12;13954:7;:11;;:25;;;;:::i;:::-;:37;;;;;;14021:9;13993:37;;:25;14005:12;13993:7;:11;;:25;;;;:::i;:::-;:37;;;;;;13945:8;:86::i;:::-;13933:98;;13289:754;14073:1;14061:9;:13;14053:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14133:20;14139:2;14143:9;14133:5;:20::i;:::-;14166:49;14174:8;14184;14194:9;14205;14166:7;:49::i;:::-;14230:5;14226:47;;;14245:28;14264:8;;;;;;;;;;;14245:28;;14250:8;;;;;;;;;;;14245:14;;:18;;:28;;;;:::i;:::-;14237:5;:36;;;;14226:47;14334:10;14329:34;;;14346:7;14355;14329:34;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;;;8845::::0;8834:8;:12;;;;12706:1665;;;:::o;1799:41::-;;;;;;;;;;;;;;;;;:::o;8453:17::-;;;;:::o;2175:38::-;;;;;;;;;;;;;;;;;:::o;14483:1509::-;14532:12;14546;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;14572:17:::1;14591::::0;14613:13:::1;:11;:13::i;:::-;14571:55;;;;;14652:15;14670:6;;;;;;;;;;;14652:24;;14733:15;14751:6;;;;;;;;;;;14733:24;;14814:13;14847:7;14830:35;;;14874:4;14830:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14814:66;;14891:13;14924:7;14907:35;;;14951:4;14907:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;14891:66;;14968:14;14985:9;:24;15003:4;14985:24;;;;;;;;;;;;;;;;14968:41;;15022:10;15035:30;15044:9;15055;15035:8;:30::i;:::-;15022:43;;15076:17;15096:11:::0;::::1;15076:31;;15232:12;15206:23;15220:8;15206:9;:13;;:23;;;;:::i;:::-;:38;;;;;;15196:48;;15339:12;15313:23;15327:8;15313:9;:13;;:23;;;;:::i;:::-;:38;;;;;;15303:48;;15428:1;15418:7;:11;:26;;;;;15443:1;15433:7;:11;15418:26;15410:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15503:31;15517:4;15524:9;15503:5;:31::i;:::-;15545:35;15559:7;15568:2;15572:7;15545:13;:35::i;:::-;15591;15605:7;15614:2;15618:7;15591:13;:35::i;:::-;15665:7;15648:35;;;15692:4;15648:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15637:61;;15737:7;15720:35;;;15764:4;15720:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;15709:61;;15783:49;15791:8;15801;15811:9;15822;15783:7;:49::i;:::-;15847:5;15843:47;;;15862:28;15881:8;;;;;;;;;;;15862:28;;15867:8;;;;;;;;;;;15862:14;;:18;;:28;;;;:::i;:::-;15854:5;:36;;;;15843:47;15981:2;15946:38;;15951:10;15946:38;;;15963:7;15972;15946:38;;;;;;;;;;;;;;;;;;;;;;;;8822:1;;;;;;;;;8845::::0;8834:8;:12;;;;14483:1509;;;:::o;1676:43::-;;;;;;;;;;;;;;;;;;;:::o;3834:139::-;3894:4;3911:32;3921:10;3933:2;3937:5;3911:9;:32::i;:::-;3961:4;3954:11;;3834:139;;;;:::o;7845:46::-;7886:5;7845:46;:::o;18136:354::-;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;18187:15:::1;18205:6;;;;;;;;;;;18187:24;;18237:15;18255:6;;;;;;;;;;;18237:24;;18287:92;18301:7;18310:2;18314:64;18369:8;;;;;;;;;;;18314:64;;18331:7;18314:35;;;18358:4;18314:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;18287:13;:92::i;:::-;18390;18404:7;18413:2;18417:64;18472:8;;;;;;;;;;;18417:64;;18434:7;18417:35;;;18461:4;18417:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:54;;:64;;;;:::i;:::-;18390:13;:92::i;:::-;8822:1;;8845::::0;8834:8;:12;;;;18136:354;:::o;7995:22::-;;;;;;;;;;;;;:::o;8052:21::-;;;;;;;;;;;;;:::o;4290:680::-;4436:15;4424:8;:27;;4416:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:14;4593:16;;2102:66;4649:15;;4666:5;4673:7;4682:5;4689:6;:13;4696:5;4689:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;4706:8;4638:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:88;;;;;;4529:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:237;;;;;;4488:254;;4753:24;4780:26;4790:6;4798:1;4801;4804;4780:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4753:53;;4853:1;4825:30;;:16;:30;;;;:59;;;;;4879:5;4859:25;;:16;:25;;;4825:59;4817:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4931:31;4940:5;4947:7;4956:5;4931:8;:31::i;:::-;4290:680;;;;;;;;;:::o;10146:280::-;10222:1;10211:8;:12;;;10203:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10287:7;;;;;;;;;;;10273:21;;:10;:21;;;10265:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:4;10341:8;:16;;;;10333:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10410:8;10400:7;;:18;;;;;;;;;;;;;;;;;;10146:280;:::o;1847:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18539:178::-;8762:1;8750:8;;:13;8742:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8810:1;8799:8;:12;;;;18580:129:::1;18605:6;;;;;;;;;;;18588:34;;;18631:4;18588:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18656:6;;;;;;;;;;;18639:34;;;18682:4;18639:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;18690:8;;;;;;;;;;;18700;;;;;;;;;;;18580:7;:129::i;:::-;8845:1:::0;8834:8;:12;;;;18539:178::o;9101:290::-;9183:12;9197:17;9218:5;:10;;7950:34;;;;;;;;;;;;;;;;;7940:45;;;;;;9262:2;9266:5;9229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9218:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9182:91;;;;9292:7;:57;;;;;9319:1;9304:4;:11;:16;:44;;;;9335:4;9324:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9304:44;9292:57;9284:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9101:290;;;;;:::o;1322:142::-;1374:6;1406:1;1401;:6;:30;;;;1430:1;1425;1420;1416;:5;1412:9;;;1411:15;;;;;;:20;1401:30;1393:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1322:142;;;;:::o;1185:129::-;1237:6;1279:1;1273;1269;:5;1265:9;;;1264:16;;1256:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:129;;;;:::o;10796:863::-;10928:2;10908:23;;:8;:23;;:50;;;;;10955:2;10935:23;;:8;:23;;10908:50;10900:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10996:21;11045:5;11027:15;:23;;;;;;10996:55;;11062:18;11100;;;;;;;;;;;11083:14;:35;11062:56;;11170:1;11156:11;:15;;;:33;;;;;11188:1;11175:9;:14;;;;11156:33;:51;;;;;11206:1;11193:9;:14;;;;11156:51;11152:336;;;11362:11;11309:64;;11314:44;11348:9;11314:27;11331:9;11314:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;11309:50;;:64;11285:20;;:88;;;;;;;;;;;11465:11;11412:64;;11417:44;11451:9;11417:27;11434:9;11417:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;11412:50;;:64;11388:20;;:88;;;;;;;;;;;11152:336;11517:8;11498;;:28;;;;;;;;;;;;;;;;;;11556:8;11537;;:28;;;;;;;;;;;;;;;;;;11597:14;11576:18;;:35;;;;;;;;;;;;;;;;;;11627:24;11632:8;;;;;;;;;;;11642;;;;;;;;;;;11627:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;10796:863;;;;;;:::o;3274:169::-;3383:5;3355:9;:16;3365:5;3355:16;;;;;;;;;;;;;;;:25;3372:7;3355:25;;;;;;;;;;;;;;;:33;;;;3420:7;3404:31;;3413:5;3404:31;;;3429:5;3404:31;;;;;;;;;;;;;;;;;;3274:169;;;:::o;3451:220::-;3545:26;3565:5;3545:9;:15;3555:4;3545:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3527:9;:15;3537:4;3527:15;;;;;;;;;;;;;;;:44;;;;3598:24;3616:5;3598:9;:13;3608:2;3598:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;3582:9;:13;3592:2;3582:13;;;;;;;;;;;;;;;:40;;;;3653:2;3638:25;;3647:4;3638:25;;;3657:5;3638:25;;;;;;;;;;;;;;;;;;3451:220;;;:::o;11749:845::-;11822:10;11845:13;11882:7;;;;;;;;;;;11861:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11845:53;;11934:1;11917:19;;:5;:19;;;;11909:27;;11947:11;11961:5;;11947:19;;11996:5;11992:595;;;12032:1;12022:6;:11;12018:499;;12054:10;12067:41;12077:30;12097:9;12077:30;;12082:9;12077:15;;:19;;:30;;;;:::i;:::-;12067:9;:41::i;:::-;12054:54;;12127:14;12144:17;12154:6;12144:9;:17::i;:::-;12127:34;;12192:9;12184:5;:17;12180:322;;;12226:14;12243:37;12259:20;12269:9;12259:5;:9;;:20;;;;:::i;:::-;12243:11;;:15;;:37;;;;:::i;:::-;12226:54;;12303:16;12322:32;12344:9;12322:17;12332:6;;;;;;;;;;;12322:17;;:5;:9;;:17;;;;:::i;:::-;:21;;:32;;;;:::i;:::-;12303:51;;12377:14;12406:11;12394:9;:23;;;;;;12377:40;;12456:1;12444:9;:13;12440:42;;;12459:23;12465:5;12472:9;12459:5;:23::i;:::-;12440:42;12180:322;;;;12018:499;;;11992:595;;;12548:1;12538:6;:11;12534:53;;12574:1;12566:5;:9;;;;12534:53;11992:595;11749:845;;;;;;:::o;5344:303::-;5389:6;5416:1;5412;:5;5408:232;;;5438:1;5434:5;;5454:6;5471:1;5467;5463;:5;;;;;;:9;5454:18;;5487:92;5498:1;5494;:5;5487:92;;;5524:1;5520:5;;5562:1;5557;5553;5549;:5;;;;;;:9;5548:15;;;;;;5544:19;;5487:92;;;5408:232;;;;5605:1;5600;:6;5596:44;;5627:1;5623:5;;5596:44;5408:232;5344:303;;;:::o;2848:201::-;2921:22;2937:5;2921:11;;:15;;:22;;;;:::i;:::-;2907:11;:36;;;;2970:24;2988:5;2970:9;:13;2980:2;2970:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;2954:9;:13;2964:2;2954:13;;;;;;;;;;;;;;;:40;;;;3031:2;3010:31;;3027:1;3010:31;;;3035:5;3010:31;;;;;;;;;;;;;;;;;;2848:201;;:::o;5130:96::-;5182:6;5209:1;5205;:5;:13;;5217:1;5205:13;;;5213:1;5205:13;5201:17;;5130:96;;;;:::o;3057:209::-;3136:26;3156:5;3136:9;:15;3146:4;3136:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;3118:9;:15;3128:4;3118:15;;;;;;;;;;;;;;;:44;;;;3187:22;3203:5;3187:11;;:15;;:22;;;;:::i;:::-;3173:11;:36;;;;3248:1;3225:33;;3234:4;3225:33;;;3252:5;3225:33;;;;;;;;;;;;;;;;;;3057:209;;:::o;6003:120::-;6053:9;5948:6;6087:1;6079:10;;:17;6075:21;;6003:120;;;:::o;6194:108::-;6254:9;6292:1;6284:10;;6280:14;;:1;:14;;;;;;;;6276:18;;6194:108;;;;:::o;1049:128::-;1101:6;1143:1;1137;1133;:5;1129:9;;;1128:16;;1120:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:128;;;;:::o

Swarm Source

ipfs://64dc4327e2006ee77e4a3acc162bce7df613ab59d31906adbc43de2dc2e04c71
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.