Contract 0xcbef7c136118886487622303ca5395a32ebb3d72

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8e536f35b4558b31e01eb111a0ca56cd7c11e042da5ab89becf8368fb34b6f34Approve87295742023-06-10 7:12:51182 days 8 hrs ago0x9aff981d8b7102eece893c92bd7a63633c614ccb IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.218610937244 4,732.145750694
0xd62176f985a66840bcde4048e3c195adb40c07b675d17461e650479d825cbdedApprove74053732023-03-15 14:26:40269 days 58 mins ago0x59875ec14056501858733fa7dbe736b0e18abe29 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2227888279980
0xa638b714d1a4ef5589da900bbb93d2bf6f597af1ad6a3a20b8c8dacb0373965bApprove66746952023-01-26 19:13:26316 days 20 hrs ago0x85f78899c135174f5c22e489586b214e647e7640 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.1168279287630
0xddaa31d4574c776b91118e511204b7de1da3e43f71b66b2fa960b4c7245e7359Approve62482452022-12-29 20:43:10344 days 18 hrs ago0x21315da28413c2331147abaf86a536d78cbec0de IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.21514826287 4,846.009029232
0x076e24dcdb3170b550800e53b3b5db5e40c4093e8cd7ae288587323b0759ba57Approve57273432022-11-25 16:57:35378 days 22 hrs agoCronos ID Name sasquatch.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2161512716260
0x8bdfa1cb778d1e0ce5c06f0229ad69e86d8f7e8ee44961c28fc8e5ab1242d5dfApprove57272752022-11-25 16:51:07378 days 22 hrs agoCronos ID Name sasquatch.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2161514103320
0x5d70f35cab87a24f0d70e48460678c23d4217916a10e9b0136e6ecdf64bbb67cApprove55481922022-11-13 22:27:39390 days 16 hrs ago0x71b8059aa59af4e65709d7e61cede89127053aea IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2219850
0xd0032ee85a287c79e0400c0ea2ddccefc2d5a6b2b9a0507f598a3dcab413c3d1Approve55308652022-11-12 18:50:43391 days 20 hrs agoCronos ID Name sasquatch.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2165504708860
0x2c84f773dc3f25f0710a1df7c9dd9ba6bc88b5b9fbe358cdbcc4962ea87d4843Approve55301912022-11-12 17:46:50391 days 21 hrs ago0x219f11717ffc71c986341f9af92a3e751e69963e IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.121065674172 4,879.122805477
0x1fa16820459e1141ef6e7a37990916f6997cdf41edb5b091eee2a966f4766403Approve55301882022-11-12 17:46:33391 days 21 hrs ago0x219f11717ffc71c986341f9af92a3e751e69963e IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.113249322541 4,879.122939206
0x8a24d1cf28beec6457f8fe829136d39dbee32babee26168404e11c78adfd7bb9Approve53357862022-10-30 23:05:20404 days 16 hrs ago0xa4b5fd715855189212a83ce4961dd946809c2cc7 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2219850
0x1e9415e73fb23d38fd98f5a6b36729765b284e841e8b26cc37f3019ae421864dApprove53338172022-10-30 19:59:21404 days 19 hrs agoCronos ID Name sasquatch.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.215893234390
0x962fe37dcab07b4932b6a44c091528f7bc491cba9c57f96306f907835f46ecdaApprove53331752022-10-30 18:58:42404 days 20 hrs agoCronos ID Name vamos.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2219850
0xfcb03ed2913144c405e5a7c05bf94dd0557e9f09996a2da5700ac81aba6b7ae9Transfer51785882022-10-20 15:21:12415 days 4 mins ago0xe25b913c3ec8ac3a326cf9d7b52f19d3ccce03e1 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO4.642060873926 4,895.191211472
0x6dccf2a3902087bda9136e7510f0901b61721c030b9e1fd99ab5ed310685b4b1Transfer51785702022-10-20 15:19:29415 days 6 mins ago0xee553d7652032d2f416a69d22591ff88bb1c84b5 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO2.222681532889 4,895.192054005
0x4dd1a0939e458585ab43f266ff5d2fdcaa944ce50b72c1beae2b739ab3dabd70Transfer51785202022-10-20 15:14:47415 days 10 mins ago0xaf78a51f4183d0449d32ea0c8f0ad0446931edba IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.9787389213220
0x656a49f9957f2ed486286c4b74697e8443d6181d676c3c4a1c8cb1de7f036283Approve51069462022-10-15 21:59:48419 days 17 hrs ago0x3722cb2dc7a1d6a778a3f476e162c30f00d6aedf IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.266382 6,000
0x6c1811863fa86e87dcb1a57a359a026a9513c67c778c79ea8642189444a46992Approve50339442022-10-11 3:08:03424 days 12 hrs agoCronos ID Name sasquatch.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.2175613882060
0xb923f4f546ad95bc44a63352ae14b50482eb1290857e5f65e292519bf830e4ceTransfer50155612022-10-09 21:57:14425 days 17 hrs agoCronos ID Name nokick.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.9639646889050
0xae1590233e6b271cfd0850cc5a8c4fa97879b6da74bee2502f93be660cadd1faApprove49971042022-10-08 16:52:16426 days 22 hrs ago0x11888899dcf9bc50cd92126f90003757d2564b9e IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.217703047436 4,903.553110273
0x3a5df39497284638f9548052f5896d3b577a22fd8fc3c05e27dfa9172e8a054cApprove49576772022-10-06 2:36:16429 days 12 hrs ago0xa3d4ac3c23cf5373b28c71b3f7758bedb9998f43 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.217783797933 4,905.371938049
0xf93d664cf73635ed93e985863afc5d13252875e722b7f61e38efe33d237a07d4Approve49576122022-10-06 2:30:08429 days 12 hrs ago0xa3d4ac3c23cf5373b28c71b3f7758bedb9998f43 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.217783931287 4,905.374941708
0x98e1efd4632c3d9b327126c0f39cd2f37a417be8007fe29184a25057fcff9364Approve49575582022-10-06 2:25:02429 days 13 hrs ago0x9aff981d8b7102eece893c92bd7a63633c614ccb IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.217784044706 4,905.377496363
0x1b05e48a82567a10e2330a851c0e8e1dce46481c185129bb62c68e40eaa64045Transfer49511872022-10-05 16:21:46429 days 23 hrs agoCronos ID Name nokick.cro IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.9645462855070
0xc25df460c5d23a348b7bdcc880ccedb82f4a5c871ed1ddee9735728e69bbfbd8Change Is Fee Ex...49329582022-10-04 11:35:09431 days 3 hrs ago0x210f2427602ac2c3aa5609b74fae91b3cbd8e784 IN  0xcbef7c136118886487622303ca5395a32ebb3d720 CRO0.14165102753 4,906.003100833
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x458ccce819933ed7872d2ff9d66cad37690a89b83e0b02b60d30d81b2631eae381126752023-04-30 20:38:26222 days 18 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 Mad Meerkat Finance: Master Meerkat & Router0.00381262858457827 CRO
0x458ccce819933ed7872d2ff9d66cad37690a89b83e0b02b60d30d81b2631eae381126752023-04-30 20:38:26222 days 18 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.004130347633293127 CRO
0x458ccce819933ed7872d2ff9d66cad37690a89b83e0b02b60d30d81b2631eae381126752023-04-30 20:38:26222 days 18 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.01239104289987938 CRO
0x458ccce819933ed7872d2ff9d66cad37690a89b83e0b02b60d30d81b2631eae381126752023-04-30 20:38:26222 days 18 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 0x3d3203c1358947db8c9693d3cb448a70e718570b0.002541752389718847 CRO
0x458ccce819933ed7872d2ff9d66cad37690a89b83e0b02b60d30d81b2631eae381126752023-04-30 20:38:26222 days 18 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0xcbef7c136118886487622303ca5395a32ebb3d720.022875771507469624 CRO
0xefe74a3e2214e169820cff239d7506a4d50fddd4abda201f1d99613c85aa5cd876243752023-03-29 22:04:52254 days 17 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 Mad Meerkat Finance: Master Meerkat & Router0.49178934430029337 CRO
0xefe74a3e2214e169820cff239d7506a4d50fddd4abda201f1d99613c85aa5cd876243752023-03-29 22:04:52254 days 17 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.532771789658651151 CRO
0xefe74a3e2214e169820cff239d7506a4d50fddd4abda201f1d99613c85aa5cd876243752023-03-29 22:04:52254 days 17 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7841.598315368975953453 CRO
0xefe74a3e2214e169820cff239d7506a4d50fddd4abda201f1d99613c85aa5cd876243752023-03-29 22:04:52254 days 17 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 0x3d3203c1358947db8c9693d3cb448a70e718570b0.327859562866862246 CRO
0xefe74a3e2214e169820cff239d7506a4d50fddd4abda201f1d99613c85aa5cd876243752023-03-29 22:04:52254 days 17 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0xcbef7c136118886487622303ca5395a32ebb3d722.95073606580176022 CRO
0x2313091d4cfbbebde72dc03fada61ddebfca233574f51b08e45197a07067362956130602022-11-18 4:56:25386 days 10 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 Mad Meerkat Finance: Master Meerkat & Router0.0023684515419755 CRO
0x2313091d4cfbbebde72dc03fada61ddebfca233574f51b08e45197a07067362956130602022-11-18 4:56:25386 days 10 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.002565822503806793 CRO
0x2313091d4cfbbebde72dc03fada61ddebfca233574f51b08e45197a07067362956130602022-11-18 4:56:25386 days 10 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.007697467511420378 CRO
0x2313091d4cfbbebde72dc03fada61ddebfca233574f51b08e45197a07067362956130602022-11-18 4:56:25386 days 10 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 0x3d3203c1358947db8c9693d3cb448a70e718570b0.001578967694650333 CRO
0x2313091d4cfbbebde72dc03fada61ddebfca233574f51b08e45197a07067362956130602022-11-18 4:56:25386 days 10 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0xcbef7c136118886487622303ca5395a32ebb3d720.014210709251853004 CRO
0xd096debbba86369d274a64ca85616abbd7dfce7be59c240a2a1f1184d3dda8f755750202022-11-15 17:00:08388 days 22 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 Mad Meerkat Finance: Master Meerkat & Router0.292268344302035121 CRO
0xd096debbba86369d274a64ca85616abbd7dfce7be59c240a2a1f1184d3dda8f755750202022-11-15 17:00:08388 days 22 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.316624039660538049 CRO
0xd096debbba86369d274a64ca85616abbd7dfce7be59c240a2a1f1184d3dda8f755750202022-11-15 17:00:08388 days 22 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.949872118981614145 CRO
0xd096debbba86369d274a64ca85616abbd7dfce7be59c240a2a1f1184d3dda8f755750202022-11-15 17:00:08388 days 22 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 0x3d3203c1358947db8c9693d3cb448a70e718570b0.194845562868023414 CRO
0xd096debbba86369d274a64ca85616abbd7dfce7be59c240a2a1f1184d3dda8f755750202022-11-15 17:00:08388 days 22 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0xcbef7c136118886487622303ca5395a32ebb3d721.753610065812210729 CRO
0x58b6624a76b2ab359204e33e76e7943666a687e4d09d9754c09438de36c51a4e55187322022-11-11 23:42:46392 days 15 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 Mad Meerkat Finance: Master Meerkat & Router0.142385461657193498 CRO
0x58b6624a76b2ab359204e33e76e7943666a687e4d09d9754c09438de36c51a4e55187322022-11-11 23:42:46392 days 15 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.154250916795292957 CRO
0x58b6624a76b2ab359204e33e76e7943666a687e4d09d9754c09438de36c51a4e55187322022-11-11 23:42:46392 days 15 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d720x210f2427602ac2c3aa5609b74fae91b3cbd8e7840.462752750385878871 CRO
0x58b6624a76b2ab359204e33e76e7943666a687e4d09d9754c09438de36c51a4e55187322022-11-11 23:42:46392 days 15 hrs ago 0xcbef7c136118886487622303ca5395a32ebb3d72 0x3d3203c1358947db8c9693d3cb448a70e718570b0.094923641104795665 CRO
0x58b6624a76b2ab359204e33e76e7943666a687e4d09d9754c09438de36c51a4e55187322022-11-11 23:42:46392 days 15 hrs ago Mad Meerkat Finance: Master Meerkat & Router 0xcbef7c136118886487622303ca5395a32ebb3d720.854312769943160991 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SquidCrowge

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-07-29
*/

