Contract 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d

Contract Overview

Balance:
0 BNB

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x8a7b519150a4a58a68a98d12b2ab39b19d1c013908ad548344d495c6a20586f3109844332021-07-28 12:16:523 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00024562
0xd798b80aeaf7e534553cf951a361159c2019a7fe2ed4f18d04c92a6c0b53bc0f108637502021-07-24 6:26:034 days 8 hrs ago0x5462963bd0e29bc5b8f711391efb5a088a8c98d5 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00155337
0x226fbeb4e295f027ac18bf9cf52716c850127d42fd80033a879fd84735e99d41108637442021-07-24 6:25:454 days 8 hrs ago0x5462963bd0e29bc5b8f711391efb5a088a8c98d5 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00112934
0xc3a7eb092ee57e25297e2dd1f923708dbf572e8652085f0e2d7604892b273b19108637352021-07-24 6:25:184 days 8 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00140349
0xa0268aff06ae06ac3ab0414f2855a862f3237f6d9816a78cb881817915d58a0e93157752021-05-31 6:36:3158 days 8 hrs ago0x3f24a9c1ca146e36f7541547494bf2b4057caafd IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00102134
0x4884fcc1cc0afa885010b73e26cb56dd75c0753e2c339941d67c4aa9e190cd7286574322021-05-08 8:35:5981 days 6 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00024562
0x2a7f32de923439fd200b14c14df4e6599e0232e50444d1c2aabc706ce9ab6ce886574242021-05-08 8:35:3581 days 6 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.0002455
0x8328ea564cf5b22b49856bb751235724d8e624d355db355dbe304f20aa16d2f986574132021-05-08 8:35:0281 days 6 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00117193
0x3fb72a1c68c2c730daf41f70aab7c80782568ea43c4dbc8e3ca6203a20ba0de585698172021-05-05 7:33:1784 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00201653
0x2093b992f79342ab10ada66681e2eb20307c6a73ad23e90e711226a7b013885485697852021-05-05 7:31:4184 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00201665
0x6984ba9fc462a4390d99cb8e01054ede857965957687af1a8dbf73c0e0786f6885697732021-05-05 7:31:0584 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00116827
0xaf1d1f5968d990e76e1885c05f922accbf7d7ca4fb12cb16aafada3efdd877e785697652021-05-05 7:30:4184 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00116827
0x1bb91b4ce29a7e85e96b63bfc81d6ee13604cfbc7eed8012b774f7a70473dc9c85692192021-05-05 7:03:2384 days 8 hrs ago0x3f24a9c1ca146e36f7541547494bf2b4057caafd IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00207984
0x47dca9898807636ce0d32051e23e7b1d54c70e6ae073b718dfe1f8a3df3e164f85676392021-05-05 5:44:2384 days 9 hrs ago0x3f24a9c1ca146e36f7541547494bf2b4057caafd IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00289221
0x28533e3dda2eb162d92b77c0f8be3ee27cd9f047047370f9f69a7cf8fe1e9eca85673622021-05-05 5:30:3284 days 9 hrs ago0x0506b3c58082baa21078f921fc341e7d84a6e9c1 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00136027
0x613f56c8ff1372eab826d58ec421d4d1986f5801f9be9f408cc8a4b395a1d6ef85673452021-05-05 5:29:4184 days 9 hrs ago0x0506b3c58082baa21078f921fc341e7d84a6e9c1 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00289209
0xeafb0166870ad52420e0c6d152eb406677aed24777934361f7b86efd078c961285437432021-05-04 9:49:3585 days 5 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00116827
0x42865943d73a39ec3d78ddc67f94bcc070d7e2caccf1cbfedc1b81a8d8513edd85437172021-05-04 9:48:1785 days 5 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00106027
0x6026cfc2588f624a8807592d6ea7732ffbbaa8fd28bb75bd13c6baa08d13992b85419182021-05-04 8:18:2085 days 6 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00192972
0x40277e2090a2547fc5dc469ea683bbc6e5f22e35afdeacf5242d124da47a40c085413982021-05-04 7:52:2085 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00207984
0xfce426e0f8d622d2b2f9f6b9de5b97ee4203c2e47d9fffe40ede18db8634d3f085413872021-05-04 7:51:4785 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00116827
0xadc6ad0501e9286426851045a3e37b43c4cccfd164f420ecc41afeee500e045185413682021-05-04 7:50:5085 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00116827
0x9258e6f92c447e487db77522bf916f8f2447ee5027bc9a9d5e667f15ce464a6f85413282021-05-04 7:48:5085 days 7 hrs ago0x5462963bd0e29bc5b8f711391efb5a088a8c98d5 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00274209
0xf59b17e212b02282c480934cadb611262513815ba097c039d7aa3171815931a685412432021-05-04 7:44:3585 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00106027
0x7ed16c9fde9f29b00da8fcb3f388309451d577cdfd7c7c1819b6576e6d369a3385412332021-05-04 7:44:0585 days 7 hrs ago0x035d96f8a93afafa96cc63049a9c0cec3b241291 IN  0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d0 BNB0.00207972
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd798b80aeaf7e534553cf951a361159c2019a7fe2ed4f18d04c92a6c0b53bc0f108637502021-07-24 6:26:034 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0x226fbeb4e295f027ac18bf9cf52716c850127d42fd80033a879fd84735e99d41108637442021-07-24 6:25:454 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x226fbeb4e295f027ac18bf9cf52716c850127d42fd80033a879fd84735e99d41108637442021-07-24 6:25:454 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0xc3a7eb092ee57e25297e2dd1f923708dbf572e8652085f0e2d7604892b273b19108637352021-07-24 6:25:184 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0xa0268aff06ae06ac3ab0414f2855a862f3237f6d9816a78cb881817915d58a0e93157752021-05-31 6:36:3158 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0xa0268aff06ae06ac3ab0414f2855a862f3237f6d9816a78cb881817915d58a0e93157752021-05-31 6:36:3158 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x8328ea564cf5b22b49856bb751235724d8e624d355db355dbe304f20aa16d2f986574132021-05-08 8:35:0281 days 6 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x8328ea564cf5b22b49856bb751235724d8e624d355db355dbe304f20aa16d2f986574132021-05-08 8:35:0281 days 6 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x3fb72a1c68c2c730daf41f70aab7c80782568ea43c4dbc8e3ca6203a20ba0de585698172021-05-05 7:33:1784 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0x3fb72a1c68c2c730daf41f70aab7c80782568ea43c4dbc8e3ca6203a20ba0de585698172021-05-05 7:33:1784 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x3fb72a1c68c2c730daf41f70aab7c80782568ea43c4dbc8e3ca6203a20ba0de585698172021-05-05 7:33:1784 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x2093b992f79342ab10ada66681e2eb20307c6a73ad23e90e711226a7b013885485697852021-05-05 7:31:4184 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0x2093b992f79342ab10ada66681e2eb20307c6a73ad23e90e711226a7b013885485697852021-05-05 7:31:4184 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x2093b992f79342ab10ada66681e2eb20307c6a73ad23e90e711226a7b013885485697852021-05-05 7:31:4184 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x6984ba9fc462a4390d99cb8e01054ede857965957687af1a8dbf73c0e0786f6885697732021-05-05 7:31:0584 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x6984ba9fc462a4390d99cb8e01054ede857965957687af1a8dbf73c0e0786f6885697732021-05-05 7:31:0584 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0xaf1d1f5968d990e76e1885c05f922accbf7d7ca4fb12cb16aafada3efdd877e785697652021-05-05 7:30:4184 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0xaf1d1f5968d990e76e1885c05f922accbf7d7ca4fb12cb16aafada3efdd877e785697652021-05-05 7:30:4184 days 7 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x1bb91b4ce29a7e85e96b63bfc81d6ee13604cfbc7eed8012b774f7a70473dc9c85692192021-05-05 7:03:2384 days 8 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0x47dca9898807636ce0d32051e23e7b1d54c70e6ae073b718dfe1f8a3df3e164f85676392021-05-05 5:44:2384 days 9 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0x28533e3dda2eb162d92b77c0f8be3ee27cd9f047047370f9f69a7cf8fe1e9eca85673622021-05-05 5:30:3284 days 9 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x28533e3dda2eb162d92b77c0f8be3ee27cd9f047047370f9f69a7cf8fe1e9eca85673622021-05-05 5:30:3284 days 9 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0x613f56c8ff1372eab826d58ec421d4d1986f5801f9be9f408cc8a4b395a1d6ef85673452021-05-05 5:29:4184 days 9 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x141a5528a90c8d4d537ca58a190c8f0072fe9c580 BNB
0xeafb0166870ad52420e0c6d152eb406677aed24777934361f7b86efd078c961285437432021-05-04 9:49:3585 days 5 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
0xeafb0166870ad52420e0c6d152eb406677aed24777934361f7b86efd078c961285437432021-05-04 9:49:3585 days 5 hrs ago 0xb00c213fe8a2dabafd6f6d1ac131b8d59a75dd5d 0x857eec9cf861b4b7ec27dd216d6eb12bb38c79450 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Farm

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: Farm.sol
pragma solidity ^0.5.4;

