Contract 0x80f4854ac56075e9aa7bb7456084f9a79083035c 1

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb00094f01047691a8206e67ebc080a80cc01e8cebb7c5d3db998c55b66d9fddb0x6080604074637822021-03-27 21:16:13247 days 23 hrs ago0x90309140fe9b02d20bc2601960dfa837d6e06d19 IN  Contract Creation0 BNB0.0833129
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MiningPool

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-03-27
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.7.5;

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function totalSupply() external view returns (uint256);

    function burn(uint256 value) external returns (bool);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}

contract PoolRewardToken {
    mapping (address => uint256) public _balanceOf;

    string public constant name = "Modern Liquidity Token";
    string public constant symbol = "MLT";
    uint8 public constant decimals = 18;
    uint256 public totalSupply = 0;
    mapping(address => mapping(address => uint256)) private _allowances;

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

    function balanceOf(address account) public view returns (uint256 value) {
        return _balanceOf[account];
    }

    function transfer(address to, uint256 value) public returns (bool success) {
        require(_balanceOf[msg.sender] >= value);

        _balanceOf[msg.sender] -= value;  // deduct from sender's balance
        _balanceOf[to] += value;          // add to recipient's balance
        emit Transfer(msg.sender, to, value);
        return true;
    }

    function transferMultiple(address[] memory to, uint256[] memory values) public returns (bool success) {
        require(to.length == values.length);

        for (uint256 i = 0; i < to.length; i++) {
            require(_balanceOf[msg.sender] >= values[i]);

            _balanceOf[msg.sender] -= values[i];
            _balanceOf[to[i]] += values[i];
            emit Transfer(msg.sender, to[i], values[i]);
        }
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value) public returns (bool success) {
        _allowances[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool success) {
        require(value <= _balanceOf[from]);
        require(value <= _allowances[from][msg.sender]);

        _balanceOf[from] -= value;
        _balanceOf[to] += value;
        _allowances[from][msg.sender] -= value;
        emit Transfer(from, to, value);
        return true;
    }

    function mint(address to, uint256 value) internal {
        totalSupply += value;
        _balanceOf[to] += value;
        emit Transfer(address(0), to, value);
    }

    function burn(uint256 value) public returns (bool success) {
        require(value <= _balanceOf[msg.sender]);
        totalSupply -= value;
        _balanceOf[msg.sender] -= value;
        return true;
    }
}

abstract contract Ownable {
    address public owner_;

    constructor() {
        owner_ = msg.sender;
    }

    modifier onlyOwner() {
        if (msg.sender == owner_)
            _;
    }

    function transferOwnership(address newOwner) onlyOwner public {
        if (newOwner != address(0)) owner_ = newOwner;
    }
}

contract MiningPool is PoolRewardToken, Ownable {
    uint256 public constant MAX_SUPPLY = 35000000 * 10**18;
    uint8 public constant INITIAL_BLOCK_STEP = 255;

    struct Investor {
        uint256[14] deposits;
        uint256 lastZeroPtr;
        uint256[14] depositUnlockTime;
        bool initialized;
    }

    struct BlockInfo {
        uint256[14] totalDeposits;
        uint256[14] poolRewards;
        uint8 blockStep;
        uint256 pointLength;
        uint256 pointBlock;
        uint256 pointStartEthereumBlock;
        uint256 pointEndEthereumBlock;
    }

    uint8 public BLOCK_STEP = INITIAL_BLOCK_STEP;
    uint256 public deployBlock;
    uint256 public lastRecordedBlock;
    BlockInfo[1000000] public history;
    uint256 public arrayPointer;
    mapping (address => Investor) public investors;
    bool public miningFinished = false;
    uint256 public feesBalance;

    IERC20[14] public tokens;
    uint256 public feeAmount = 25714285714285717;  // 1.26 / .98 * .02
    uint256[14] public poolRewards = [10**18 * 12 / 10, 10**18 * 6 / 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];  // total: 1.26 tkns
    uint256[14] public totalDeposits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    uint256[14] public lockDurations = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    uint256[14] public minDeposits = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];


    event Deposit(address indexed investor, uint256 indexed token, uint256 value);
    event Harvest(address indexed investor, uint256 value);
    event Withdraw(address indexed investor, uint256 indexed token, uint256 value);
    event FeesSpent(address indexed to, uint256 value);
    event StepChanged(uint8 newValue);
    event LockDurationChanged(uint256[14] values);
    event PoolRewardsChanged(uint256[14] values);
    event MinDepositsChanged(uint256[14] values);

    constructor() {
        deployBlock = block.number;
        emit StepChanged(BLOCK_STEP);
        emit LockDurationChanged(lockDurations);

        history[0].poolRewards = poolRewards;
        history[0].blockStep = BLOCK_STEP;
        history[0].pointStartEthereumBlock = history[0].pointEndEthereumBlock = deployBlock;

        arrayPointer++;
    }

    function setTokenAddress(uint index, address token) public {
        require(address(tokens[index]) == address(0), "Address was already set");
        tokens[index] = IERC20(token);
    }

    function setBlockStep(uint8 value) public onlyOwner {
        recordHistory();
        BLOCK_STEP = value;
        emit StepChanged(value);
    }

    function setLockDurations(uint256[14] memory v) public onlyOwner {
        lockDurations = v;
        emit LockDurationChanged(v);
    }

    function setMinDeposits(uint256[14] memory v) public onlyOwner {
        minDeposits = v;
        emit MinDepositsChanged(v);
    }

    // subtract 2% when setting pool rewards
    function setPoolRewards(uint256[14] memory v) public onlyOwner {
        recordHistory();
        uint256 sum = v[0] + v[1] + v[2] + v[3] + v[4] + v[5] + v[6] + v[7] + v[8] + v[9] + v[10] + v[11] + v[12] + v[13];
        feeAmount = sum * 2 / 98;  // 2% from given 98%
        poolRewards = v;
        emit PoolRewardsChanged(v);
    }

    function currentBlock() public view returns (uint256) {
        BlockInfo memory prevBlock = history[arrayPointer-1];
        return prevBlock.pointBlock + (block.number - prevBlock.pointEndEthereumBlock) / BLOCK_STEP;
    }

    function getBlockTotalDeposits(uint256 ptr) public view returns (uint256[14] memory) {
        if (ptr >= arrayPointer)
            return totalDeposits;
        return history[ptr].totalDeposits;
    }

    function getPoolRewards(uint256 ptr) public view returns (uint256[14] memory) {
        if (miningFinished)
            return [uint256(0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
        if (ptr >= arrayPointer)
            return poolRewards;
        return history[ptr].poolRewards;
    }

    function getPointLength(uint256 ptr) public view returns (uint256) {  //
        if (ptr >= arrayPointer)
            return currentBlock() - history[arrayPointer-1].pointBlock;
        return history[ptr].pointLength;
    }

    function recordHistory() public returns (bool) {
        if (recordHistoryNeeded()) {
            _recordHistory();
            return true;
        }
        return false;
    }

    function recordHistoryNeeded() public view returns (bool) {
        return !miningFinished && lastRecordedBlock < currentBlock();
    }

    function _recordHistory() internal {
        // miningFinished check is in recordHistoryNeeded();

        uint256 currentBlk = currentBlock();

        BlockInfo memory prevBlock = history[arrayPointer-1];
        uint256 pointLength = currentBlk - prevBlock.pointBlock;
        history[arrayPointer].totalDeposits = totalDeposits;
        history[arrayPointer].poolRewards = poolRewards;
        history[arrayPointer].pointLength = pointLength;
        history[arrayPointer].blockStep = BLOCK_STEP;
        history[arrayPointer].pointBlock = currentBlk;
        history[arrayPointer].pointStartEthereumBlock = prevBlock.pointEndEthereumBlock;
        history[arrayPointer].pointEndEthereumBlock = prevBlock.pointEndEthereumBlock + pointLength * BLOCK_STEP;

        feesBalance += pointLength * feeAmount;

        arrayPointer++;
        lastRecordedBlock = currentBlk;
    }

    function getRewardSum(address sender) public view returns (uint256) {
        Investor memory investor = investors[sender];

        if (!investor.initialized || !canHarvest(sender))
            return 0;

        uint256[14] memory deposits = investor.deposits;

        uint256 reward = 0;

        for (uint256 i = investor.lastZeroPtr; i <= arrayPointer; i++) {
            uint256[14] memory poolRewards_ = getPoolRewards(i);
            uint256[14] memory totalDeposits_ = getBlockTotalDeposits(i);
            uint256 pointLength = getPointLength(i);
            for (uint256 j = 0; j < 14; j++) {
                uint256 td = totalDeposits_[j];
                if (td == 0) continue;
                uint256 pr = poolRewards_[j];
                uint256 d = deposits[j];
                reward += pr * pointLength * d / td;
            }
        }

        return reward;
    }

    function _deposit(uint256 tokenIndex, uint256 amount) internal {
        require(amount > 0, "Invalid amount");
        require(amount >= minDeposits[tokenIndex] || msg.sender == owner_, "Amount is too little");

        if (canHarvest(msg.sender))
            harvestReward();  // history is recorded while harvesting
        else
            recordHistory();

        require(tokens[tokenIndex].allowance(msg.sender, address(this)) >= amount, "Insufficient token allowance");
        investors[msg.sender].deposits[tokenIndex] += amount;
        totalDeposits[tokenIndex] += amount;
        tokens[tokenIndex].transferFrom(msg.sender, address(this), amount);

        investors[msg.sender].initialized = true;
        investors[msg.sender].lastZeroPtr = arrayPointer;
        investors[msg.sender].depositUnlockTime[tokenIndex] = block.timestamp + lockDurations[tokenIndex];
        emit Deposit(msg.sender, tokenIndex, amount);
    }

    function deposit0(uint256 amount) public {
        _deposit(0, amount);
    }

    function deposit1(uint256 amount) public {
        _deposit(1, amount);
    }

    function deposit2(uint256 amount) public {
        _deposit(2, amount);
    }

    function deposit3(uint256 amount) public {
        _deposit(3, amount);
    }

    function deposit4(uint256 amount) public {
        _deposit(4, amount);
    }

    function deposit5(uint256 amount) public {
        _deposit(5, amount);
    }

    function deposit6(uint256 amount) public {
        _deposit(6, amount);
    }

    function deposit7(uint256 amount) public {
        _deposit(7, amount);
    }

    function deposit8(uint256 amount) public {
        _deposit(8, amount);
    }

    function deposit9(uint256 amount) public {
        _deposit(9, amount);
    }

    function deposit10(uint256 amount) public {
        _deposit(10, amount);
    }

    function deposit11(uint256 amount) public {
        _deposit(11, amount);
    }

    function deposit12(uint256 amount) public {
        _deposit(12, amount);
    }

    function deposit13(uint256 amount) public {
        _deposit(13, amount);
    }

    function canHarvest(address sender) public view returns (bool) {
        Investor memory investor = investors[sender];
        return investor.deposits[0] + investor.deposits[1] +
               investor.deposits[2] + investor.deposits[3] +
               investor.deposits[4] + investor.deposits[5] +
               investor.deposits[6] + investor.deposits[7] +
               investor.deposits[8] + investor.deposits[9] +
               investor.deposits[10] + investor.deposits[11] +
               investor.deposits[12] + investor.deposits[13] > 0;
    }

    function harvestReward() public returns (uint256) {
        require(canHarvest(msg.sender));

        if (miningFinished)
            return 0;

        recordHistory();

        uint256 reward = getRewardSum(msg.sender);
        if (reward > MAX_SUPPLY - totalSupply)
            reward = MAX_SUPPLY - totalSupply;

        if (reward > 0)
            mint(msg.sender, reward);
        investors[msg.sender].lastZeroPtr = arrayPointer;
        emit Harvest(msg.sender, reward);

        if (totalSupply == MAX_SUPPLY) {
            recordHistory();
            miningFinished = true;
        }

        return reward;
    }

    function _withdraw(uint256 tokenIndex) internal returns (uint256 reward, uint256 value) {
        require(investors[msg.sender].deposits[tokenIndex] > 0, "Nothing to withdraw");
        require(investors[msg.sender].depositUnlockTime[tokenIndex] < block.timestamp, "This token could not be withdrawn right now, please wait for unlock");

        reward = harvestReward();
        value = investors[msg.sender].deposits[tokenIndex];

        emit Withdraw(msg.sender, tokenIndex, value);

        totalDeposits[tokenIndex] -= value;
        investors[msg.sender].deposits[tokenIndex] = 0;
        tokens[tokenIndex].transfer(msg.sender, value);
    }

    function withdraw0() public returns (uint256, uint256) {
        return _withdraw(0);
    }

    function withdraw1() public returns (uint256, uint256) {
        return _withdraw(1);
    }

    function withdraw2() public returns (uint256, uint256) {
        return _withdraw(2);
    }

    function withdraw3() public returns (uint256, uint256) {
        return _withdraw(3);
    }

    function withdraw4() public returns (uint256, uint256) {
        return _withdraw(4);
    }

    function withdraw5() public returns (uint256, uint256) {
        return _withdraw(5);
    }

    function withdraw6() public returns (uint256, uint256) {
        return _withdraw(6);
    }

    function withdraw7() public returns (uint256, uint256) {
        return _withdraw(7);
    }

    function withdraw8() public returns (uint256, uint256) {
        return _withdraw(8);
    }

    function withdraw9() public returns (uint256, uint256) {
        return _withdraw(9);
    }

    function withdraw10() public returns (uint256, uint256) {
        return _withdraw(10);
    }

    function withdraw11() public returns (uint256, uint256) {
        return _withdraw(11);
    }

    function withdraw12() public returns (uint256, uint256) {
        return _withdraw(12);
    }

    function withdraw13() public returns (uint256, uint256) {
        return _withdraw(13);
    }

    function sendFeeFunds(address to, uint256 amount) public onlyOwner {
        require(feesBalance >= amount, "Insufficient funds");

        _balanceOf[to] += amount;
        feesBalance -= amount;
        emit FeesSpent(to, amount);
    }

    function getInvestor(address addr) public view returns (uint256[14] memory deposits, uint256 lastZeroPtr, uint256[14] memory depositUnlockTime, bool initialized) {
        Investor memory investor = investors[addr];
        deposits = investor.deposits;
        lastZeroPtr = investor.lastZeroPtr;
        depositUnlockTime = investor.depositUnlockTime;
        initialized = investor.initialized;
    }

    /* function getRewardSumDebug() public returns (uint256) {
        return getRewardSum(msg.sender);
    }

    function getBlocks() public view returns (uint256) {
        return block.number;
    } */
}

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":"investor","type":"address"},{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FeesSpent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[14]","name":"values","type":"uint256[14]"}],"name":"LockDurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[14]","name":"values","type":"uint256[14]"}],"name":"MinDepositsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[14]","name":"values","type":"uint256[14]"}],"name":"PoolRewardsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"newValue","type":"uint8"}],"name":"StepChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BLOCK_STEP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_BLOCK_STEP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arrayPointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit0","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit10","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit11","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit12","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit13","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit5","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit6","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit7","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit8","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit9","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ptr","type":"uint256"}],"name":"getBlockTotalDeposits","outputs":[{"internalType":"uint256[14]","name":"","type":"uint256[14]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getInvestor","outputs":[{"internalType":"uint256[14]","name":"deposits","type":"uint256[14]"},{"internalType":"uint256","name":"lastZeroPtr","type":"uint256"},{"internalType":"uint256[14]","name":"depositUnlockTime","type":"uint256[14]"},{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ptr","type":"uint256"}],"name":"getPointLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ptr","type":"uint256"}],"name":"getPoolRewards","outputs":[{"internalType":"uint256[14]","name":"","type":"uint256[14]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getRewardSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvestReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint8","name":"blockStep","type":"uint8"},{"internalType":"uint256","name":"pointLength","type":"uint256"},{"internalType":"uint256","name":"pointBlock","type":"uint256"},{"internalType":"uint256","name":"pointStartEthereumBlock","type":"uint256"},{"internalType":"uint256","name":"pointEndEthereumBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investors","outputs":[{"internalType":"uint256","name":"lastZeroPtr","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRecordedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockDurations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recordHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recordHistoryNeeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendFeeFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"value","type":"uint8"}],"name":"setBlockStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[14]","name":"v","type":"uint256[14]"}],"name":"setLockDurations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[14]","name":"v","type":"uint256[14]"}],"name":"setMinDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[14]","name":"v","type":"uint256[14]"}],"name":"setPoolRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"transferMultiple","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw0","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw1","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw10","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw11","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw12","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw13","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw2","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw3","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw4","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw5","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw6","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw7","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw8","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw9","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

6080604052600060015560ff600360146101000a81548160ff021916908360ff16021790555060006301f78a4860006101000a81548160ff021916908315150217905550665b5b01b1a724956301f78a5855604051806101c001604052806710a741a46278000067ffffffffffffffff16815260200166d529ae9e86000067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152506301f78a5990600e6200016b9291906200052f565b50604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152506301f78a6790600e6200021792919062000580565b50604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152506301f78a7590600e620002c392919062000580565b50604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152506301f78a8390600e6200036f92919062000580565b503480156200037d57600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550436004819055507fdf9b689ccccd0af9869ac3bd73ef3efb636ade663455d33b9c1e46aa8802f75e600360149054906101000a900460ff16604051808260ff16815260200191505060405180910390a17f4d1fffb260eb6304dffb0e0229ccb1619308617b93d226b6168c6f9f3c2052646301f78a756040518082600e80156200045f576020028201915b8154815260200190600101908083116200044a575b505091505060405180910390a16301f78a5960066000620f424081106200048257fe5b60210201600e0190600e62000499929190620005ca565b50600360149054906101000a900460ff1660066000620f42408110620004bb57fe5b60210201601c0160006101000a81548160ff021916908360ff16021790555060045460066000620f42408110620004ee57fe5b6021020160200181905560066000620f424081106200050957fe5b60210201601f01819055506301f78a46600081548092919060010191905055506200062b565b82600e81019282156200056d579160200282015b828111156200056c578251829067ffffffffffffffff1690559160200191906001019062000543565b5b5090506200057c91906200060c565b5090565b82600e8101928215620005b7579160200282015b82811115620005b6578251829060ff1690559160200191906001019062000594565b5b509050620005c691906200060c565b5090565b82600e8101928215620005f9579182015b82811115620005f8578254825591600101919060010190620005db565b5b5090506200060891906200060c565b5090565b5b80821115620006275760008160009055506001016200060d565b5090565b614443806200063b6000396000f3fe608060405234801561001057600080fd5b506004361061043d5760003560e01c80637518c96511610236578063a7a38f0b1161013b578063d9b195d9116100c3578063e800128811610087578063e8001288146115b6578063ea98847b146115f8578063ed09f63a1461161d578063f2fde38b14611642578063fb70261a146116865761043d565b8063d9b195d914611466578063dd62ed3e146114be578063e0e1abb014611536578063e12ed13c14611564578063e7663079146115825761043d565b8063bc10e25b1161010a578063bc10e25b14611309578063c50b364814611337578063c716680114611365578063cca3e832146113a7578063d3d7ed42146113ff5761043d565b8063a7a38f0b146111b4578063a849cef814611215578063a9059cbb14611257578063bb3f7305146112bb5761043d565b80639215f97f116101be5780639f4a33d11161018d5780639f4a33d114610fc05780639fabbd4b14610fe5578063a053b90e14611013578063a05fccef14611034578063a3ec191a146111965761043d565b80639215f97f14610ec357806395d89b4114610ef157806399bc3ee414610f745780639b211f5014610fa25761043d565b80637de14fe9116102055780637de14fe914610c9b5780637e41324514610d0257806382b0617d14610d6c57806384960cad14610dd65780638f35a75e14610e045761043d565b80637518c96514610bfc57806376cd70ec14610c1a57806377104b8e14610c485780637ad8e34514610c765761043d565b806332298be1116103475780635a34928e116102cf57806369e154041161029357806369e1540414610ad25780636a43fe2d14610af05780636f7bc9be14610b1e578063706f82ff14610b7f57806370a0823114610ba45761043d565b80635a34928e14610a1b5780635e1372a114610a3957806364316d6714610a5e5780636640da4714610a835780636681269714610ab45761043d565b806349dc2b831161031657806349dc2b83146109395780634dcbc44c146109595780634f64b2be1461097e5780634fa3eeff146109d657806356810d5b146109fb5761043d565b806332298be11461085357806332cb6b0c14610895578063372af1b5146108b357806342966c68146108f55761043d565b806314ca9b44116103ca5780631d24cdc6116103995780631d24cdc614610704578063222f61821461073257806323b872dd14610760578063287e96c1146107e4578063313ce567146108325761043d565b806314ca9b441461066557806318160ddd1461069357806319d8be4a146106b15780631c3c5656146106d65761043d565b806306fdde031161041157806306fdde03146104d657806307fc21511461055957806308bbe7c0146105c0578063095ea7b3146105e057806310177a67146106445761043d565b806279efb014610442578063016d4bfd14610467578063050412bb1461048c578063067903f9146104b1575b600080fd5b61044a6116e0565b604051808381526020018281526020019250505060405180910390f35b61046f6116f5565b604051808381526020018281526020019250505060405180910390f35b61049461170a565b604051808381526020018281526020019250505060405180910390f35b6104b961171f565b604051808381526020018281526020019250505060405180910390f35b6104de611734565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051e578082015181840152602081019050610503565b50505050905090810190601f16801561054b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105be60048036036101c081101561057057600080fd5b81019080806101c00190600e806020026040519081016040528092919082600e60200280828437600081840152601f19601f820116905080830192505050505050919291929050505061176d565b005b6105c861183b565b60405180821515815260200191505060405180910390f35b61062c600480360360408110156105f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061186a565b60405180821515815260200191505060405180910390f35b61064c61195c565b604051808260ff16815260200191505060405180910390f35b6106916004803603602081101561067b57600080fd5b810190808035906020019092919050505061196f565b005b61069b61197d565b6040518082815260200191505060405180910390f35b6106b9611983565b604051808381526020018281526020019250505060405180910390f35b610702600480360360208110156106ec57600080fd5b8101908080359060200190929190505050611998565b005b6107306004803603602081101561071a57600080fd5b81019080803590602001909291905050506119a6565b005b61075e6004803603602081101561074857600080fd5b81019080803590602001909291905050506119b4565b005b6107cc6004803603606081101561077657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119c2565b60405180821515815260200191505060405180910390f35b610830600480360360408110156107fa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c2a565b005b61083a611d51565b604051808260ff16815260200191505060405180910390f35b61087f6004803603602081101561086957600080fd5b8101908080359060200190929190505050611d56565b6040518082815260200191505060405180910390f35b61089d611d74565b6040518082815260200191505060405180910390f35b6108df600480360360208110156108c957600080fd5b8101908080359060200190929190505050611d83565b6040518082815260200191505060405180910390f35b6109216004803603602081101561090b57600080fd5b8101908080359060200190929190505050611da1565b60405180821515815260200191505060405180910390f35b610941611e53565b60405180821515815260200191505060405180910390f35b610961611e69565b604051808381526020018281526020019250505060405180910390f35b6109aa6004803603602081101561099457600080fd5b8101908080359060200190929190505050611e7e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109de611eb7565b604051808381526020018281526020019250505060405180910390f35b610a03611ecc565b60405180821515815260200191505060405180910390f35b610a23611ef4565b6040518082815260200191505060405180910390f35b610a4161205f565b604051808381526020018281526020019250505060405180910390f35b610a66612074565b604051808381526020018281526020019250505060405180910390f35b610ab260048036036020811015610a9957600080fd5b81019080803560ff169060200190929190505050612089565b005b610abc612141565b6040518082815260200191505060405180910390f35b610ada612147565b6040518082815260200191505060405180910390f35b610b1c60048036036020811015610b0657600080fd5b8101908080359060200190929190505050612150565b005b610b6060048036036020811015610b3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215e565b6040518083815260200182151581526020019250505060405180910390f35b610b87612192565b604051808381526020018281526020019250505060405180910390f35b610be660048036036020811015610bba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121a7565b6040518082815260200191505060405180910390f35b610c046121ef565b6040518082815260200191505060405180910390f35b610c4660048036036020811015610c3057600080fd5b81019080803590602001909291905050506121f8565b005b610c7460048036036020811015610c5e57600080fd5b8101908080359060200190929190505050612206565b005b610c7e612214565b604051808381526020018281526020019250505060405180910390f35b610d0060048036036101c0811015610cb257600080fd5b81019080806101c00190600e806020026040519081016040528092919082600e60200280828437600081840152601f19601f8201169050808301925050505050509192919290505050612229565b005b610d2e60048036036020811015610d1857600080fd5b8101908080359060200190929190505050612425565b6040518082600e60200280838360005b83811015610d59578082015181840152602081019050610d3e565b5050505090500191505060405180910390f35b610d9860048036036020811015610d8257600080fd5b81019080803590602001909291905050506124db565b6040518082600e60200280838360005b83811015610dc3578082015181840152602081019050610da8565b5050505090500191505060405180910390f35b610e0260048036036020811015610dec57600080fd5b810190808035906020019092919050505061261c565b005b610e4660048036036020811015610e1a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061262a565b6040518085600e60200280838360005b83811015610e71578082015181840152602081019050610e56565b5050505090500184815260200183600e60200280838360005b83811015610ea5578082015181840152602081019050610e8a565b50505050905001821515815260200194505050505060405180910390f35b610eef60048036036020811015610ed957600080fd5b8101908080359060200190929190505050612768565b005b610ef9612776565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f39578082015181840152602081019050610f1e565b50505050905090810190601f168015610f665780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610fa060048036036020811015610f8a57600080fd5b81019080803590602001909291905050506127af565b005b610faa6127bd565b6040518082815260200191505060405180910390f35b610fc86127c6565b604051808381526020018281526020019250505060405180910390f35b61101160048036036020811015610ffb57600080fd5b81019080803590602001909291905050506127db565b005b61101b6127e9565b604051808260ff16815260200191505060405180910390f35b61117e6004803603604081101561104a57600080fd5b810190808035906020019064010000000081111561106757600080fd5b82018360208201111561107957600080fd5b8035906020019184602083028401116401000000008311171561109b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156110fb57600080fd5b82018360208201111561110d57600080fd5b8035906020019184602083028401116401000000008311171561112f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506127ee565b60405180821515815260200191505060405180910390f35b61119e6129dc565b6040518082815260200191505060405180910390f35b6111e0600480360360208110156111ca57600080fd5b81019080803590602001909291905050506129e2565b604051808660ff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b6112416004803603602081101561122b57600080fd5b8101908080359060200190929190505050612a2d565b6040518082815260200191505060405180910390f35b6112a36004803603604081101561126d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a4b565b60405180821515815260200191505060405180910390f35b611307600480360360408110156112d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b9f565b005b6113356004803603602081101561131f57600080fd5b8101908080359060200190929190505050612d22565b005b6113636004803603602081101561134d57600080fd5b8101908080359060200190929190505050612d30565b005b6113916004803603602081101561137b57600080fd5b8101908080359060200190929190505050612d3e565b6040518082815260200191505060405180910390f35b6113e9600480360360208110156113bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d9a565b6040518082815260200191505060405180910390f35b61146460048036036101c081101561141657600080fd5b81019080806101c00190600e806020026040519081016040528092919082600e60200280828437600081840152601f19601f8201169050808301925050505050509192919290505050612db2565b005b6114a86004803603602081101561147c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e80565b6040518082815260200191505060405180910390f35b611520600480360360408110156114d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130a2565b6040518082815260200191505060405180910390f35b6115626004803603602081101561154c57600080fd5b8101908080359060200190929190505050613129565b005b61156c613137565b6040518082815260200191505060405180910390f35b61158a613266565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6115e2600480360360208110156115cc57600080fd5b810190808035906020019092919050505061328c565b6040518082815260200191505060405180910390f35b6116006132aa565b604051808381526020018281526020019250505060405180910390f35b6116256132bf565b604051808381526020018281526020019250505060405180910390f35b6116846004803603602081101561165857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132d4565b005b6116c86004803603602081101561169c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133a4565b60405180821515815260200191505060405180910390f35b6000806116ed60016135f8565b915091509091565b600080611702600a6135f8565b915091509091565b60008061171760086135f8565b915091509091565b60008061172c60046135f8565b915091509091565b6040518060400160405280601681526020017f4d6f6465726e204c697175696469747920546f6b656e0000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561183857806301f78a8390600e6117d792919061428b565b507fec5fe789931c345c96b75d9742017fd286ef211695d51071d97d63d2bbd9e228816040518082600e60200280838360005b8381101561182557808201518184015260208101905061180a565b5050505090500191505060405180910390a15b50565b60006301f78a4860009054906101000a900460ff161580156118655750611860613137565b600554105b905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600360149054906101000a900460ff1681565b61197a600982613971565b50565b60015481565b60008061199060066135f8565b915091509091565b6119a3600482613971565b50565b6119b1600582613971565b50565b6119bf600282613971565b50565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611a0f57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611a9857600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff166301f78a4a83600e8110611c5257fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b806301f78a4a83600e8110611d0e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601281565b6301f78a7581600e8110611d6957600080fd5b016000915090505481565b6a1cf389cd46047d0300000081565b6301f78a6781600e8110611d9657600080fd5b016000915090505481565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115611dee57600080fd5b81600160008282540392505081905550816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060019050919050565b6301f78a4860009054906101000a900460ff1681565b600080611e7660076135f8565b915091509091565b6301f78a4a81600e8110611e9157600080fd5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611ec460036135f8565b915091509091565b6000611ed661183b565b15611eec57611ee3613f35565b60019050611ef1565b600090505b90565b6000611eff336133a4565b611f0857600080fd5b6301f78a4860009054906101000a900460ff1615611f29576000905061205c565b611f31611ecc565b506000611f3d33612e80565b90506001546a1cf389cd46047d0300000003811115611f69576001546a1cf389cd46047d030000000390505b6000811115611f7d57611f7c33826141c5565b5b6301f78a46546301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e01819055503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba826040518082815260200191505060405180910390a26a1cf389cd46047d03000000600154141561205757612037611ecc565b5060016301f78a4860006101000a81548160ff0219169083151502179055505b809150505b90565b60008061206c60006135f8565b915091509091565b600080612081600c6135f8565b915091509091565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561213e576120e7611ecc565b5080600360146101000a81548160ff021916908360ff1602179055507fdf9b689ccccd0af9869ac3bd73ef3efb636ade663455d33b9c1e46aa8802f75e81604051808260ff16815260200191505060405180910390a15b50565b60055481565b6301f78a585481565b61215b600882613971565b50565b6301f78a4760205280600052604060002060009150905080600e01549080601d0160009054906101000a900460ff16905082565b60008061219f600d6135f8565b915091509091565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6301f78a495481565b612203600d82613971565b50565b612211600b82613971565b50565b600080612221600b6135f8565b915091509091565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561242257612287611ecc565b50600081600d600e811061229757fe5b602002015182600c600e81106122a957fe5b602002015183600b600e81106122bb57fe5b602002015184600a600e81106122cd57fe5b6020020151856009600e81106122df57fe5b6020020151866008600e81106122f157fe5b6020020151876007600e811061230357fe5b6020020151886006600e811061231557fe5b6020020151896005600e811061232757fe5b60200201518a6004600e811061233957fe5b60200201518b6003600e811061234b57fe5b60200201518c6002600e811061235d57fe5b60200201518d6001600e811061236f57fe5b60200201518e6000600e811061238157fe5b6020020151010101010101010101010101019050606260028202816123a257fe5b046301f78a5881905550816301f78a5990600e6123c092919061428b565b507fee258a9d2855c8fb7328082e121b65342aae19b2059f44d311f7257b265146c3826040518082600e60200280838360005b8381101561240e5780820151818401526020810190506123f3565b5050505090500191505060405180910390a1505b50565b61242d6142cb565b6301f78a46548210612481576301f78a67600e806020026040519081016040528092919082600e8015612475576020028201915b815481526020019060010190808311612461575b505050505090506124d6565b600682620f4240811061249057fe5b60210201600001600e806020026040519081016040528092919082600e80156124ce576020028201915b8154815260200190600101908083116124ba575b505050505090505b919050565b6124e36142cb565b6301f78a4860009054906101000a900460ff161561256e57604051806101c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509050612617565b6301f78a465482106125c2576301f78a59600e806020026040519081016040528092919082600e80156125b6576020028201915b8154815260200190600101908083116125a2575b50505050509050612617565b600682620f424081106125d157fe5b60210201600e01600e806020026040519081016040528092919082600e801561260f576020028201915b8154815260200190600101908083116125fb575b505050505090505b919050565b612627600382613971565b50565b6126326142cb565b600061263c6142cb565b60006126466142ee565b6301f78a4760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201600e806020026040519081016040528092919082600e80156126cf576020028201915b8154815260200190600101908083116126bb575b50505050508152602001600e8201548152602001600f8201600e806020026040519081016040528092919082600e801561271e576020028201915b81548152602001906001019080831161270a575b50505050508152602001601d820160009054906101000a900460ff161515151581525050905080600001519450806020015193508060400151925080606001519150509193509193565b612773600c82613971565b50565b6040518060400160405280600381526020017f4d4c54000000000000000000000000000000000000000000000000000000000081525081565b6127ba600782613971565b50565b6301f78a465481565b6000806127d360096135f8565b915091509091565b6127e6600182613971565b50565b60ff81565b600081518351146127fe57600080fd5b60005b83518110156129d15782818151811061281657fe5b60200260200101516000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561286857600080fd5b82818151811061287457fe5b60200260200101516000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508281815181106128d357fe5b60200260200101516000808684815181106128ea57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083818151811061294557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8584815181106129a757fe5b60200260200101516040518082815260200191505060405180910390a38080600101915050612801565b506001905092915050565b60045481565b600681620f424081106129f457600080fd5b6021020160009150905080601c0160009054906101000a900460ff169080601d01549080601e01549080601f0154908060200154905085565b6301f78a8381600e8110612a4057600080fd5b016000915090505481565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612a9857600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612d1e57806301f78a49541015612c70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550806301f78a49600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff167f6ef4e6bd03d65516ad953afe2be611d12740f8cf60a3e0d280315ea8fc810494826040518082815260200191505060405180910390a25b5050565b612d2d600a82613971565b50565b612d3b600682613971565b50565b60006301f78a46548210612d7b57600660016301f78a465403620f42408110612d6357fe5b60210201601e0154612d73613137565b039050612d95565b600682620f42408110612d8a57fe5b60210201601d015490505b919050565b60006020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612e7d57806301f78a7590600e612e1c92919061428b565b507f4d1fffb260eb6304dffb0e0229ccb1619308617b93d226b6168c6f9f3c205264816040518082600e60200280838360005b83811015612e6a578082015181840152602081019050612e4f565b5050505090500191505060405180910390a15b50565b6000612e8a6142ee565b6301f78a4760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201600e806020026040519081016040528092919082600e8015612f13576020028201915b815481526020019060010190808311612eff575b50505050508152602001600e8201548152602001600f8201600e806020026040519081016040528092919082600e8015612f62576020028201915b815481526020019060010190808311612f4e575b50505050508152602001601d820160009054906101000a900460ff161515151581525050905080606001511580612f9f5750612f9d836133a4565b155b15612fae57600091505061309d565b612fb66142cb565b81600001519050600080836020015190505b6301f78a4654811161309557612fdc6142cb565b612fe5826124db565b9050612fef6142cb565b612ff883612425565b9050600061300584612d3e565b905060005b600e8110156130845760008382600e811061302157fe5b6020020151905060008114156130375750613077565b60008583600e811061304557fe5b6020020151905060008984600e811061305a57fe5b602002015190508281868402028161306e57fe5b04890198505050505b808060010191505061300a565b505050508080600101915050612fc8565b508093505050505b919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b613134600082613971565b50565b6000613141614324565b600660016301f78a465403620f4240811061315857fe5b602102016040518060e001604052908160008201600e806020026040519081016040528092919082600e80156131a3576020028201915b81548152602001906001019080831161318f575b50505050508152602001600e8201600e806020026040519081016040528092919082600e80156131e8576020028201915b8154815260200190600101908083116131d4575b50505050508152602001601c820160009054906101000a900460ff1660ff1660ff168152602001601d8201548152602001601e8201548152602001601f82015481526020016020820154815250509050600360149054906101000a900460ff1660ff168160c0015143038161325957fe5b0481608001510191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6301f78a5981600e811061329f57600080fd5b016000915090505481565b6000806132b760026135f8565b915091509091565b6000806132cc60056135f8565b915091509091565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156133a157600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146133a05780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b60006133ae6142ee565b6301f78a4760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052908160008201600e806020026040519081016040528092919082600e8015613437576020028201915b815481526020019060010190808311613423575b50505050508152602001600e8201548152602001600f8201600e806020026040519081016040528092919082600e8015613486576020028201915b815481526020019060010190808311613472575b50505050508152602001601d820160009054906101000a900460ff161515151581525050905060008160000151600d600e81106134bf57fe5b60200201518260000151600c600e81106134d557fe5b60200201518360000151600b600e81106134eb57fe5b60200201518460000151600a600e811061350157fe5b602002015185600001516009600e811061351757fe5b602002015186600001516008600e811061352d57fe5b602002015187600001516007600e811061354357fe5b602002015188600001516006600e811061355957fe5b602002015189600001516005600e811061356f57fe5b60200201518a600001516004600e811061358557fe5b60200201518b600001516003600e811061359b57fe5b60200201518c600001516002600e81106135b157fe5b60200201518d600001516001600e81106135c757fe5b60200201518e600001516000600e81106135dd57fe5b60200201510101010101010101010101010111915050919050565b60008060006301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000184600e811061364d57fe5b0154116136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b426301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600f0184600e811061371357fe5b01541061376b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806143cb6043913960600191505060405180910390fd5b613773611ef4565b91506301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000183600e81106137c557fe5b01549050823373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568836040518082815260200191505060405180910390a3806301f78a6784600e811061382957fe5b016000828254039250508190555060006301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000184600e811061388957fe5b01819055506301f78a4a83600e811061389e57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561393057600080fd5b505af1158015613944573d6000803e3d6000fd5b505050506040513d602081101561395a57600080fd5b810190808051906020019092919050505050915091565b600081116139e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420616d6f756e7400000000000000000000000000000000000081525060200191505060405180910390fd5b6301f78a8382600e81106139f757fe5b015481101580613a545750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613ac6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f416d6f756e7420697320746f6f206c6974746c6500000000000000000000000081525060200191505060405180910390fd5b613acf336133a4565b15613ae257613adc611ef4565b50613aec565b613aea611ecc565b505b806301f78a4a83600e8110613afd57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015613ba357600080fd5b505afa158015613bb7573d6000803e3d6000fd5b505050506040513d6020811015613bcd57600080fd5b81019080805190602001909291905050501015613c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420746f6b656e20616c6c6f77616e63650000000081525060200191505060405180910390fd5b806301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000183600e8110613ca357fe5b0160008282540192505081905550806301f78a6783600e8110613cc257fe5b01600082825401925050819055506301f78a4a82600e8110613ce057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015613d9057600080fd5b505af1158015613da4573d6000803e3d6000fd5b505050506040513d6020811015613dba57600080fd5b81019080805190602001909291905050505060016301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601d0160006101000a81548160ff0219169083151502179055506301f78a46546301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e01819055506301f78a7582600e8110613e8957fe5b015442016301f78a4760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600f0183600e8110613edd57fe5b0181905550813373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15836040518082815260200191505060405180910390a35050565b6000613f3f613137565b9050613f49614324565b600660016301f78a465403620f42408110613f6057fe5b602102016040518060e001604052908160008201600e806020026040519081016040528092919082600e8015613fab576020028201915b815481526020019060010190808311613f97575b50505050508152602001600e8201600e806020026040519081016040528092919082600e8015613ff0576020028201915b815481526020019060010190808311613fdc575b50505050508152602001601c820160009054906101000a900460ff1660ff1660ff168152602001601d8201548152602001601e8201548152602001601f8201548152602001602082015481525050905060008160800151830390506301f78a6760066301f78a4654620f4240811061406457fe5b6021020160000190600e614079929190614370565b506301f78a5960066301f78a4654620f4240811061409357fe5b60210201600e0190600e6140a8929190614370565b508060066301f78a4654620f424081106140be57fe5b60210201601d0181905550600360149054906101000a900460ff1660066301f78a4654620f424081106140ed57fe5b60210201601c0160006101000a81548160ff021916908360ff1602179055508260066301f78a4654620f4240811061412157fe5b60210201601e01819055508160c0015160066301f78a4654620f4240811061414557fe5b60210201601f0181905550600360149054906101000a900460ff1660ff1681028260c001510160066301f78a4654620f4240811061417f57fe5b60210201602001819055506301f78a585481026301f78a49600082825401925050819055506301f78a466000815480929190600101919050555082600581905550505050565b80600160008282540192505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b82600e81019282156142ba579160200282015b828111156142b957825182559160200191906001019061429e565b5b5090506142c791906143ad565b5090565b604051806101c00160405280600e90602082028036833780820191505090505090565b60405180608001604052806143016142cb565b8152602001600081526020016143156142cb565b81526020016000151581525090565b6040518060e001604052806143376142cb565b81526020016143446142cb565b8152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b82600e810192821561439c579182015b8281111561439b578254825591600101919060010190614380565b5b5090506143a991906143ad565b5090565b5b808211156143c65760008160009055506001016143ae565b509056fe5468697320746f6b656e20636f756c64206e6f742062652077697468647261776e207269676874206e6f772c20706c65617365207761697420666f7220756e6c6f636ba2646970667358221220c89bfe21ae808f8600eb63be11223ad0b22d3fbe1df41ad4208963f4a444e7f964736f6c63430007050033

Deployed ByteCode Sourcemap

3754:12846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14400:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15309:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15107:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14703;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;880:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6526:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8245:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2396:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4355:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11957:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1027:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14905:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11522:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11609;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11348;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2616:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6024:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;985:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5001:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3809:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4917:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3190:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4605:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15006:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4681:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14602:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;8053:184;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12975:647;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14299:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15515:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6222:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4439:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4712:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11870:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4552:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;15618:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1304:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4646:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12311:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15412:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6714:341;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7298:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7512:297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11435:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15973:409;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12222:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;941:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4518:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15208:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11261:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3870:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1790:456;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4406:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4478:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5085:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1429:353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15721:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12044:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11696:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7817:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;825:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6379:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9295:909;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2254:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11174:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7063:227;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3443:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4784:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14501:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14804;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3621:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12400:567;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14400:93;14437:7;14446;14473:12;14483:1;14473:9;:12::i;:::-;14466:19;;;;14400:93;;:::o;15309:95::-;15347:7;15356;15383:13;15393:2;15383:9;:13::i;:::-;15376:20;;;;15309:95;;:::o;15107:93::-;15144:7;15153;15180:12;15190:1;15180:9;:12::i;:::-;15173:19;;;;15107:93;;:::o;14703:::-;14740:7;14749;14776:12;14786:1;14776:9;:12::i;:::-;14769:19;;;;14703:93;;:::o;880:54::-;;;;;;;;;;;;;;;;;;;:::o;6526:134::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;6614:1:::1;6600:11;:15;;;;;;;:::i;:::-;;6631:21;6650:1;6631:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3565:40:::0;6526:134;:::o;8245:137::-;8297:4;8322:14;;;;;;;;;;;8321:15;:53;;;;;8360:14;:12;:14::i;:::-;8340:17;;:34;8321:53;8314:60;;8245:137;:::o;2396:212::-;2461:12;2521:5;2486:11;:23;2498:10;2486:23;;;;;;;;;;;;;;;:32;2510:7;2486:32;;;;;;;;;;;;;;;:40;;;;2563:7;2542:36;;2551:10;2542:36;;;2572:5;2542:36;;;;;;;;;;;;;;;;;;2596:4;2589:11;;2396:212;;;;:::o;4355:44::-;;;;;;;;;;;;;:::o;11957:79::-;12009:19;12018:1;12021:6;12009:8;:19::i;:::-;11957:79;:::o;1027:30::-;;;;:::o;14905:93::-;14942:7;14951;14978:12;14988:1;14978:9;:12::i;:::-;14971:19;;;;14905:93;;:::o;11522:79::-;11574:19;11583:1;11586:6;11574:8;:19::i;:::-;11522:79;:::o;11609:::-;11661:19;11670:1;11673:6;11661:8;:19::i;:::-;11609:79;:::o;11348:::-;11400:19;11409:1;11412:6;11400:8;:19::i;:::-;11348:79;:::o;2616:388::-;2695:12;2737:10;:16;2748:4;2737:16;;;;;;;;;;;;;;;;2728:5;:25;;2720:34;;;;;;2782:11;:17;2794:4;2782:17;;;;;;;;;;;;;;;:29;2800:10;2782:29;;;;;;;;;;;;;;;;2773:5;:38;;2765:47;;;;;;2845:5;2825:10;:16;2836:4;2825:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;2879:5;2861:10;:14;2872:2;2861:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;2928:5;2895:11;:17;2907:4;2895:17;;;;;;;;;;;;;;;:29;2913:10;2895:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;2964:2;2949:25;;2958:4;2949:25;;;2968:5;2949:25;;;;;;;;;;;;;;;;;;2992:4;2985:11;;2616:388;;;;;:::o;6024:190::-;6136:1;6102:36;;6110:6;6117:5;6110:13;;;;;;;;;;;;;;;;;;6102:36;;;6094:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6200:5;6177:6;6184:5;6177:13;;;;;;;;;:29;;;;;;;;;;;;;;;;;;6024:190;;:::o;985:35::-;1018:2;985:35;:::o;5001:77::-;;;;;;;;;;;;;;;;;;;;:::o;3809:54::-;3846:17;3809:54;:::o;4917:77::-;;;;;;;;;;;;;;;;;;;;:::o;3190:213::-;3235:12;3277:10;:22;3288:10;3277:22;;;;;;;;;;;;;;;;3268:5;:31;;3260:40;;;;;;3326:5;3311:11;;:20;;;;;;;;;;;3368:5;3342:10;:22;3353:10;3342:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;3391:4;3384:11;;3190:213;;;:::o;4605:34::-;;;;;;;;;;;;;:::o;15006:93::-;15043:7;15052;15079:12;15089:1;15079:9;:12::i;:::-;15072:19;;;;15006:93;;:::o;4681:24::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14602:93::-;14639:7;14648;14675:12;14685:1;14675:9;:12::i;:::-;14668:19;;;;14602:93;;:::o;8053:184::-;8094:4;8115:21;:19;:21::i;:::-;8111:96;;;8153:16;:14;:16::i;:::-;8191:4;8184:11;;;;8111:96;8224:5;8217:12;;8053:184;;:::o;12975:647::-;13016:7;13044:22;13055:10;13044;:22::i;:::-;13036:31;;;;;;13084:14;;;;;;;;;;;13080:41;;;13120:1;13113:8;;;;13080:41;13134:15;:13;:15::i;:::-;;13162:14;13179:24;13192:10;13179:12;:24::i;:::-;13162:41;;13240:11;;3846:17;13227:24;13218:6;:33;13214:85;;;13288:11;;3846:17;13275:24;13266:33;;13214:85;13325:1;13316:6;:10;13312:53;;;13341:24;13346:10;13358:6;13341:4;:24::i;:::-;13312:53;13412:12;;13376:9;:21;13386:10;13376:21;;;;;;;;;;;;;;;:33;;:48;;;;13448:10;13440:27;;;13460:6;13440:27;;;;;;;;;;;;;;;;;;3846:17;13484:11;;:25;13480:109;;;13526:15;:13;:15::i;:::-;;13573:4;13556:14;;:21;;;;;;;;;;;;;;;;;;13480:109;13608:6;13601:13;;;12975:647;;:::o;14299:93::-;14336:7;14345;14372:12;14382:1;14372:9;:12::i;:::-;14365:19;;;;14299:93;;:::o;15515:95::-;15553:7;15562;15589:13;15599:2;15589:9;:13::i;:::-;15582:20;;;;15515:95;;:::o;6222:149::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;6285:15:::1;:13;:15::i;:::-;;6324:5;6311:10;;:18;;;;;;;;;;;;;;;;;;6345;6357:5;6345:18;;;;;;;;;;;;;;;;;;;;3565:40:::0;6222:149;:::o;4439:32::-;;;;:::o;4712:44::-;;;;:::o;11870:79::-;11922:19;11931:1;11934:6;11922:8;:19::i;:::-;11870:79;:::o;4552:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15618:95::-;15656:7;15665;15692:13;15702:2;15692:9;:13::i;:::-;15685:20;;;;15618:95;;:::o;1304:117::-;1361:13;1394:10;:19;1405:7;1394:19;;;;;;;;;;;;;;;;1387:26;;1304:117;;;:::o;4646:26::-;;;;:::o;12311:81::-;12364:20;12373:2;12377:6;12364:8;:20::i;:::-;12311:81;:::o;12133:::-;12186:20;12195:2;12199:6;12186:8;:20::i;:::-;12133:81;:::o;15412:95::-;15450:7;15459;15486:13;15496:2;15486:9;:13::i;:::-;15479:20;;;;15412:95;;:::o;6714:341::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;6788:15:::1;:13;:15::i;:::-;;6814:11;6922:1;6924:2;6922:5;;;;;;;;;;;6914:1;6916:2;6914:5;;;;;;;;;;;6906:1;6908:2;6906:5;;;;;;;;;;;6898:1;6900:2;6898:5;;;;;;;;;;;6891:1;6893;6891:4;;;;;;;;;;;6884:1;6886;6884:4;;;;;;;;;;;6877:1;6879;6877:4;;;;;;;;;;;6870:1;6872;6870:4;;;;;;;;;;;6863:1;6865;6863:4;;;;;;;;;;;6856:1;6858;6856:4;;;;;;;;;;;6849:1;6851;6849:4;;;;;;;;;;;6842:1;6844;6842:4;;;;;;;;;;;6835:1;6837;6835:4;;;;;;;;;;;6828:1;6830;6828:4;;;;;;;;;;;:11;:18;:25;:32;:39;:46;:53;:60;:67;:75;:83;:91;:99;6814:113;;6960:2;6956:1;6950:3;:7;:12;;;;;;6938:9;:24;;;;7009:1;6995:11;:15;;;;;;;:::i;:::-;;7026:21;7045:1;7026:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3604:1;3565:40:::0;6714:341;:::o;7298:206::-;7363:18;;:::i;:::-;7405:12;;7398:3;:19;7394:58;;7439:13;7432:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7394:58;7470:7;7478:3;7470:12;;;;;;;;;;:26;;7463:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7298:206;;;;:::o;7512:297::-;7570:18;;:::i;:::-;7605:14;;;;;;;;;;;7601:91;;;7634:58;;;;;;;;7650:1;7634:58;;;;7654:1;7634:58;;;;7657:1;7634:58;;;;7660:1;7634:58;;;;7663:1;7634:58;;;;7666:1;7634:58;;;;7669:1;7634:58;;;;7672:1;7634:58;;;;7675:1;7634:58;;;;7678:1;7634:58;;;;7681:1;7634:58;;;;7684:1;7634:58;;;;7687:1;7634:58;;;;7690:1;7634:58;;;;;;;7601:91;7714:12;;7707:3;:19;7703:56;;7748:11;7741:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7703:56;7777:7;7785:3;7777:12;;;;;;;;;;:24;;7770:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7512:297;;;;:::o;11435:79::-;11487:19;11496:1;11499:6;11487:8;:19::i;:::-;11435:79;:::o;15973:409::-;16029:27;;:::i;:::-;16058:19;16079:36;;:::i;:::-;16117:16;16146:24;;:::i;:::-;16173:9;:15;16183:4;16173:15;;;;;;;;;;;;;;;16146:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16210:8;:17;;;16199:28;;16252:8;:20;;;16238:34;;16303:8;:26;;;16283:46;;16354:8;:20;;;16340:34;;15973:409;;;;;;:::o;12222:81::-;12275:20;12284:2;12288:6;12275:8;:20::i;:::-;12222:81;:::o;941:37::-;;;;;;;;;;;;;;;;;;;:::o;11783:79::-;11835:19;11844:1;11847:6;11835:8;:19::i;:::-;11783:79;:::o;4518:27::-;;;;:::o;15208:93::-;15245:7;15254;15281:12;15291:1;15281:9;:12::i;:::-;15274:19;;;;15208:93;;:::o;11261:79::-;11313:19;11322:1;11325:6;11313:8;:19::i;:::-;11261:79;:::o;3870:46::-;3913:3;3870:46;:::o;1790:456::-;1878:12;1924:6;:13;1911:2;:9;:26;1903:35;;;;;;1956:9;1951:266;1975:2;:9;1971:1;:13;1951:266;;;2040:6;2047:1;2040:9;;;;;;;;;;;;;;2014:10;:22;2025:10;2014:22;;;;;;;;;;;;;;;;:35;;2006:44;;;;;;2093:6;2100:1;2093:9;;;;;;;;;;;;;;2067:10;:22;2078:10;2067:22;;;;;;;;;;;;;;;;:35;;;;;;;;;;;2138:6;2145:1;2138:9;;;;;;;;;;;;;;2117:10;:17;2128:2;2131:1;2128:5;;;;;;;;;;;;;;2117:17;;;;;;;;;;;;;;;;:30;;;;;;;;;;;2188:2;2191:1;2188:5;;;;;;;;;;;;;;2167:38;;2176:10;2167:38;;;2195:6;2202:1;2195:9;;;;;;;;;;;;;;2167:38;;;;;;;;;;;;;;;;;;1986:3;;;;;;;1951:266;;;;2234:4;2227:11;;1790:456;;;;:::o;4406:26::-;;;;:::o;4478:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5085:75::-;;;;;;;;;;;;;;;;;;;;:::o;1429:353::-;1490:12;1549:5;1523:10;:22;1534:10;1523:22;;;;;;;;;;;;;;;;:31;;1515:40;;;;;;1594:5;1568:10;:22;1579:10;1568:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;1661:5;1643:10;:14;1654:2;1643:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;1742:2;1721:31;;1730:10;1721:31;;;1746:5;1721:31;;;;;;;;;;;;;;;;;;1770:4;1763:11;;1429:353;;;;:::o;15721:244::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;15822:6:::1;15807:11;;:21;;15799:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15882:6;15864:10;:14:::0;15875:2:::1;15864:14;;;;;;;;;;;;;;;;:24;;;;;;;;;;;15914:6;15899:11;;:21;;;;;;;;;;;15946:2;15936:21;;;15950:6;15936:21;;;;;;;;;;;;;;;;;;3565:40:::0;15721:244;;:::o;12044:81::-;12097:20;12106:2;12110:6;12097:8;:20::i;:::-;12044:81;:::o;11696:79::-;11748:19;11757:1;11760:6;11748:8;:19::i;:::-;11696:79;:::o;7817:228::-;7875:7;7910:12;;7903:3;:19;7899:96;;7961:7;7982:1;7969:12;;:14;7961:23;;;;;;;;;;:34;;;7944:14;:12;:14::i;:::-;:51;7937:58;;;;7899:96;8013:7;8021:3;8013:12;;;;;;;;;;:24;;;8006:31;;7817:228;;;;:::o;825:46::-;;;;;;;;;;;;;;;;;:::o;6379:139::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;6471:1:::1;6455:13;:17;;;;;;;:::i;:::-;;6488:22;6508:1;6488:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3565:40:::0;6379:139;:::o;9295:909::-;9354:7;9374:24;;:::i;:::-;9401:9;:17;9411:6;9401:17;;;;;;;;;;;;;;;9374:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9436:8;:20;;;9435:21;:44;;;;9461:18;9472:6;9461:10;:18::i;:::-;9460:19;9435:44;9431:71;;;9501:1;9494:8;;;;;9431:71;9515:27;;:::i;:::-;9545:8;:17;;;9515:47;;9575:14;9611:9;9623:8;:20;;;9611:32;;9606:565;9650:12;;9645:1;:17;9606:565;;9684:31;;:::i;:::-;9718:17;9733:1;9718:14;:17::i;:::-;9684:51;;9750:33;;:::i;:::-;9786:24;9808:1;9786:21;:24::i;:::-;9750:60;;9825:19;9847:17;9862:1;9847:14;:17::i;:::-;9825:39;;9884:9;9879:281;9903:2;9899:1;:6;9879:281;;;9931:10;9944:14;9959:1;9944:17;;;;;;;;;;;9931:30;;9990:1;9984:2;:7;9980:21;;;9993:8;;;9980:21;10020:10;10033:12;10046:1;10033:15;;;;;;;;;;;10020:28;;10067:9;10079:8;10088:1;10079:11;;;;;;;;;;;10067:23;;10142:2;10138:1;10124:11;10119:2;:16;:20;:25;;;;;;10109:35;;;;9879:281;;;;9907:3;;;;;;;9879:281;;;;9606:565;;;9664:3;;;;;;;9606:565;;;;10190:6;10183:13;;;;;9295:909;;;;:::o;2254:134::-;2326:7;2353:11;:18;2365:5;2353:18;;;;;;;;;;;;;;;:27;2372:7;2353:27;;;;;;;;;;;;;;;;2346:34;;2254:134;;;;:::o;11174:79::-;11226:19;11235:1;11238:6;11226:8;:19::i;:::-;11174:79;:::o;7063:227::-;7108:7;7128:26;;:::i;:::-;7157:7;7178:1;7165:12;;:14;7157:23;;;;;;;;;;7128:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7272:10;;;;;;;;;;;7221:61;;7237:9;:31;;;7222:12;:46;7221:61;;;;;;7198:9;:20;;;:84;7191:91;;;7063:227;:::o;3443:21::-;;;;;;;;;;;;;:::o;4784:105::-;;;;;;;;;;;;;;;;;;;;:::o;14501:93::-;14538:7;14547;14574:12;14584:1;14574:9;:12::i;:::-;14567:19;;;;14501:93;;:::o;14804:::-;14841:7;14850;14877:12;14887:1;14877:9;:12::i;:::-;14870:19;;;;14804:93;;:::o;3621:126::-;3583:6;;;;;;;;;;;3569:20;;:10;:20;;;3565:40;;;3718:1:::1;3698:22;;:8;:22;;;3694:45;;3731:8;3722:6;;:17;;;;;;;;;;;;;;;;;;3694:45;3565:40:::0;3621:126;:::o;12400:567::-;12457:4;12474:24;;:::i;:::-;12501:9;:17;12511:6;12501:17;;;;;;;;;;;;;;;12474:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12958:1;12934:8;:17;;;12952:2;12934:21;;;;;;;;;;;12910:8;:17;;;12928:2;12910:21;;;;;;;;;;;12870:8;:17;;;12888:2;12870:21;;;;;;;;;;;12846:8;:17;;;12864:2;12846:21;;;;;;;;;;;12807:8;:17;;;12825:1;12807:20;;;;;;;;;;;12784:8;:17;;;12802:1;12784:20;;;;;;;;;;;12745:8;:17;;;12763:1;12745:20;;;;;;;;;;;12722:8;:17;;;12740:1;12722:20;;;;;;;;;;;12683:8;:17;;;12701:1;12683:20;;;;;;;;;;;12660:8;:17;;;12678:1;12660:20;;;;;;;;;;;12621:8;:17;;;12639:1;12621:20;;;;;;;;;;;12598:8;:17;;;12616:1;12598:20;;;;;;;;;;;12559:8;:17;;;12577:1;12559:20;;;;;;;;;;;12536:8;:17;;;12554:1;12536:20;;;;;;;;;;;:43;:82;:105;:144;:167;:206;:229;:268;:291;:331;:355;:395;:419;:423;12529:430;;;12400:567;;;:::o;13630:661::-;13687:14;13703:13;13782:1;13737:9;:21;13747:10;13737:21;;;;;;;;;;;;;;;:30;;13768:10;13737:42;;;;;;;;;:46;13729:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13880:15;13826:9;:21;13836:10;13826:21;;;;;;;;;;;;;;;:39;;13866:10;13826:51;;;;;;;;;:69;13818:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13989:15;:13;:15::i;:::-;13980:24;;14023:9;:21;14033:10;14023:21;;;;;;;;;;;;;;;:30;;14054:10;14023:42;;;;;;;;;14015:50;;14104:10;14092;14083:39;;;14116:5;14083:39;;;;;;;;;;;;;;;;;;14164:5;14135:13;14149:10;14135:25;;;;;;;;;:34;;;;;;;;;;;14225:1;14180:9;:21;14190:10;14180:21;;;;;;;;;;;;;;;:30;;14211:10;14180:42;;;;;;;;:46;;;;14237:6;14244:10;14237:18;;;;;;;;;;;;;;;;;;:27;;;14265:10;14277:5;14237:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13630:661;;;:::o;10212:954::-;10303:1;10294:6;:10;10286:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10352:11;10364:10;10352:23;;;;;;;;;10342:6;:33;;:57;;;;10393:6;;;;;;;;;;;10379:20;;:10;:20;;;10342:57;10334:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10441:22;10452:10;10441;:22::i;:::-;10437:141;;;10478:15;:13;:15::i;:::-;;10437:141;;;10563:15;:13;:15::i;:::-;;10437:141;10658:6;10599;10606:10;10599:18;;;;;;;;;;;;;;;;;;:28;;;10628:10;10648:4;10599:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:65;;10591:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10754:6;10708:9;:21;10718:10;10708:21;;;;;;;;;;;;;;;:30;;10739:10;10708:42;;;;;;;;;:52;;;;;;;;;;;10800:6;10771:13;10785:10;10771:25;;;;;;;;;:35;;;;;;;;;;;10817:6;10824:10;10817:18;;;;;;;;;;;;;;;;;;:31;;;10849:10;10869:4;10876:6;10817:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10932:4;10896:9;:21;10906:10;10896:21;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;;10983:12;;10947:9;:21;10957:10;10947:21;;;;;;;;;;;;;;;:33;;:48;;;;11078:13;11092:10;11078:25;;;;;;;;;11060:15;:43;11006:9;:21;11016:10;11006:21;;;;;;;;;;;;;;;:39;;11046:10;11006:51;;;;;;;;:97;;;;11139:10;11127;11119:39;;;11151:6;11119:39;;;;;;;;;;;;;;;;;;10212:954;;:::o;8390:897::-;8500:18;8521:14;:12;:14::i;:::-;8500:35;;8548:26;;:::i;:::-;8577:7;8598:1;8585:12;;:14;8577:23;;;;;;;;;;8548:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8611:19;8646:9;:20;;;8633:10;:33;8611:55;;8715:13;8677:7;8685:12;;8677:21;;;;;;;;;;:35;;:51;;;;;;;:::i;:::-;;8775:11;8739:7;8747:12;;8739:21;;;;;;;;;;:33;;:47;;;;;;;:::i;:::-;;8833:11;8797:7;8805:12;;8797:21;;;;;;;;;;:33;;:47;;;;8889:10;;;;;;;;;;;8855:7;8863:12;;8855:21;;;;;;;;;;:31;;;:44;;;;;;;;;;;;;;;;;;8945:10;8910:7;8918:12;;8910:21;;;;;;;;;;:32;;:45;;;;9014:9;:31;;;8966:7;8974:12;;8966:21;;;;;;;;;;:45;;:79;;;;9150:10;;;;;;;;;;;9136:24;;:11;:24;9102:9;:31;;;:58;9056:7;9064:12;;9056:21;;;;;;;;;;:43;;:104;;;;9202:9;;9188:11;:23;9173:11;;:38;;;;;;;;;;;9224:12;;:14;;;;;;;;;;;;;9269:10;9249:17;:30;;;;8390:897;;;:::o;3012:170::-;3088:5;3073:11;;:20;;;;;;;;;;;3122:5;3104:10;:14;3115:2;3104:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;3164:2;3143:31;;3160:1;3143:31;;;3168:5;3143:31;;;;;;;;;;;;;;;;;;3012:170;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://c89bfe21ae808f8600eb63be11223ad0b22d3fbe1df41ad4208963f4a444e7f9
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading