Contract 0x8DcCba703e3CA40D3D50435A06637c577D36AAFb 3

 

Contract Overview

Balance:
0.374633333333334948 BNB

BNB Value:
$233.17 (@ $622.40/BNB)
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x70c6efd23b6642d49108cc33667272219a7cb9cdd5219cff15a9339685073c84Multi Value Toke...131206732021-12-02 4:00:251 day 10 hrs ago0x17133e8b00191e14e2b5025c7a8e5908cb753dfe IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.017905825
0x7626fe972a6c31e5cf884f20c5094a95c9beba872f22480a2ba264eb3b9caf87Multi Value Toke...131146212021-12-01 22:32:351 day 15 hrs ago0xe086d15c9c164cf0e8d2edb9007fdfca34acf54b IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.00145055
0x39540d4208d06bf9221a3f0b8461acb0b8e2cd136fb5f55e82368266d84ee820Multi Value Toke...131140352021-12-01 22:03:091 day 16 hrs ago0x109a61691f3f08d69f5e47ba86f49e03a8f5623c IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.102949605
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4aeMulti Value Eth ...131138762021-12-01 21:55:101 day 16 hrs ago0x17133e8b00191e14e2b5025c7a8e5908cb753dfe IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.288 BNB0.000426745
0xf25ec72266e6f8860c767ee97491be7c8aac7a0bdc4e8dffd855eba39344f20fMulti Value Toke...131069982021-12-01 15:58:141 day 22 hrs ago0xe086d15c9c164cf0e8d2edb9007fdfca34acf54b IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.00420324
0x1058afb6b1be2ecd37d8cf962a2a3c08f1fc99a9c7cad334e3bac1b188288985Multi Value Toke...131061972021-12-01 15:15:491 day 22 hrs ago0x2ab8db08aa9a76b39e8a91e3427c7e1ea8b93e87 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.10719844
0x8b09618727300c7ad869c5641afd82b7c71bc683e1e15fc66a3ff481cbeb2617Multi Value Toke...130929162021-12-01 2:49:422 days 11 hrs ago0xe086d15c9c164cf0e8d2edb9007fdfca34acf54b IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.002699775
0xe1e451b195ed567e5b016a022cd50f101a0653d8e3f394ceac0f95d874bf2c1cBecome Premium M...130912392021-12-01 1:20:272 days 12 hrs ago0xdb3819efb4dc0940cdb1c5d971b34cd33b79c35d IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.25 BNB0.000464065
0x0eb7106a19e22e9e98864d9740a68585c18f0a5bb0c51cdcdc10b97d6af76060Multi Value Toke...130908782021-12-01 1:02:142 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06590616
0xf68b22b4b4cdbbc16d58892c191360eea2459b318c60ea899d2c94755a687e84Multi Value Toke...130903802021-12-01 0:33:582 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.04042716
0x75ef0c4491057c7ffeb8ce4ea7c38f4592d667b126a14e67fa8380de99e4280bMulti Value Toke...130903792021-12-01 0:33:542 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06620604
0xed42346260b8b5cbac6e8bea00f5adf6014017dd199b4dd0ce1c76531ba19177Multi Value Toke...130903782021-12-01 0:33:512 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06590616
0xd0234ef2f35f4554991ec603cf4426c90fd21e0dabf37ea81c1c1e2688a32ee6Multi Value Toke...130903772021-12-01 0:33:482 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06553092
0x9a7b2e52779c01a207cd54f7bcc1c179998c3f3308d0ae88950c1afc2dbe4651Multi Value Toke...130903762021-12-01 0:33:452 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06553116
0xd2b3025fbb3a08c15ed479f9dec0f6a80ccf1c94b1b269ab88cbc47977976105Multi Value Toke...130903762021-12-01 0:33:452 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06575592
0xd1bff805fe0bca8f1c423cc2363d2e71d46d1b504335a01abef354d5f385d9b5Multi Value Toke...130903762021-12-01 0:33:452 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.0655311
0x6d3c6b11a2c062fdacd40f21a3e1dac212aef27c8f733c9e0780eb3f761c0beeMulti Value Toke...130903762021-12-01 0:33:452 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06575598
0xebbdc3941f58fbdbd788dab4489fc2645a5842bf61902d96555250c2d6e2bfe5Multi Value Toke...130903752021-12-01 0:33:412 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06575586
0x515a6c5acd20c6a0f5fa7e66690436d524d19c79de4bf3dcf5e75c801b9348d7Multi Value Toke...130903752021-12-01 0:33:412 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06575616
0x8a85139063efbed611a2f94ff1ee32ff5f1b36f319001e8a392c04ea6a1e9c6fMulti Value Toke...130903682021-12-01 0:33:192 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06605586
0x1a70d82ade842a471ddeb95368e99080b6d821fcb9628c7173474d2f66a2f8f7Multi Value Toke...130903592021-12-01 0:32:462 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06605592
0x1584e4cc33d08fdaeed578260d4aeecd0c159f159556129b4231a62e4634d340Multi Value Toke...130903572021-12-01 0:32:402 days 13 hrs ago0x71644807d5d245d560d85405137cd22c5c8370b9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.06665526
0x4266055ce91aea1145cc504877fb555e2055d9730a9e70a56730888e9e93b914Multi Value Toke...130616382021-11-29 23:08:443 days 15 hrs ago0x367218b964d822509a006ea90237383e71659017 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.003367005
0xb181367d110ee213d3e84665552648aa0d46607efc945e2c550a113fe12ec74fSet Premium Memb...130602882021-11-29 21:56:003 days 16 hrs ago0x210efca155797119a5b0f1cfde64ca1fe55ec544 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 BNB0.00014684
0x14749b9458369d1cbb6d5323473371999095e4f00ca917d1ff2744c8159325b2Multi Value Toke...130258962021-11-28 14:32:174 days 23 hrs ago0x1a15e169af821733fad41087e5743a4500ff35a5 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.135333333333333 BNB0.06558442
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x0cdae9e4b7b20580cc64becf0d349e3942af72630.048 BNB
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x9565e6f5b94ad5c53f0859fd19f041d8bebe54f90.048 BNB
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xdc50895c55e492ee0ef6527b5cba2f6188ff24040.048 BNB
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x833e9b13d38914e409fb55fa1a6100f06d22dd390.048 BNB
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xd58bd84dc8d6b6878cae2842873ea2ef3ad29e8d0.048 BNB
0x056f351fe146c2b6d338e20adc5d65992b3479455f01cbc0cc3b38adcdd4b4ae131138762021-12-01 21:55:101 day 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x2c9501e6d81f5d72cd3c28c21637900093ae08eb0.048 BNB
0xe1e451b195ed567e5b016a022cd50f101a0653d8e3f394ceac0f95d874bf2c1c130912392021-12-01 1:20:272 days 12 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.25 BNB
0x14749b9458369d1cbb6d5323473371999095e4f00ca917d1ff2744c8159325b2130258962021-11-28 14:32:174 days 23 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x1a15e169af821733fad41087e5743a4500ff35a52 wei
0x39d2917c3108d952aab03a804a823ca2f6ff16536cf1fd1d1ac6dfdbf7aebf57130113152021-11-28 1:30:565 days 12 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.1 BNB
0x77bbb5cf5b95476d0adc033ae241a9051d1ddaa86617bb0ebc67259ef0b653f6129693692021-11-26 11:50:127 days 2 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.1 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x16fef8f3269ecb799d82c7542e29673b8d17459e0.05 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x9565e6f5b94ad5c53f0859fd19f041d8bebe54f90.05 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x67d4a2d11540123fa80607d70b5b02c37883a64d0.05 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x0cdae9e4b7b20580cc64becf0d349e3942af72630.08 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xe1a24015553b1919e147e8eed54402d71a58d3170.05 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x233515c49dfc1b708fa5a35b0c8977ec804f7ad10.05 BNB
0x6eed5773be910a4a618de68e86bde44649b853173cdddd8afe8c6a05289c6c83129022632021-11-23 23:20:029 days 14 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xd4dbac027e51acde82145bd283e966d3e1d2c30c0.05 BNB
0x383994ce381e5e96ae18d5b9dd19153ab3dc1de7a9ade29eae78ef15f4b01ced128999442021-11-23 21:22:089 days 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.01666666666666665 BNB
0x59794c18fbdf844902a26896fb06508198e391f3b0978f21f6f72aa3aa8de78e128999392021-11-23 21:21:539 days 16 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0999999999999999 BNB
0x481db080f5de23c4903d2b290a352dc21a76ce2dcc557f50958b74158b1bdea6128989662021-11-23 20:29:099 days 17 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0333333333333333 BNB
0x60c28f3376b79429805c0a82fd83959619d4df929e441763daf344731d3d78b8128985162021-11-23 20:05:539 days 18 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.023999999999999976 BNB
0xeb4005349b7e27a23775a57af35da62d830f2810924b3d46c1d5851994c2ad4d128877282021-11-23 10:31:4010 days 3 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.1 BNB
0xcb494c2d7b9a523fd29165cb574dcffc54e64ee2ed7c1a09eee0cbec01d41c77128799082021-11-23 3:52:1310 days 10 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.01666666666666665 BNB
0x35a852848c3a6d721b9c376452550d27ff00f1aa5be3bf7097feb5a23ecbf78b128795902021-11-23 3:36:1810 days 10 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.01666666666666665 BNB
0xd5c89e76d14e27c27be4d3e1be5ba8add4b3b98a727c8964c9257dc9930830c5128793262021-11-23 3:23:0610 days 10 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.01666666666666665 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoMultisender

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-10-12
*/

/***
 *   _____                  _          __  __       _ _   _                    _           
 *  / ____|                | |        |  \/  |     | | | (_)                  | |          
 * | |     _ __ _   _ _ __ | |_ ___   | \  / |_   _| | |_ _ ___  ___ _ __   __| | ___ _ __ 
 * | |    | '__| | | | '_ \| __/ _ \  | |\/| | | | | | __| / __|/ _ \ '_ \ / _` |/ _ \ '__|
 * | |____| |  | |_| | |_) | || (_) | | |  | | |_| | | |_| \__ \  __/ | | | (_| |  __/ |   
 *  \_____|_|   \__, | .__/ \__\___/  |_|  |_|\__,_|_|\__|_|___/\___|_| |_|\__,_|\___|_|   
 *               __/ | |                                                                   
 *             |___/|_|                                                                   
 *        
 * 
 * @author Zenos Pavlakou
 */
 
 