import './IERC20.sol';
import './Ownable.sol';
import './SafeMath.sol';

/**
 * Website: IRDT.io
 **/

contract Farm is Ownable {
    using SafeMath for uint256;

    struct User {
        uint256 startingIntegral;
        address referrer;
        uint256 tokenAmount;   
        uint256 earningAmount;
    }

    struct StakeHistory {
        uint256 joinedTime;
        uint256 joinedAmount;
        uint256 planIndex;
        bool isStake;
    }

    struct Plan {
        address stakingTokenAddress;
        address rewardTokenAddress;
        IERC20 stakingToken;
        IERC20 rewardToken;
        uint256 totalTokenStaked;
        uint256 tokenStaking;
        uint256 remainingRewardAmount;
        uint256 rewardAmount;
        uint256 duration;
        uint256 integralOfRewardPerToken;
        bool referralEnable;
        uint256 referralPercent;
        uint256 startTime;
        uint256 prevTimeStake;
        uint256 idCounter;
        uint256 currentUserCount;
    }


    mapping(uint256 => mapping(address => uint256)) addressToId;
    mapping(uint256 => mapping(uint256 => address)) idToAddress;
    mapping(uint256 => mapping(address => User)) users;
    mapping(address => StakeHistory[]) public history;

    Plan[] plans;

    event AddPlan(address indexed stakingToken, address indexed rewardToken, uint256 rewardAmount, uint256 startTime, uint256 duration, bool referralEnable, uint256 referralPercent);
    event Unstake(uint256 indexed planIndex, address indexed unStaker, uint256 amount);
    event ClaimReward(uint256 indexed planIndex, address indexed unStaker, uint256 reward, uint256 referralReward);
    event UnstakeAndClaimRewards(uint256 indexed planIndex, address indexed unStaker, uint256 reward, uint256 referralReward, uint256 amount);
    event Stake(uint256 indexed planIndex, address indexed staker, uint256 amount, uint256 referrerID);
    event AddStake(uint256 indexed planIndex, address indexed staker, uint256 amount);
    
    /**
     * Add new staking plan 
     *
     * Requirements:
     *
     * - caller should only be owner
     */
    function addPlan(address token, address rewardToken, uint256 rewardAmount, uint256 startTime, uint256 duration, bool referralEnable, uint256 referralPercent, uint256 initialStakingAmount) public onlyOwner {
        Plan memory plan = Plan({
            integralOfRewardPerToken  : 0,
            idCounter : 2,
            stakingTokenAddress : token,
            rewardTokenAddress : rewardToken,
            tokenStaking : initialStakingAmount,
            stakingToken : IERC20(token),
            rewardToken : IERC20(rewardToken),
            remainingRewardAmount : rewardAmount.mul(1e24),
            rewardAmount : rewardAmount,
            duration : duration,
            referralEnable : referralEnable,
            referralPercent : referralPercent,
            startTime: startTime,
            prevTimeStake : startTime,
            totalTokenStaked: initialStakingAmount,
            currentUserCount: 1
        });
        
        
        addressToId[plans.length][msg.sender] = 1;
        idToAddress[plans.length][1] = msg.sender;
        plan.rewardToken.transferFrom(msg.sender, address(this), rewardAmount);
        plan.stakingToken.transferFrom(msg.sender, address(this), initialStakingAmount);

        User memory newUser = User(0, msg.sender, initialStakingAmount, 0);
        users[plans.length][msg.sender] = newUser;
        plans.push(plan);
        history[msg.sender].push(StakeHistory(startTime, initialStakingAmount, plans.length - 1,true));
        emit Stake(plans.length - 1, msg.sender, initialStakingAmount, 1);
        emit AddPlan(token, rewardToken, rewardAmount, startTime, duration, referralEnable, referralPercent);
    }

    /**
     * Stake With Permit in given plan using EIP-2612 permit function
     */
    function stakeWithPermit(uint256 planIndex, uint256 amount, uint256 referrerID, uint256 deadlineRT, uint8 v, bytes32 r, bytes32 s) public returns(uint256 id) {
        plans[planIndex].stakingToken.permit(msg.sender, address(this), amount, deadlineRT, v, r, s);
        return stake(planIndex, amount, referrerID);
    }

    /**
     * Stake in given plan using transferFrom function in stakingToken
     *
     * Requirements:
     *
     * - caller should approve amount before calling this contract
     */
    function stake(uint256 planIndex, uint256 amount, uint256 referrerID) public returns(uint256 id) {
        require(amount > 0, "Cannot stake 0");
        require(users[planIndex][msg.sender].referrer == address(0),"Reentrant is not allowed, use addStake function");
        Plan storage plan = plans[planIndex];
        require(block.timestamp < plan.startTime.add(plan.duration),"Too Late");
        require(block.timestamp > plan.startTime,"Too Early");
        if(plan.idCounter <= referrerID || referrerID == 0)
            referrerID = 1;

        plan.stakingToken.transferFrom(msg.sender, address(this), amount);
        plan.integralOfRewardPerToken = plan.integralOfRewardPerToken.add((block.timestamp.sub(plan.prevTimeStake)).mul(rewardPerToken(planIndex)));
        plan.prevTimeStake = block.timestamp;
        plan.totalTokenStaked = plan.totalTokenStaked.add(amount);
        plan.tokenStaking = plan.tokenStaking.add(amount);
        address referrerAddr = idToAddress[planIndex][referrerID];
        User memory newUser = User(plan.integralOfRewardPerToken, referrerAddr, amount, 0);
        users[planIndex][msg.sender] = newUser;
       
        addressToId[planIndex][msg.sender] = plan.idCounter;
        idToAddress[planIndex][plan.idCounter] = msg.sender;
        plan.idCounter++;
        
        plan.currentUserCount++;
        history[msg.sender].push(StakeHistory(block.timestamp, amount, planIndex,true));

        emit Stake(planIndex, msg.sender, amount, referrerID);
        return(addressToId[planIndex][msg.sender]);
    }

    /**
     * Add to Stake With Permit in given plan using EIP-2612 permit function
     */
    function addStakeWithPermit(uint256 planIndex, uint256 amount, uint256 deadlineRT, uint8 v, bytes32 r, bytes32 s) public returns(uint256 id) {
        require(amount > 0, "Cannot stake 0");
        plans[planIndex].stakingToken.permit(msg.sender, address(this), amount, deadlineRT, v, r, s);
        return addStake(planIndex, amount);
    }
    
    /**
     * Add Stake in given plan using transferFrom function in stakingToken
     *
     * Requirements:
     *
     * - caller should approve amount before calling this contract
     */
    function addStake(uint256 planIndex, uint256 amount) public returns(uint256) {
        require(amount > 0, "Cannot stake 0");
        Plan storage plan = plans[planIndex];
        require(block.timestamp < plan.startTime.add(plan.duration),"Too Late");
        require(block.timestamp > plan.startTime,"Too Early");
        User storage user = users[planIndex][msg.sender];
        require(user.referrer != address(0),"First stake then add");
        calculateReward(planIndex);
        if (user.tokenAmount == 0) {
            plan.currentUserCount++;
        }
        plan.stakingToken.transferFrom(msg.sender, address(this), amount);
        user.tokenAmount = user.tokenAmount.add(amount); 
        plan.tokenStaking = plan.tokenStaking.add(amount);
        plan.totalTokenStaked = plan.totalTokenStaked.add(amount);
        emit AddStake(planIndex, msg.sender, amount);
        history[msg.sender].push(StakeHistory(block.timestamp, amount, planIndex,true));

        return addressToId[planIndex][msg.sender];

    }

    /**
     * UnStake And Claim Rewards from given plan
     */
    function unstakeAndClaimRewards(uint256 planIndex, uint256 unstakeAmount) public returns(uint256 reward, uint256 referralReward, uint256 amount) {
        require(unstakeAmount > 0, "Cannot unstake 0");
        Plan storage plan = plans[planIndex]; 
        User storage user = users[planIndex][msg.sender];
        require(user.tokenAmount > 0,"You don't have any stake amount");
        require(user.tokenAmount >= unstakeAmount,"More than you staking amount");

        calculateReward(planIndex);
        plan.tokenStaking = plan.tokenStaking.sub(unstakeAmount);
        user.tokenAmount = user.tokenAmount.sub(unstakeAmount);
        if(user.earningAmount > 0){
            plan.remainingRewardAmount = plan.remainingRewardAmount.sub(user.earningAmount);
           

            if(plan.referralEnable){
                referralReward = (user.earningAmount.mul(plan.referralPercent)).div(100);
                user.earningAmount = user.earningAmount.sub(referralReward);
                plan.rewardToken.transfer(user.referrer, referralReward.div(1e24));
            }
            reward = user.earningAmount;
            user.earningAmount = 0;

            plan.rewardToken.transfer(msg.sender, reward.div(1e24));
        }
        
        plan.stakingToken.transfer(msg.sender, unstakeAmount);
        amount = unstakeAmount;
        if (user.tokenAmount == 0) {
            plan.currentUserCount--;
        }
        
        history[msg.sender].push(StakeHistory(block.timestamp, unstakeAmount, planIndex,false));
        emit UnstakeAndClaimRewards(planIndex, msg.sender, reward.div(1e24), referralReward.div(1e24), amount);

    }

    /**
     * UnStake from given plan
     * You can still withdraw your reward later using claimReward function
     */
    function unStake(uint256 planIndex, uint256 unstakeAmount) public returns(uint256 amount) {
        require(unstakeAmount > 0, "Cannot unstake 0");
        Plan storage plan = plans[planIndex];
        User storage user = users[planIndex][msg.sender];
        require(user.tokenAmount > 0,"You don't have any stake amount");

        calculateReward(planIndex);
        user.tokenAmount = user.tokenAmount.sub(unstakeAmount);
        plan.tokenStaking = plan.tokenStaking.sub(unstakeAmount);

        plan.stakingToken.transfer(msg.sender, unstakeAmount);
        if (user.tokenAmount == 0) {
            plan.currentUserCount--;
        }
        history[msg.sender].push(StakeHistory(block.timestamp, unstakeAmount, planIndex,false));

        emit Unstake(planIndex, msg.sender, unstakeAmount);
        return unstakeAmount;

    }
    
    /**
     * Cliam reward from given plan
     */
    function claimRewards(uint256 planIndex) public returns(uint256 reward, uint256 referralReward) {
        Plan storage plan = plans[planIndex];
        User storage user = users[planIndex][msg.sender];
        calculateReward(planIndex);
        reward = user.earningAmount;
        if(reward > 0){
            plan.remainingRewardAmount = plan.remainingRewardAmount.sub(reward);
            if(plan.referralEnable){
                referralReward = (reward.mul(plan.referralPercent)).div(100);
                reward = reward.sub(referralReward);
                plan.rewardToken.transfer(user.referrer, referralReward.div(1e24));
            }
            user.earningAmount = 0;
            plan.rewardToken.transfer(msg.sender, reward.div(1e24));
            emit ClaimReward(planIndex, msg.sender, reward.div(1e24), referralReward.div(1e24));
        }
    }

    // private util function to calculate reward
    function calculateReward(uint256 planIndex) private {
        Plan storage plan = plans[planIndex];
        require(block.timestamp >= plan.startTime,"Too Early");
        User storage user = users[planIndex][msg.sender];
        if(user.tokenAmount == 0){
            return ;
        }

        uint256 dur;
        (plan.integralOfRewardPerToken, dur) = getIntegral(planIndex);

        plan.prevTimeStake = plan.prevTimeStake.add(dur);
        uint256 reward = plan.integralOfRewardPerToken.sub(user.startingIntegral).mul(user.tokenAmount);
        user.earningAmount = user.earningAmount.add(reward);
        user.startingIntegral = plan.integralOfRewardPerToken;
    }

    // View function to retrieve plan data
    function getPlanConsts(uint256 planIndex) view public returns (address stakingTokenAddress, address rewardTokenAddress, uint256 rewardAmount, bool referralEnable, uint256 referralPercent, uint256 startTime, uint256 duration){
        Plan memory plan = plans[planIndex];
        return (plan.stakingTokenAddress, plan.rewardTokenAddress, plan.rewardAmount, plan.referralEnable, plan.referralPercent, plan.startTime, plan.duration);
    }

    // View function to retrieve plan data
    function getPlanData(uint256 planIndex) view public returns (uint256 totalTokenStaked ,uint256 tokenStaking , uint256 remainingRewardAmount, uint256 currentUserCount, uint256 idCounter, uint256 integralOfRewardPerToken, uint256 prevTimeStake){
        Plan memory plan = plans[planIndex];
        return (plan.totalTokenStaked, plan.tokenStaking, plan.remainingRewardAmount, plan.currentUserCount, plan.idCounter, plan.integralOfRewardPerToken, plan.prevTimeStake);
    }

    // View function to state of staking and rewarding status
    function getIntegral(uint256 planIndex) public view returns (uint256, uint256) {
        Plan memory plan = plans[planIndex];
        if (block.timestamp < plan.startTime)
            return (0, 0);
        else {
            uint256 dur = block.timestamp.sub(plan.prevTimeStake);
            if(plan.startTime.add(plan.duration) < block.timestamp)
                dur = plan.startTime.add(plan.duration).sub(plan.prevTimeStake);
            return (plan.integralOfRewardPerToken.add((dur).mul(rewardPerToken(planIndex))), dur);
        }
    }

    // View function to get reward per each staking token
    function rewardPerToken(uint256 planIndex) view public returns (uint256) {
        Plan memory plan = plans[planIndex];
        return (plan.rewardAmount.mul(1e24).div(plan.tokenStaking).div(plan.duration));
    }

    // View function to get amount of tokens staked and not unstaked
    function totalSupply(uint256 planIndex) public view returns (uint256) {
        Plan memory plan = plans[planIndex];
        return plan.tokenStaking;
    }

    // View function to retrieve user data
    function getUserData(uint256 planIndex, address account) public view returns (uint256 stakingAmount,address referrer, uint256 earningAmount, uint256 rewardAmount, uint256 startingIntegral) {
        User memory user = users[planIndex][account];
        uint256 reward = 0;
        if (user.tokenAmount != 0) {
            (uint256 integralOfRewardPerToken,) = getIntegral(planIndex);
            reward = (integralOfRewardPerToken.sub(user.startingIntegral)).mul(user.tokenAmount);
        }
        
        return (user.tokenAmount,user.referrer ,user.earningAmount, reward.add(user.earningAmount), user.startingIntegral);
    }

    // View function to retrieve user id in the given plan
    function getID(uint256 planIndex, address addr) view public returns (uint256 id) {
        return addressToId[planIndex][addr];
    }
}