//SPDX-License-Identifier: Unlicensed
pragma solidity ^0.7.4;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) { return 0; }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;
    IBEP20 RewardToken = IBEP20(0xC4a174cCb5fb54a6721e11e0Ca961e42715023F9);

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1 * (10 ** 18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {

        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract SquidCrowge is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "SquidCrowge";
    string constant _symbol = "SCRGE";
    uint8 constant _decimals = 9;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;
    address RewardToken = 0xC4a174cCb5fb54a6721e11e0Ca961e42715023F9; 

    uint256 _totalSupply = 100 * 10**9 * (10 ** _decimals);
    uint256 public _maxTxAmount = 1000 * 10**6 * (10 ** _decimals);
    uint256 public _walletMax = 2000 * 10**6 * (10 ** _decimals);
    
    bool public restrictWhales = true;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 5;
    uint256 public rewardsFee = 4;
    uint256 public extraFeeOnSell = 11;

    uint256 public totalFee = 11;
    uint256 public totalFeeIfSelling = 22;

    address public autoLiquidityReceiver;
    address public marketingWallet;
    address public devWallet;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = true;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 500000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = 1 * 10**6 * (10 ** _decimals);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = uint256(-1);

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        // NICE!
        autoLiquidityReceiver = 0x000000000000000000000000000000000000dEaD;
        marketingWallet = 0x210f2427602Ac2C3AA5609b74faE91b3Cbd8e784;
        devWallet = 0x210f2427602Ac2C3AA5609b74faE91b3Cbd8e784;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, uint256(-1));
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee = newMarketingFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newDevWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
        devWallet = newDevWallet;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != uint256(-1)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen, "Trading not open yet");
        }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        if(!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance;

        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.sub(amountBNBLiquidity).sub(amountBNBReflection);

        try dividendDistributor.deposit{value: amountBNBReflection}() {} catch {}
        
        uint256 marketingShare = amountBNBMarketing.mul(3).div(4);
        uint256 devShare = amountBNBMarketing.sub(marketingShare);
        
        (bool tmpSuccess,) = payable(marketingWallet).call{value: marketingShare, gas: 30000}("");
        (bool tmpSuccess1,) = payable(devWallet).call{value: devShare, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;
        tmpSuccess1 = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

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":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073145677fc4d9b8f19b5d56d1820c48e0443049a30600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c4a174ccb5fb54a6721e11e0ca961e42715023f9600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960ff16600a0a64174876e80002600655600960ff16600a0a633b9aca0002600755600960ff16600a0a6377359400026008556001600960006101000a81548160ff0219169083151502179055506002600f5560056010556004601155600b601255600b60135560166014556001601b60006101000a81548160ff0219169083151502179055506207a120601c556001601d60016101000a81548160ff0219169083151502179055506000601d60026101000a81548160ff021916908315150217905550600960ff16600a0a620f424002601e553480156200021557600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037b57600080fd5b505afa15801562000390573d6000803e3d6000fd5b505050506040513d6020811015620003a757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043c57600080fd5b505afa15801562000451573d6000803e3d6000fd5b505050506040513d60208110156200046857600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004e457600080fd5b505af1158015620004f9573d6000803e3d6000fd5b505050506040513d60208110156200051057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006559062000d00565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f08015801562000692573d6000803e3d6000fd5b50601b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073210f2427602ac2c3aa5609b74fae91b3cbd8e784601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073210f2427602ac2c3aa5609b74fae91b3cbd8e784601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b9960115462000b85601054600f5462000c7760201b620028a61790919060201c565b62000c7760201b620028a61790919060201c565b60138190555062000bbd60125460135462000c7760201b620028a61790919060201c565b601481905550600654600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a362000d0e565b60008082840190508381101562000cf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611ada8062004e9c83390190565b61417e8062000d1e6000396000f3fe6080604052600436106103035760003560e01c80637db1342c11610190578063bf56b371116100dc578063e66b1d1e11610095578063f887ea401161006f578063f887ea4014611128578063fabe628314611169578063fe9fbb80146111c6578063ffb54a991461122d5761030a565b8063e66b1d1e14611049578063f0b37c0414611086578063f2fde38b146110d75761030a565b8063bf56b37114610ec5578063ca33e64c14610ef0578063ca987b0e14610f31578063d920334e14610f5c578063da00097d14610f97578063dd62ed3e14610fc45761030a565b806398118cb411610149578063a9059cbb11610123578063a9059cbb14610d7d578063a9f7864b14610dee578063b6a5d7de14610e33578063bad3ea6a14610e845761030a565b806398118cb414610cb4578063a3a2e89e14610cdf578063a8aa1b3114610d3c5761030a565b80637db1342c14610ad5578063807c2d9c14610b10578063893d20e814610b3b5780638b42507f14610b7c5780638ea5220f14610be357806395d89b4114610c245761030a565b80633f4218e01161024f578063650c42261161020857806370a08231116101e257806370a08231146109a757806375f0a87414610a0c578063773fcb5c14610a4d5780637d1db4a514610aaa5761030a565b8063650c4226146108f857806369cf17d4146109515780636b67c4df1461097c5761030a565b80633f4218e01461072e5780634355855a1461079557806344de2e4c146107fc578063479f66d8146108295780634a74bb0214610864578063571ac8b0146108915761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e146105b5578063313ce5671461061c578063315dca291461064a57806334c70889146106db5761030a565b806323b872dd146104ce5780632b112e491461055f5780632bb14e1d1461058a5761030a565b80630445b6671461030f57806306fdde031461033a578063095ea7b3146103ca5780630d2959801461043b57806318160ddd146104785780631df4ccfc146104a35761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461125a565b6040518082815260200191505060405180910390f35b34801561034657600080fd5b5061034f611260565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038f578082015181840152602081019050610374565b50505050905090810190601f1680156103bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d657600080fd5b50610423600480360360408110156103ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061129d565b60405180821515815260200191505060405180910390f35b34801561044757600080fd5b506104766004803603602081101561045e57600080fd5b8101908080351515906020019092919050505061138f565b005b34801561048457600080fd5b5061048d611427565b6040518082815260200191505060405180910390f35b3480156104af57600080fd5b506104b8611431565b6040518082815260200191505060405180910390f35b3480156104da57600080fd5b50610547600480360360608110156104f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611437565b60405180821515815260200191505060405180910390f35b34801561056b57600080fd5b50610574611637565b6040518082815260200191505060405180910390f35b34801561059657600080fd5b5061059f6116b9565b6040518082815260200191505060405180910390f35b3480156105c157600080fd5b50610604600480360360208110156105d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116bf565b60405180821515815260200191505060405180910390f35b34801561062857600080fd5b50610631611718565b604051808260ff16815260200191505060405180910390f35b34801561065657600080fd5b506106d96004803603606081101561066d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611721565b005b3480156106e757600080fd5b5061072c600480360360608110156106fe57600080fd5b8101908080351515906020019092919080359060200190929190803515159060200190929190505050611864565b005b34801561073a57600080fd5b5061077d6004803603602081101561075157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061191f565b60405180821515815260200191505060405180910390f35b3480156107a157600080fd5b506107e4600480360360208110156107b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061193f565b60405180821515815260200191505060405180910390f35b34801561080857600080fd5b5061081161195f565b60405180821515815260200191505060405180910390f35b34801561083557600080fd5b506108626004803603602081101561084c57600080fd5b8101908080359060200190929190505050611972565b005b34801561087057600080fd5b50610879611a06565b60405180821515815260200191505060405180910390f35b34801561089d57600080fd5b506108e0600480360360208110156108b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a19565b60405180821515815260200191505060405180910390f35b34801561090457600080fd5b5061094f6004803603608081101561091b57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a4c565b005b34801561095d57600080fd5b50610966611b37565b6040518082815260200191505060405180910390f35b34801561098857600080fd5b50610991611b3d565b6040518082815260200191505060405180910390f35b3480156109b357600080fd5b506109f6600480360360208110156109ca57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b43565b6040518082815260200191505060405180910390f35b348015610a1857600080fd5b50610a21611b8c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5957600080fd5b50610aa860048036036040811015610a7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611bb2565b005b348015610ab657600080fd5b50610abf611ebd565b6040518082815260200191505060405180910390f35b348015610ae157600080fd5b50610b0e60048036036020811015610af857600080fd5b8101908080359060200190929190505050611ec3565b005b348015610b1c57600080fd5b50610b25611f48565b6040518082815260200191505060405180910390f35b348015610b4757600080fd5b50610b50611f4e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8857600080fd5b50610bcb60048036036020811015610b9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f77565b60405180821515815260200191505060405180910390f35b348015610bef57600080fd5b50610bf8611f97565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c3057600080fd5b50610c39611fbd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c79578082015181840152602081019050610c5e565b50505050905090810190601f168015610ca65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cc057600080fd5b50610cc9611ffa565b6040518082815260200191505060405180910390f35b348015610ceb57600080fd5b50610d3a60048036036040811015610d0257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612000565b005b348015610d4857600080fd5b50610d516120d6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d8957600080fd5b50610dd660048036036040811015610da057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120fc565b60405180821515815260200191505060405180910390f35b348015610dfa57600080fd5b50610e3160048036036040811015610e1157600080fd5b810190808035906020019092919080359060200190929190505050612111565b005b348015610e3f57600080fd5b50610e8260048036036020811015610e5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612225565b005b348015610e9057600080fd5b50610e996122fa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ed157600080fd5b50610eda612320565b6040518082815260200191505060405180910390f35b348015610efc57600080fd5b50610f05612326565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f3d57600080fd5b50610f4661234c565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f9560048036036020811015610f7f57600080fd5b8101908080359060200190929190505050612352565b005b348015610fa357600080fd5b50610fac6123d7565b60405180821515815260200191505060405180910390f35b348015610fd057600080fd5b5061103360048036036040811015610fe757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123ea565b6040518082815260200191505060405180910390f35b34801561105557600080fd5b506110846004803603602081101561106c57600080fd5b81019080803515159060200190929190505050612471565b005b34801561109257600080fd5b506110d5600480360360208110156110a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612509565b005b3480156110e357600080fd5b50611126600480360360208110156110fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125df565b005b34801561113457600080fd5b5061113d612741565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561117557600080fd5b506111c46004803603604081101561118c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612767565b005b3480156111d257600080fd5b50611215600480360360208110156111e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061283d565b60405180821515815260200191505060405180910390f35b34801561123957600080fd5b50611242612893565b60405180821515815260200191505060405180910390f35b601e5481565b60606040518060400160405280600b81526020017f537175696443726f776765000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b611398336116bf565b61140a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6000600654905090565b60135481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611623576115a2826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292e9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61162e8484846129ee565b90509392505050565b60006116b4611667600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b43565b6116a6611695600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b43565b60065461341690919063ffffffff16565b61341690919063ffffffff16565b905090565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61172a3361283d565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61186d3361283d565b6118df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b82601d60016101000a81548160ff02191690831515021790555081601e8190555080601d60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900460ff1681565b61197b3361283d565b6119ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b620b71b081106119fc57600080fd5b80601c8190555050565b601d60019054906101000a900460ff1681565b6000611a45827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61129d565b9050919050565b611a553361283d565b611ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b83600f81905550826011819055508160108190555080601281905550611b0e601154611b00601054600f546128a690919063ffffffff16565b6128a690919063ffffffff16565b601381905550611b2b6012546013546128a690919063ffffffff16565b60148190555050505050565b60125481565b60105481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bbb3361283d565b611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611cb75750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611cc057600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611dce57601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611db157600080fd5b505af1158015611dc5573d6000803e3d6000fd5b50505050611eb9565b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ea057600080fd5b505af1158015611eb4573d6000803e3d6000fd5b505050505b5050565b60075481565b611ecc3361283d565b611f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f5343524745000000000000000000000000000000000000000000000000000000815250905090565b600f5481565b6120093361283d565b61207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006121093384846129ee565b905092915050565b61211a3361283d565b61218c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561220957600080fd5b505af115801561221d573d6000803e3d6000fd5b505050505050565b61222e336116bf565b6122a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b61235b3361283d565b6123cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060078190555050565b601d60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61247a3361283d565b6124ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b612512336116bf565b612584576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125e8336116bf565b61265a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f214f574e4552000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127703361283d565b6127e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21415554484f52495a454400000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b60009054906101000a900460ff1681565b600080828401905083811015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008383111582906129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129a0578082015181840152602081019050612985565b50505050905090810190601f1680156129cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601d60009054906101000a900460ff1615612a1757612a10848484613460565b905061340f565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612abb5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b4357601b60009054906101000a900460ff16612b42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f54726164696e67206e6f74206f70656e2079657400000000000000000000000081525060200191505060405180910390fd5b5b60075482111580612b9d5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5458204c696d697420457863656564656400000000000000000000000000000081525060200191505060405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612c7a5750601d60009054906101000a900460ff16155b8015612c925750601d60019054906101000a900460ff165b8015612cdf5750601e54600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b15612ced57612cec613633565b5b612cf5613dd3565b158015612d4f5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612da9576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612da057600080fd5b612da8613de0565b5b612e32826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292e9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612edb5750600960009054906101000a900460ff165b15612f4157600854612f3583600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b1115612f4057600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe75750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ff15782612ffd565b612ffc858585613de9565b5b905061305181600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166131d357601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156131b757600080fd5b505af19250505080156131c8575060015b6131d1576131d2565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661331257601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156132f657600080fd5b505af1925050508015613307575060015b61331057613311565b5b5b601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561338957600080fd5b505af192505050801561339a575060015b6133a3576133a4565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b600061345883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061292e565b905092915050565b60006134eb826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292e9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061358082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6001601d60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006136d060026136c26013546136b4600f5487613f9190919063ffffffff16565b61401790919063ffffffff16565b61401790919063ffffffff16565b905060006136e7828461341690919063ffffffff16565b90506060600267ffffffffffffffff8111801561370357600080fd5b506040519080825280602002602001820160405280156137325781602001602082028036833780820191505090505b509050308160008151811061374357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156137e557600080fd5b505afa1580156137f9573d6000803e3d6000fd5b505050506040513d602081101561380f57600080fd5b81019080805190602001909291905050508160018151811061382d57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561392b578082015181840152602081019050613910565b505050509050019650505050505050600060405180830381600087803b15801561395457600080fd5b505af1158015613968573d6000803e3d6000fd5b505050506000479050600061399d61398c6002600f5461401790919063ffffffff16565b60135461341690919063ffffffff16565b905060006139db60026139cd846139bf600f5488613f9190919063ffffffff16565b61401790919063ffffffff16565b61401790919063ffffffff16565b90506000613a06836139f860115487613f9190919063ffffffff16565b61401790919063ffffffff16565b90506000613a2f82613a21858861341690919063ffffffff16565b61341690919063ffffffff16565b9050601b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a9b57600080fd5b505af193505050508015613aad575060015b613ab657613ab7565b5b6000613ae06004613ad2600385613f9190919063ffffffff16565b61401790919063ffffffff16565b90506000613af7828461341690919063ffffffff16565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613b80576040519150601f19603f3d011682016040523d82523d6000602084013e613b85565b606091505b505090506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051806000019050600060405180830381858888f193505050503d8060008114613c10576040519150601f19603f3d011682016040523d82523d6000602084013e613c15565b606091505b50509050600091506000905060008c1115613da957601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613d1657600080fd5b505af1158015613d2a573d6000803e3d6000fd5b50505050506040513d6060811015613d4157600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d604051808381526020018281526020019250505060405180910390a15b505050505050505050505050506000601d60006101000a81548160ff021916908315150217905550565b600080601a541415905090565b43601a81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e4957601354613e4d565b6014545b90506000613e776064613e698487613f9190919063ffffffff16565b61401790919063ffffffff16565b9050613ecb81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a690919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3613f86818561341690919063ffffffff16565b925050509392505050565b600080831415613fa45760009050614011565b6000828402905082848281613fb557fe5b041461400c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806141286021913960400191505060405180910390fd5b809150505b92915050565b600061405983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614061565b905092915050565b6000808311829061410d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140d25780820151818401526020810190506140b7565b50505050905090810190601f1680156140ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161411957fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212205a0c4d64d0051910c40f31f7ba2a820d0de445b1c4140271d8f14209e85aed3164736f6c63430007040033608060405273145677fc4d9b8f19b5d56d1820c48e0443049a30600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c4a174ccb5fb54a6721e11e0ca961e42715023f9600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e553480156100df57600080fd5b50604051611ada380380611ada8339818101604052602081101561010257600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561017057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610172565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506118d8806102026000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed1461033b578063f0fc6bca14610366578063ffb2c4791461037d578063ffd49c84146103b8576100dd565b8063ce7c2ac214610293578063d0e30db014610306578063e2d2e21914610310576100dd565b80632d48e896116100bb5780632d48e896146101cd5780633a98ef39146102125780634fab0ae81461023d578063997664d714610268576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610168575b600080fd5b3480156100ee57600080fd5b506100f76103e3565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b506101666004803603604081101561013057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103e9565b005b34801561017457600080fd5b506101b76004803603602081101561018b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106a8565b6040518082815260200191505060405180910390f35b3480156101d957600080fd5b50610210600480360360408110156101f057600080fd5b8101908080359060200190929190803590602001909291905050506107c2565b005b34801561021e57600080fd5b5061022761082c565b6040518082815260200191505060405180910390f35b34801561024957600080fd5b50610252610832565b6040518082815260200191505060405180910390f35b34801561027457600080fd5b5061027d610838565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061083e565b60405180848152602001838152602001828152602001935050505060405180910390f35b61030e610868565b005b34801561031c57600080fd5b50610325610d63565b6040518082815260200191505060405180910390f35b34801561034757600080fd5b50610350610d69565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610d6f565b005b34801561038957600080fd5b506103b6600480360360208110156103a057600080fd5b8101908080359060200190929190505050610df5565b005b3480156103c457600080fd5b506103cd610f6f565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461044157600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104965761049582610f75565b5b6000811180156104e857506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104fb576104f68261123b565b61055d565b60008114801561054d57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561055c5761055b826112ea565b5b5b6105c6816105b8600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546114c390919063ffffffff16565b61150d90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061065e600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106fd57600090506107bd565b600061074a600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107a5576000925050506107bd565b6107b881836114c390919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081a57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c057600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094b57600080fd5b505afa15801561095f573d6000803e3d6000fd5b505050506040513d602081101561097557600080fd5b810190808051906020019092919050505090506060600267ffffffffffffffff811180156109a257600080fd5b506040519080825280602002602001820160405280156109d15781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3c57600080fd5b505afa158015610a50573d6000803e3d6000fd5b505050506040513d6020811015610a6657600080fd5b810190808051906020019092919050505081600081518110610a8457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610aee57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610be6578082015181840152602081019050610bcb565b50505050905001955050505050506000604051808303818588803b158015610c0d57600080fd5b505af1158015610c21573d6000803e3d6000fd5b50505050506000610cfe83600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cb557600080fd5b505afa158015610cc9573d6000803e3d6000fd5b505050506040513d6020811015610cdf57600080fd5b81019080805190602001909291905050506114c390919063ffffffff16565b9050610d158160095461150d90919063ffffffff16565b600981905550610d58610d47600854610d3984600c546115c790919063ffffffff16565b61164d90919063ffffffff16565b600b5461150d90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610d7833611697565b610dea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6f20736f6f6e2e204e65656420746f20776169742100000000000000000081525060200191505060405180910390fd5b610df333610f75565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e4d57600080fd5b600060048054905090506000811415610e665750610f6c565b60008060005a90505b8482108015610e7d57508383105b15610f675783600f5410610e94576000600f819055505b610ed66004600f5481548110610ea657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611697565b15610f1e57610f1d6004600f5481548110610eed57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f75565b5b610f43610f345a836114c390919063ffffffff16565b8361150d90919063ffffffff16565b91505a9050600f600081548092919060010191905055508280600101935050610e6f565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610fc557611238565b6000610fd0826106a8565b9050600081111561123657610ff081600a5461150d90919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d60208110156110b357600080fd5b81019080805190602001909291905050505042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061115e81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461150d90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506111ef600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611595565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905003815481106112ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061137657fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546005600060046001600480549050038154811061141757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061148b57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061150583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506116fb565b905092915050565b60008082840190508381101561158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006115c0600c546115b2600b54856115c790919063ffffffff16565b61164d90919063ffffffff16565b9050919050565b6000808314156115da5760009050611647565b60008284029050828482816115eb57fe5b0414611642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806118826021913960400191505060405180910390fd5b809150505b92915050565b600061168f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117bb565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156116f45750600e546116f2836106a8565b115b9050919050565b60008383111582906117a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561176d578082015181840152602081019050611752565b50505050905090810190601f16801561179a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611867576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561182c578082015181840152602081019050611811565b50505050905090810190601f1680156118595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161187357fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212202f2b81635edc102509ea59cee6af693956c4f8588b3485d233548fc84989e0e864736f6c63430007040033

Deployed ByteCode Sourcemap

11244:11948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12950:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14384:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15228:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21097:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14646:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12404:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18279:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14826:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12325:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10614:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14560:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17191:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17472:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12085:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12191:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11928:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17964:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12849:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15452:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16752:431;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12361:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12287:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14976:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12528:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16368:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11786:62;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15864:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11855:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14740:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12136:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12565:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14470:84;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12249:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16098:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12629:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18115:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17756:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10287:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12728:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12657:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12485:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12439:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15753:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12896:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15087:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15978:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10457:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11014:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12598:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16229:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10788:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12689:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12950:60;;;;:::o;14384:80::-;14432:13;14456:5;;;;;;;;;;;;;;;;;14449:12;;14384:80;:::o;15228:216::-;15303:4;15355:6;15320:11;:23;15332:10;15320:23;;;;;;;;;;;;;;;:32;15344:7;15320:32;;;;;;;;;;;;;;;:41;;;;15398:7;15377:37;;15386:10;15377:37;;;15407:6;15377:37;;;;;;;;;;;;;;;;;;15432:4;15425:11;;15228:216;;;;:::o;21097:98::-;10003:19;10011:10;10003:7;:19::i;:::-;9995:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21178:9:::1;21164:11;;:23;;;;;;;;;;;;;;;;;;21097:98:::0;:::o;14646:88::-;14701:7;14719:12;;14712:19;;14646:88;:::o;12404:28::-;;;;:::o;18279:372::-;18379:4;18452:2;18409:11;:19;18421:6;18409:19;;;;;;;;;;;;;;;:31;18429:10;18409:31;;;;;;;;;;;;;;;;:46;18406:180;;18505:69;18541:6;18505:69;;;;;;;;;;;;;;;;;:11;:19;18517:6;18505:19;;;;;;;;;;;;;;;:31;18525:10;18505:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;18471:11;:19;18483:6;18471:19;;;;;;;;;;;;;;;:31;18491:10;18471:31;;;;;;;;;;;;;;;:103;;;;18406:180;18603:40;18617:6;18625:9;18636:6;18603:13;:40::i;:::-;18596:47;;18279:372;;;;;:::o;14826:142::-;14879:7;14906:54;14944:15;14954:4;;;;;;;;;;;14944:9;:15::i;:::-;14906:33;14923:15;14933:4;;;;;;;;;;;14923:9;:15::i;:::-;14906:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;14899:61;;14826:142;:::o;12325:29::-;;;;:::o;10614:103::-;10669:4;10704:5;;;;;;;;;;;10693:16;;:7;:16;;;10686:23;;10614:103;;;:::o;14560:80::-;14612:5;11440:1;14621:16;;14560:80;:::o;17191:273::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17354:20:::1;17330:21;;:44;;;;;;;;;;;;;;;;;;17403:18;17385:15;;:36;;;;;;;;;;;;;;;;;;17444:12;17432:9;;:24;;;;;;;;;;;;;;;;;;17191:273:::0;;;:::o;17472:276::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17629:14:::1;17604:21;;:39;;;;;;;;;;;;;;;;;;17670:16;17654:13;:32;;;;17725:15;17697:25;;:43;;;;;;;;;;;;;;;;;;17472:276:::0;;;:::o;12085:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;12191:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;11928:33::-;;;;;;;;;;;;;:::o;17964:139::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18057:6:::1;18051:3;:12;18043:21;;;::::0;::::1;;18092:3;18075:14;:20;;;;17964:139:::0;:::o;12849:40::-;;;;;;;;;;;;;:::o;15452:116::-;15507:4;15531:29;15539:7;15556:2;15531:7;:29::i;:::-;15524:36;;15452:116;;;:::o;16752:431::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16909:9:::1;16894:12;:24;;;;16942:12;16929:10;:25;;;;16980:15;16965:12;:30;;;;17023:15;17006:14;:32;;;;17070:46;17105:10;;17070:30;17087:12;;17070;;:16;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;17059:8;:57;;;;17147:28;17160:14;;17147:8;;:12;;:28;;;;:::i;:::-;17127:17;:48;;;;16752:431:::0;;;;:::o;12361:34::-;;;;:::o;12287:31::-;;;;:::o;14976:105::-;15042:7;15060:9;:18;15070:7;15060:18;;;;;;;;;;;;;;;;15053:25;;14976:105;;;:::o;12528:30::-;;;;;;;;;;;;;:::o;16368:376::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16486:4:::1;16468:23;;:6;:23;;;;:41;;;;;16505:4;;;;;;;;;;;16495:14;;:6;:14;;;;16468:41;16460:50;;;::::0;::::1;;16548:6;16521:16;:24;16538:6;16521:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;16578:6;16575:162;;;16600:19;;;;;;;;;;;:28;;;16629:6;16637:1;16600:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16575:162;;;16670:19;;;;;;;;;;;:28;;;16699:6;16707:9;:17;16717:6;16707:17;;;;;;;;;;;;;;;;16670:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16575:162;16368:376:::0;;:::o;11786:62::-;;;;:::o;15864:106::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15954:8:::1;15940:10;:22;;;;15864:106:::0;:::o;11855:60::-;;;;:::o;14740:78::-;14792:7;14810:5;;;;;;;;;;;14803:12;;14740:78;:::o;12136:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12565:24::-;;;;;;;;;;;;;:::o;14470:84::-;14520:13;14544:7;;;;;;;;;;;;;;;;;14537:14;;14470:84;:::o;12249:31::-;;;;:::o;16098:123::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16207:6:::1;16185:11;:19;16197:6;16185:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;16098:123:::0;;:::o;12629:19::-;;;;;;;;;;;;;:::o;18115:156::-;18195:4;18219:44;18233:10;18245:9;18256:6;18219:13;:44::i;:::-;18212:51;;18115:156;;;;:::o;17756:200::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17872:19:::1;;;;;;;;;;;:43;;;17916:11;17929:18;17872:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17756:200:::0;;:::o;10287:94::-;10003:19;10011:10;10003:7;:19::i;:::-;9995:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10369:4:::1;10347:14:::0;:19:::1;10362:3;10347:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;10287:94:::0;:::o;12728:46::-;;;;;;;;;;;;;:::o;12657:25::-;;;;:::o;12485:36::-;;;;;;;;;;;;;:::o;12439:37::-;;;;:::o;15753:103::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15840:8:::1;15825:12;:23;;;;15753:103:::0;:::o;12896:45::-;;;;;;;;;;;;;:::o;15087:133::-;15171:7;15189:11;:19;15201:6;15189:19;;;;;;;;;;;;;;;:28;15209:7;15189:28;;;;;;;;;;;;;;;;15182:35;;15087:133;;;;:::o;15978:108::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16070:8:::1;16053:14;;:25;;;;;;;;;;;;;;;;;;15978:108:::0;:::o;10457:97::-;10003:19;10011:10;10003:7;:19::i;:::-;9995:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10541:5:::1;10519:14;:19;10534:3;10519:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;10457:97:::0;:::o;11014:173::-;10003:19;10011:10;10003:7;:19::i;:::-;9995:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11098:3:::1;11090:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;11134:4;11112:14:::0;:19:::1;11127:3;11112:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11154:25;11175:3;11154:25;;;;;;;;;;;;;;;;;;;;11014:173:::0;:::o;12598:24::-;;;;;;;;;;;;;:::o;16229:131::-;10172:24;10185:10;10172:12;:24::i;:::-;10164:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16346:6:::1;16320:15;:23;16336:6;16320:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;16229:131:::0;;:::o;10788:107::-;10844:4;10868:14;:19;10883:3;10868:19;;;;;;;;;;;;;;;;;;;;;;;;;10861:26;;10788:107;;;:::o;12689:30::-;;;;;;;;;;;;;:::o;92:179::-;150:7;170:9;186:1;182;:5;170:17;;211:1;206;:6;;198:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;262:1;255:8;;;92:179;;;;:::o;423:190::-;509:7;542:1;537;:6;;545:12;529:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;569:9;585:1;581;:5;569:17;;604:1;597:8;;;423:190;;;;;:::o;18659:1641::-;18751:4;18781:16;;;;;;;;;;;18778:73;;;18807:41;18822:6;18830:9;18841:6;18807:14;:41::i;:::-;18800:48;;;;18778:73;18867:14;:22;18882:6;18867:22;;;;;;;;;;;;;;;;;;;;;;;;;18866:23;:53;;;;;18894:14;:25;18909:9;18894:25;;;;;;;;;;;;;;;;;;;;;;;;;18893:26;18866:53;18863:128;;;18943:11;;;;;;;;;;;18935:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18863:128;19021:12;;19011:6;:22;;:49;;;;19037:15;:23;19053:6;19037:23;;;;;;;;;;;;;;;;;;;;;;;;;19011:49;19003:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19112:4;;;;;;;;;;;19098:18;;:10;:18;;;;:39;;;;;19121:16;;;;;;;;;;;19120:17;19098:39;:64;;;;;19141:21;;;;;;;;;;;19098:64;:109;;;;;19194:13;;19166:9;:24;19184:4;19166:24;;;;;;;;;;;;;;;;:41;;19098:109;19095:128;;;19210:10;:8;:10::i;:::-;19095:128;19239:10;:8;:10::i;:::-;19238:11;:32;;;;;19266:4;;;;;;;;;;;19253:17;;:9;:17;;;19238:32;19235:117;;;19315:1;19295:9;:17;19305:6;19295:17;;;;;;;;;;;;;;;;:21;19287:30;;;;;;19332:8;:6;:8::i;:::-;19235:117;19411:53;19433:6;19411:53;;;;;;;;;;;;;;;;;:9;:17;19421:6;19411:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;19391:9;:17;19401:6;19391:17;;;;;;;;;;;;;;;:73;;;;19489:15;:26;19505:9;19489:26;;;;;;;;;;;;;;;;;;;;;;;;;19488:27;:45;;;;;19519:14;;;;;;;;;;;19488:45;19485:141;;;19603:10;;19567:32;19592:6;19567:9;:20;19577:9;19567:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;19559:55;;;;;;19485:141;19638:19;19661:11;:19;19673:6;19661:19;;;;;;;;;;;;;;;;;;;;;;;;;19660:20;:47;;;;;19685:11;:22;19697:9;19685:22;;;;;;;;;;;;;;;;;;;;;;;;;19684:23;19660:47;:93;;19747:6;19660:93;;;19710:34;19718:6;19726:9;19737:6;19710:7;:34::i;:::-;19660:93;19638:115;;19787:37;19812:11;19787:9;:20;19797:9;19787:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;19764:9;:20;19774:9;19764:20;;;;;;;;;;;;;;;:60;;;;19870:16;:24;19887:6;19870:24;;;;;;;;;;;;;;;;;;;;;;;;;19866:127;;19915:19;;;;;;;;;;;:28;;;19944:6;19952:9;:17;19962:6;19952:17;;;;;;;;;;;;;;;;19915:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19911:71;;;;;;19866:127;20009:16;:27;20026:9;20009:27;;;;;;;;;;;;;;;;;;;;;;;;;20005:137;;20057:19;;;;;;;;;;;:28;;;20086:9;20097;:20;20107:9;20097:20;;;;;;;;;;;;;;;;20057:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20053:77;;;;;;20005:137;20158:19;;;;;;;;;;;:27;;;20186:14;;20158:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20154:59;;;;;;20247:9;20230:40;;20239:6;20230:40;;;20258:11;20230:40;;;;;;;;;;;;;;;;;;20288:4;20281:11;;;18659:1641;;;;;;:::o;279:136::-;337:7;364:43;368:1;371;364:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;357:50;;279:136;;;;:::o;20312:330::-;20405:4;20442:53;20464:6;20442:53;;;;;;;;;;;;;;;;;:9;:17;20452:6;20442:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;20422:9;:17;20432:6;20422:17;;;;;;;;;;;;;;;:73;;;;20529:32;20554:6;20529:9;:20;20539:9;20529:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;20506:9;:20;20516:9;20506:20;;;;;;;;;;;;;;;:55;;;;20594:9;20577:35;;20586:6;20577:35;;;20605:6;20577:35;;;;;;;;;;;;;;;;;;20630:4;20623:11;;20312:330;;;;;:::o;21203:1920::-;13074:4;13055:16;;:23;;;;;;;;;;;;;;;;;;21265::::1;21291:9;:24;21309:4;21291:24;;;;;;;;;;;;;;;;21265:50;;21326:23;21352:54;21404:1;21352:47;21390:8;;21352:33;21372:12;;21352:15;:19;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;21326:80;;21417:20;21440:36;21460:15;21440;:19;;:36;;;;:::i;:::-;21417:59;;21489:21;21527:1;21513:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:40;;21558:4;21540;21545:1;21540:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;21584:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;21574:4;21579:1;21574:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;21610:6;;;;;;;;;;;:57;;;21682:12;21709:1;21725:4;21752;21772:15;21610:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21811:17;21831:21;21811:41;;21865:19;21887:33;21900:19;21917:1;21900:12;;:16;;:19;;;;:::i;:::-;21887:8;;:12;;:33;;;;:::i;:::-;21865:55;;21941:26;21970:51;22019:1;21970:44;22002:11;21970:27;21984:12;;21970:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;21941:80;;22032:27;22062:42;22092:11;22062:25;22076:10;;22062:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;22032:72;;22115:26;22144:58;22182:19;22144:33;22158:18;22144:9;:13;;:33;;;;:::i;:::-;:37;;:58;;;;:::i;:::-;22115:87;;22219:19;;;;;;;;;;;:27;;;22254:19;22219:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22215:73;;;;;;22308:22;22333:32;22363:1;22333:25;22356:1;22333:18;:22;;:25;;;;:::i;:::-;:29;;:32;;;;:::i;:::-;22308:57;;22376:16;22395:38;22418:14;22395:18;:22;;:38;;;;:::i;:::-;22376:57;;22455:15;22483;;;;;;;;;;;22475:29;;22512:14;22533:5;22475:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22454:89;;;22555:16;22584:9;;;;;;;;;;;22576:23;;22607:8;22622:5;22576:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22554:78;;;22706:5;22693:18;;22736:5;22722:19;;22775:1;22757:15;:19;22754:362;;;22792:6;;;;;;;;;;;:22;;;22822:18;22868:4;22892:15;22926:1;22946::::0;22966:21:::1;;;;;;;;;;;23006:15;22792:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23056:48;23068:18;23088:15;23056:48;;;;;;;;;;;;;;;;;;;;;;;;22754:362;13089:1;;;;;;;;;;;;;13120:5:::0;13101:16;;:24;;;;;;;;;;;;;;;;;;21203:1920::o;15576:90::-;15619:4;15657:1;15643:10;;:15;;15636:22;;15576:90;:::o;15674:71::-;15725:12;15712:10;:25;;;;15674:71::o;20650:439::-;20736:7;20766:21;20798:9;20790:17;;:4;;;;;;;;;;;:17;;;:48;;20830:8;;20790:48;;;20810:17;;20790:48;20766:72;;20849:17;20869:34;20899:3;20869:25;20880:13;20869:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;20849:54;;20943:39;20972:9;20943;:24;20961:4;20943:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;20916:9;:24;20934:4;20916:24;;;;;;;;;;;;;;;:66;;;;21023:4;20998:42;;21007:6;20998:42;;;21030:9;20998:42;;;;;;;;;;;;;;;;;;21060:21;21071:9;21060:6;:10;;:21;;;;:::i;:::-;21053:28;;;;20650:439;;;;;:::o;621:224::-;679:7;708:1;703;:6;699:25;;;720:1;713:8;;;;699:25;734:9;750:1;746;:5;734:17;;779:1;774;770;:5;;;;;;:10;762:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:1;829:8;;;621:224;;;;;:::o;853:132::-;911:7;938:39;942:1;945;938:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;931:46;;853:132;;;;:::o;993:189::-;1079:7;1111:1;1107;:5;1114:12;1099:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1138:9;1154:1;1150;:5;;;;;;1138:17;;1173:1;1166:8;;;993:189;;;;;:::o

Swarm Source

ipfs://2f2b81635edc102509ea59cee6af693956c4f8588b3485d233548fc84989e0e8
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.