pragma solidity ^0.6.0;

library SafeMath {
    
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }
        
        c = a * b;
        assert(c / a == b);
        return c;
    }
    

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }


    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }


    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}



contract Ownable {
    
    address public owner;
    
    event OwnershipTransferred(address indexed from, address indexed to);
    
    
    /**
     * Constructor assigns ownership to the address used to deploy the contract.
     * */
    constructor() public {
        owner = msg.sender;
    }


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


    /**
     * Any function with this modifier in its method signature can only be executed by
     * the owner of the contract. Any attempt made by any other account to invoke the 
     * functions with this modifier will result in a loss of gas and the contract's state
     * will remain untampered.
     * */
    modifier onlyOwner {
        require(msg.sender == owner, "Function restricted to owner of contract");
        _;
    }

    /**
     * Allows for the transfer of ownership to another address;
     * 
     * @param _newOwner The address to be assigned new ownership.
     * */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(
            _newOwner != address(0)
            && _newOwner != owner 
        );
        emit OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}



/**
 * Contract acts as an interface between the DappleAirdrops contract and all ERC20 compliant
 * tokens. 
 * */
abstract contract ERCInterface {
    function transferFrom(address _from, address _to, uint256 _value) public virtual;
    function balanceOf(address who)  public virtual returns (uint256);
    function allowance(address owner, address spender)  public view virtual returns (uint256);
    function transfer(address to, uint256 value) public virtual returns(bool);
}