File 2 of 4: IERC20.sol
pragma solidity ^0.5.4;

contract IERC20 {
    function totalSupply() external view returns (uint256);

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

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

File 3 of 4: Ownable.sol
pragma solidity ^0.5.4;

contract Ownable {
    address private _owner;

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

    constructor () internal {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 4 of 4: SafeMath.sol
pragma solidity ^0.5.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;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingToken","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"bool","name":"referralEnable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"referralPercent","type":"uint256"}],"name":"AddPlan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"planIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"planIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"unStaker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralReward","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"planIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerID","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"planIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"unStaker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"planIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"unStaker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeAndClaimRewards","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bool","name":"referralEnable","type":"bool"},{"internalType":"uint256","name":"referralPercent","type":"uint256"},{"internalType":"uint256","name":"initialStakingAmount","type":"uint256"}],"name":"addPlan","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadlineRT","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"addStakeWithPermit","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"claimRewards","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"referralReward","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"getID","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"getIntegral","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"getPlanConsts","outputs":[{"internalType":"address","name":"stakingTokenAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"bool","name":"referralEnable","type":"bool"},{"internalType":"uint256","name":"referralPercent","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"getPlanData","outputs":[{"internalType":"uint256","name":"totalTokenStaked","type":"uint256"},{"internalType":"uint256","name":"tokenStaking","type":"uint256"},{"internalType":"uint256","name":"remainingRewardAmount","type":"uint256"},{"internalType":"uint256","name":"currentUserCount","type":"uint256"},{"internalType":"uint256","name":"idCounter","type":"uint256"},{"internalType":"uint256","name":"integralOfRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"prevTimeStake","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"getUserData","outputs":[{"internalType":"uint256","name":"stakingAmount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"earningAmount","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"startingIntegral","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint256","name":"joinedTime","type":"uint256"},{"internalType":"uint256","name":"joinedAmount","type":"uint256"},{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"bool","name":"isStake","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"referrerID","type":"uint256"}],"name":"stake","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"referrerID","type":"uint256"},{"internalType":"uint256","name":"deadlineRT","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"stakeWithPermit","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"unstakeAmount","type":"uint256"}],"name":"unStake","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"planIndex","type":"uint256"},{"internalType":"uint256","name":"unstakeAmount","type":"uint256"}],"name":"unstakeAndClaimRewards","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"referralReward","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506148ae806100b46000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80637e64ebfe116100a2578063a638f2e211610071578063a638f2e2146106ec578063bd85b03914610742578063e425b48d14610784578063f2fde38b146107cd578063fd2b52021461081157610116565b80637e64ebfe14610536578063874c120b146105fe5780638da5cb5b146106405780639feedcf11461068a57610116565b80634efbb21d116100e95780634efbb21d146102d15780637718f4ec1461032b57806378106d07146103a65780637b2ca01f146104125780637de9799d1461049357610116565b80630962ef791461011b5780633273425714610164578063372caeb81461020e5780633af644ed1461025a575b600080fd5b6101476004803603602081101561013157600080fd5b810190808035906020019092919050505061085d565b604051808381526020018281526020019250505060405180910390f35b6101b06004803603604081101561017a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c2f565b604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390f35b6102446004803603604081101561022457600080fd5b810190808035906020019092919080359060200190929190505050610da1565b6040518082815260200191505060405180910390f35b6102bb600480360360c081101561027057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061117f565b6040518082815260200191505060405180910390f35b610307600480360360408110156102e757600080fd5b810190808035906020019092919080359060200190929190505050611343565b60405180848152602001838152602001828152602001935050505060405180910390f35b6103776004803603604081101561034157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aba565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b6103d2600480360360208110156103bc57600080fd5b8101908080359060200190929190505050611b11565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61047d600480360360e081101561042857600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611d6f565b6040518082815260200191505060405180910390f35b61053460048036036101008110156104aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035151590602001909291908035906020019092919080359060200190929190505050611ec0565b005b6105626004803603602081101561054c57600080fd5b81019080803590602001909291905050506127d8565b604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018515151515815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61062a6004803603602081101561061457600080fd5b8101908080359060200190929190505050612a36565b6040518082815260200191505060405180910390f35b610648612ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106d6600480360360408110156106a057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cc9565b6040518082815260200191505060405180910390f35b61072c6004803603606081101561070257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612d24565b6040518082815260200191505060405180910390f35b61076e6004803603602081101561075857600080fd5b810190808035906020019092919050505061353b565b6040518082815260200191505060405180910390f35b6107b06004803603602081101561079a57600080fd5b810190808035906020019092919050505061375c565b604051808381526020018281526020019250505060405180910390f35b61080f600480360360208110156107e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a47565b005b6108476004803603604081101561082757600080fd5b810190808035906020019092919080359060200190929190505050613c4d565b6040518082815260200191505060405180910390f35b60008060006005848154811061086f57fe5b9060005260206000209060100201905060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506108dc85614222565b806003015493506000841115610c28576109038483600601546143c690919063ffffffff16565b826006018190555081600a0160009054906101000a900460ff1615610a8b5761094c606461093e84600b01548761441090919063ffffffff16565b61449690919063ffffffff16565b925061096183856143c690919063ffffffff16565b93508160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166109e569d3c21bcecceda10000008761449690919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a4e57600080fd5b505af1158015610a62573d6000803e3d6000fd5b505050506040513d6020811015610a7857600080fd5b8101908080519060200190929190505050505b600081600301819055508160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33610af369d3c21bcecceda10000008861449690919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b505050506040513d6020811015610b8657600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff16857f40e6a337f1a78915df745fd02b2ca082e64e8a780a99b8fbb355f64409b399cc610bee69d3c21bcecceda10000008861449690919063ffffffff16565b610c0b69d3c21bcecceda10000008861449690919063ffffffff16565b604051808381526020018281526020019250505060405180910390a35b5050915091565b6000806000806000610c3f6146ee565b6003600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481525050905060008090506000826040015114610d60576000610d2c8a61375c565b509050610d5c8360400151610d4e8560000151846143c690919063ffffffff16565b61441090919063ffffffff16565b9150505b816040015182602001518360600151610d868560600151856144e090919063ffffffff16565b85600001519650965096509650965050509295509295909350565b6000808211610e18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f7420756e7374616b6520300000000000000000000000000000000081525060200191505060405180910390fd5b600060058481548110610e2757fe5b9060005260206000209060100201905060006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015411610f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f7520646f6e2774206861766520616e79207374616b6520616d6f756e740081525060200191505060405180910390fd5b610f0e85614222565b610f258482600201546143c690919063ffffffff16565b8160020181905550610f448483600501546143c690919063ffffffff16565b82600501819055508160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ff757600080fd5b505af115801561100b573d6000803e3d6000fd5b505050506040513d602081101561102157600080fd5b8101908080519060200190929190505050506000816002015414156110565781600f0160008154809291906001900391905055505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405280428152602001868152602001878152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055505050503373ffffffffffffffffffffffffffffffffffffffff16857f15e1b1e6a67db05b5e4e898cc13f87b8485df622bfebf03d1508efa026a2e15c866040518082815260200191505060405180910390a3839250505092915050565b60008086116111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6005878154811061120357fe5b906000526020600020906010020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf333089898989896040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561131557600080fd5b505af1158015611329573d6000803e3d6000fd5b505050506113378787613c4d565b90509695505050505050565b60008060008084116113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f43616e6e6f7420756e7374616b6520300000000000000000000000000000000081525060200191505060405180910390fd5b6000600586815481106113cc57fe5b9060005260206000209060100201905060006003600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160020154116114aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f7520646f6e2774206861766520616e79207374616b6520616d6f756e740081525060200191505060405180910390fd5b8581600201541015611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d6f7265207468616e20796f75207374616b696e6720616d6f756e740000000081525060200191505060405180910390fd5b61152d87614222565b6115448683600501546143c690919063ffffffff16565b82600501819055506115638682600201546143c690919063ffffffff16565b816002018190555060008160030154111561183e57611593816003015483600601546143c690919063ffffffff16565b826006018190555081600a0160009054906101000a900460ff1615611729576115e060646115d284600b0154846003015461441090919063ffffffff16565b61449690919063ffffffff16565b93506115f98482600301546143c690919063ffffffff16565b81600301819055508160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661168369d3c21bcecceda10000008861449690919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116ec57600080fd5b505af1158015611700573d6000803e3d6000fd5b505050506040513d602081101561171657600080fd5b8101908080519060200190929190505050505b80600301549450600081600301819055508160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361179869d3c21bcecceda10000008961449690919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561180157600080fd5b505af1158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b8101908080519060200190929190505050505b8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b505050506040513d602081101561191357600080fd5b81019080805190602001909291905050505085925060008160020154141561194b5781600f0160008154809291906001900391905055505b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405280428152602001888152602001898152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055505050503373ffffffffffffffffffffffffffffffffffffffff16877f1ec61c40a621cf7a2a6528cd3162dc8ba41c4889e627040e45e528b79741a97b611a7069d3c21bcecceda10000008961449690919063ffffffff16565b611a8d69d3c21bcecceda10000008961449690919063ffffffff16565b8760405180848152602001838152602001828152602001935050505060405180910390a350509250925092565b60046020528160005260406000208181548110611ad357fe5b9060005260206000209060040201600091509150508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b6000806000806000806000611b2461472c565b60058981548110611b3157fe5b9060005260206000209060100201604051806102000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f82015481525050905080608001518160a001518260c00151836101e00151846101c00151856101200151866101a00151975097509750975097509750975050919395979092949650565b600060058881548110611d7e57fe5b906000526020600020906010020160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf33308a898989896040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b50505050611eb3888888612d24565b9050979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611f8a61472c565b6040518061020001604052808a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff16815260200183815260200183815260200161202f69d3c21bcecceda10000008a61441090919063ffffffff16565b815260200188815260200186815260200160008152602001851515815260200184815260200187815260200187815260200160028152602001600181525090506001806000600580549050815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503360026000600580549050815260200190815260200160002060006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806060015173ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156121f157600080fd5b505af1158015612205573d6000803e3d6000fd5b505050506040513d602081101561221b57600080fd5b810190808051906020019092919050505050806040015173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050506040513d602081101561231657600080fd5b8101908080519060200190929190505050506123306146ee565b6040518060800160405280600081526020013373ffffffffffffffffffffffffffffffffffffffff168152602001848152602001600081525090508060036000600580549050815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301559050506005829080600181540180825580915050906001820390600052602060002090601002016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff02191690831515021790555061016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01556101e082015181600f0155505050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180608001604052808981526020018581526020016001600580549050038152602001600115158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055505050503373ffffffffffffffffffffffffffffffffffffffff166001600580549050037f507ac39eb33610191cd8fd54286e91c5cc464c262861643be3978f5a9f18ab02856001604051808381526020018281526020019250505060405180910390a38873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f2f074f5db3449475cb29e6765801f2a5e765a0b6558dbd1b1e2546f79d63c0738a8a8a8a8a60405180868152602001858152602001848152602001831515151581526020018281526020019550505050505060405180910390a350505050505050505050565b60008060008060008060006127eb61472c565b600589815481106127f857fe5b9060005260206000209060100201604051806102000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815250509050806000015181602001518260e00151836101400151846101600151856101800151866101000151975097509750975097509750975050919395979092949650565b6000612a4061472c565b60058381548110612a4d57fe5b9060005260206000209060100201604051806102000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815250509050612c98816101000151612c8a8360a00151612c7c69d3c21bcecceda10000008660e0015161441090919063ffffffff16565b61449690919063ffffffff16565b61449690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808311612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061484b602f913960400191505060405180910390fd5b600060058581548110612ea257fe5b90600052602060002090601002019050612ecd816008015482600c01546144e090919063ffffffff16565b4210612f41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f204c61746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c01544211612fba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f546f6f204561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8281600e0154111580612fcd5750600083145b15612fd757600192505b8060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156130b657600080fd5b505af11580156130ca573d6000803e3d6000fd5b505050506040513d60208110156130e057600080fd5b81019080805190602001909291905050505061313961312661310187612a36565b61311884600d0154426143c690919063ffffffff16565b61441090919063ffffffff16565b82600901546144e090919063ffffffff16565b81600901819055504281600d01819055506131618482600401546144e090919063ffffffff16565b81600401819055506131808482600501546144e090919063ffffffff16565b8160050181905550600060026000878152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506131d96146ee565b6040518060800160405280846009015481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200187815260200160008152509050806003600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015590505082600e01546001600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503360026000898152602001908152602001600020600085600e0154815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e016000815480929190600101919050555082600f0160008154809291906001019190505550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405280428152602001888152602001898152602001600115158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055505050503373ffffffffffffffffffffffffffffffffffffffff16877f507ac39eb33610191cd8fd54286e91c5cc464c262861643be3978f5a9f18ab028888604051808381526020018281526020019250505060405180910390a36001600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493505050509392505050565b600061354561472c565b6005838154811061355257fe5b9060005260206000209060100201604051806102000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f8201548152505090508060a00151915050919050565b60008061376761472c565b6005848154811061377457fe5b9060005260206000209060100201604051806102000160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152602001600f820154815250509050806101800151421015613991576000808191508090509250925050613a42565b60006139ab826101a00151426143c690919063ffffffff16565b9050426139cb8361010001518461018001516144e090919063ffffffff16565b1015613a0857613a05826101a001516139f78461010001518561018001516144e090919063ffffffff16565b6143c690919063ffffffff16565b90505b613a3a613a26613a1787612a36565b8361441090919063ffffffff16565b8361012001516144e090919063ffffffff16565b819350935050505b915091565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613b8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148046026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808211613cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b600060058481548110613cd357fe5b90600052602060002090601002019050613cfe816008015482600c01546144e090919063ffffffff16565b4210613d72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f204c61746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c01544211613deb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f546f6f204561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006003600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613f06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4669727374207374616b65207468656e2061646400000000000000000000000081525060200191505060405180910390fd5b613f0f85614222565b600081600201541415613f315781600f01600081548092919060010191905055505b8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561401057600080fd5b505af1158015614024573d6000803e3d6000fd5b505050506040513d602081101561403a57600080fd5b8101908080519060200190929190505050506140638482600201546144e090919063ffffffff16565b81600201819055506140828483600501546144e090919063ffffffff16565b82600501819055506140a18483600401546144e090919063ffffffff16565b82600401819055503373ffffffffffffffffffffffffffffffffffffffff16857fa82ad037cfb07aa86a32fed556976ad140acd88413a4bc186082d374de839aef866040518082815260200191505060405180910390a3600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405280428152602001868152602001878152602001600115158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff0219169083151502179055505050506001600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250505092915050565b60006005828154811061423157fe5b9060005260206000209060100201905080600c01544210156142bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f546f6f204561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006003600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015414156143235750506143c3565b600061432e8461375c565b846009016000829450839190505550506143558184600d01546144e090919063ffffffff16565b83600d018190555060006143908360020154614382856000015487600901546143c690919063ffffffff16565b61441090919063ffffffff16565b90506143a98184600301546144e090919063ffffffff16565b836003018190555083600901548360000181905550505050505b50565b600061440883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614568565b905092915050565b6000808314156144235760009050614490565b600082840290508284828161443457fe5b041461448b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061482a6021913960400191505060405180910390fd5b809150505b92915050565b60006144d883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614628565b905092915050565b60008082840190508381101561455e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290614615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145da5780820151818401526020810190506145bf565b50505050905090810190601f1680156146075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906146d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561469957808201518184015260208101905061467e565b50505050905090810190601f1680156146c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816146e057fe5b049050809150509392505050565b604051806080016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775265656e7472616e74206973206e6f7420616c6c6f7765642c20757365206164645374616b652066756e6374696f6ea265627a7a7231582033aca24cb5e7933034dccaa690dd8108eab1828409788489f5fb65d3b9e7b75464736f6c63430005110032

