Contract 0x8dccba703e3ca40d3d50435a06637c577d36aafb 5

Contract Overview

Balance:
0.351666666666666526 AVAX

AVAX Value:
$8.01 (@ $22.78/AVAX)
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf143821f180a4ad8601e2244a776d97689950f2015cde317efbbfe99425b58a8Multi Value Toke...147786152022-05-16 16:51:5210 days 20 hrs ago0xf9903cde2bcd1ba98c609990662e53c0c0167741 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.044999999999999 AVAX0.0166297 25
0xbb710ab6ddc444b4687b228fe6285cba011249965d61ec81c21598686f7b11adMulti Value Toke...147780322022-05-16 16:32:2810 days 20 hrs ago0x3597ce96f9a3d00afdbb5ad79709990c26a2e9f7 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.016666666666666 AVAX0.0064522 25
0x319a7db3418f2a72e8345354215efb8e6a77d2546f3b7c46a51fbc9c457afd48Multi Value Toke...147730202022-05-16 13:45:3110 days 23 hrs ago0xb820338d9a178156f27b0b5cdec11493e8665f70 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.149999999999999 AVAX0.050247025 25
0xf011d5029fa3ae5a31742335aee71679fe5031b82b91efb90b6eda6267c5b404Multi Value Toke...147718272022-05-16 13:06:0211 days 19 mins ago0xd0d0bf0a5b31932dce9a6b362cddf1a6d629b5b7 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.043333333333333 AVAX0.012455175 25
0xcfe6997957196f352ba890904acfe3377836663f1730cdacf40e1f6f815a980aMulti Value Toke...147438452022-05-15 21:34:1911 days 15 hrs ago0xb820338d9a178156f27b0b5cdec11493e8665f70 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.179999999999999 AVAX0.03778805 25
0xe38ec158c0cf5c2e9c6280de481a844ba51661f14d216931cfa8cd4005901478Multi Value Toke...147437752022-05-15 21:31:5811 days 15 hrs ago0xef1c75698354e9cd34ce58a634b54bb9ad184812 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.218333333333333 AVAX0.06266665 25
0x7090afb851977e87f8d4f3a16bb77d1adc1fa3ab6e47974630256b55ce9772e2Multi Value Toke...147437722022-05-15 21:31:5211 days 15 hrs ago0xef1c75698354e9cd34ce58a634b54bb9ad184812 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.333333333333333 AVAX0.10754445 25
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238Multi Value Eth ...146141092022-05-12 21:27:4714 days 15 hrs ago0xe7a38d25b3d77d9bfe395b4b744470fa51a6601c IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb133.124999999999999 AVAX0.053133619478 58.481649348
0x38d6b6215d9cf2abf0c7dde926ac59bf8b3375f799765e6045557d6d81565012Multi Value Toke...145144562022-05-10 14:15:1416 days 23 hrs ago0x096fa51e5a7c5461c86b53c8f5efbd9b744371e9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.326666666666666 AVAX0.37522172637 103.115101165
0x5cdde86826a54c4050dffe466de3678cb6da2238a6172b9283c1b4ae0a213845Multi Value Toke...144562872022-05-09 5:14:4218 days 8 hrs ago0xb820338d9a178156f27b0b5cdec11493e8665f70 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.114077951242 44.601056652
0x843210930757ad7403e637e929c6c210ec9e078398f2b6d511950dcc4099e142Multi Value Toke...144547832022-05-09 4:23:1218 days 9 hrs ago0xa176b5ee88d20846c3079eb7d91628b0b74ffcc9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.223333333333333 AVAX0.139475874388 37.526037186
0x794686b20eba3c99e294d56a2d0913d99bbc0adc0e0149cfc950e5adc1860ca1Multi Value Toke...144547652022-05-09 4:22:3318 days 9 hrs ago0xa176b5ee88d20846c3079eb7d91628b0b74ffcc9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.249999999999999 AVAX0.152571936001 37.526037186
0x0fc6996901cd757ee2816050797b4b568e58acd888829c62afdfd28c05d7f9e4Multi Value Toke...144547562022-05-09 4:22:1618 days 9 hrs ago0xa176b5ee88d20846c3079eb7d91628b0b74ffcc9 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.249999999999999 AVAX0.154045170695 37.526037186
0x5a2ad35f56b1cefb1a1d3c2940ddd33bef5f2f32e54fada554c7f5fd93003d33Multi Value Toke...144445552022-05-08 22:31:3618 days 14 hrs ago0xabd53869c56fc940462bf37fd1f20f59fb0c8942 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.218333333333333 AVAX0.640891006905 180.285559823
0xd8ee893857e4d334685989697c7bd9d7ae678360fa477fe19535cdc2870fd300Multi Value Toke...144445532022-05-08 22:31:3218 days 14 hrs ago0xabd53869c56fc940462bf37fd1f20f59fb0c8942 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.333333333333333 AVAX0.864023954018 180.285559823
0x1416cc23564e479f81c086f57806b300c86876f1854e71c7c56bedaa6674169dMulti Value Toke...143954992022-05-07 17:41:0319 days 19 hrs ago0xa50f89381301decb11f1918586f98c5f2077e3ca IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.154999999999999 AVAX0.118456279098 45.830259096
0xd6a515befb0ac7bfdff7699c6eb6b7cb272bede60f4ee3bc484a556fb7faf657Multi Value Toke...143954972022-05-07 17:40:5919 days 19 hrs ago0xa50f89381301decb11f1918586f98c5f2077e3ca IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.249999999999999 AVAX0.193797558631 45.830259096
0xe57357ec48c7821f55d611d47c1712405fbbef9e4528ebc8e5e45ff4726e3b42Multi Value Toke...142357032022-05-03 22:01:2423 days 15 hrs ago0x83c93e4e25549191425e2c0c22a68a9206ac39af IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.133480134787 89.354539811
0xcbafc516e3247ea02de07af5511a90c8897149ec9ab317766265953ad9b5bec0Multi Value Toke...142357032022-05-03 22:01:2423 days 15 hrs ago0x83c93e4e25549191425e2c0c22a68a9206ac39af IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.425075361634 89.354539811
0x9a1a41eefd806dd7d8e87c4bc2e8f13bf7b55fd0c14af7ce8988169698fe5048Multi Value Toke...142097802022-05-03 7:08:4924 days 6 hrs ago0x83c93e4e25549191425e2c0c22a68a9206ac39af IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.104730378709 70.108820378
0x0cc1f02a12fd89aad867f23dacd3d626b94d2fd1aca3fef05d4be1838f9473c8Multi Value Toke...142097802022-05-03 7:08:4924 days 6 hrs ago0x83c93e4e25549191425e2c0c22a68a9206ac39af IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.334718928627 70.108820378
0x5bc1b848918083727af7c1d6baa40a988fee76255495eccdaa4d050cf1d92b5fMulti Value Toke...141475922022-05-01 19:44:1025 days 17 hrs ago0x29db702186ce4397a4ff9396835851f9667b3082 IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.268333333333333 AVAX0.230754096329 61.919515539
0x68c901a1b538d5d7fbbc99c0a9cf4f4dde6489613c06f531518c637b33b01506Multi Value Toke...141465642022-05-01 19:09:2325 days 18 hrs ago0x10bde4a513e26e25b30402458d60febd02c99c8d IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.164999999999999 AVAX0.161370193228 53.917687576
0x41dfb331e3bfb61e73d56358218e599acac88ccd874aa210e673747ea6bbb3a7Multi Value Toke...140512202022-04-29 12:39:2028 days 46 mins ago0x9de4e8f00ff3c0d0bcb148d2bfd61da54339bd5a IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0 AVAX0.011278864818 51.264305085
0xb5731d27288fd96c3a0a8e11c7ec9ca39a42bf3f0ebbfe82d5baab37a8d91cf5Multi Value Toke...140215892022-04-28 19:35:5228 days 17 hrs ago0xa50f89381301decb11f1918586f98c5f2077e3ca IN  0x8dccba703e3ca40d3d50435a06637c577d36aafb0.323333333333333 AVAX0.128792011375 30.149043686
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf143821f180a4ad8601e2244a776d97689950f2015cde317efbbfe99425b58a8147786152022-05-16 16:51:5210 days 20 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.044999999999999982 AVAX
0xbb710ab6ddc444b4687b228fe6285cba011249965d61ec81c21598686f7b11ad147780322022-05-16 16:32:2810 days 20 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.01666666666666666 AVAX
0x319a7db3418f2a72e8345354215efb8e6a77d2546f3b7c46a51fbc9c457afd48147730202022-05-16 13:45:3110 days 23 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.14999999999999994 AVAX
0xf011d5029fa3ae5a31742335aee71679fe5031b82b91efb90b6eda6267c5b404147718272022-05-16 13:06:0211 days 19 mins ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.043333333333333316 AVAX
0xcfe6997957196f352ba890904acfe3377836663f1730cdacf40e1f6f815a980a147438452022-05-15 21:34:1911 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.179999999999999928 AVAX
0xe38ec158c0cf5c2e9c6280de481a844ba51661f14d216931cfa8cd4005901478147437752022-05-15 21:31:5811 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.218333333333333246 AVAX
0x7090afb851977e87f8d4f3a16bb77d1adc1fa3ab6e47974630256b55ce9772e2147437722022-05-15 21:31:5211 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x210efca155797119a5b0f1cfde64ca1fe55ec5440.3333333333333332 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x92bc456e51f6c20cd6a312121f6c5cd44bfcbc3a0.23 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x2ff3331f9a99232a14fb940eebc9898e985e4df80.23 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x0fd8567318c59265598439d646ab92b4b17c6c4b0.23 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xe7e1f091a80a348154897a6164e398819356a7120.23 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x3a1a698f11d0dc8144d24f3e47a0695968329d070.24 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x080ccd7af5cae41023c85b3c4fd8d4842fba38ab0.25 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xec17778e9d71115b333964d2fc886a02c71213fd0.27000000000000003 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xc9bc35ec522ba9728d14e49df5c307510339f69e0.27000000000000003 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x3fdf2b9202d09820d87f554471331ddc20c662fc0.27000000000000003 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x882b8317e30a4a3a90902962e69e2889e4dd55e20.29 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x357659de5427e98dc2e9a50a81ebdb0cccfd368d0.29 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x12ea5a1eed6c6df135e358892e6ad49faef0b7420.31 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x4c3363779d60b78f97de19c7e9f90d6d7088535c0.33 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x6862bed288cacefd55357a4d91fb46712294db120.34 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x2dc762aa0c31deeb1b8c9ceb46543eb18175bdad0.35 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x5c8a014ef57f5649d95fce6ced4ac9005a6af8ab0.38 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0xcc9869fca6341056e7a0600b3d1239754ae1e2700.38 AVAX
0x1d5d88a3b8b66e7e442563ea7677efea2959921c32c45f9a5ee27d1618ef4238146141092022-05-12 21:27:4714 days 15 hrs ago 0x8dccba703e3ca40d3d50435a06637c577d36aafb0x509a70df509104a553b379d5ad5a9ea40fdc1f3b0.4 AVAX
[ 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 snowtrace.io on 2021-12-17
*/

/***
 *   _____                  _          __  __       _ _   _                    _           
 *  / ____|                | |        |  \/  |     | | | (_)                  | |          
 * | |     _ __ _   _ _ __ | |_ ___   | \  / |_   _| | |_ _ ___  ___ _ __   __| | ___ _ __ 
 * | |    | '__| | | | '_ \| __/ _ \  | |\/| | | | | | __| / __|/ _ \ '_ \ / _` |/ _ \ '__|
 * | |____| |  | |_| | |_) | || (_) | | |  | | |_| | | |_| \__ \  __/ | | | (_| |  __/ |   
 *  \_____|_|   \__, | .__/ \__\___/  |_|  |_|\__,_|_|\__|_|___/\___|_| |_|\__,_|\___|_|   
 *               __/ | |                                                                   
 *             |___/|_|                                                                   
 *        
 * 
 * @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 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"}]

608060405234801561001057600080fd5b50600080546001600160a01b03191633179055612710600955655af3107a4000600a556703782dace9d900006008556133d78061004e6000396000f3fe6080604052600436106101a05760003560e01c80638da5cb5b116100ec578063e8a05d4c1161008a578063f53289ca11610064578063f53289ca14610ae1578063f8fa4d1714610c1f578063f9727e1d14610dd7578063fec5c0c614610e01576101aa565b8063e8a05d4c14610a3e578063ea7ee01014610a71578063f2fde38b14610aac576101aa565b8063adc76126116100c6578063adc76126146108f1578063b186768514610924578063bcdd1e1314610957578063cfab2bb31461099a576101aa565b80638da5cb5b146108b257806390d419d1146108c7578063a39a2b76146108dc576101aa565b80634a4a2feb11610159578063590925e211610133578063590925e2146105f557806362920c85146106c25780636cca7d3c1461086a578063893d20e81461089d576101aa565b80634a4a2feb146104595780634fa8518614610501578063503ad00e14610534576101aa565b806318f20763146101af57806323a0fb02146102f15780632c4e722e1461032457806334fcf4371461034b5780633b9ff843146103755780633d2375f9146103a8576101aa565b366101aa57600080fd5b600080fd5b6102dd600480360360608110156101c557600080fd5b810190602081018135600160201b8111156101df57600080fd5b8201836020820111156101f157600080fd5b803590602001918460208302840111600160201b8311171561021257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561026957600080fd5b82018360208201111561027b57600080fd5b803590602001918460018302840111600160201b8311171561029c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e34945050505050565b604080519115158252519081900360200190f35b3480156102fd57600080fd5b506102dd6004803603602081101561031457600080fd5b50356001600160a01b0316610fe5565b34801561033057600080fd5b50610339611007565b60408051918252519081900360200190f35b34801561035757600080fd5b506102dd6004803603602081101561036e57600080fd5b503561100d565b34801561038157600080fd5b506102dd6004803603602081101561039857600080fd5b50356001600160a01b03166110d3565b3480156103b457600080fd5b506102dd600480360360208110156103cb57600080fd5b810190602081018135600160201b8111156103e557600080fd5b8201836020820111156103f757600080fd5b803590602001918460018302840111600160201b8311171561041857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061130f945050505050565b34801561046557600080fd5b5061048c6004803603602081101561047c57600080fd5b50356001600160a01b031661132f565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c65781810151838201526020016104ae565b50505050905090810190601f1680156104f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050d57600080fd5b506102dd6004803603602081101561052457600080fd5b50356001600160a01b03166113ca565b34801561054057600080fd5b506102dd6004803603604081101561055757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561058157600080fd5b82018360208201111561059357600080fd5b803590602001918460018302840111600160201b831117156105b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113df945050505050565b34801561060157600080fd5b506106a66004803603602081101561061857600080fd5b810190602081018135600160201b81111561063257600080fd5b82018360208201111561064457600080fd5b803590602001918460018302840111600160201b8311171561066557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116e0945050505050565b604080516001600160a01b039092168252519081900360200190f35b6102dd600480360360608110156106d857600080fd5b810190602081018135600160201b8111156106f257600080fd5b82018360208201111561070457600080fd5b803590602001918460208302840111600160201b8311171561072557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561077457600080fd5b82018360208201111561078657600080fd5b803590602001918460208302840111600160201b831117156107a757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156107f657600080fd5b82018360208201111561080857600080fd5b803590602001918460018302840111600160201b8311171561082957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611706945050505050565b34801561087657600080fd5b506103396004803603602081101561088d57600080fd5b50356001600160a01b031661191b565b3480156108a957600080fd5b506106a661192d565b3480156108be57600080fd5b506106a661193c565b3480156108d357600080fd5b5061033961194b565b3480156108e857600080fd5b50610339611951565b3480156108fd57600080fd5b506103396004803603602081101561091457600080fd5b50356001600160a01b0316611957565b34801561093057600080fd5b5061048c6004803603602081101561094757600080fd5b50356001600160a01b031661199e565b34801561096357600080fd5b506102dd6004803603606081101561097a57600080fd5b506001600160a01b03813581169160208101359091169060400135611a06565b6102dd600480360360208110156109b057600080fd5b810190602081018135600160201b8111156109ca57600080fd5b8201836020820111156109dc57600080fd5b803590602001918460018302840111600160201b831117156109fd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611b58945050505050565b348015610a4a57600080fd5b506102dd60048036036020811015610a6157600080fd5b50356001600160a01b0316612058565b348015610a7d57600080fd5b5061033960048036036040811015610a9457600080fd5b506001600160a01b038135811691602001351661206d565b348015610ab857600080fd5b50610adf60048036036020811015610acf57600080fd5b50356001600160a01b03166120f6565b005b6102dd60048036036080811015610af757600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610b2157600080fd5b820183602082011115610b3357600080fd5b803590602001918460208302840111600160201b83111715610b5457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092958435959094909350604081019250602001359050600160201b811115610bab57600080fd5b820183602082011115610bbd57600080fd5b803590602001918460018302840111600160201b83111715610bde57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121c9945050505050565b6102dd60048036036080811015610c3557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610c5f57600080fd5b820183602082011115610c7157600080fd5b803590602001918460208302840111600160201b83111715610c9257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ce157600080fd5b820183602082011115610cf357600080fd5b803590602001918460208302840111600160201b83111715610d1457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610d6357600080fd5b820183602082011115610d7557600080fd5b803590602001918460018302840111600160201b83111715610d9657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506123f3945050505050565b348015610de357600080fd5b506102dd60048036036020811015610dfa57600080fd5b50356125d7565b348015610e0d57600080fd5b506102dd60048036036020811015610e2457600080fd5b50356001600160a01b031661267c565b600080610e4d600a54865161278590919063ffffffff16565b90506000610e6f82610e6988518861278590919063ffffffff16565b906127aa565b90508034101580610e8f57503360009081526002602052604090205460ff165b610eca5760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b610ed3846127c0565b3360009081526002602052604090205490945060ff16610ef857610ef8865185612d83565b610f0181613012565b60005b8651811015610f905760006001600160a01b0316878281518110610f2457fe5b60200260200101516001600160a01b031614610f8857868181518110610f4657fe5b60200260200101516001600160a01b03166108fc879081150290604051600060405180830381858888f19350505050158015610f86573d6000803e3d6000fd5b505b600101610f04565b50855133907f96280f1b9a54271a5ff3d2bc027d857d9386da43de7540d42b8b73180a15864a90610fc18882612785565b6040805192835260208301919091528051918290030190a250600195945050505050565b6001600160a01b0381166000908152600160205260409020546064115b919050565b60095481565b600080546001600160a01b031633146110575760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b60095482141580156110695750600082115b61107257600080fd5b600954604080519182526020820184905280517f4ac9052a820bf4f8c02d7588587cae835573b5b99ea7ad4ca002f17f319f71869281900390910190a16009829055670de0b6b3a76400006110c78184613059565b600a5550600192915050565b600080546001600160a01b0316331461111d5760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526003602052604090205460ff1661114257600080fd5b6001600160a01b0382166000908152600360209081526040808320805460ff191690556006909152808220905181546004929190819083906002600019600183161561010002019091160480156111d05780601f106111ae5761010080835404028352918201916111d0565b820191906000526020600020905b8154815290600101906020018083116111bc575b50509283525050604080516020928190038301812080546001600160a01b0319166001600160a01b0395861617905592851660009081526006909252902080549091908190839060026101006001831615026000190190911604801561126d5780601f1061124b57610100808354040283529182019161126d565b820191906000526020600020905b815481529060010190602001808311611259575b505060405190819003812092506001600160a01b03851691507f4ddc7b8659a2faf8698c810ab0219aa981bfccb47c036d3cc7ae8a32c15dc4ec90600090a3604080518082018252601e81527f4e6f206c6f6e67657220616e20616666696c6961746520706172746e6572000060208083019182526001600160a01b038616600090815260069091529290922090516113069290613297565b50600192915050565b805160208183018101805160058252928201919093012091525460ff1681565b60066020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156113c25780601f10611397576101008083540402835291602001916113c2565b820191906000526020600020905b8154815290600101906020018083116113a557829003601f168201915b505050505081565b60036020526000908152604090205460ff1681565b600080546001600160a01b031633146114295760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03831660009081526003602052604090205460ff1615611497576040805162461bcd60e51b815260206004820181905260248201527f4164647265737320697320616c726561647920616e20616666696c696174652e604482015290519081900360640190fd5b6001600160a01b0383166114aa57600080fd5b6005826040518082805190602001908083835b602083106114dc5780518252601f1990920191602091820191016114bd565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611519905057600080fd5b60016005836040518082805190602001908083835b6020831061154d5780518252601f19909201916020918201910161152e565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520805496151560ff199788161790556001600160a01b038916600090815260038352208054909516600117909455505083518592600492869290918291908401908083835b602083106115de5780518252601f1990920191602091820191016115bf565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820190942080546001600160a01b0319166001600160a01b03968716179055938716600090815260068552929092208551611648949193509086019150613297565b50816040518082805190602001908083835b602083106116795780518252601f19909201916020918201910161165a565b5181516020939093036101000a6000190180199091169216919091179052604051920182900382209350506001600160a01b03861691507ff30f92c3d1eddb3772622c3b7d6a3985a8de818f7eebd5cef6650ee86d5ddbce90600090a35060015b92915050565b80516020818301810180516004825292820191909301209152546001600160a01b031681565b600082518451146117485760405162461bcd60e51b81526004018080602001828103825260338152602001806133476033913960400191505060405180910390fd5b60006117538461306c565b9050600061176d600a54875161278590919063ffffffff16565b9050600061177b83836127aa565b9050803410158061179b57503360009081526002602052604090205460ff165b6117d65760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b6117df856127c0565b3360009081526002602052604090205490955060ff1661180457611804875186612d83565b61180d81613012565b60005b87518110156118d05760006001600160a01b031688828151811061183057fe5b60200260200101516001600160a01b0316141580156118625750600087828151811061185857fe5b6020026020010151115b156118c85787818151811061187357fe5b60200260200101516001600160a01b03166108fc88838151811061189357fe5b60200260200101519081150290604051600060405180830381858888f193505050501580156118c6573d6000803e3d6000fd5b505b600101611810565b5086516040805191825260208201859052805133927f96280f1b9a54271a5ff3d2bc027d857d9386da43de7540d42b8b73180a15864a92908290030190a25060019695505050505050565b60016020526000908152604090205481565b6000546001600160a01b031690565b6000546001600160a01b031681565b60085481565b600a5481565b600061196282610fe5565b15611996576001600160a01b03821660009081526001602052604090205460649061198e9082906130b1565b915050611002565b506000919050565b60076020908152600091825260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156113c25780601f10611397576101008083540402835291602001916113c2565b600080546001600160a01b03163314611a505760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03841615801590611a7057506001600160a01b03831615155b8015611a7c5750600082115b611a8557600080fd5b6040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151869283169163a9059cbb9160448083019260209291908290030181600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b505050506040513d6020811015611b0257600080fd5b5050604080516001600160a01b0380881682528616602082015280820185905290517ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d9181900360600190a1506001949350505050565b3360009081526002602052604081205460ff1615611bbd576040805162461bcd60e51b815260206004820152601f60248201527f497320616c7265616479207072656d69756d4d656d626572206d656d62657200604482015290519081900360640190fd5b600854341015611bce6008546130c3565b611bd7346130c3565b6040516020018080750383932b6b4bab6a6b2b6b132b9103332b29034b99d160551b81525060160183805190602001908083835b60208310611c2a5780518252601f199092019160209182019101611c0b565b51815160209384036101000a60001901801990921691161790527f2e204e6f7420656e6f756768204554482073656e742e20000000000000000000919093019081528451601790910192850191508083835b60208310611c9b5780518252601f199092019160209182019101611c7c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290611d595760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50336000908152600260205260409020805460ff19166001179055611d7d826127c0565b9150611d8a600854613012565b611db082604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b158015611e395750600360006004846040518082805190602001908083835b60208310611dee5780518252601f199092019160209182019101611dcf565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff1690505b15611fe8576000546008546001600160a01b03909116906108fc90611e6c90606490611e66906050612785565b90613059565b6040518115909202916000818181858888f19350505050158015611e94573d6000803e3d6000fd5b506000611eb26064611e66601460085461278590919063ffffffff16565b90506004836040518082805190602001908083835b60208310611ee65780518252601f199092019160209182019101611ec7565b51815160209384036101000a600019018019909216911617905292019485525060405193849003018320546001600160a01b0316926108fc85150292508491506000818181858888f19350505050158015611f45573d6000803e3d6000fd5b506004836040518082805190602001908083835b60208310611f785780518252601f199092019160209182019101611f59565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205486865290516001600160a01b03909116947f885e6f6235626292940f78c947a331f4c7c1d7f50a48b38092cf546bc9c7907a94508190039091019150a250612025565b600080546008546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015612023573d6000803e3d6000fd5b505b60405133907fc6b9fca7b2e1cbd5b69b197ea298ab7dc0c58d469fc42acebdd4d38acb00951590600090a2506001919050565b60026020526000908152604090205460ff1681565b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915160009284929083169163dd62ed3e91604480820192602092909190829003018186803b1580156120c257600080fd5b505afa1580156120d6573d6000803e3d6000fd5b505050506040513d60208110156120ec57600080fd5b5051949350505050565b6000546001600160a01b0316331461213f5760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b0381161580159061216557506000546001600160a01b03828116911614155b61216e57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600a548351600091869183916121df9190612785565b905080341015806121f457506121f487610fe5565b8061220e57503360009081526002602052604090205460ff165b6122495760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b61225281613012565b61225b846127c0565b935060005b86518110156123325760006001600160a01b031687828151811061228057fe5b60200260200101516001600160a01b03161461232a57826001600160a01b03166323b872dd338984815181106122b257fe5b6020026020010151896040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b505050505b600101612260565b5061233c87610fe5565b156123835785516001600160a01b038816600090815260016020526040902054612365916127aa565b6001600160a01b0388166000908152600160205260409020556123a5565b3360009081526002602052604090205460ff166123a5576123a5865185612d83565b855160408051918252516001600160a01b0389169133917f39015fe519110ce3ccad418b153817407dc5312684839c8700af7436a80a07af9181900360200190a35060019695505050505050565b815183516000918691146124385760405162461bcd60e51b81526004018080602001828103825260338152602001806133476033913960400191505060405180910390fd5b6000612450600a54875161278590919063ffffffff16565b90508034101580612465575061246587610fe5565b8061247f57503360009081526002602052604090205460ff165b6124ba5760405162461bcd60e51b81526004018080602001828103825260258152602001806133226025913960400191505060405180910390fd5b6124c381613012565b6124cc846127c0565b935060005b86518110156123325760006001600160a01b03168782815181106124f157fe5b60200260200101516001600160a01b0316141580156125235750600086828151811061251957fe5b6020026020010151115b156125cf57826001600160a01b03166323b872dd3389848151811061254457fe5b602002602001015189858151811061255857fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156125b657600080fd5b505af11580156125ca573d6000803e3d6000fd5b505050505b6001016124d1565b600080546001600160a01b031633146126215760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b60008211801561263357506008548214155b61263c57600080fd5b60088290556040805183815290517fa77eb4a199fa90085e9d7437273dd3bc924372a4bd0569aa21acc65a07b2c11c9181900360200190a1506001919050565b600080546001600160a01b031633146126c65760405162461bcd60e51b815260040180806020018281038252602881526020018061337a6028913960400191505060405180910390fd5b6001600160a01b03821660009081526002602052604090205460ff1615612734576040805162461bcd60e51b815260206004820152601f60248201527f497320616c7265616479207072656d69756d4d656d626572206d656d62657200604482015290519081900360640190fd5b6001600160a01b038216600081815260026020526040808220805460ff19166001179055517fc6b9fca7b2e1cbd5b69b197ea298ab7dc0c58d469fc42acebdd4d38acb0095159190a2506001919050565b600082612794575060006116da565b50818102818382816127a257fe5b04146116da57fe5b6000828201838110156127b957fe5b9392505050565b336000908152600760209081526040918290208054835160026001831615610100026000190190921691909104601f81018490048402820184019094528381526060936128829391929183018282801561285b5780601f106128305761010080835404028352916020019161285b565b820191906000526020600020905b81548152906001019060200180831161283e57829003601f168201915b5050505050604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b8061290a5750600360006004846040518082805190602001908083835b602083106128be5780518252601f19909201916020918201910161289f565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff161590505b156129695760408051808201825260048152631d9bda5960e21b602080830191825233600090815260079091529290922090516129479290613297565b50506040805180820190915260048152631d9bda5960e21b6020820152611002565b61298282604051806020016040528060008152506131a5565b158015612a3b57503360009081526007602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612a3b9392830182828015612a215780601f106129f657610100808354040283529160200191612a21565b820191906000526020600020905b815481529060010190602001808311612a0457829003601f168201915b5050505050604051806020016040528060008152506131a5565b8015612aa757506005826040518082805190602001908083835b60208310612a745780518252601f199092019160209182019101612a55565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b15612b6d57336001600160a01b03166004836040518082805190602001908083835b60208310612ae85780518252601f199092019160209182019101612ac9565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220546001600160a01b031692909214159150612b4b905057506040805180820190915260048152631d9bda5960e21b6020820152611002565b3360009081526007602090815260409091208351612b6b92850190613297565b505b612b8682604051806020016040528060008152506131a5565b8015612bfb57503360009081526007602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452612bf99392830182828015612a215780601f106129f657610100808354040283529160200191612a21565b155b15612c9c573360009081526007602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529091830182828015612c945780601f10612c6957610100808354040283529160200191612c94565b820191906000526020600020905b815481529060010190602001808311612c7757829003601f168201915b505050505091505b612cb582604051806020016040528060008152506131a5565b80612d2157506005826040518082805190602001908083835b60208310612ced5780518252601f199092019160209182019101612cce565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b15612d7f5760408051808201825260048152631d9bda5960e21b60208083019182523360009081526007909152929092209051612d5e9290613297565b50604051806040016040528060048152602001631d9bda5960e21b81525091505b5090565b612da981604051806040016040528060048152602001631d9bda5960e21b8152506131a5565b158015612e325750600360006004836040518082805190602001908083835b60208310612de75780518252601f199092019160209182019101612dc8565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420546001600160a01b0316855284019490945250016000205460ff1690505b15612fc3576000612e536002611e66600a548661278590919063ffffffff16565b600080546040519293506001600160a01b03169183156108fc0291849190818181858888f19350505050158015612e8e573d6000803e3d6000fd5b506004826040518082805190602001908083835b60208310612ec15780518252601f199092019160209182019101612ea2565b51815160209384036101000a600019018019909216911617905292019485525060405193849003018320546001600160a01b0316926108fc85150292508491506000818181858888f19350505050158015612f20573d6000803e3d6000fd5b506004826040518082805190602001908083835b60208310612f535780518252601f199092019160209182019101612f34565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185205486865290516001600160a01b03909116947f885e6f6235626292940f78c947a331f4c7c1d7f50a48b38092cf546bc9c7907a94508190039091019150a25061300e565b600054600a546001600160a01b03909116906108fc90612fe4908590612785565b6040518115909202916000818181858888f1935050505015801561300c573d6000803e3d6000fd5b505b5050565b8034111561305657600061302634836130b1565b604051909150339082156108fc029083906000818181858888f1935050505015801561300c573d6000803e3d6000fd5b50565b600081838161306457fe5b049392505050565b600080805b83518110156130aa576130a084828151811061308957fe5b6020026020010151836127aa90919063ffffffff16565b9150600101613071565b5092915050565b6000828211156130bd57fe5b50900390565b6060816130e857506040805180820190915260018152600360fc1b6020820152611002565b8160005b811561310057600101600a820491506130ec565b60608167ffffffffffffffff8111801561311957600080fd5b506040519080825280601f01601f191660200182016040528015613144576020820181803683370190505b509050815b851561319c57600019016000600a8704600a028703603001905060008160f81b90508084848151811061317857fe5b60200101906001600160f81b031916908160001a905350600a880497505050613149565b50949350505050565b600080836040516020018082805190602001908083835b602083106131db5780518252601f1990920191602091820191016131bc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506000836040516020018082805190602001908083835b6020831061324d5780518252601f19909201916020918201910161322e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090508082149250505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106132d857805160ff1916838001178555613305565b82800160010185558215613305579182015b828111156133055782518255916020019190600101906132ea565b50612d7f9291505b80821115612d7f576000815560010161330d56fe4e6f7420656e6f756768204554482073656e742077697468207472616e73616374696f6e21546f74616c206e756d626572206f6620726563697069656e747320616e642076616c75657320617265206e6f7420657175616c46756e6374696f6e207265737472696374656420746f206f776e6572206f6620636f6e7472616374a2646970667358221220fd28e7d808bef58708fdfb08f39a79c439ccbe4da9fb2fd43961f0035426a75a64736f6c634300060c0033

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://fd28e7d808bef58708fdfb08f39a79c439ccbe4da9fb2fd43961f0035426a75a
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.