contract CryptoMultisender is Ownable {
    
    using SafeMath for uint256;
 
    mapping (address => uint256) public tokenTrialDrops;

    mapping (address => bool) public isPremiumMember;
    mapping (address => bool) public isAffiliate;
    mapping (string => address) public affiliateCodeToAddr;
    mapping (string => bool) public affiliateCodeExists;
    mapping (address => string) public affiliateCodeOfAddr;
    mapping (address => string) public isAffiliatedWith;
        
    uint256 public premiumMemberFee;
    uint256 public rate;
    uint256 public dropUnitPrice;


    event TokenAirdrop(address indexed by, address indexed tokenAddress, uint256 totalTransfers);
    event EthAirdrop(address indexed by, uint256 totalTransfers, uint256 ethValue);


   
    event RateChanged(uint256 from, uint256 to);
    event RefundIssued(address indexed to, uint256 totalWei);
    event ERC20TokensWithdrawn(address token, address sentTo, uint256 value);
    event CommissionPaid(address indexed to, uint256 value);
    event NewPremiumMembership(address indexed premiumMember);
    event NewAffiliatePartnership(address indexed newAffiliate, string indexed affiliateCode);
    event AffiliatePartnershipRevoked(address indexed affiliate, string indexed affiliateCode);
    event PremiumMemberFeeUpdated(uint256 newFee);

    
    constructor() public {
        rate = 10000;
        dropUnitPrice = 1e14; 
        premiumMemberFee = 25e16;
    }
    

    /**
     * Allows the owner of this contract to change the fee for users to become premium members.
     * 
     * @param _fee The new fee.
     * 
     * @return True if the fee is changed successfully. False otherwise.
     * */
    function setPremiumMemberFee(uint256 _fee) public onlyOwner returns(bool) {
        require(_fee > 0 && _fee != premiumMemberFee);
        premiumMemberFee = _fee;
        emit PremiumMemberFeeUpdated(_fee);
        return true;
    }
    

    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }


    /**
    * Used to give change to users who accidentally send too much ETH to payable functions. 
    *
    * @param _price The service fee the user has to pay for function execution. 
    **/
    function giveChange(uint256 _price) internal {
        if(msg.value > _price) {
            uint256 change = msg.value.sub(_price);
            payable(msg.sender).transfer(change);
        }
    }

    
    /**
    * Ensures that the correct affiliate code is used and also ensures that affiliate partners
    * are not able to 'jack' commissions from existing users who they are not affiliated with. 
    *
    * @param _afCode The affiliate code provided by the user.
    *
    * @return The correct affiliate code or void.
    **/
    function processAffiliateCode(string memory _afCode) internal returns(string memory) {
        
        if(stringsAreEqual(isAffiliatedWith[msg.sender], "void") || !isAffiliate[affiliateCodeToAddr[_afCode]]) {
            isAffiliatedWith[msg.sender] = "void";
            return "void";
        }
        
        if(!stringsAreEqual(_afCode, "") && stringsAreEqual(isAffiliatedWith[msg.sender],"") 
                                                                && affiliateCodeExists[_afCode]) {
            if(affiliateCodeToAddr[_afCode] == msg.sender) {
                return "void";
            }
            isAffiliatedWith[msg.sender] = _afCode;
        }

        if(stringsAreEqual(_afCode,"") && !stringsAreEqual(isAffiliatedWith[msg.sender],"")) {
            _afCode = isAffiliatedWith[msg.sender];
        } 
        
        if(stringsAreEqual(_afCode,"") || !affiliateCodeExists[_afCode]) {
            isAffiliatedWith[msg.sender] = "void";
            _afCode = "void";
        }
        
        return _afCode;
    }


    /**
    * Allows the owner of this contract to grant users with premium membership.
    *
    * @param _addr The address of the user who is being granted premium membership.
    *
    * @return True if premium membership is granted successfully. False otherwise. 
    **/
    function grantPremiumMembership(address _addr) public onlyOwner returns(bool) {
        require(!isPremiumMember[_addr], "Is already premiumMember member");
        isPremiumMember[_addr] = true;
        emit NewPremiumMembership(_addr);
        return true; 
    }


    /**
    * Allows users to become premium members.
    *
    * @param _afCode If a user has been refferred by an affiliate partner, they can provide 
    * an affiliate code so the partner gets commission.
    *
    * @return True if user successfully becomes premium member. False otherwise. 
    **/
    function becomePremiumMember(string memory _afCode) public payable returns(bool) {
        require(!isPremiumMember[msg.sender], "Is already premiumMember member");
        require(
            msg.value >= premiumMemberFee,
            string(abi.encodePacked(
                "premiumMember fee is: ", uint2str(premiumMemberFee), ". Not enough ETH sent. ", uint2str(msg.value)
            ))
        );
        
        isPremiumMember[msg.sender] = true;
        
        _afCode = processAffiliateCode(_afCode);

        giveChange(premiumMemberFee);
        
        if(!stringsAreEqual(_afCode,"void") && isAffiliate[affiliateCodeToAddr[_afCode]]) {
            payable(owner).transfer(premiumMemberFee.mul(80).div(100));
            uint256 commission = premiumMemberFee.mul(20).div(100);
            payable(affiliateCodeToAddr[_afCode]).transfer(commission);
            emit CommissionPaid(affiliateCodeToAddr[_afCode], commission);
        } else {
            payable(owner).transfer(premiumMemberFee);
        }
        emit NewPremiumMembership(msg.sender);
        return true; 
    }
    
    
    /**
    * Allows the owner of this contract to add an affiliate partner.
    *
    * @param _addr The address of the new affiliate partner.
    * @param _code The affiliate code.
    * 
    * @return True if the affiliate has been added successfully. False otherwise. 
    **/
    function addAffiliate(address _addr, string memory _code) public onlyOwner returns(bool) {
        require(!isAffiliate[_addr], "Address is already an affiliate.");
        require(_addr != address(0));
        require(!affiliateCodeExists[_code]);
        affiliateCodeExists[_code] = true;
        isAffiliate[_addr] = true;
        affiliateCodeToAddr[_code] = _addr;
        affiliateCodeOfAddr[_addr] = _code;
        emit NewAffiliatePartnership(_addr,_code);
        return true;
    }
    

    /**
    * Allows the owner of this contract to remove an affiliate partner. 
    *
    * @param _addr The address of the affiliate partner.
    *
    * @return True if affiliate partner is removed successfully. False otherwise. 
    **/
    function removeAffiliate(address _addr) public onlyOwner returns(bool) {
        require(isAffiliate[_addr]);
        isAffiliate[_addr] = false;
        affiliateCodeToAddr[affiliateCodeOfAddr[_addr]] = address(0);
        emit AffiliatePartnershipRevoked(_addr, affiliateCodeOfAddr[_addr]);
        affiliateCodeOfAddr[_addr] = "No longer an affiliate partner";
        return true;
    }
    

    
    /**
     * Checks whether or not an ERC20 token has used its free trial of 100 drops. This is a constant 
     * function which does not alter the state of the contract and therefore does not require any gas 
     * or a signature to be executed. 
     * 
     * @param _addressOfToken The address of the token being queried.
     * 
     * @return true if the token being queried has not used its 100 first free trial drops, false
     * otherwise.
     * */
    function tokenHasFreeTrial(address _addressOfToken) public view returns(bool) {
        return tokenTrialDrops[_addressOfToken] < 100;
    }
    
    
    /**
     * Checks how many remaining free trial drops a token has.
     * 
     * @param _addressOfToken the address of the token being queried.
     * 
     * @return the total remaining free trial drops of a token.
     * */
    function getRemainingTrialDrops(address _addressOfToken) public view returns(uint256) {
        if(tokenHasFreeTrial(_addressOfToken)) {
            uint256 maxTrialDrops =  100;
            return maxTrialDrops.sub(tokenTrialDrops[_addressOfToken]);
        } 
        return 0;
    }
    
    
    /**
     * Allows for the price of drops to be changed by the owner of the contract. Any attempt made by 
     * any other account to invoke the function will result in a loss of gas and the price will remain 
     * untampered.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function setRate(uint256 _newRate) public onlyOwner returns(bool) {
        require(
            _newRate != rate 
            && _newRate > 0
        );
        emit RateChanged(rate, _newRate);
        rate = _newRate;
        uint256 eth = 1 ether;
        dropUnitPrice = eth.div(rate);
        return true;
    }
    
    

    /**
     * Allows for the allowance of a token from its owner to this contract to be queried. 
     * 
     * As part of the ERC20 standard all tokens which fall under this category have an allowance 
     * function which enables owners of tokens to allow (or give permission) to another address 
     * to spend tokens on behalf of the owner. This contract uses this as part of its protocol.
     * Users must first give permission to the contract to transfer tokens on their behalf, however,
     * this does not mean that the tokens will ever be transferrable without the permission of the 
     * owner. This is a security feature which was implemented on this contract. It is not possible
     * for the owner of this contract or anyone else to transfer the tokens which belong to others. 
     * 
     * @param _addr The address of the token's owner.
     * @param _addressOfToken The contract address of the ERC20 token.
     * 
     * @return The ERC20 token allowance from token owner to this contract. 
     * */
    function getTokenAllowance(address _addr, address _addressOfToken) public view returns(uint256) {
        ERCInterface token = ERCInterface(_addressOfToken);
        return token.allowance(_addr, address(this));
    }
    
    
    fallback() external payable {
        revert();
    }


    receive() external payable {
        revert();
    }
    
    
    /**
    * Checks if two strings are the same.
    *
    * @param _a String 1
    * @param _b String 2
    *
    * @return True if both strings are the same. False otherwise. 
    **/
    function stringsAreEqual(string memory _a, string memory _b) internal pure returns(bool) {
        bytes32 hashA = keccak256(abi.encodePacked(_a));
        bytes32 hashB = keccak256(abi.encodePacked(_b));
        return hashA == hashB;
    }
 
    
    /**
     * Allows for the distribution of Ether to be transferred to multiple recipients at 
     * a time. This function only facilitates batch transfers of constant values (i.e., all recipients
     * will receive the same amount of tokens).
     * 
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _value The amount of tokens all addresses will receive. 
     * @param _afCode If the user is affiliated with a partner, they will provide this code so that 
     * the parter is paid commission.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function singleValueEthAirrop(address[] memory _recipients, uint256 _value, string memory _afCode) public payable returns(bool) {
        
        uint256 price = _recipients.length.mul(dropUnitPrice);
        uint256 totalCost = _value.mul(_recipients.length).add(price);

        require(
            msg.value >= totalCost|| isPremiumMember[msg.sender],
            "Not enough ETH sent with transaction!"
        );

        
        _afCode = processAffiliateCode(_afCode);
        
        
        if(!isPremiumMember[msg.sender]) {
            distributeCommission(_recipients.length, _afCode);
        }

        giveChange(totalCost);
        
        for(uint i=0; i<_recipients.length; i++) {
            if(_recipients[i] != address(0)) {
                payable(_recipients[i]).transfer(_value);
            }
        }

        emit EthAirdrop(msg.sender, _recipients.length, _value.mul(_recipients.length));
        
        return true;
    }
    

    
    function _getTotalEthValue(uint256[] memory _values) internal pure returns(uint256) {
        uint256 totalVal = 0;
        for(uint i = 0; i < _values.length; i++) {
            totalVal = totalVal.add(_values[i]);
        }
        return totalVal;
    }
    
    
    /**
     * Allows for the distribution of Ether to be transferred to multiple recipients at 
     * a time. 
     * 
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _values The corresponding amounts that the recipients will receive 
     * @param _afCode If the user is affiliated with a partner, they will provide this code so that 
     * the parter is paid commission.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function multiValueEthAirdrop(address[] memory _recipients, uint256[] memory _values, string memory _afCode) public payable returns(bool) {
        require(_recipients.length == _values.length, "Total number of recipients and values are not equal");

        uint256 totalEthValue = _getTotalEthValue(_values);
        uint256 price = _recipients.length.mul(dropUnitPrice);
        uint256 totalCost = totalEthValue.add(price);

        require(
            msg.value >= totalCost || isPremiumMember[msg.sender], 
            "Not enough ETH sent with transaction!"
        );
        
        
        _afCode = processAffiliateCode(_afCode);
        
        if(!isPremiumMember[msg.sender]) {
            distributeCommission(_recipients.length, _afCode);
        }

        giveChange(totalCost);
        
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0) && _values[i] > 0) {
                payable(_recipients[i]).transfer(_values[i]);
            }
        }
        
        emit EthAirdrop(msg.sender, _recipients.length, totalEthValue);
        return true;
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to multiple recipients at 
     * a time. This function only facilitates batch transfers of constant values (i.e., all recipients
     * will receive the same amount of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _value The amount of tokens all addresses will receive. 
     * @param _afCode If the user is affiliated with a partner, they will provide this code so that 
     * the parter is paid commission.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function singleValueTokenAirdrop(address _addressOfToken,  address[] memory _recipients, uint256 _value, string memory _afCode) public payable returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);

        uint256 price = _recipients.length.mul(dropUnitPrice);

        require(
            msg.value >= price || tokenHasFreeTrial(_addressOfToken) || isPremiumMember[msg.sender],
            "Not enough ETH sent with transaction!"
        );

        giveChange(price);

        _afCode = processAffiliateCode(_afCode);
        
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0)) {
                token.transferFrom(msg.sender, _recipients[i], _value);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            tokenTrialDrops[_addressOfToken] = tokenTrialDrops[_addressOfToken].add(_recipients.length);
        } else {
            if(!isPremiumMember[msg.sender]) {
                distributeCommission(_recipients.length, _afCode);
            }
            
        }

        emit TokenAirdrop(msg.sender, _addressOfToken, _recipients.length);
        return true;
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to multiple recipients at 
     * a time. This function facilitates batch transfers of differing values (i.e., all recipients
     * can receive different amounts of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _values The corresponding values of tokens which each address will receive.
     * @param _afCode If the user is affiliated with a partner, they will provide this code so that 
     * the parter is paid commission.
     * 
     * @return true if function executes successfully, false otherwise.
     * */    
    function multiValueTokenAirdrop(address _addressOfToken,  address[] memory _recipients, uint256[] memory _values, string memory _afCode) public payable returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);
        require(_recipients.length == _values.length, "Total number of recipients and values are not equal");

        uint256 price = _recipients.length.mul(dropUnitPrice);

        require(
            msg.value >= price || tokenHasFreeTrial(_addressOfToken) || isPremiumMember[msg.sender],
            "Not enough ETH sent with transaction!"
        );

        giveChange(price);
        
        _afCode = processAffiliateCode(_afCode);
        
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0) && _values[i] > 0) {
                token.transferFrom(msg.sender, _recipients[i], _values[i]);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            tokenTrialDrops[_addressOfToken] = tokenTrialDrops[_addressOfToken].add(_recipients.length);
        } else {
            if(!isPremiumMember[msg.sender]) {
                distributeCommission(_recipients.length, _afCode);
            }
        }
        emit TokenAirdrop(msg.sender, _addressOfToken, _recipients.length);
        return true;
    }
        

    /**
    * Send the owner and affiliates commissions.
    **/
    function distributeCommission(uint256 _drops, string memory _afCode) internal {
        if(!stringsAreEqual(_afCode,"void") && isAffiliate[affiliateCodeToAddr[_afCode]]) {
            uint256 profitSplit = _drops.mul(dropUnitPrice).div(2);
            payable(owner).transfer(profitSplit);
            payable(affiliateCodeToAddr[_afCode]).transfer(profitSplit);
            emit CommissionPaid(affiliateCodeToAddr[_afCode], profitSplit);
        } else {
            payable(owner).transfer(_drops.mul(dropUnitPrice));
        }
    }
    
    
    

    /**
     * Allows for any ERC20 tokens which have been mistakenly  sent to this contract to be returned 
     * to the original sender by the owner of the contract. Any attempt made by any other account 
     * to invoke the function will result in a loss of gas and no tokens will be transferred out.
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipient The address which will receive tokens. 
     * @param _value The amount of tokens to refund.
     * 
     * @return true if function executes successfully, false otherwise.
     * */  
    function withdrawERC20Tokens(address _addressOfToken,  address _recipient, uint256 _value) public onlyOwner returns(bool){
        require(
            _addressOfToken != address(0)
            && _recipient != address(0)
            && _value > 0
        );
        ERCInterface token = ERCInterface(_addressOfToken);
        token.transfer(_recipient, _value);
        emit ERC20TokensWithdrawn(_addressOfToken, _recipient, _value);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"affiliate","type":"address"},{"indexed":true,"internalType":"string","name":"affiliateCode","type":"string"}],"name":"AffiliatePartnershipRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"sentTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ERC20TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalTransfers","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethValue","type":"uint256"}],"name":"EthAirdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAffiliate","type":"address"},{"indexed":true,"internalType":"string","name":"affiliateCode","type":"string"}],"name":"NewAffiliatePartnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"premiumMember","type":"address"}],"name":"NewPremiumMembership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"PremiumMemberFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"from","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"to","type":"uint256"}],"name":"RateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalWei","type":"uint256"}],"name":"RefundIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalTransfers","type":"uint256"}],"name":"TokenAirdrop","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"string","name":"_code","type":"string"}],"name":"addAffiliate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"affiliateCodeExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"affiliateCodeOfAddr","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"affiliateCodeToAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_afCode","type":"string"}],"name":"becomePremiumMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dropUnitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addressOfToken","type":"address"}],"name":"getRemainingTrialDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_addressOfToken","type":"address"}],"name":"getTokenAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"grantPremiumMembership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAffiliate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAffiliatedWith","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPremiumMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"string","name":"_afCode","type":"string"}],"name":"multiValueEthAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressOfToken","type":"address"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"string","name":"_afCode","type":"string"}],"name":"multiValueTokenAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumMemberFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeAffiliate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setPremiumMemberFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRate","type":"uint256"}],"name":"setRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"string","name":"_afCode","type":"string"}],"name":"singleValueEthAirrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressOfToken","type":"address"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"string","name":"_afCode","type":"string"}],"name":"singleValueTokenAirdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressOfToken","type":"address"}],"name":"tokenHasFreeTrial","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenTrialDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressOfToken","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdrawERC20Tokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633179055612710600955655af3107a4000600a556703782dace9d900006008556133d78061004e6000396000f3fe6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063e8a05d4c1161008a578063f53289ca11610064578063f53289ca14610ae1578063f8fa4d1714610c1f578063f9727e1d14610dd7578063fec5c0c614610e01576101aa565b8063e8a05d4c14610a3e578063ea7ee01014610a71578063f2fde38b14610aac576101aa565b8063adc76126116100c6578063adc76126146108f1578063b186768514610924578063bcdd1e1314610957578063cfab2bb31461099a576101aa565b80638da5cb5b146108b257806390d419d1146108c7578063a39a2b76146108dc576101aa565b80634a4a2feb11610159578063590925e211610133578063590925e2146105f557806362920c85146106c25780636cca7d3c1461086a578063893d20e81461089d576101aa565b80634a4a2feb146104595780634fa8518614610501578063503ad00e14610534576101aa565b806318f20763146101af57806323a0fb02146102f15780632c4e722e1461032457806334fcf4371461034b5780633b9ff843146103755780633d2375f9146103a8576101aa565b366101aa57600080fd5b600080fd5b6102dd600480360360608110156101c557600080fd5b810190602081018135600160201b8111156101df57600080fd5b8201836020820111156101f157600080fd5b803590602001918460208302840111600160201b8311171561021257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561026957600080fd5b82018360208201111561027b57600080fd5b803590602001918460018302840111600160201b8311171561029c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e34945050505050565b604080519115158252519081900360200190f35b3480156102fd57600080fd5b506102dd6004803603602081101561031457600080fd5b50356001600160a01b0316610fe5565b34801561033057600080fd5b50610339611007565b60408051918252519081900360200190f35b34801561035757600080fd5b506102dd6004803603602081101561036e57600080fd5b503561100d565b34801561038157600080fd5b506102dd6004803603602081101561039857600080fd5b50356001600160a01b03166110d3565b3480156103b457600080fd5b506102dd600480360360208110156103cb57600080fd5b810190602081018135600160201b8111156103e557600080fd5b8201836020820111156103f757600080fd5b803590602001918460018302840111600160201b8311171561041857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061130f945050505050565b34801561046557600080fd5b5061048c6004803603602081101561047c57600080fd5b50356001600160a01b031661132f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c65781810151838201526020016104ae565b50505050905090810190601f1680156104f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050d57600080fd5b506102dd6004803603602081101561052457600080fd5b50356001600160a01b03166113ca565b34801561054057600080fd5b506102dd6004803603604081101561055757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561058157600080fd5b82018360208201111561059357600080fd5b803590602001918460018302840111600160201b831117156105b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113df945050505050565b34801561060157600080fd5b506106a66004803603602081101561061857600080fd5b810190602081018135600160201b81111561063257600080fd5b82018360208201111561064457600080fd5b803590602001918460018302840111600160201b8311171561066557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116e0945050505050565b604080516001600160a01b039092168252519081900360200190f35b6102dd600480360360608110156106d857600080fd5b810190602081018135600160201b8111156106f257600080fd5b82018360208201111561070457600080fd5b803590602001918460208302840111600160201b8311171561072557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561077457600080fd5b82018360208201111561078657600080fd5b803590602001918460208302840111600160201b831117156107a757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107f657600080fd5b82018360208201111561080857600080fd5b803590602001918460018302840111600160201b8311171561082957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611706945050505050565b34801561087657600080fd5b506103396004803603602081101561088d57600080fd5b50356001600160a01b031661191b565b3480156108a957600080fd5b506106a661192d565b3480156108be57600080fd5b506106a661193c565b3480156108d357600080fd5b5061033961194b565b3480156108e857600080fd5b50610339611951565b3480156108fd57600080fd5b506103396004803603602081101561091457600080fd5b50356001600160a01b0316611957565b34801561093057600080fd5b5061048c6004803603602081101561094757600080fd5b50356001600160a01b031661199e565b34801561096357600080fd5b506102dd6004803603606081101561097a57600080fd5b506001600160a01b03813581169160208101359091169060400135611a06565b6102dd600480360360208110156109b057600080fd5b810190602081018135600160201b8111156109ca57600080fd5b8201836020820111156109dc57600080fd5b803590602001918460018302840111600160201b831117156109fd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b58945050505050565b348015610a4a57600080fd5b506102dd60048036036020811015610a6157600080fd5b50356001600160a01b0316612058565b348015610a7d57600080fd5b5061033960048036036040811015610a9457600080fd5b506001600160a01b038135811691602001351661206d565b348015610ab857600080fd5b50610adf60048036036020811015610acf57600080fd5b50356001600160a01b03166120f6565b005b6102dd60048036036080811015610af757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b2157600080fd5b820183602082011115610b3357600080fd5b803590602001918460208302840111600160201b83111715610b5457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610bab57600080fd5b820183602082011115610bbd57600080fd5b803590602001918460018302840111600160201b83111715610bde57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121c9945050505050565b6102dd60048036036080811015610c3557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610c5f57600080fd5b820183602082011115610c7157600080fd5b803590602001918460208302840111600160201b83111715610c9257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ce157600080fd5b820183602082011115610cf357600080fd5b803590602001918460208302840111600160201b83111715610d1457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d6357600080fd5b820183602082011115610d7557600080fd5b803590602001918460018302840111600160201b83111715610d9657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506123f3945050505050565b348015610de357600080fd5b506102dd60048036036020811015610dfa57600080fd5b50356125d7565b348015610e0d57600080fd5b506102dd60048036036020811015610e2457600080fd5b50356001600160a01b031661267c565b600080610e4d600a54865161278590919063ffffffff16565b90506000610e6f82610e6988518861278590919063ffffffff16565b906127aa565b90508034101580610e8f57503360009081526002602052604090205460ff165b610eca5760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b610ed3846127c0565b3360009081526002602052604090205490945060ff16610ef857610ef8865185612d83565b610f0181613012565b60005b8651811015610f905760006001600160a01b0316878281518110610f2457fe5b60200260200101516001600160a01b031614610f8857868181518110610f4657fe5b60200260200101516001600160a01b03166108fc879081150290604051600060405180830381858888f19350505050158015610f86573d6000803e3d6000fd5b505b600101610f04565b50855133907f96280f1b9a54271a5ff3d2bc027d857d9386da43de7540d42b8b73180a15864a90610fc18882612785565b6040805192835260208301919091528051918290030190a250600195945050505050565b6001600160a01b0381166000908152600160205260409020546064115b919050565b60095481565b600080546001600160a01b031633146110575760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b60095482141580156110695750600082115b61107257600080fd5b600954604080519182526020820184905280517f4ac9052a820bf4f8c02d7588587cae835573b5b99ea7ad4ca002f17f319f71869281900390910190a16009829055670de0b6b3a76400006110c78184613059565b600a5550600192915050565b600080546001600160a01b0316331461111d5760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526003602052604090205460ff1661114257600080fd5b6001600160a01b0382166000908152600360209081526040808320805460ff191690556006909152808220905181546004929190819083906002600019600183161561010002019091160480156111d05780601f106111ae5761010080835404028352918201916111d0565b820191906000526020600020905b8154815290600101906020018083116111bc575b50509283525050604080516020928190038301812080546001600160a01b0319166001600160a01b0395861617905592851660009081526006909252902080549091908190839060026101006001831615026000190190911604801561126d5780601f1061124b57610100808354040283529182019161126d565b820191906000526020600020905b815481529060010190602001808311611259575b505060405190819003812092506001600160a01b03851691507f4ddc7b8659a2faf8698c810ab0219aa981bfccb47c036d3cc7ae8a32c15dc4ec90600090a3604080518082018252601e81527f4e6f206c6f6e67657220616e20616666696c6961746520706172746e6572000060208083019182526001600160a01b038616600090815260069091529290922090516113069290613297565b50600192915050565b805160208183018101805160058252928201919093012091525460ff1681565b60066020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156113c25780601f10611397576101008083540402835291602001916113c2565b820191906000526020600020905b8154815290600101906020018083116113a557829003601f168201915b505050505081565b60036020526000908152604090205460ff1681565b600080546001600160a01b031633146114295760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03831660009081526003602052604090205460ff1615611497576040805162461bcd60e51b815260206004820181905260248201527f4164647265737320697320616c726561647920616e20616666696c696174652e604482015290519081900360640190fd5b6001600160a01b0383166114aa57600080fd5b6005826040518082805190602001908083835b602083106114dc5780518252601f1990920191602091820191016114bd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611519905057600080fd5b60016005836040518082805190602001908083835b6020831061154d5780518252601f19909201916020918201910161152e565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520805496151560ff199788161790556001600160a01b038916600090815260038352208054909516600117909455505083518592600492869290918291908401908083835b602083106115de5780518252601f1990920191602091820191016115bf565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820190942080546001600160a01b0319166001600160a01b03968716179055938716600090815260068552929092208551611648949193509086019150613297565b50816040518082805190602001908083835b602083106116795780518252601f19909201916020918201910161165a565b5181516020939093036101000a6000190180199091169216919091179052604051920182900382209350506001600160a01b03861691507ff30f92c3d1eddb3772622c3b7d6a3985a8de818f7eebd5cef6650ee86d5ddbce90600090a35060015b92915050565b80516020818301810180516004825292820191909301209152546001600160a01b031681565b600082518451146117485760405162461bcd60e51b81526004018080602001828103825260338152602001806133476033913960400191505060405180910390fd5b60006117538461306c565b9050600061176d600a54875161278590919063ffffffff16565b9050600061177b83836127aa565b9050803410158061179b57503360009081526002602052604090205460ff165b6117d65760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b6117df856127c0565b3360009081526002602052604090205490955060ff1661180457611804875186612d83565b61180d81613012565b60005b87518110156118d05760006001600160a01b031688828151811061183057fe5b60200260200101516001600160a01b0316141580156118625750600087828151811061185857fe5b6020026020010151115b156118c85787818151811061187357fe5b60200260200101516001600160a01b03166108fc88838151811061189357fe5b60200260200101519081150290604051600060405180830381858888f193505050501580156118c6573d6000803e3d6000fd5b505b600101611810565b5086516040805191825260208201859052805133927f96280f1b9a54271a5ff3d2bc027d857d9386da43de7540d42b8b73180a15864a92908290030190a25060019695505050505050565b60016020526000908152604090205481565b6000546001600160a01b031690565b6000546001600160a01b031681565b60085481565b600a5481565b600061196282610fe5565b15611996576001600160a01b03821660009081526001602052604090205460649061198e9082906130b1565b915050611002565b506000919050565b60076020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156113c25780601f10611397576101008083540402835291602001916113c2565b600080546001600160a01b03163314611a505760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03841615801590611a7057506001600160a01b03831615155b8015611a7c5750600082115b611a8557600080fd5b6040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151869283169163a9059cbb9160448083019260209291908290030181600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b505050506040513d6020811015611b0257600080fd5b5050604080516001600160a01b0380881682528616602082015280820185905290517ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d9181900360600190a1506001949350505050565b3360009081526002602052604081205460ff1615611bbd576040805162461bcd60e51b815260206004820152601f60248201527f497320616c7265616479207072656d69756d4d656d626572206d656d62657200604482015290519081900360640190fd5b600854341015611bce6008546130c3565b611bd7346130c3565b6040516020018080750383932b6b4bab6a6b2b6b132b9103332b29034b99d160551b81525060160183805190602001908083835b60208310611c2a5780518252601f199092019160209182019101611c0b565b51815160209384036101000a60001901801990921691161790527f2e204e6f7420656e6f756768204554482073656e742e20000000000000000000919093019081528451601790910192850191508083835b60208310611c9b5780518252601f199092019160209182019101611c7c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290611d595760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50336000908152600260205260409020805460ff19166001179055611d7d826127c0565b9150611d8a600854613012565b611db082604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b158015611e395750600360006004846040518082805190602001908083835b60208310611dee5780518252601f199092019160209182019101611dcf565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff1690505b15611fe8576000546008546001600160a01b03909116906108fc90611e6c90606490611e66906050612785565b90613059565b6040518115909202916000818181858888f19350505050158015611e94573d6000803e3d6000fd5b506000611eb26064611e66601460085461278590919063ffffffff16565b90506004836040518082805190602001908083835b60208310611ee65780518252601f199092019160209182019101611ec7565b51815160209384036101000a600019018019909216911617905292019485525060405193849003018320546001600160a01b0316926108fc85150292508491506000818181858888f19350505050158015611f45573d6000803e3d6000fd5b506004836040518082805190602001908083835b60208310611f785780518252601f199092019160209182019101611f59565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205486865290516001600160a01b03909116947f885e6f6235626292940f78c947a331f4c7c1d7f50a48b38092cf546bc9c7907a94508190039091019150a250612025565b600080546008546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015612023573d6000803e3d6000fd5b505b60405133907fc6b9fca7b2e1cbd5b69b197ea298ab7dc0c58d469fc42acebdd4d38acb00951590600090a2506001919050565b60026020526000908152604090205460ff1681565b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915160009284929083169163dd62ed3e91604480820192602092909190829003018186803b1580156120c257600080fd5b505afa1580156120d6573d6000803e3d6000fd5b505050506040513d60208110156120ec57600080fd5b5051949350505050565b6000546001600160a01b0316331461213f5760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b0381161580159061216557506000546001600160a01b03828116911614155b61216e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600a548351600091869183916121df9190612785565b905080341015806121f457506121f487610fe5565b8061220e57503360009081526002602052604090205460ff165b6122495760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b61225281613012565b61225b846127c0565b935060005b86518110156123325760006001600160a01b031687828151811061228057fe5b60200260200101516001600160a01b03161461232a57826001600160a01b03166323b872dd338984815181106122b257fe5b6020026020010151896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b505050505b600101612260565b5061233c87610fe5565b156123835785516001600160a01b038816600090815260016020526040902054612365916127aa565b6001600160a01b0388166000908152600160205260409020556123a5565b3360009081526002602052604090205460ff166123a5576123a5865185612d83565b855160408051918252516001600160a01b0389169133917f39015fe519110ce3ccad418b153817407dc5312684839c8700af7436a80a07af9181900360200190a35060019695505050505050565b815183516000918691146124385760405162461bcd60e51b81526004018080602001828103825260338152602001806133476033913960400191505060405180910390fd5b6000612450600a54875161278590919063ffffffff16565b90508034101580612465575061246587610fe5565b8061247f57503360009081526002602052604090205460ff165b6124ba5760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b6124c381613012565b6124cc846127c0565b935060005b86518110156123325760006001600160a01b03168782815181106124f157fe5b60200260200101516001600160a01b0316141580156125235750600086828151811061251957fe5b6020026020010151115b156125cf57826001600160a01b03166323b872dd3389848151811061254457fe5b602002602001015189858151811061255857fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156125b657600080fd5b505af11580156125ca573d6000803e3d6000fd5b505050505b6001016124d1565b600080546001600160a01b031633146126215760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b60008211801561263357506008548214155b61263c57600080fd5b60088290556040805183815290517fa77eb4a199fa90085e9d7437273dd3bc924372a4bd0569aa21acc65a07b2c11c9181900360200190a1506001919050565b600080546001600160a01b031633146126c65760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526002602052604090205460ff1615612734576040805162461bcd60e51b815260206004820152601f60248201527f497320616c7265616479207072656d69756d4d656d626572206d656d62657200604482015290519081900360640190fd5b6001600160a01b038216600081815260026020526040808220805460ff19166001179055517fc6b9fca7b2e1cbd5b69b197ea298ab7dc0c58d469fc42acebdd4d38acb0095159190a2506001919050565b600082612794575060006116da565b50818102818382816127a257fe5b04146116da57fe5b6000828201838110156127b957fe5b9392505050565b336000908152600760209081526040918290208054835160026001831615610100026000190190921691909104601f81018490048402820184019094528381526060936128829391929183018282801561285b5780601f106128305761010080835404028352916020019161285b565b820191906000526020600020905b81548152906001019060200180831161283e57829003601f168201915b5050505050604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b8061290a5750600360006004846040518082805190602001908083835b602083106128be5780518252601f19909201916020918201910161289f565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff161590505b156129695760408051808201825260048152631d9bda5960e21b602080830191825233600090815260079091529290922090516129479290613297565b50506040805180820190915260048152631d9bda5960e21b6020820152611002565b61298282604051806020016040528060008152506131a5565b158015612a3b57503360009081526007602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612a3b9392830182828015612a215780601f106129f657610100808354040283529160200191612a21565b820191906000526020600020905b815481529060010190602001808311612a0457829003601f168201915b5050505050604051806020016040528060008152506131a5565b8015612aa757506005826040518082805190602001908083835b60208310612a745780518252601f199092019160209182019101612a55565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b15612b6d57336001600160a01b03166004836040518082805190602001908083835b60208310612ae85780518252601f199092019160209182019101612ac9565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220546001600160a01b031692909214159150612b4b905057506040805180820190915260048152631d9bda5960e21b6020820152611002565b3360009081526007602090815260409091208351612b6b92850190613297565b505b612b8682604051806020016040528060008152506131a5565b8015612bfb57503360009081526007602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612bf99392830182828015612a215780601f106129f657610100808354040283529160200191612a21565b155b15612c9c573360009081526007602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015612c945780601f10612c6957610100808354040283529160200191612c94565b820191906000526020600020905b815481529060010190602001808311612c7757829003601f168201915b505050505091505b612cb582604051806020016040528060008152506131a5565b80612d2157506005826040518082805190602001908083835b60208310612ced5780518252601f199092019160209182019101612cce565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b15612d7f5760408051808201825260048152631d9bda5960e21b60208083019182523360009081526007909152929092209051612d5e9290613297565b50604051806040016040528060048152602001631d9bda5960e21b81525091505b5090565b612da981604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b158015612e325750600360006004836040518082805190602001908083835b60208310612de75780518252601f199092019160209182019101612dc8565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff1690505b15612fc3576000612e536002611e66600a548661278590919063ffffffff16565b600080546040519293506001600160a01b03169183156108fc0291849190818181858888f19350505050158015612e8e573d6000803e3d6000fd5b506004826040518082805190602001908083835b60208310612ec15780518252601f199092019160209182019101612ea2565b51815160209384036101000a600019018019909216911617905292019485525060405193849003018320546001600160a01b0316926108fc85150292508491506000818181858888f19350505050158015612f20573d6000803e3d6000fd5b506004826040518082805190602001908083835b60208310612f535780518252601f199092019160209182019101612f34565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205486865290516001600160a01b03909116947f885e6f6235626292940f78c947a331f4c7c1d7f50a48b38092cf546bc9c7907a94508190039091019150a25061300e565b600054600a546001600160a01b03909116906108fc90612fe4908590612785565b6040518115909202916000818181858888f1935050505015801561300c573d6000803e3d6000fd5b505b5050565b8034111561305657600061302634836130b1565b604051909150339082156108fc029083906000818181858888f1935050505015801561300c573d6000803e3d6000fd5b50565b600081838161306457fe5b049392505050565b600080805b83518110156130aa576130a084828151811061308957fe5b6020026020010151836127aa90919063ffffffff16565b9150600101613071565b5092915050565b6000828211156130bd57fe5b50900390565b6060816130e857506040805180820190915260018152600360fc1b6020820152611002565b8160005b811561310057600101600a820491506130ec565b60608167ffffffffffffffff8111801561311957600080fd5b506040519080825280601f01601f191660200182016040528015613144576020820181803683370190505b509050815b851561319c57600019016000600a8704600a028703603001905060008160f81b90508084848151811061317857fe5b60200101906001600160f81b031916908160001a905350600a880497505050613149565b50949350505050565b600080836040516020018082805190602001908083835b602083106131db5780518252601f1990920191602091820191016131bc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506000836040516020018082805190602001908083835b6020831061324d5780518252601f19909201916020918201910161322e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508082149250505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106132d857805160ff1916838001178555613305565b82800160010185558215613305579182015b828111156133055782518255916020019190600101906132ea565b50612d7f9291505b80821115612d7f576000815560010161330d56fe4e6f7420656e6f756768204554482073656e742077697468207472616e73616374696f6e21546f74616c206e756d626572206f6620726563697069656e747320616e642076616c75657320617265206e6f7420657175616c46756e6374696f6e207265737472696374656420746f206f776e6572206f6620636f6e7472616374a264697066735822122096dce15685d440ceb5d189949078d99a0c4a4ffe14225ab47a018e9900dc500064736f6c634300060c0033

Deployed ByteCode Sourcemap

4031:21016:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15172:8;;;4031:21016;15108:8;;;16305:988;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16305:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16305:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16305:988:0;;;;;;;;;-1:-1:-1;16305:988:0;;;;-1:-1:-1;16305:988:0;;;;-1:-1:-1;;;;16305:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16305:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16305:988:0;;-1:-1:-1;16305:988:0;;-1:-1:-1;;;;;16305:988:0:i;:::-;;;;;;;;;;;;;;;;;;12403:142;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12403:142:0;-1:-1:-1;;;;;12403:142:0;;:::i;4570:19::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13440:327;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13440:327:0;;:::i;11512:397::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11512:397:0;-1:-1:-1;;;;;11512:397:0;;:::i;4345:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4345:51:0;;-1:-1:-1;4345:51:0;;-1:-1:-1;;;;;4345:51:0:i;4403:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4403:54:0;-1:-1:-1;;;;;4403:54:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4233:44;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4233:44:0;-1:-1:-1;;;;;4233:44:0;;:::i;10748:502::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10748:502:0;;;;;;;;;;;;;;;-1:-1:-1;;;10748:502:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10748:502:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10748:502:0;;-1:-1:-1;10748:502:0;;-1:-1:-1;;;;;10748:502:0:i;4284:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4284:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4284:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4284:54:0;;-1:-1:-1;4284:54:0;;-1:-1:-1;;;;;4284:54:0:i;:::-;;;;-1:-1:-1;;;;;4284:54:0;;;;;;;;;;;;;;18112:1152;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18112:1152:0;;;;;;;;-1:-1:-1;18112:1152:0;;-1:-1:-1;;;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18112:1152:0;;;;;;;;-1:-1:-1;18112:1152:0;;-1:-1:-1;;;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18112:1152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18112:1152:0;;-1:-1:-1;18112:1152:0;;-1:-1:-1;;;;;18112:1152:0:i;4118:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4118:51:0;-1:-1:-1;;;;;4118:51:0;;:::i;2567:80::-;;;;;;;;;;;;;:::i;2277:20::-;;;;;;;;;;;;;:::i;4532:31::-;;;;;;;;;;;;;:::i;4596:28::-;;;;;;;;;;;;;:::i;12801:291::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12801:291:0;-1:-1:-1;;;;;12801:291:0;;:::i;4464:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4464:51:0;-1:-1:-1;;;;;4464:51:0;;:::i;24573:471::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24573:471:0;;;;;;;;;;;;;;;;;:::i;9317:1124::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9317:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9317:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9317:1124:0;;-1:-1:-1;9317:1124:0;;-1:-1:-1;;;;;9317:1124:0:i;4178:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4178:48:0;-1:-1:-1;;;;;4178:48:0;;:::i;14831:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14831:220:0;;;;;;;;;;:::i;3267:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3267:256:0;-1:-1:-1;;;;;3267:256:0;;:::i;:::-;;20006:1205;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20006:1205:0;;;;;;;;;;;;;;;-1:-1:-1;;;20006:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20006:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20006:1205:0;;;;;;;;;-1:-1:-1;20006:1205:0;;;;-1:-1:-1;20006:1205:0;;;;-1:-1:-1;;;;20006:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20006:1205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20006:1205:0;;-1:-1:-1;20006:1205:0;;-1:-1:-1;;;;;20006:1205:0:i;21973:1339::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21973:1339:0;;;;;;;;;;;;;;;-1:-1:-1;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21973:1339:0;;;;;;;;-1:-1:-1;21973:1339:0;;-1:-1:-1;;;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21973:1339:0;;;;;;;;-1:-1:-1;21973:1339:0;;-1:-1:-1;;;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21973:1339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21973:1339:0;;-1:-1:-1;21973:1339:0;;-1:-1:-1;;;;;21973:1339:0:i;5774:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5774:239:0;;:::i;8724:270::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8724:270:0;-1:-1:-1;;;;;8724:270:0;;:::i;16305:988::-;16427:4;16454:13;16470:37;16493:13;;16470:11;:18;:22;;:37;;;;:::i;:::-;16454:53;;16518:17;16538:41;16573:5;16538:30;16549:11;:18;16538:6;:10;;:30;;;;:::i;:::-;:34;;:41::i;:::-;16518:61;;16627:9;16614;:22;;:52;;;-1:-1:-1;16655:10:0;16639:27;;;;:15;:27;;;;;;;;16614:52;16592:139;;;;-1:-1:-1;;;16592:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16764:29;16785:7;16764:20;:29::i;:::-;16844:10;16828:27;;;;:15;:27;;;;;;16754:39;;-1:-1:-1;16828:27:0;;16824:109;;16872:49;16893:11;:18;16913:7;16872:20;:49::i;:::-;16945:21;16956:9;16945:10;:21::i;:::-;16991:6;16987:175;17003:11;:18;17001:1;:20;16987:175;;;17072:1;-1:-1:-1;;;;;17046:28:0;:11;17058:1;17046:14;;;;;;;;;;;;;;-1:-1:-1;;;;;17046:28:0;;17043:108;;17103:11;17115:1;17103:14;;;;;;;;;;;;;;-1:-1:-1;;;;;17095:32:0;:40;17128:6;17095:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:108;17023:3;;16987:175;;;-1:-1:-1;17202:18:0;;17190:10;;17179:74;;17222:30;:6;17202:18;17222:10;:30::i;:::-;17179:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17281:4:0;;16305:988;-1:-1:-1;;;;;16305:988:0:o;12403:142::-;-1:-1:-1;;;;;12499:32:0;;12475:4;12499:32;;;:15;:32;;;;;;12534:3;-1:-1:-1;12403:142:0;;;;:::o;4570:19::-;;;;:::o;13440:327::-;13500:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13551:4:::1;;13539:8;:16;;:46;;;;;13584:1;13573:8;:12;13539:46;13517:79;;;::::0;::::1;;13624:4;::::0;13612:27:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;13650:4;:15:::0;;;13690:7:::1;13724:13;13690:7:::0;13657:8;13724:7:::1;:13::i;:::-;13708;:29:::0;-1:-1:-1;13755:4:0::1;::::0;13440:327;-1:-1:-1;;13440:327:0:o;11512:397::-;11577:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11602:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;::::1;;11594:27;;;::::0;::::1;;-1:-1:-1::0;;;;;11632:18:0;::::1;11653:5;11632:18:::0;;;:11:::1;:18;::::0;;;;;;;:26;;-1:-1:-1;;11632:26:0::1;::::0;;11689:19:::1;:26:::0;;;;;;11669:47;;;;:19:::1;::::0;11689:26;11669:47;;;11689:26;;11669:47:::1;-1:-1:-1::0;;11632:26:0;11669:47;::::1;;11632:26;11669:47;::::0;;;::::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;11669:47:0;;;-1:-1:-1;;11669:47:0::1;::::0;;::::1;::::0;;;;;;;;:60;;-1:-1:-1;;;;;;11669:60:0::1;-1:-1:-1::0;;;;;11669:60:0;;::::1;;::::0;;11780:26;;::::1;-1:-1:-1::0;11780:26:0;;;:19:::1;:26:::0;;;;;11745:62;;11780:26;;11669:47;;;11780:26;;11745:62:::1;11669:60;-1:-1:-1::0;11745:62:0;::::1;;;-1:-1:-1::0;;11745:62:0;;;::::1;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;11745:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;11745:62:0;::::1;::::0;-1:-1:-1;11745:62:0::1;::::0;;;::::1;11818:61;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;11818:26:0;::::1;-1:-1:-1::0;11818:26:0;;;:19:::1;:26:::0;;;;;;;:61;;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;11897:4:0::1;::::0;11512:397;-1:-1:-1;;11512:397:0:o;4345:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4403:54::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4403:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4233:44::-;;;;;;;;;;;;;;;:::o;10748:502::-;10831:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10857:18:0;::::1;;::::0;;;:11:::1;:18;::::0;;;;;::::1;;10856:19;10848:64;;;::::0;;-1:-1:-1;;;10848:64:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;10931:19:0;::::1;10923:28;;;::::0;::::1;;10971:19;10991:5;10971:26;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;10971:26:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;10971:26:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;10971:26:0::1;::::0;;;;;;;;;;::::1;;10970:27;::::0;-1:-1:-1;10962:36:0::1;::::0;-1:-1:-1;10962:36:0::1;;::::0;::::1;;11038:4;11009:19;11029:5;11009:26;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;11009:26:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;-1:-1:-1;;11009:26:0::1;::::0;;::::1;;;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;11009:26:0::1;::::0;;;;;;;;;;:33;;;::::1;;-1:-1:-1::0;;11009:33:0;;::::1;;::::0;;-1:-1:-1;;;;;11053:18:0;::::1;-1:-1:-1::0;11053:18:0;;;:11:::1;:18:::0;;;:25;;;;::::1;11009:26;11053:25;::::0;;;-1:-1:-1;;11089:26:0;;11065:5;;11089:19:::1;::::0;11109:5;;11009:26;;;;11089;;::::1;::::0;;11009;11089;::::1;;;;;;::::0;;;;-1:-1:-1;;11089:26:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;11089:26:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;-1:-1:-1;11089:26:0::1;::::0;;;;;;;;;;;:34;;-1:-1:-1;;;;;;11089:34:0::1;-1:-1:-1::0;;;;;11089:34:0;;::::1;;::::0;;11134:26;;::::1;-1:-1:-1::0;11134:26:0;;;:19:::1;:26:::0;;;;;;:34;;::::1;::::0;:26;;-1:-1:-1;11134:34:0;;::::1;::::0;-1:-1:-1;11134:34:0::1;:::i;:::-;;11214:5;11184:36;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;11184:36:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;;::::1;;;-1:-1:-1::0;;11184:36:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;;;11184:36:0;::::1;::::0;-1:-1:-1;11184:36:0::1;::::0;-1:-1:-1;;11184:36:0::1;-1:-1:-1::0;11238:4:0::1;3089:1;10748:502:::0;;;;:::o;4284:54::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4284:54:0;;:::o;18112:1152::-;18244:4;18291:7;:14;18269:11;:18;:36;18261:100;;;;-1:-1:-1;;;18261:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18374:21;18398:26;18416:7;18398:17;:26::i;:::-;18374:50;;18435:13;18451:37;18474:13;;18451:11;:18;:22;;:37;;;;:::i;:::-;18435:53;-1:-1:-1;18499:17:0;18519:24;:13;18435:53;18519:17;:24::i;:::-;18499:44;;18591:9;18578;:22;;:53;;;-1:-1:-1;18620:10:0;18604:27;;;;:15;:27;;;;;;;;18578:53;18556:141;;;;-1:-1:-1;;;18556:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18738:29;18759:7;18738:20;:29::i;:::-;18808:10;18792:27;;;;:15;:27;;;;;;18728:39;;-1:-1:-1;18792:27:0;;18788:109;;18836:49;18857:11;:18;18877:7;18836:20;:49::i;:::-;18909:21;18920:9;18909:10;:21::i;:::-;18955:6;18951:201;18971:11;:18;18967:1;:22;18951:201;;;19040:1;-1:-1:-1;;;;;19014:28:0;:11;19026:1;19014:14;;;;;;;;;;;;;;-1:-1:-1;;;;;19014:28:0;;;:46;;;;;19059:1;19046:7;19054:1;19046:10;;;;;;;;;;;;;;:14;19014:46;19011:130;;;19089:11;19101:1;19089:14;;;;;;;;;;;;;;-1:-1:-1;;;;;19081:32:0;:44;19114:7;19122:1;19114:10;;;;;;;;;;;;;;19081:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19011:130;18991:3;;18951:201;;;-1:-1:-1;19200:18:0;;19177:57;;;;;;;;;;;;;;19188:10;;19177:57;;;;;;;;;-1:-1:-1;19252:4:0;;18112:1152;-1:-1:-1;;;;;;18112:1152:0:o;4118:51::-;;;;;;;;;;;;;:::o;2567:80::-;2607:7;2634:5;-1:-1:-1;;;;;2634:5:0;2567:80;:::o;2277:20::-;;;-1:-1:-1;;;;;2277:20:0;;:::o;4532:31::-;;;;:::o;4596:28::-;;;;:::o;12801:291::-;12878:7;12901:34;12919:15;12901:17;:34::i;:::-;12898:167;;;-1:-1:-1;;;;;13020:32:0;;12952:21;13020:32;;;:15;:32;;;;;;12977:3;;13002:51;;12977:3;;13002:17;:51::i;:::-;12995:58;;;;;12898:167;-1:-1:-1;13083:1:0;12801:291;;;:::o;4464:51::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4464:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24573:471;24689:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24727:29:0;::::1;::::0;;::::1;::::0;:70:::1;;-1:-1:-1::0;;;;;;24773:24:0;::::1;::::0;::::1;24727:70;:97;;;;;24823:1;24814:6;:10;24727:97;24705:130;;;::::0;::::1;;24907:34;::::0;;-1:-1:-1;;;24907:34:0;;-1:-1:-1;;;;;24907:34:0;;::::1;;::::0;::::1;::::0;;;;;;;;;24880:15;;24907:14;::::1;::::0;::::1;::::0;:34;;;;;::::1;::::0;;;;;;;;24846:18:::1;24907:14:::0;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;24957:57:0::1;::::0;;-1:-1:-1;;;;;24957:57:0;;::::1;::::0;;;::::1;24907:34;24957:57:::0;::::1;::::0;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;25032:4:0::1;::::0;24573:471;-1:-1:-1;;;;24573:471:0:o;9317:1124::-;9434:10;9392:4;9418:27;;;:15;:27;;;;;;;;9417:28;9409:72;;;;;-1:-1:-1;;;9409:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9527:16;;9514:9;:29;;9626:26;9635:16;;9626:8;:26::i;:::-;9681:19;9690:9;9681:8;:19::i;:::-;9565:150;;;;;;-1:-1:-1;;;9565:150:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9565:150:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9565:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9565:150:0;;;;;;;;;;;;;-1:-1:-1;;9565:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9492:235;;;;;-1:-1:-1;;;9492:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9764:10:0;9748:27;;;;:15;:27;;;;;:34;;-1:-1:-1;;9748:34:0;9778:4;9748:34;;;9813:29;9834:7;9813:20;:29::i;:::-;9803:39;;9855:28;9866:16;;9855:10;:28::i;:::-;9908:31;9924:7;9908:31;;;;;;;;;;;;;-1:-1:-1;;;9908:31:0;;;:15;:31::i;:::-;9907:32;:77;;;;;9943:11;:41;9955:19;9975:7;9955:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9955:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9955:28:0;;;;;;;;;;;;;;;;-1:-1:-1;9955:28:0;;;;;;;;;;;;;-1:-1:-1;;;;;9955:28:0;9943:41;;;;;;;;-1:-1:-1;9943:41:0;-1:-1:-1;9943:41:0;;;;;-1:-1:-1;9907:77:0;9904:459;;;10009:5;;10025:16;;-1:-1:-1;;;;;10009:5:0;;;;10001:58;;10025:33;;10054:3;;10025:24;;10046:2;10025:20;:24::i;:::-;:28;;:33::i;:::-;10001:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10074:18;10095:33;10124:3;10095:24;10116:2;10095:16;;:20;;:24;;;;:::i;:33::-;10074:54;;10151:19;10171:7;10151:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10151:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10151:28:0;;;;;;;;;;;;;;;;-1:-1:-1;10151:28:0;;;;;;;;;;-1:-1:-1;;;;;10151:28:0;;10143:58;;;;;-1:-1:-1;10143:58:0;;-1:-1:-1;;10151:28:0;-1:-1:-1;10151:28:0;10143:58;10151:28;10143:58;;;;;;;;;;;;;;;;;;;;;10236:19;10256:7;10236:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10236:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10236:28:0;;;;;;;;;;;;;;;;-1:-1:-1;10236:28:0;;;;;;;;;;;;10221:56;;;;;-1:-1:-1;;;;;10236:28:0;;;;10221:56;;-1:-1:-1;10221:56:0;;;;;;;-1:-1:-1;10221:56:0;9904:459;;;;10318:5;;;10334:16;;10310:41;;-1:-1:-1;;;;;10318:5:0;;;;10310:41;;;;;;;10318:5;10310:41;10334:16;10318:5;10310:41;;;;;;;;;;;;;;;;;;;;;9904:459;10378:32;;10399:10;;10378:32;;;;;-1:-1:-1;10428:4:0;9317:1124;;;:::o;4178:48::-;;;;;;;;;;;;;;;:::o;14831:220::-;15006:37;;;-1:-1:-1;;;15006:37:0;;-1:-1:-1;;;;;15006:37:0;;;;;;;15037:4;15006:37;;;;;;14918:7;;14972:15;;15006;;;;;;:37;;;;;;;;;;;;;;;:15;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15006:37:0;;14831:220;-1:-1:-1;;;;14831:220:0:o;3267:256::-;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3363:23:0;::::1;::::0;;::::1;::::0;:58:::1;;-1:-1:-1::0;3416:5:0::1;::::0;-1:-1:-1;;;;;3403:18:0;;::::1;3416:5:::0;::::1;3403:18;;3363:58;3341:92;;;::::0;::::1;;3470:5;::::0;;3449:38:::1;::::0;-1:-1:-1;;;;;3449:38:0;;::::1;::::0;3470:5;::::1;::::0;3449:38:::1;::::0;::::1;3498:5;:17:::0;;-1:-1:-1;;;;;;3498:17:0::1;-1:-1:-1::0;;;;;3498:17:0;;;::::1;::::0;;;::::1;::::0;;3267:256::o;20006:1205::-;20276:13;;20253:18;;20157:4;;20208:15;;20157:4;;20253:37;;:18;:22;:37::i;:::-;20237:53;;20338:5;20325:9;:18;;:56;;;;20347:34;20365:15;20347:17;:34::i;:::-;20325:87;;;-1:-1:-1;20401:10:0;20385:27;;;;:15;:27;;;;;;;;20325:87;20303:174;;;;-1:-1:-1;;;20303:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20490:17;20501:5;20490:10;:17::i;:::-;20530:29;20551:7;20530:20;:29::i;:::-;20520:39;;20584:6;20580:193;20600:11;:18;20596:1;:22;20580:193;;;20669:1;-1:-1:-1;;;;;20643:28:0;:11;20655:1;20643:14;;;;;;;;;;;;;;-1:-1:-1;;;;;20643:28:0;;20640:122;;20692:5;-1:-1:-1;;;;;20692:18:0;;20711:10;20723:11;20735:1;20723:14;;;;;;;;;;;;;;20739:6;20692:54;;;;;;;;;;;;;-1:-1:-1;;;;;20692:54:0;;;;;;-1:-1:-1;;;;;20692:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20640:122;20620:3;;20580:193;;;;20786:34;20804:15;20786:17;:34::i;:::-;20783:320;;;20909:18;;-1:-1:-1;;;;;20872:32:0;;;;;;:15;:32;;;;;;:56;;:36;:56::i;:::-;-1:-1:-1;;;;;20837:32:0;;;;;;:15;:32;;;;;:91;20783:320;;;20981:10;20965:27;;;;:15;:27;;;;;;;;20961:117;;21013:49;21034:11;:18;21054:7;21013:20;:49::i;:::-;21162:18;;21120:61;;;;;;;-1:-1:-1;;;;;21120:61:0;;;21133:10;;21120:61;;;;;;;;;-1:-1:-1;21199:4:0;;20006:1205;-1:-1:-1;;;;;;20006:1205:0:o;21973:1339::-;22241:14;;22219:18;;22133:4;;22184:15;;22219:36;22211:100;;;;-1:-1:-1;;;22211:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22324:13;22340:37;22363:13;;22340:11;:18;:22;;:37;;;;:::i;:::-;22324:53;;22425:5;22412:9;:18;;:56;;;;22434:34;22452:15;22434:17;:34::i;:::-;22412:87;;;-1:-1:-1;22488:10:0;22472:27;;;;:15;:27;;;;;;;;22412:87;22390:174;;;;-1:-1:-1;;;22390:174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22577:17;22588:5;22577:10;:17::i;:::-;22625:29;22646:7;22625:20;:29::i;:::-;22615:39;;22679:6;22675:215;22695:11;:18;22691:1;:22;22675:215;;;22764:1;-1:-1:-1;;;;;22738:28:0;:11;22750:1;22738:14;;;;;;;;;;;;;;-1:-1:-1;;;;;22738:28:0;;;:46;;;;;22783:1;22770:7;22778:1;22770:10;;;;;;;;;;;;;;:14;22738:46;22735:144;;;22805:5;-1:-1:-1;;;;;22805:18:0;;22824:10;22836:11;22848:1;22836:14;;;;;;;;;;;;;;22852:7;22860:1;22852:10;;;;;;;;;;;;;;22805:58;;;;;;;;;;;;;-1:-1:-1;;;;;22805:58:0;;;;;;-1:-1:-1;;;;;22805:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22735:144;22715:3;;22675:215;;5774:239;5842:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5874:1:::1;5867:4;:8;:36;;;;;5887:16;;5879:4;:24;;5867:36;5859:45;;;::::0;::::1;;5915:16;:23:::0;;;5954:29:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;6001:4:0::1;5774:239:::0;;;:::o;8724:270::-;8796:4;3028:5;;-1:-1:-1;;;;;3028:5:0;3014:10;:19;3006:72;;;;-1:-1:-1;;;3006:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8822:22:0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;::::1;;8821:23;8813:67;;;::::0;;-1:-1:-1;;;8813:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;8891:22:0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;:29;;-1:-1:-1;;8891:29:0::1;8916:4;8891:29;::::0;;8936:27;::::1;::::0;8891:22;8936:27:::1;-1:-1:-1::0;8981:4:0::1;8724:270:::0;;;:::o;934:432::-;992:9;1238:6;1234:47;;-1:-1:-1;1268:1:0;1261:8;;1234:47;-1:-1:-1;1305:5:0;;;1309:1;1305;:5;:1;1328:5;;;;;:10;1321:18;;;2089:147;2147:7;2179:5;;;2202:6;;;;2195:14;;;;2227:1;2089:147;-1:-1:-1;;;2089:147:0:o;7366:1065::-;7508:10;7491:28;;;;:16;:28;;;;;;;;;7475:53;;;;;;;;;;;-1:-1:-1;;7475:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;7436:13;;7475:53;;;;7491:28;7475:53;;7491:28;7475:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7475:53:0;;;:15;:53::i;:::-;:99;;;;7533:11;:41;7545:19;7565:7;7545:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7545:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7545:28:0;;;;;;;;;;;;;;;;-1:-1:-1;7545:28:0;;;;;;;;;;;;;-1:-1:-1;;;;;7545:28:0;7533:41;;;;;;;;-1:-1:-1;7533:41:0;-1:-1:-1;7533:41:0;;;;7532:42;;-1:-1:-1;7475:99:0;7472:196;;;7591:37;;;;;;;;;;;-1:-1:-1;;;7591:37:0;;;;;;;7608:10;-1:-1:-1;7591:28:0;;;:16;:28;;;;;;;:37;;;;;;:::i;:::-;-1:-1:-1;;7643:13:0;;;;;;;;;;;;-1:-1:-1;;;7643:13:0;;;;;;7472:196;7692:28;7708:7;7692:28;;;;;;;;;;;;:15;:28::i;:::-;7691:29;:81;;;;-1:-1:-1;7757:10:0;7740:28;;;;:16;:28;;;;;;;;;7724:48;;;;;;-1:-1:-1;;7724:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7740:28;7724:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:48::i;:::-;7691:179;;;;;7842:19;7862:7;7842:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7842:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7842:28:0;;;;;;;;;;;;;;;;-1:-1:-1;7842:28:0;;;;;;;;;;;;;;-1:-1:-1;;7691:179:0;7688:358;;;7922:10;-1:-1:-1;;;;;7890:42:0;:19;7910:7;7890:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7890:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7890:28:0;;;;;;;;;;;;;;;;-1:-1:-1;7890:28:0;;;;;;;;;;;-1:-1:-1;;;;;7890:28:0;:42;;;;7887:95;;-1:-1:-1;7887:95:0;;-1:-1:-1;7887:95:0;-1:-1:-1;7953:13:0;;;;;;;;;;;;-1:-1:-1;;;7953:13:0;;;;;;7887:95;8013:10;7996:28;;;;:16;:28;;;;;;;;:38;;;;;;;;:::i;:::-;;7688:358;8061:27;8077:7;8061:27;;;;;;;;;;;;:15;:27::i;:::-;:80;;;;-1:-1:-1;8126:10:0;8109:28;;;;:16;:28;;;;;;;;;8093:48;;;;;;-1:-1:-1;;8093:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8109:28;8093:48;;;;;;;;;;;;;;;;;;;;;;;;;8092:49;8061:80;8058:150;;;8185:10;8168:28;;;;:16;:28;;;;;;;;;8158:38;;;;;;-1:-1:-1;;8158:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8168:28;;8158:38;;8168:28;8158:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8058:150;8232:27;8248:7;8232:27;;;;;;;;;;;;:15;:27::i;:::-;:60;;;;8264:19;8284:7;8264:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8264:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8264:28:0;;;;;;;;;;;;;;;;-1:-1:-1;8264:28:0;;;;;;;;;;;;;8263:29;;-1:-1:-1;;8232:60:0;8229:160;;;8309:37;;;;;;;;;;;-1:-1:-1;;;8309:37:0;;;;;;;8326:10;-1:-1:-1;8309:28:0;;;:16;:28;;;;;;;:37;;;;;;:::i;:::-;;8361:16;;;;;;;;;;;;;-1:-1:-1;;;8361:16:0;;;;;8229:160;-1:-1:-1;8416:7:0;7366:1065::o;23398:544::-;23491:31;23507:7;23491:31;;;;;;;;;;;;;-1:-1:-1;;;23491:31:0;;;:15;:31::i;:::-;23490:32;:77;;;;;23526:11;:41;23538:19;23558:7;23538:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23538:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23538:28:0;;;;;;;;;;;;;;;;-1:-1:-1;23538:28:0;;;;;;;;;;;;;-1:-1:-1;;;;;23538:28:0;23526:41;;;;;;;;-1:-1:-1;23526:41:0;-1:-1:-1;23526:41:0;;;;;-1:-1:-1;23490:77:0;23487:448;;;23584:19;23606:32;23636:1;23606:25;23617:13;;23606:6;:10;;:25;;;;:::i;:32::-;23661:5;;;23653:36;;23584:54;;-1:-1:-1;;;;;;23661:5:0;;23653:36;;;;;23584:54;;23653:36;;23661:5;23653:36;23584:54;23661:5;23653:36;;;;;;;;;;;;;;;;;;;;;23712:19;23732:7;23712:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23712:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23712:28:0;;;;;;;;;;;;;;;;-1:-1:-1;23712:28:0;;;;;;;;;;-1:-1:-1;;;;;23712:28:0;;23704:59;;;;;-1:-1:-1;23704:59:0;;-1:-1:-1;;23712:28:0;-1:-1:-1;23712:28:0;23704:59;23712:28;23704:59;;;;;;;;;;;;;;;;;;;;;23798:19;23818:7;23798:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23798:28:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23798:28:0;;;;;;;;;;;;;;;;-1:-1:-1;23798:28:0;;;;;;;;;;;;23783:57;;;;;-1:-1:-1;;;;;23798:28:0;;;;23783:57;;-1:-1:-1;23783:57:0;;;;;;;-1:-1:-1;23783:57:0;23487:448;;;;23881:5;;23908:13;;-1:-1:-1;;;;;23881:5:0;;;;23873:50;;23897:25;;:6;;:10;:25::i;:::-;23873:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23487:448;23398:544;;:::o;6811:202::-;6882:6;6870:9;:18;6867:139;;;6905:14;6922:21;:9;6936:6;6922:13;:21::i;:::-;6958:36;;6905:38;;-1:-1:-1;6966:10:0;;6958:36;;;;;6905:38;;6958:36;;;;6905:38;6966:10;6958:36;;;;;;;;;;;;;;;;;;;6867:139;6811:202;:::o;1467:295::-;1525:7;1753:1;1749;:5;;;;;;;1467:295;-1:-1:-1;;;1467:295:0:o;17313:262::-;17388:7;;;17439:103;17459:7;:14;17455:1;:18;17439:103;;;17506:24;17519:7;17527:1;17519:10;;;;;;;;;;;;;;17506:8;:12;;:24;;;;:::i;:::-;17495:35;-1:-1:-1;17475:3:0;;17439:103;;;-1:-1:-1;17559:8:0;17313:262;-1:-1:-1;;17313:262:0:o;1889:123::-;1947:7;1979:1;1974;:6;;1967:14;;;;-1:-1:-1;1999:5:0;;;1889:123::o;6027:573::-;6077:27;6121:7;6117:50;;-1:-1:-1;6145:10:0;;;;;;;;;;;;-1:-1:-1;;;6145:10:0;;;;;;6117:50;6186:2;6177:6;6218:69;6225:6;;6218:69;;6248:5;;6273:2;6268:7;;;;6218:69;;;6297:17;6327:3;6317:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6317:14:0;-1:-1:-1;6297:34:0;-1:-1:-1;6351:3:0;6365:198;6372:7;;6365:198;;-1:-1:-1;;6400:3:0;6418:10;6453:2;6448;:7;6458:2;6448:12;6443:2;:17;6432:2;:29;6418:44;;6477:9;6496:4;6489:12;;6477:24;;6526:2;6516:4;6521:1;6516:7;;;;;;;;;;;:12;-1:-1:-1;;;;;6516:12:0;;;;;;;;-1:-1:-1;6549:2:0;6543:8;;;;6365:198;;;;;-1:-1:-1;6587:4:0;6027:573;-1:-1:-1;;;;6027:573:0:o;15401:245::-;15484:4;15501:13;15544:2;15527:20;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15527:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15517:31;;;;;;15501:47;;15559:13;15602:2;15585:20;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15585:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15575:31;;;;;;15559:47;;15633:5;15624;:14;15617:21;;;;15401:245;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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