Deployed ByteCode Sourcemap

128:14827:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;128:14827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10358:863;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10358:863:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14125:630;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14125:630:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9462:834;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9462:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6052:341;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6052:341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7690:1644;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7690:1644:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1204:49;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1204:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12485:471;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12485:471:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3882:320;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3882:320:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2122:1668;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;2122:1668:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11999:437;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11999:437:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13632:213;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13632:213:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;330:77:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14820:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14820:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4397:1556;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4397:1556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13920:156;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13920:156:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13024:544;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13024:544:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;533:232:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;533:232:2;;;;;;;;;;;;;;;;;;;:::i;:::-;;6596:1023:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6596:1023:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10358:863;10414:14;10430:22;10464:17;10484:5;10490:9;10484:16;;;;;;;;;;;;;;;;;;10464:36;;10510:17;10530:5;:16;10536:9;10530:16;;;;;;;;;;;:28;10547:10;10530:28;;;;;;;;;;;;;;;10510:48;;10568:26;10584:9;10568:15;:26::i;:::-;10613:4;:18;;;10604:27;;10653:1;10644:6;:10;10641:574;;;10698:38;10729:6;10698:4;:26;;;:30;;:38;;;;:::i;:::-;10669:4;:26;;:67;;;;10753:4;:19;;;;;;;;;;;;10750:253;;;10808:43;10847:3;10809:32;10820:4;:20;;;10809:6;:10;;:32;;;;:::i;:::-;10808:38;;:43;;;;:::i;:::-;10791:60;;10878:26;10889:14;10878:6;:10;;:26;;;;:::i;:::-;10869:35;;10922:4;:16;;;;;;;;;;;;:25;;;10948:4;:13;;;;;;;;;;;;10963:24;10982:4;10963:14;:18;;:24;;;;:::i;:::-;10922:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10922:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10922:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10922:66:0;;;;;;;;;;;;;;;;;10750:253;11037:1;11016:4;:18;;:22;;;;11052:4;:16;;;;;;;;;;;;:25;;;11078:10;11090:16;11101:4;11090:6;:10;;:16;;;;:::i;:::-;11052:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11052:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11052:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11052:55:0;;;;;;;;;;;;;;;;;11149:10;11126:78;;11138:9;11126:78;11161:16;11172:4;11161:6;:10;;:16;;;;:::i;:::-;11179:24;11198:4;11179:14;:18;;:24;;;;:::i;:::-;11126:78;;;;;;;;;;;;;;;;;;;;;;;;10641:574;10358:863;;;;;:::o;14125:630::-;14203:21;14225:16;14243:21;14266:20;14288:24;14324:16;;:::i;:::-;14343:5;:16;14349:9;14343:16;;;;;;;;;;;:25;14360:7;14343:25;;;;;;;;;;;;;;;14324:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14378:14;14395:1;14378:18;;14430:1;14410:4;:16;;;:21;14406:210;;14448:32;14485:22;14497:9;14485:11;:22::i;:::-;14447:60;;;14530:75;14588:4;:16;;;14531:51;14560:4;:21;;;14531:24;:28;;:51;;;;:::i;:::-;14530:57;;:75;;;;:::i;:::-;14521:84;;14406:210;;14642:4;:16;;;14659:4;:13;;;14674:4;:18;;;14694:30;14705:4;:18;;;14694:6;:10;;:30;;;;:::i;:::-;14726:4;:21;;;14634:114;;;;;;;;;;;;14125:630;;;;;;;;:::o;9462:834::-;9536:14;9586:1;9570:13;:17;9562:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9618:17;9638:5;9644:9;9638:16;;;;;;;;;;;;;;;;;;9618:36;;9664:17;9684:5;:16;9690:9;9684:16;;;;;;;;;;;:28;9701:10;9684:28;;;;;;;;;;;;;;;9664:48;;9749:1;9730:4;:16;;;:20;9722:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9796:26;9812:9;9796:15;:26::i;:::-;9851:35;9872:13;9851:4;:16;;;:20;;:35;;;;:::i;:::-;9832:4;:16;;:54;;;;9916:36;9938:13;9916:4;:17;;;:21;;:36;;;;:::i;:::-;9896:4;:17;;:56;;;;9963:4;:17;;;;;;;;;;;;:26;;;9990:10;10002:13;9963:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9963:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9963:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9963:53:0;;;;;;;;;;;;;;;;;10050:1;10030:4;:16;;;:21;10026:75;;;10067:4;:21;;;:23;;;;;;;;;;;;;;10026:75;10110:7;:19;10118:10;10110:19;;;;;;;;;;;;;;;10135:61;;;;;;;;10148:15;10135:61;;;;10165:13;10135:61;;;;10180:9;10135:61;;;;10190:5;10135:61;;;;;10110:87;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;10110:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10232:10;10213:45;;10221:9;10213:45;10244:13;10213:45;;;;;;;;;;;;;;;;;;10275:13;10268:20;;;;9462:834;;;;:::o;6052:341::-;6181:10;6220:1;6211:6;:10;6203:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6250:5;6256:9;6250:16;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:36;;;6287:10;6307:4;6314:6;6322:10;6334:1;6337;6340;6250:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6250:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6250:92:0;;;;6359:27;6368:9;6379:6;6359:8;:27::i;:::-;6352:34;;6052:341;;;;;;;;:::o;7690:1644::-;7779:14;7795:22;7819:14;7869:1;7853:13;:17;7845:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7901:17;7921:5;7927:9;7921:16;;;;;;;;;;;;;;;;;;7901:36;;7948:17;7968:5;:16;7974:9;7968:16;;;;;;;;;;;:28;7985:10;7968:28;;;;;;;;;;;;;;;7948:48;;8033:1;8014:4;:16;;;:20;8006:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8107:13;8087:4;:16;;;:33;;8079:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8163:26;8179:9;8163:15;:26::i;:::-;8219:36;8241:13;8219:4;:17;;;:21;;:36;;;;:::i;:::-;8199:4;:17;;:56;;;;8284:35;8305:13;8284:4;:16;;;:20;;:35;;;;:::i;:::-;8265:4;:16;;:54;;;;8353:1;8332:4;:18;;;:22;8329:592;;;8398:50;8429:4;:18;;;8398:4;:26;;;:30;;:50;;;;:::i;:::-;8369:4;:26;;:79;;;;8478:4;:19;;;;;;;;;;;;8475:289;;;8533:55;8584:3;8534:44;8557:4;:20;;;8534:4;:18;;;:22;;:44;;;;:::i;:::-;8533:50;;:55;;;;:::i;:::-;8516:72;;8627:38;8650:14;8627:4;:18;;;:22;;:38;;;;:::i;:::-;8606:4;:18;;:59;;;;8683:4;:16;;;;;;;;;;;;:25;;;8709:4;:13;;;;;;;;;;;;8724:24;8743:4;8724:14;:18;;:24;;;;:::i;:::-;8683:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8683:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8683:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8683:66:0;;;;;;;;;;;;;;;;;8475:289;8786:4;:18;;;8777:27;;8839:1;8818:4;:18;;:22;;;;8855:4;:16;;;;;;;;;;;;:25;;;8881:10;8893:16;8904:4;8893:6;:10;;:16;;;;:::i;:::-;8855:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8855:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8855:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8855:55:0;;;;;;;;;;;;;;;;;8329:592;8939:4;:17;;;;;;;;;;;;:26;;;8966:10;8978:13;8939:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8939:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8939:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8939:53:0;;;;;;;;;;;;;;;;;9011:13;9002:22;;9058:1;9038:4;:16;;;:21;9034:75;;;9075:4;:21;;;:23;;;;;;;;;;;;;;9034:75;9127:7;:19;9135:10;9127:19;;;;;;;;;;;;;;;9152:61;;;;;;;;9165:15;9152:61;;;;9182:13;9152:61;;;;9197:9;9152:61;;;;9207:5;9152:61;;;;;9127:87;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9127:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9263:10;9229:97;;9252:9;9229:97;9275:16;9286:4;9275:6;:10;;:16;;;;:::i;:::-;9293:24;9312:4;9293:14;:18;;:24;;;;:::i;:::-;9319:6;9229:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7690:1644;;;;;;;:::o;1204:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12485:471::-;12546:24;12572:20;12595:29;12626:24;12652:17;12671:32;12705:21;12737:16;;:::i;:::-;12756:5;12762:9;12756:16;;;;;;;;;;;;;;;;;;12737:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12790:4;:21;;;12813:4;:17;;;12832:4;:26;;;12860:4;:21;;;12883:4;:14;;;12899:4;:29;;;12930:4;:18;;;12782:167;;;;;;;;;;;;;;;12485:471;;;;;;;;;:::o;3882:320::-;4028:10;4050:5;4056:9;4050:16;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:36;;;4087:10;4107:4;4114:6;4122:10;4134:1;4137;4140;4050:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4050:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4050:92:0;;;;4159:36;4165:9;4176:6;4184:10;4159:5;:36::i;:::-;4152:43;;3882:320;;;;;;;;;:::o;2122:1668::-;462:10:2;452:20;;:6;;;;;;;;;;;:20;;;444:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2337:16:0;;:::i;:::-;2356:695;;;;;;;;2467:5;2356:695;;;;;;2507:11;2356:695;;;;;;2603:5;2356:695;;;;;;2644:11;2356:695;;;;;;2987:20;2356:695;;;;2547:20;2356:695;;;;2694:22;2711:4;2694:12;:16;;:22;;;;:::i;:::-;2356:695;;;;2745:12;2356:695;;;;2782:8;2356:695;;;;2403:1;2356:695;;;;2821:14;2356:695;;;;;;2867:15;2356:695;;;;2907:9;2356:695;;;;2946:9;2356:695;;;;2430:1;2356:695;;;;3039:1;2356:695;;;2337:714;;3119:1;3079:11;:25;3091:5;:12;;;;3079:25;;;;;;;;;;;:37;3105:10;3079:37;;;;;;;;;;;;;;;:41;;;;3161:10;3130:11;:25;3142:5;:12;;;;3130:25;;;;;;;;;;;:28;3156:1;3130:28;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3181:4;:16;;;:29;;;3211:10;3231:4;3238:12;3181:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3181:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3181:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3181:70:0;;;;;;;;;;;;;;;;;3261:4;:17;;;:30;;;3292:10;3312:4;3319:20;3261:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3261:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3261:79:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3261:79:0;;;;;;;;;;;;;;;;;3351:19;;:::i;:::-;3373:44;;;;;;;;3378:1;3373:44;;;;3381:10;3373:44;;;;;;3393:20;3373:44;;;;3415:1;3373:44;;;3351:66;;3461:7;3427:5;:19;3433:5;:12;;;;3427:19;;;;;;;;;;;:31;3447:10;3427:31;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3478:5;3489:4;3478:16;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;3478:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:7;:19;3512:10;3504:19;;;;;;;;;;;;;;;3529:68;;;;;;;;3542:9;3529:68;;;;3553:20;3529:68;;;;3590:1;3575:5;:12;;;;:16;3529:68;;;;3592:4;3529:68;;;;;3504:94;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;3504:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:10;3613:60;;3634:1;3619:5;:12;;;;:16;3613:60;3649:20;3671:1;3613:60;;;;;;;;;;;;;;;;;;;;;;;;3703:11;3688:95;;3696:5;3688:95;;;3716:12;3730:9;3741:8;3751:14;3767:15;3688:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;519:1:2;;2122:1668:0;;;;;;;;:::o;11999:437::-;12062:27;12091:26;12119:20;12141:19;12162:23;12187:17;12206:16;12233;;:::i;:::-;12252:5;12258:9;12252:16;;;;;;;;;;;;;;;;;;12233:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12286:4;:24;;;12312:4;:23;;;12337:4;:17;;;12356:4;:19;;;12377:4;:20;;;12399:4;:14;;;12415:4;:13;;;12278:151;;;;;;;;;;;;;;;11999:437;;;;;;;;;:::o;13632:213::-;13696:7;13715:16;;:::i;:::-;13734:5;13740:9;13734:16;;;;;;;;;;;;;;;;;;13715:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13768:69;13823:4;:13;;;13768:50;13800:4;:17;;;13768:27;13790:4;13768;:17;;;:21;;:27;;;;:::i;:::-;:31;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;13760:78;;;13632:213;;;:::o;330:77:2:-;368:7;394:6;;;;;;;;;;;387:13;;330:77;:::o;14820:133:0:-;14889:10;14918:11;:22;14930:9;14918:22;;;;;;;;;;;:28;14941:4;14918:28;;;;;;;;;;;;;;;;14911:35;;14820:133;;;;:::o;4397:1556::-;4482:10;4521:1;4512:6;:10;4504:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4608:1;4559:51;;:5;:16;4565:9;4559:16;;;;;;;;;;;:28;4576:10;4559:28;;;;;;;;;;;;;;;:37;;;;;;;;;;;;:51;;;4551:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4671:17;4691:5;4697:9;4691:16;;;;;;;;;;;;;;;;;;4671:36;;4743:33;4762:4;:13;;;4743:4;:14;;;:18;;:33;;;;:::i;:::-;4725:15;:51;4717:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4824:4;:14;;;4806:15;:32;4798:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4882:10;4864:4;:14;;;:28;;:47;;;;4910:1;4896:10;:15;4864:47;4861:78;;;4938:1;4925:14;;4861:78;4950:4;:17;;;;;;;;;;;;:30;;;4981:10;5001:4;5008:6;4950:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4950:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4950:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4950:65:0;;;;;;;;;;;;;;;;;5057:107;5091:72;5137:25;5152:9;5137:14;:25::i;:::-;5092:39;5112:4;:18;;;5092:15;:19;;:39;;;;:::i;:::-;5091:45;;:72;;;;:::i;:::-;5057:4;:29;;;:33;;:107;;;;:::i;:::-;5025:4;:29;;:139;;;;5195:15;5174:4;:18;;:36;;;;5244:33;5270:6;5244:4;:21;;;:25;;:33;;;;:::i;:::-;5220:4;:21;;:57;;;;5307:29;5329:6;5307:4;:17;;;:21;;:29;;;;:::i;:::-;5287:4;:17;;:49;;;;5346:20;5369:11;:22;5381:9;5369:22;;;;;;;;;;;:34;5392:10;5369:34;;;;;;;;;;;;;;;;;;;;;5346:57;;5413:19;;:::i;:::-;5435:60;;;;;;;;5440:4;:29;;;5435:60;;;;5471:12;5435:60;;;;;;5485:6;5435:60;;;;5493:1;5435:60;;;5413:82;;5536:7;5505:5;:16;5511:9;5505:16;;;;;;;;;;;:28;5522:10;5505:28;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:4;:14;;;5561:11;:22;5573:9;5561:22;;;;;;;;;;;:34;5584:10;5561:34;;;;;;;;;;;;;;;:51;;;;5663:10;5622:11;:22;5634:9;5622:22;;;;;;;;;;;:38;5645:4;:14;;;5622:38;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;5683:4;:14;;;:16;;;;;;;;;;;;;5718:4;:21;;;:23;;;;;;;;;;;;;5751:7;:19;5759:10;5751:19;;;;;;;;;;;;;;;5776:53;;;;;;;;5789:15;5776:53;;;;5806:6;5776:53;;;;5814:9;5776:53;;;;5824:4;5776:53;;;;;5751:79;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5751:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5863:10;5846:48;;5852:9;5846:48;5875:6;5883:10;5846:48;;;;;;;;;;;;;;;;;;;;;;;;5911:11;:22;5923:9;5911:22;;;;;;;;;;;:34;5934:10;5911:34;;;;;;;;;;;;;;;;5904:42;;;;;4397:1556;;;;;:::o;13920:156::-;13981:7;14000:16;;:::i;:::-;14019:5;14025:9;14019:16;;;;;;;;;;;;;;;;;;14000:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14052:4;:17;;;14045:24;;;13920:156;;;:::o;13024:544::-;13085:7;13094;13113:16;;:::i;:::-;13132:5;13138:9;13132:16;;;;;;;;;;;;;;;;;;13113:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13180:4;:14;;;13162:15;:32;13158:404;;;13216:1;13219;13208:13;;;;;;;;;;;;;13158:404;13250:11;13264:39;13284:4;:18;;;13264:15;:19;;:39;;;;:::i;:::-;13250:53;;13356:15;13320:33;13339:4;:13;;;13320:4;:14;;;:18;;:33;;;;:::i;:::-;:51;13317:135;;;13395:57;13433:4;:18;;;13395:33;13414:4;:13;;;13395:4;:14;;;:18;;:33;;;;:::i;:::-;:37;;:57;;;;:::i;:::-;13389:63;;13317:135;13474:71;13508:36;13518:25;13533:9;13518:14;:25::i;:::-;13509:3;13508:9;;:36;;;;:::i;:::-;13474:4;:29;;;:33;;:71;;;;:::i;:::-;13547:3;13466:85;;;;;;13024:544;;;;:::o;533:232:2:-;462:10;452:20;;:6;;;;;;;;;;;:20;;;444:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:1;613:22;;:8;:22;;;;605:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;722:8;693:38;;714:6;;;;;;;;;;;693:38;;;;;;;;;;;;750:8;741:6;;:17;;;;;;;;;;;;;;;;;;533:232;:::o;6596:1023:0:-;6664:7;6700:1;6691:6;:10;6683:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6730:17;6750:5;6756:9;6750:16;;;;;;;;;;;;;;;;;;6730:36;;6802:33;6821:4;:13;;;6802:4;:14;;;:18;;:33;;;;:::i;:::-;6784:15;:51;6776:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6883:4;:14;;;6865:15;:32;6857:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6920:17;6940:5;:16;6946:9;6940:16;;;;;;;;;;;:28;6957:10;6940:28;;;;;;;;;;;;;;;6920:48;;7011:1;6986:27;;:4;:13;;;;;;;;;;;;:27;;;;6978:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7047:26;7063:9;7047:15;:26::i;:::-;7107:1;7087:4;:16;;;:21;7083:75;;;7124:4;:21;;;:23;;;;;;;;;;;;;7083:75;7167:4;:17;;;;;;;;;;;;:30;;;7198:10;7218:4;7225:6;7167:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7167:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7167:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7167:65:0;;;;;;;;;;;;;;;;;7261:28;7282:6;7261:4;:16;;;:20;;:28;;;;:::i;:::-;7242:4;:16;;:47;;;;7320:29;7342:6;7320:4;:17;;;:21;;:29;;;;:::i;:::-;7300:4;:17;;:49;;;;7383:33;7409:6;7383:4;:21;;;:25;;:33;;;;:::i;:::-;7359:4;:21;;:57;;;;7451:10;7431:39;;7440:9;7431:39;7463:6;7431:39;;;;;;;;;;;;;;;;;;7480:7;:19;7488:10;7480:19;;;;;;;;;;;;;;;7505:53;;;;;;;;7518:15;7505:53;;;;7535:6;7505:53;;;;7543:9;7505:53;;;;7553:4;7505:53;;;;;7480:79;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;7480:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:11;:22;7589:9;7577:22;;;;;;;;;;;:34;7600:10;7577:34;;;;;;;;;;;;;;;;7570:41;;;;6596:1023;;;;:::o;11276:674::-;11338:17;11358:5;11364:9;11358:16;;;;;;;;;;;;;;;;;;11338:36;;11411:4;:14;;;11392:15;:33;;11384:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11448:17;11468:5;:16;11474:9;11468:16;;;;;;;;;;;:28;11485:10;11468:28;;;;;;;;;;;;;;;11448:48;;11529:1;11509:4;:16;;;:21;11506:57;;;11545:8;;;;11506:57;11573:11;11633:22;11645:9;11633:11;:22::i;:::-;11595:4;:29;;;11594:61;;;;;;;;;;11687:27;11710:3;11687:4;:18;;;:22;;:27;;;;:::i;:::-;11666:4;:18;;:48;;;;11724:14;11741:78;11802:4;:16;;;11741:56;11775:4;:21;;;11741:4;:29;;;:33;;:56;;;;:::i;:::-;:60;;:78;;;;:::i;:::-;11724:95;;11850:30;11873:6;11850:4;:18;;;:22;;:30;;;;:::i;:::-;11829:4;:18;;:51;;;;11914:4;:29;;;11890:4;:21;;:53;;;;11276:674;;;;;;:::o;230:134:3:-;288:7;314:43;318:1;321;314:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;307:50;;230:134;;;;:::o;564:241::-;622:7;650:1;645;:6;641:45;;;674:1;667:8;;;;641:45;696:9;712:1;708;:5;696:17;;740:1;735;731;:5;;;;;;:10;723:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:1;790:8;;;564:241;;;;;:::o;811:130::-;869:7;895:39;899:1;902;895:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;888:46;;811:130;;;;:::o;48:176::-;106:7;125:9;141:1;137;:5;125:17;;165:1;160;:6;;152:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;216:1;209:8;;;48:176;;;;:::o;371:187::-;457:7;489:1;484;:6;;492:12;476:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;476:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;515:9;531:1;527;:5;515:17;;550:1;543:8;;;371:187;;;;;:::o;947:185::-;1033:7;1064:1;1060;:5;1067:12;1052:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1052:28:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1090:9;1106:1;1102;:5;;;;;;1090:17;;1124:1;1117:8;;;947:185;;;;;:::o;128:14827:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://33aca24cb5e7933034dccaa690dd8108eab1828409788489f5fb65d3b9e7b754
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading