Contract 0xC6717761438cd57bcCA1A024cF366467bfb5bb78

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x74693cfe1d9efac4de53cbe074b6df5255de777e03105d9621bc6e7755442c48Approve103448122021-08-25 19:02:15148 days 18 hrs ago0x28ff1ba6bcf20a2edecb5c74084cbd6e7a35a927 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0xe721ef115eaf12bc1a478df36415d571ede82fc274cf24925010fe0c02bf2131Approve102615092021-08-22 21:16:42151 days 16 hrs ago0xac35b8a566beca8ec35fabfe3a05e1daed26c930 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0xb7ed9f55c7d276946aec728c97d6ee28d737bbaef9f52ad0ac9393fced98c886Approve102596722021-08-22 19:44:51151 days 18 hrs ago0x8149d4fbc9076a673a27517505a556574425d0ec IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00088902
0x055c104b742d8015af5013d1bb75a434c7fc1a4a65cea47afe7340d4388d3007Approve102592872021-08-22 19:25:36151 days 18 hrs ago0x4ba05c2bbf28eac46c8fdb4b14f8771a6384cd75 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0x49b1d9e159f37bbfc5b9a9d28497f82b54760dd897a3367bbdf1731dd94c689cApprove102588132021-08-22 19:01:54151 days 18 hrs ago0xd14a04dd5d12e67864555d437a16529f49c66603 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0x3614279cb7a0372f8de52e95cf74f59fa7f57c4108cfa363d0ffcf158c29501eApprove102588002021-08-22 19:01:15151 days 18 hrs ago0x8966f08c1a33bc99fabcbdb3c56d7561970192cf IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0xedbc1218e292b4983a59238c096a91e20672d03f6607f882582f47d8de2c999bApprove102577502021-08-22 18:08:44151 days 19 hrs ago0xf111386b8c049c89b09be416ae1c79cc4a72d6b3 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0x0b0f4a94ac3192bb610b5c20c55a3d8ae945b6c55e963eb8b949b3007200a228Transfer102576992021-08-22 18:06:11151 days 19 hrs ago0x9fc279b891aab33c02e86b2f100863b37b22ba8a IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780.1 BNB0.0004211
0x81d41561c163976b36cbe53418f46928edac582bcb3e4578d39b08126a2d88f8Approve102571232021-08-22 17:37:10151 days 20 hrs ago0x83037d633813d101299a84e5b131e19305fdfd1d IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0xabbcea12c5a1aa6baf452507260daf01ce524f0d81ef9f225fd3914c06acc34cApprove102571212021-08-22 17:37:04151 days 20 hrs ago0x91c669e3645e1432b5a461d5f6a60a8fcd926fd0 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0x7fbaf5ac5e6baae92e24f30e2a1b6bf45209a04f6bdf3d65040543aa9d3ccbb5Approve102571162021-08-22 17:36:49151 days 20 hrs ago0xed6cffda212ac414c759921cb24015fe3e73cfd7 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0x21b87b6ebf06fd1e048168756dd6aaa2c3e86058fb067a657fc6c090f9b4b325Approve102571142021-08-22 17:36:43151 days 20 hrs ago0x84fdff6617114d1406b9e6dd07b49c7dde4fc460 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00044451
0x045f8b8983979540760b2c8c188945def12f784a17e4abd63e4a56301ab9a519Approve102546832021-08-22 15:35:10151 days 22 hrs ago0xf8c41f6f23ead836264d2ec38b50057d810c60b5 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0x4ed13115d00837407062a7887926e7c866611ccb6ced55400651922e6dac3b55Approve102524452021-08-22 13:43:16152 days 7 mins ago0x684ed72c89b2cc92c6a8488abedad1ac83d71bd8 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0xbb4faa3757b00de10f62c68867e1a83d42fc6d69b439961eee4367eaa518fd86Transfer102409122021-08-22 4:04:14152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00104926
0x181f63e2ed133e17a7822c05b652985fa2132c5b2b330c0f3f026f8e71713beaSet Is Tx Limit ...102409052021-08-22 4:03:53152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000230815
0x916669a269776f28d8d364a87839141234ba5d523687be40c2977f89ac10a7ccSet Is Tx Limit ...102409012021-08-22 4:03:41152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000230815
0x00dd1e1ff285a386c18ede1315b5d2a97e2232332d7ec651031b9dffeb653c10Set Is Fee Exemp...102408912021-08-22 4:03:11152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000230715
0xc4c04427ccd70e2664d386d007370622535a4e6604d8d21f993093370706ebf1Set Is Fee Exemp...102408862021-08-22 4:02:56152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000230715
0x91e55f1f163323ac2a9dc1229226b31adcc133b5c52cf367baa56a5cef16e91cSet Tx Limit102406612021-08-22 3:51:41152 days 9 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000153145
0x8b3f58a73b3e7c4e73377d0f67ce20aceab8d249a07c93d18ec878b6fb94d989Transfer102405862021-08-22 3:47:56152 days 10 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.0014133
0xd9150190ab118e1132a3d051272181d0afb5b9a44b346a9340175fe47ac8dbd3Set Fees102403552021-08-22 3:36:23152 days 10 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.00015882
0xd5d9a52c6ba1857cf0a7e508df03fb00eb74711cce7f9e324d23ee6c52e17f93Approve101161442021-08-17 19:24:31156 days 18 hrs ago0x4841535ee2592c380c630c3c59a09f5071faf443 IN  0xc6717761438cd57bcca1a024cf366467bfb5bb780 BNB0.000222255
0x4d06589188e26466f82ffe3e4b90d0d23714b02b00f09dabee8c9b5c984a163a0x60806040100671062021-08-16 2:23:59158 days 11 hrs ago0x86c93036e1bb60e7fc5c3ef170be0ec0ea866402 IN  Create: DontKYC0 BNB0.047878995
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x4d06589188e26466f82ffe3e4b90d0d23714b02b00f09dabee8c9b5c984a163a100671062021-08-16 2:23:59158 days 11 hrs ago 0xc6717761438cd57bcca1a024cf366467bfb5bb78  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DontKYC

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-08-16
*/

/**
                                                       
88888888ba,    88      a8P  8b        d8  ,ad8888ba,   
88      `"8b   88    ,88'    Y8,    ,8P  d8"'    `"8b  
88        `8b  88  ,88"       Y8,  ,8P  d8'            
88         88  88,d88'         "8aa8"   88             
88         88  8888"88,         `88'    88             
88         8P  88P   Y8b         88     Y8,            
88      .a8P   88     "88,       88      Y8a.    .a8P  
88888888Y"'    88       Y8b      88       `"Y8888Y"'   
                                                       

Don't Know Your Customer (DKYC) is the first anonymous cryptocurrency credit card built for Decentralized Finance (DeFi). 

Seamlessly connecting Smart Chain investing with real-world spending. 

| Website: https://dontkyc.com

| Telegram: https://t.me/DontKYC

| Twitter: https://twitter.com/DontKYC

*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

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

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

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

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

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

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

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

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

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

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

enum Permission {
    ChangeFees,
    Buyback,
    AdjustContractVariables,
    Authorize,
    Unauthorize,
    PauseUnpauseContract,
    BypassPause,
    LockPermissions,
    ExcludeInclude
}

/**
 * Allows for contract ownership along with multi-address authorization for different permissions
 */
abstract contract RSunAuth {
    struct PermissionLock {
        bool isLocked;
        uint64 expiryTime;
    }

    address public owner;
    mapping(address => mapping(uint256 => bool)) private authorizations; // uint256 is permission index
    
    uint256 constant NUM_PERMISSIONS = 10; // always has to be adjusted when Permission element is added or removed
    mapping(string => uint256) permissionNameToIndex;
    mapping(uint256 => string) permissionIndexToName;

    mapping(uint256 => PermissionLock) lockedPermissions;

    constructor(address owner_) {
        owner = owner_;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[owner_][i] = true;
        }

        permissionNameToIndex["ChangeFees"] = uint256(Permission.ChangeFees);
        permissionNameToIndex["Buyback"] = uint256(Permission.Buyback);
        permissionNameToIndex["AdjustContractVariables"] = uint256(Permission.AdjustContractVariables);
        permissionNameToIndex["Authorize"] = uint256(Permission.Authorize);
        permissionNameToIndex["Unauthorize"] = uint256(Permission.Unauthorize);
        permissionNameToIndex["PauseUnpauseContract"] = uint256(Permission.PauseUnpauseContract);
        permissionNameToIndex["BypassPause"] = uint256(Permission.BypassPause);
        permissionNameToIndex["LockPermissions"] = uint256(Permission.LockPermissions);
        permissionNameToIndex["ExcludeInclude"] = uint256(Permission.ExcludeInclude);

        permissionIndexToName[uint256(Permission.ChangeFees)] = "ChangeFees";
        permissionIndexToName[uint256(Permission.Buyback)] = "Buyback";
        permissionIndexToName[uint256(Permission.AdjustContractVariables)] = "AdjustContractVariables";
        permissionIndexToName[uint256(Permission.Authorize)] = "Authorize";
        permissionIndexToName[uint256(Permission.Unauthorize)] = "Unauthorize";
        permissionIndexToName[uint256(Permission.PauseUnpauseContract)] = "PauseUnpauseContract";
        permissionIndexToName[uint256(Permission.BypassPause)] = "BypassPause";
        permissionIndexToName[uint256(Permission.LockPermissions)] = "LockPermissions";
        permissionIndexToName[uint256(Permission.ExcludeInclude)] = "ExcludeInclude";
    }

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

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorizedFor(Permission permission) {
        require(!lockedPermissions[uint256(permission)].isLocked, "Permission is locked.");
        require(isAuthorizedFor(msg.sender, permission), string(abi.encodePacked("Not authorized. You need the permission ", permissionIndexToName[uint256(permission)]))); _;
    }

    /**
     * Authorize address for one permission
     */
    function authorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Authorize) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = true;
        emit AuthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Authorize address for multiple permissions
     */
    function authorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Authorize) {
        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = true;
            emit AuthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

    /**
     * Remove address' authorization
     */
    function unauthorizeFor(address adr, string memory permissionName) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        uint256 permIndex = permissionNameToIndex[permissionName];
        authorizations[adr][permIndex] = false;
        emit UnauthorizedFor(adr, permissionName, permIndex);
    }

    /**
     * Unauthorize address for multiple permissions
     */
    function unauthorizeForMultiplePermissions(address adr, string[] calldata permissionNames) public authorizedFor(Permission.Unauthorize) {
        require(adr != owner, "Can't unauthorize owner");

        for (uint256 i; i < permissionNames.length; i++) {
            uint256 permIndex = permissionNameToIndex[permissionNames[i]];
            authorizations[adr][permIndex] = false;
            emit UnauthorizedFor(adr, permissionNames[i], permIndex);
        }
    }

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

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, string memory permissionName) public view returns (bool) {
        return authorizations[adr][permissionNameToIndex[permissionName]];
    }

    /**
     * Return address' authorization status
     */
    function isAuthorizedFor(address adr, Permission permission) public view returns (bool) {
        return authorizations[adr][uint256(permission)];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public onlyOwner {
        address oldOwner = owner;
        owner = adr;
        for (uint256 i; i < NUM_PERMISSIONS; i++) {
            authorizations[oldOwner][i] = false;
            authorizations[owner][i] = true;
        }
        emit OwnershipTransferred(oldOwner, owner);
    }

    /**
     * Get the index of the permission by its name
     */
    function getPermissionNameToIndex(string memory permissionName) public view returns (uint256) {
        return permissionNameToIndex[permissionName];
    }
    
    /**
     * Get the time the timelock expires
     */
    function getPermissionUnlockTime(string memory permissionName) public view returns (uint256) {
        return lockedPermissions[permissionNameToIndex[permissionName]].expiryTime;
    }

    /**
     * Check if the permission is locked
     */
    function isLocked(string memory permissionName) public view returns (bool) {
        return lockedPermissions[permissionNameToIndex[permissionName]].isLocked;
    }

    /*
     *Locks the permission from being used for the amount of time provided
     */
    function lockPermission(string memory permissionName, uint64 time) public virtual authorizedFor(Permission.LockPermissions) {
        uint256 permIndex = permissionNameToIndex[permissionName];
        uint64 expiryTime = uint64(block.timestamp) + time;
        lockedPermissions[permIndex] = PermissionLock(true, expiryTime);
        emit PermissionLocked(permissionName, permIndex, expiryTime);
    }
    
    /*
     * Unlocks the permission if the lock has expired 
     */
    function unlockPermission(string memory permissionName) public virtual {
        require(block.timestamp > getPermissionUnlockTime(permissionName) , "Permission is locked until the expiry time.");
        uint256 permIndex = permissionNameToIndex[permissionName];
        lockedPermissions[permIndex].isLocked = false;
        emit PermissionUnlocked(permissionName, permIndex);
    }

    event PermissionLocked(string permissionName, uint256 permissionIndex, uint64 expiryTime);
    event PermissionUnlocked(string permissionName, uint256 permissionIndex);
    event OwnershipTransferred(address from, address to);
    event AuthorizedFor(address adr, string permissionName, uint256 permissionIndex);
    event UnauthorizedFor(address adr, string permissionName, uint256 permissionIndex);
}

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

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IBEP20 BUSD = IBEP20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    uint256 public minPeriod = 1 hours; // min 1 hour delay
    uint256 public minDistribution = 1 * (10 ** 18); // 1 BUSD minimum auto send

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

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

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

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BUSD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BUSD);

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

        uint256 amount = BUSD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

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

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

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

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

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

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

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

contract DontKYC is IBEP20, RSunAuth {
    using SafeMath for uint256;

    address BUSD = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56;
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "DontKYC";
    string constant _symbol = "DKYC";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10 * 10 ** 9 * (10 ** _decimals); // 10 billion
    uint256 public _maxTxAmount = _totalSupply / 1000; // 0.1%

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

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

    uint256 liquidityFee = 150;
    uint256 buybackFee = 300;
    uint256 reflectionFee = 200;
    uint256 marketingFee = 150;
    uint256 totalBuyFee = 800;
    uint256 totalSellFee = 1600;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address pancakeV2BNBPair;
    address[] public pairs;

    uint256 public launchedAt;

    uint256 buybackMultiplierNumerator = 150;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public feesOnNormalTransfers = false;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () RSunAuth(msg.sender) {
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        pancakeV2BNBPair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = ~uint256(0);

        pairs.push(pancakeV2BNBPair);
        distributor = new DividendDistributor(address(router));

        address owner_ = msg.sender;

        isFeeExempt[owner_] = true;
        isTxLimitExempt[owner_] = true;
        isDividendExempt[pancakeV2BNBPair] = true;
        isDividendExempt[address(this)] = true;
        isFeeExempt[address(this)] = true;
        isTxLimitExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = owner_;
        marketingFeeReceiver = owner_;

        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, amount);

        if(shouldSwapBack()){ swapBack(); }

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

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

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

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        if (isFeeExempt[sender] || isFeeExempt[recipient] || !launched()) return false;

        address[] memory liqPairs = pairs;

        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (sender == liqPairs[i] || recipient == liqPairs[i]) return true;
        }

        return feesOnNormalTransfers;
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return selling ? totalSellFee : totalBuyFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        uint totalFee = totalSellFee;
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(isSell(recipient))).div(feeDenominator);

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

        return amount.sub(feeAmount);
    }
        
    function isSell(address recipient) internal view returns (bool) {
        address[] memory liqPairs = pairs;
        for (uint256 i = 0; i < liqPairs.length; i++) {
            if (recipient == liqPairs[i]) return true;
        }
        return false;
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pancakeV2BNBPair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalBuyFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;

        uint256 balanceBefore = address(this).balance;

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

            uint256 amountBNB = address(this).balance.sub(balanceBefore);

            uint256 totalBNBFee = totalBuyFee.sub(dynamicLiquidityFee.div(2));

            uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
            uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
            uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

            try distributor.deposit{value: amountBNBReflection}() {} catch {}
            payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");

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

            emit SwapBackSuccess(amountToSwap);
        } catch Error(string memory e) {
            emit SwapBackFailed(string(abi.encodePacked("SwapBack failed with error ", e)));
        } catch {
            emit SwapBackFailed("SwapBack failed without an error message from pancakeSwap");
        }
    }

    function triggerBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorizedFor(Permission.Buyback) {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    function clearBuybackMultiplier() external authorizedFor(Permission.Buyback) {
        buybackMultiplierTriggeredAt = 0;
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        try router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }(
            0,
            path,
            to,
            block.timestamp
        ) {
            emit BoughtBack(amount, to);
        } catch Error(string memory reason) {
            revert(string(abi.encodePacked("Buyback failed with error ", reason)));
        } catch {
            revert("Buyback failed without an error message from pancakeSwap");
        }
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorizedFor(Permission.AdjustContractVariables) {
        require(numerator / denominator <= 3 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

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

    function launch() internal {
        launchedAt = block.number;
        emit Launched(block.number, block.timestamp);
    }

    function setTxLimit(uint256 amount) external authorizedFor(Permission.AdjustContractVariables) {
        require(amount >= _totalSupply / 2000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        require(holder != address(this) && holder != pancakeV2BNBPair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorizedFor(Permission.ExcludeInclude) {
        isTxLimitExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator, uint256 _totalSellFee) external authorizedFor(Permission.AdjustContractVariables) {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalBuyFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        totalSellFee = _totalSellFee;
        require(totalBuyFee <= feeDenominator / 10, "Buy fee too high");
        require(totalSellFee <= feeDenominator / 5, "Sell fee too high");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorizedFor(Permission.AdjustContractVariables) {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorizedFor(Permission.AdjustContractVariables) {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorizedFor(Permission.AdjustContractVariables) {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorizedFor(Permission.AdjustContractVariables) {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorizedFor(Permission.AdjustContractVariables) {
        require(gas <= 1000000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pancakeV2BNBPair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function claimDividend() external {
        distributor.claimDividend();
    }
    
    function addPair(address pair) external authorizedFor(Permission.AdjustContractVariables) {
        pairs.push(pair);
    }
    
    function removeLastPair() external authorizedFor(Permission.AdjustContractVariables) {
        pairs.pop();
    }
    
    function setFeesOnNormalTransfers(bool _enabled) external authorizedFor(Permission.AdjustContractVariables) {
        feesOnNormalTransfers = _enabled;
    }

    function setLaunchedAt(uint256 launched_) external authorizedFor(Permission.AdjustContractVariables) {
        launchedAt = launched_;
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
    event BoughtBack(uint256 amount, address to);
    event Launched(uint256 blockNumber, uint256 timestamp);
    event SwapBackSuccess(uint256 amount);
    event SwapBackFailed(string message);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"AuthorizedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"BoughtBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"expiryTime","type":"uint64"}],"name":"PermissionLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"PermissionUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SwapBackFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"string","name":"permissionName","type":"string"},{"indexed":false,"internalType":"uint256","name":"permissionIndex","type":"uint256"}],"name":"UnauthorizedFor","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"authorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"authorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","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":"string","name":"permissionName","type":"string"}],"name":"getPermissionNameToIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"getPermissionUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"enum Permission","name":"permission","type":"uint8"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"isAuthorizedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"},{"internalType":"uint64","name":"time","type":"uint64"}],"name":"lockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLastPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"},{"internalType":"uint256","name":"_totalSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launched_","type":"uint256"}],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string","name":"permissionName","type":"string"}],"name":"unauthorizeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"string[]","name":"permissionNames","type":"string[]"}],"name":"unauthorizeForMultiplePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"permissionName","type":"string"}],"name":"unlockPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d561790915560068054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560078054821661dead1790556008805490911690556200006e6009600a62000aee565b6200007f906402540be40062000baf565b6009556103e860095462000094919062000a84565b600a556096601081905561012c60115560c8601255601381905561032060149081556106406015556127106016556019556064601a819055601f919091556020556107086022556023805460ff199081169091556207a1206024556025805490911660011790556009546200010d906113889062000a84565b6026553480156200011d57600080fd5b50600080546001600160a01b031916339081178255905b600a81101562000182576001600160a01b0382166000908152600160208181526040808420858552909152909120805460ff1916909117905580620001798162000c0e565b91505062000134565b506000604051694368616e67654665657360b01b8152600290600a01908152604051908190036020019020556001604051664275796261636b60c81b81526002906007019081526040519081900360200190205560026040517f41646a757374436f6e74726163745661726961626c6573000000000000000000815260029060170190815260405190819003602001902055600360405168417574686f72697a6560b81b81526002906009019081526040519081900360200190205560046040516a556e617574686f72697a6560a81b8152600290600b019081526040519081900360200190205560056040517f5061757365556e7061757365436f6e747261637400000000000000000000000081526002906014019081526040519081900360200190205560066040516a427970617373506175736560a81b8152600290600b019081526040519081900360200190205560076040516e4c6f636b5065726d697373696f6e7360881b8152600290600f019081526040519081900360200190205560086040516d4578636c756465496e636c75646560901b8152600290600e01908152604080519182900360209081018320939093558181019052600a8152694368616e67654665657360b01b828201908152600080526003909252516200038d917f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff91620009a0565b506040805180820190915260078152664275796261636b60c81b60208083019182526001600052600390529051620003e7917fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c91620009a0565b5060408051808201909152601781527f41646a757374436f6e74726163745661726961626c65730000000000000000006020808301918252600260005260039052905162000457917fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d91620009a0565b50604080518082019091526009815268417574686f72697a6560b81b60208083019182526003600081905290529051620004b3917fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af91620009a0565b5060408051808201909152600b81526a556e617574686f72697a6560a81b6020808301918252600460005260039052905162000511917f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246591620009a0565b5060408051808201909152601481527f5061757365556e7061757365436f6e74726163740000000000000000000000006020808301918252600560005260039052905162000581917f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225091620009a0565b5060408051808201909152600b81526a427970617373506175736560a81b60208083019182526006600052600390529051620005df917fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f391620009a0565b5060408051808201909152600f81526e4c6f636b5065726d697373696f6e7360881b6020808301918252600760005260039052905162000641917ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd291620009a0565b5060408051808201909152600e81526d4578636c756465496e636c75646560901b60208083019182526008600052600390529051620006a2917f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe91620009a0565b5050601b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200070457600080fd5b505afa15801562000719573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200073f919062000a54565b6006546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200078c57600080fd5b505af1158015620007a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007c7919062000a54565b601c80546001600160a01b039283166001600160a01b0319918216178255306000908152600c60209081526040808320601b805488168552925280832060001990559354601d805460018101825593527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f9092018054909316918516919091179091555490519116906200085b9062000a2f565b6001600160a01b039091168152602001604051809103906000f08015801562000888573d6000803e3d6000fd5b5060238054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600d60208181526040808420805460ff199081166001908117909255600e8085528387208054831684179055601c5489168752600f8086528488208054841685179055308852848820805484168517905595855283872080548316841790558452828620805482168317905560075490971685529282528084208054909616909217909455601780546001600160a01b031990811685179091556018805490911684179055600954838352600b85528183208190559051908152919283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000c42565b828054620009ae9062000bd1565b90600052602060002090601f016020900481019282620009d2576000855562000a1d565b82601f10620009ed57805160ff191683800117855562000a1d565b8280016001018555821562000a1d579182015b8281111562000a1d57825182559160200191906001019062000a00565b5062000a2b92915062000a3d565b5090565b61107e80620052c783390190565b5b8082111562000a2b576000815560010162000a3e565b60006020828403121562000a66578081fd5b81516001600160a01b038116811462000a7d578182fd5b9392505050565b60008262000aa057634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111562000ae657816000190482111562000aca5762000aca62000c2c565b8085161562000ad857918102915b93841c939080029062000aaa565b509250929050565b600062000a7d60ff84168360008262000b0a5750600162000ba9565b8162000b195750600062000ba9565b816001811462000b32576002811462000b3d5762000b5d565b600191505062000ba9565b60ff84111562000b515762000b5162000c2c565b50506001821b62000ba9565b5060208310610133831016604e8410600b841016171562000b82575081810a62000ba9565b62000b8e838362000aa5565b806000190482111562000ba55762000ba562000c2c565b0290505b92915050565b600081600019048311821515161562000bcc5762000bcc62000c2c565b500290565b600181811c9082168062000be657607f821691505b6020821081141562000c0857634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000c255762000c2562000c2c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6146758062000c526000396000f3fe6080604052600436106103795760003560e01c80638101cae3116101d1578063c41235a611610102578063e96fada2116100a0578063f3a54f2c1161006f578063f3a54f2c14610a5d578063f708a64f14610a7d578063f84ba65d14610a9d578063f887ea4014610abd57600080fd5b8063e96fada2146109e8578063f0fc6bca14610a08578063f1f3bca314610a1d578063f2fde38b14610a3d57600080fd5b8063d806d12f116100dc578063d806d12f1461094d578063dd62ed3e14610962578063df20fd49146109a8578063e75cae79146109c857600080fd5b8063c41235a6146108ed578063ca33e64c1461090d578063d51ed1c81461092d57600080fd5b8063a4b45c001161016f578063b210b06d11610149578063b210b06d14610882578063b91ac78814610897578063bf56b371146108b7578063c2b7bbb6146108cd57600080fd5b8063a4b45c0014610822578063a9059cbb14610842578063af05cf931461086257600080fd5b80638da5cb5b116101ab5780638da5cb5b1461079557806395d89b41146107b5578063971563fc146107e25780639d1944f51461080257600080fd5b80638101cae31461072357806386f6c3c114610743578063893d20e81461076357600080fd5b80632d48e896116102ab5780635c85974f116102495780636ddd1713116102235780636ddd17131461069d57806370a08231146106b75780637d1db4a5146106ed5780638032eccb1461070357600080fd5b80635c85974f1461063d578063658d4b7f1461065d5780636a6e3cbe1461067d57600080fd5b806339e67c8a1161028557806339e67c8a146105c3578063571ac8b0146105e357806357b78541146106035780635abe67111461062357600080fd5b80632d48e896146105585780632f54bf6e14610578578063313ce567146105a757600080fd5b806318160ddd11610318578063201e7991116102f2578063201e7991146104e35780632375ce401461050357806323b872dd146105235780632b112e491461054357600080fd5b806318160ddd1461048e5780631ad6084f146104a35780631e8f5283146104c357600080fd5b806306fdde031161035457806306fdde03146103e557806307858b021461041e578063095ea7b31461043e5780631161ae391461046e57600080fd5b806293dc14146103855780630445b6671461039c57806306fbdcd8146103c557600080fd5b3661038057005b600080fd5b34801561039157600080fd5b5061039a610add565b005b3480156103a857600080fd5b506103b260265481565b6040519081526020015b60405180910390f35b3480156103d157600080fd5b506103b26103e0366004613ed5565b610be0565b3480156103f157600080fd5b50604080518082019091526007815266446f6e744b594360c81b60208201525b6040516103bc919061430c565b34801561042a57600080fd5b5061039a610439366004613ed5565b610c08565b34801561044a57600080fd5b5061045e610459366004613e75565b610cea565b60405190151581526020016103bc565b34801561047a57600080fd5b5061045e610489366004613fa1565b610d57565b34801561049a57600080fd5b506009546103b2565b3480156104af57600080fd5b5061039a6104be366004613d40565b610d6b565b3480156104cf57600080fd5b5061039a6104de366004613e27565b610f9b565b3480156104ef57600080fd5b5061039a6104fe366004613fa1565b6110f5565b34801561050f57600080fd5b5061039a61051e366004613fc2565b6111b7565b34801561052f57600080fd5b5061045e61053e366004613d00565b61129e565b34801561054f57600080fd5b506103b2611360565b34801561056457600080fd5b5061039a610573366004613fa1565b6113b2565b34801561058457600080fd5b5061045e610593366004613cac565b6000546001600160a01b0391821691161490565b3480156105b357600080fd5b50604051600981526020016103bc565b3480156105cf57600080fd5b5061039a6105de366004613f67565b6114d7565b3480156105ef57600080fd5b5061045e6105fe366004613cac565b611593565b34801561060f57600080fd5b5061045e61061e366004613df7565b6115a1565b34801561062f57600080fd5b5060235461045e9060ff1681565b34801561064957600080fd5b5061039a610658366004613f67565b6115f5565b34801561066957600080fd5b5061039a610678366004613dc3565b6116cd565b34801561068957600080fd5b5061039a610698366004613f7f565b6117c1565b3480156106a957600080fd5b5060255461045e9060ff1681565b3480156106c357600080fd5b506103b26106d2366004613cac565b6001600160a01b03166000908152600b602052604090205490565b3480156106f957600080fd5b506103b2600a5481565b34801561070f57600080fd5b5061045e61071e366004613ed5565b6118e6565b34801561072f57600080fd5b5061039a61073e366004613e27565b611925565b34801561074f57600080fd5b5061039a61075e36600461401a565b611ac4565b34801561076f57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103bc565b3480156107a157600080fd5b5060005461077d906001600160a01b031681565b3480156107c157600080fd5b50604080518082019091526004815263444b594360e01b6020820152610411565b3480156107ee57600080fd5b5061039a6107fd366004613f10565b611c54565b34801561080e57600080fd5b5061039a61081d366004613f67565b611ded565b34801561082e57600080fd5b5061039a61083d366004613cc8565b611eb9565b34801561084e57600080fd5b5061045e61085d366004613e75565b611f9e565b34801561086e57600080fd5b5061039a61087d366004613d40565b611fab565b34801561088e57600080fd5b5061039a612183565b3480156108a357600080fd5b5061077d6108b2366004613f67565b612253565b3480156108c357600080fd5b506103b2601e5481565b3480156108d957600080fd5b5061039a6108e8366004613cac565b61227d565b3480156108f957600080fd5b5061045e610908366004613e27565b612386565b34801561091957600080fd5b5060175461077d906001600160a01b031681565b34801561093957600080fd5b506103b2610948366004613f67565b6123db565b34801561095957600080fd5b506103b261241f565b34801561096e57600080fd5b506103b261097d366004613cc8565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156109b457600080fd5b5061039a6109c3366004613eba565b612494565b3480156109d457600080fd5b506103b26109e3366004613ed5565b612562565b3480156109f457600080fd5b5060185461077d906001600160a01b031681565b348015610a1457600080fd5b5061039a6125ad565b348015610a2957600080fd5b506103b2610a38366004613ea0565b612617565b348015610a4957600080fd5b5061039a610a58366004613cac565b612680565b348015610a6957600080fd5b5061039a610a78366004613ea0565b61279d565b348015610a8957600080fd5b5061039a610a98366004613dc3565b612867565b348015610aa957600080fd5b5061039a610ab8366004613dc3565b612a19565b348015610ac957600080fd5b50601b5461077d906001600160a01b031681565b6002600081905260046020526000805160206146208339815191525460ff1615610b225760405162461bcd60e51b8152600401610b1990614374565b60405180910390fd5b610b2c33826115a1565b60036000836008811115610b5057634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001610b6e9190614181565b60405160208183030381529060405290610b9b5760405162461bcd60e51b8152600401610b19919061430c565b50601d805480610bbb57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600282604051610bf291906140db565b9081526020016040518091039020549050919050565b610c1181612562565b4211610c735760405162461bcd60e51b815260206004820152602b60248201527f5065726d697373696f6e206973206c6f636b656420756e74696c20746865206560448201526a3c3834b93c903a34b6b29760a91b6064820152608401610b19565b6000600282604051610c8591906140db565b9081526040805191829003602090810183205460008181526004909252919020805460ff1916905591507ffc8b383b99ea2b22b71f1093a47597b46df7078bee32a803a3bdd4a206723b8890610cde908490849061431f565b60405180910390a15050565b336000818152600c602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d459086815260200190565b60405180910390a35060015b92915050565b600082610d63836123db565b119392505050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff1615610db95760405162461bcd60e51b8152600401610b1990614374565b610dc333826115a1565b60036000836008811115610de757634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001610e059190614181565b60405160208183030381529060405290610e325760405162461bcd60e51b8152600401610b19919061430c565b506000546001600160a01b0385811691161415610e8b5760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b19565b60005b82811015610f945760006002858584818110610eba57634e487b7160e01b600052603260045260246000fd5b9050602002810190610ecc91906143df565b604051610eda9291906140cb565b9081526040805160209281900383019020546001600160a01b0389166000908152600184528281208282529093529120805460ff1916905590507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e1186868685818110610f5657634e487b7160e01b600052603260045260246000fd5b9050602002810190610f6891906143df565b84604051610f79949392919061425a565b60405180910390a15080610f8c8161451e565b915050610e8e565b5050505050565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615610fe95760405162461bcd60e51b8152600401610b1990614374565b610ff333826115a1565b6003600083600881111561101757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016110359190614181565b604051602081830303815290604052906110625760405162461bcd60e51b8152600401610b19919061430c565b50600060028360405161107591906140db565b908152604080519182900360209081018320546001600160a01b0388166000908152600180845284822083835290935292909220805460ff1916909117905591507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec643906110e7908690869085906142a3565b60405180910390a150505050565b6002600081905260046020526000805160206146208339815191525460ff16156111315760405162461bcd60e51b8152600401610b1990614374565b61113b33826115a1565b6003600083600881111561115f57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161117d9190614181565b604051602081830303815290604052906111aa5760405162461bcd60e51b8152600401610b19919061430c565b5050601991909155601a55565b6002600081905260046020526000805160206146208339815191525460ff16156111f35760405162461bcd60e51b8152600401610b1990614374565b6111fd33826115a1565b6003600083600881111561122157634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161123f9190614181565b6040516020818303038152906040529061126c5760405162461bcd60e51b8152600401610b19919061430c565b506003611279848661446f565b1115801561128657508284115b61128f57600080fd5b50601f92909255602055602255565b6001600160a01b0383166000908152600c602090815260408083203384529091528120546000191461134b576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600c82528381203382529091529190912054611326918490612b0d565b6001600160a01b0385166000908152600c602090815260408083203384529091529020555b611356848484612b47565b90505b9392505050565b6008546001600160a01b03166000908152600b60205260408120546113ad906007546001600160a01b03166000908152600b60205260409020546113a79060095490612e7e565b90612e7e565b905090565b6002600081905260046020526000805160206146208339815191525460ff16156113ee5760405162461bcd60e51b8152600401610b1990614374565b6113f833826115a1565b6003600083600881111561141c57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161143a9190614181565b604051602081830303815290604052906114675760405162461bcd60e51b8152600401610b19919061430c565b506023546040516316a4744b60e11b815260048101859052602481018490526101009091046001600160a01b031690632d48e896906044015b600060405180830381600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b50505050505050565b6002600081905260046020526000805160206146208339815191525460ff16156115135760405162461bcd60e51b8152600401610b1990614374565b61151d33826115a1565b6003600083600881111561154157634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161155f9190614181565b6040516020818303038152906040529061158c5760405162461bcd60e51b8152600401610b19919061430c565b5050601e55565b6000610d5182600019610cea565b6001600160a01b0382166000908152600160205260408120818360088111156115da57634e487b7160e01b600052602160045260246000fd5b815260208101919091526040016000205460ff169392505050565b6002600081905260046020526000805160206146208339815191525460ff16156116315760405162461bcd60e51b8152600401610b1990614374565b61163b33826115a1565b6003600083600881111561165f57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161167d9190614181565b604051602081830303815290604052906116aa5760405162461bcd60e51b8152600401610b19919061430c565b506107d06009546116bb919061446f565b8210156116c757600080fd5b50600a55565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff161561171b5760405162461bcd60e51b8152600401610b1990614374565b61172533826115a1565b6003600083600881111561174957634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016117679190614181565b604051602081830303815290604052906117945760405162461bcd60e51b8152600401610b19919061430c565b50506001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff161561180f5760405162461bcd60e51b8152600401610b1990614374565b61181933826115a1565b6003600083600881111561183d57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161185b9190614181565b604051602081830303815290604052906118885760405162461bcd60e51b8152600401610b19919061430c565b506007546118a09084906001600160a01b0316612ec0565b81156118e157426021556022546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b505050565b6000600460006002846040516118fc91906140db565b908152604080516020928190038301902054835290820192909252016000205460ff1692915050565b6004600081905260208190527f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5460ff16156119735760405162461bcd60e51b8152600401610b1990614374565b61197d33826115a1565b600360008360088111156119a157634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016119bf9190614181565b604051602081830303815290604052906119ec5760405162461bcd60e51b8152600401610b19919061430c565b506000546001600160a01b0384811691161415611a455760405162461bcd60e51b815260206004820152601760248201527621b0b713ba103ab730baba3437b934bd329037bbb732b960491b6044820152606401610b19565b6000600283604051611a5791906140db565b908152604080519182900360209081018320546001600160a01b038816600090815260018352838120828252909252919020805460ff1916905591507fb26499039c739e76d3891f0102d9af263029408ce80bd90b963ad702b35b5e11906110e7908690869085906142a3565b6002600081905260046020526000805160206146208339815191525460ff1615611b005760405162461bcd60e51b8152600401610b1990614374565b611b0a33826115a1565b60036000836008811115611b2e57634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611b4c9190614181565b60405160208183030381529060405290611b795760405162461bcd60e51b8152600401610b19919061430c565b506010879055601186905560128590556013849055611ba484611b9e87818b8b6130f2565b906130f2565b60145560168390556015829055611bbc600a8461446f565b6014541115611c005760405162461bcd60e51b815260206004820152601060248201526f084eaf240cccaca40e8dede40d0d2ced60831b6044820152606401610b19565b6005601654611c0f919061446f565b60155411156114ce5760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840cccaca40e8dede40d0d2ced607b1b6044820152606401610b19565b6007600081905260046020527fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515460ff1615611ca25760405162461bcd60e51b8152600401610b1990614374565b611cac33826115a1565b60036000836008811115611cd057634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611cee9190614181565b60405160208183030381529060405290611d1b5760405162461bcd60e51b8152600401610b19919061430c565b506000600284604051611d2e91906140db565b9081526040519081900360200190205490506000611d4c8442614443565b6040805180820182526001815267ffffffffffffffff83811660208084019182526000888152600490915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055519091507f1a64a9fcf40ce1b5dcb813e1f2ef6c6f70310b51c853865d4bfe7ca8f37d854f90611dde90879085908590614341565b60405180910390a15050505050565b6002600081905260046020526000805160206146208339815191525460ff1615611e295760405162461bcd60e51b8152600401610b1990614374565b611e3333826115a1565b60036000836008811115611e5757634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611e759190614181565b60405160208183030381529060405290611ea25760405162461bcd60e51b8152600401610b19919061430c565b50620f4240821115611eb357600080fd5b50602455565b6002600081905260046020526000805160206146208339815191525460ff1615611ef55760405162461bcd60e51b8152600401610b1990614374565b611eff33826115a1565b60036000836008811115611f2357634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001611f419190614181565b60405160208183030381529060405290611f6e5760405162461bcd60e51b8152600401610b19919061430c565b5050601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000611359338484612b47565b6003600081905260046020527f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05460ff1615611ff95760405162461bcd60e51b8152600401610b1990614374565b61200333826115a1565b6003600083600881111561202757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016120459190614181565b604051602081830303815290604052906120725760405162461bcd60e51b8152600401610b19919061430c565b5060005b82811015610f9457600060028585848181106120a257634e487b7160e01b600052603260045260246000fd5b90506020028101906120b491906143df565b6040516120c29291906140cb565b9081526040805160209281900383019020546001600160a01b0389166000908152600180855283822083835290945291909120805460ff191690921790915590507f51ff6835511b7f0d6d0df8f2dcc2c818d6eb8d2817b006ff65749f283afec6438686868581811061214557634e487b7160e01b600052603260045260246000fd5b905060200281019061215791906143df565b84604051612168949392919061425a565b60405180910390a1508061217b8161451e565b915050612076565b6001600081905260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460ff16156121d15760405162461bcd60e51b8152600401610b1990614374565b6121db33826115a1565b600360008360088111156121ff57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161221d9190614181565b6040516020818303038152906040529061224a5760405162461bcd60e51b8152600401610b19919061430c565b50506000602155565b601d818154811061226357600080fd5b6000918252602090912001546001600160a01b0316905081565b6002600081905260046020526000805160206146208339815191525460ff16156122b95760405162461bcd60e51b8152600401610b1990614374565b6122c333826115a1565b600360008360088111156122e757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016123059190614181565b604051602081830303815290604052906123325760405162461bcd60e51b8152600401610b19919061430c565b5050601d80546001810182556000919091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260016020526040808220905182906002906123b19086906140db565b908152604080516020928190038301902054835290820192909252016000205460ff169392505050565b6000610d516123e8611360565b601c546001600160a01b03166000908152600b602052604090205461241990612412906002613151565b8590613151565b906131d0565b60008060155490506000612444426113a76022546021546130f290919063ffffffff16565b90506000612467836113a7602054612419601f548861315190919063ffffffff16565b905061248c612485602254612419858561315190919063ffffffff16565b84906130f2565b935050505090565b6002600081905260046020526000805160206146208339815191525460ff16156124d05760405162461bcd60e51b8152600401610b1990614374565b6124da33826115a1565b600360008360088111156124fe57634e487b7160e01b600052602160045260246000fd5b815260200190815260200160002060405160200161251c9190614181565b604051602081830303815290604052906125495760405162461bcd60e51b8152600401610b19919061430c565b50506025805460ff191692151592909217909155602655565b60006004600060028460405161257891906140db565b9081526040805160209281900383019020548352908201929092520160002054610100900467ffffffffffffffff1692915050565b602360019054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156125fd57600080fd5b505af1158015612611573d6000803e3d6000fd5b50505050565b600043601e546001612629919061442b565b1061263c57601654610d51906001612e7e565b81801561265e57504261265c6022546021546130f290919063ffffffff16565b115b1561266b57610d5161241f565b8161267857601454610d51565b505060155490565b6000546001600160a01b031633146126d05760405162461bcd60e51b815260206004820152601360248201527227bbb732b939b434b8103932b8bab4b932b21760691b6044820152606401610b19565b600080546001600160a01b038381166001600160a01b0319831617835516905b600a811015612758576001600160a01b0380831660009081526001602081815260408084208685528252808420805460ff19908116909155845490951684528282528084208685529091529091208054909216179055806127508161451e565b9150506126f0565b50600054604080516001600160a01b03808516825290921660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09101610cde565b6002600081905260046020526000805160206146208339815191525460ff16156127d95760405162461bcd60e51b8152600401610b1990614374565b6127e333826115a1565b6003600083600881111561280757634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016128259190614181565b604051602081830303815290604052906128525760405162461bcd60e51b8152600401610b19919061430c565b50506023805460ff1916911515919091179055565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff16156128b55760405162461bcd60e51b8152600401610b1990614374565b6128bf33826115a1565b600360008360088111156128e357634e487b7160e01b600052602160045260246000fd5b81526020019081526020016000206040516020016129019190614181565b6040516020818303038152906040529061292e5760405162461bcd60e51b8152600401610b19919061430c565b506001600160a01b03831630148015906129565750601c546001600160a01b03848116911614155b61295f57600080fd5b6001600160a01b0383166000908152600f60205260409020805460ff191683158015919091179091556129cb57602354604051630a5b654b60e11b81526001600160a01b03858116600483015260006024830152610100909204909116906314b6ca96906044016114a0565b6023546001600160a01b038481166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca96906044016114a0565b6008600081905260046020527f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45460ff1615612a675760405162461bcd60e51b8152600401610b1990614374565b612a7133826115a1565b60036000836008811115612a9557634e487b7160e01b600052602160045260246000fd5b8152602001908152602001600020604051602001612ab39190614181565b60405160208183030381529060405290612ae05760405162461bcd60e51b8152600401610b19919061430c565b50506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60008184841115612b315760405162461bcd60e51b8152600401610b19919061430c565b506000612b3e84866144ae565b95945050505050565b60275460009060ff1615612b6757612b60848484613212565b9050611359565b612b7184836132f8565b612b79613365565b15612b8657612b866133b4565b601e54158015612ba35750601c546001600160a01b038481169116145b15612bd2576001600160a01b0384166000908152600b6020526040902054612bca57600080fd5b612bd26138d6565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600b9091529190912054612c24918490612b0d565b6001600160a01b0385166000908152600b6020526040812091909155612c4a8585613916565b612c545782612c5f565b612c5f858585613a88565b6001600160a01b0385166000908152600b6020526040902054909150612c8590826130f2565b6001600160a01b038086166000908152600b60209081526040808320949094559188168152600f909152205460ff16612d2e576023546001600160a01b038681166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015612d1b57600080fd5b505af1925050508015612d2c575060015b505b6001600160a01b0384166000908152600f602052604090205460ff16612dc4576023546001600160a01b038581166000818152600b602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b158015612db157600080fd5b505af1925050508015612dc2575060015b505b602354602480546040516001624d3b8760e01b0319815260048101919091526101009092046001600160a01b03169163ffb2c4799101600060405180830381600087803b158015612e1457600080fd5b505af1925050508015612e25575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e6b91815260200190565b60405180910390a3506001949350505050565b600061135983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b0d565b6027805460ff19166001179055604080516002808252606082018352600092602083019080368337505060065482519293506001600160a01b031691839150600090612f1c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612f5e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5460405163b6f9de9560e01b815291169063b6f9de95908590612fa4906000908690889042906004016142d7565b6000604051808303818588803b158015612fbd57600080fd5b505af193505050508015612fcf575060015b6130a257612fdb614565565b806308c379a014156130325750612ff061457d565b80612ffb5750613034565b8060405160200161300c91906140f7565b60408051601f198184030181529082905262461bcd60e51b8252610b199160040161430c565b505b60405162461bcd60e51b815260206004820152603860248201527f4275796261636b206661696c656420776974686f757420616e206572726f722060448201527f6d6573736167652066726f6d2070616e63616b655377617000000000000000006064820152608401610b19565b604080518481526001600160a01b03841660208201527fe27ecc9c85b6367f7abddc4723456b31bb75434354f83adc03236515846f31e1910160405180910390a150506027805460ff1916905550565b6000806130ff838561442b565b9050838110156113595760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b19565b60008261316057506000610d51565b600061316c838561448f565b905082613179858361446f565b146113595760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b19565b600061135983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b27565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600b90915291822054613263918490612b0d565b6001600160a01b038086166000908152600b6020526040808220939093559085168152205461329290836130f2565b6001600160a01b038085166000818152600b602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906132e69086815260200190565b60405180910390a35060019392505050565b600a548111158061332157506001600160a01b0382166000908152600e602052604090205460ff165b6133615760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b19565b5050565b601c546000906001600160a01b03163314801590613386575060275460ff16155b8015613394575060255460ff165b80156113ad575050602654306000908152600b6020526040902054101590565b6027805460ff19166001179055601954601a546000916133d391610d57565b6133df576010546133e2565b60005b9050600061340660026124196014546124198660265461315190919063ffffffff16565b9050600061341f82602654612e7e90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061346757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526006548251911690829060019081106134a657634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b81524792919091169063791ac947906134f09086906000908790309042906004016143a3565b600060405180830381600087803b15801561350a57600080fd5b505af192505050801561351b575060015b61363557613527614565565b806308c379a014156135a1575061353c61457d565b8061354757506135a3565b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e0281604051602001613579919061413c565b60408051601f19818403018152908290526135939161430c565b60405180910390a1506138c5565b505b7fc41a20ad8c23d3903584975786330c6ec73ccfcc657629f10237b792268b0e026040516136289060208082526039908201527f537761704261636b206661696c656420776974686f757420616e206572726f7260408201527f206d6573736167652066726f6d2070616e63616b655377617000000000000000606082015260800190565b60405180910390a16138c5565b60006136414783612e7e565b9050600061365c6136538860026131d0565b60145490612e7e565b9050600061367160026124198481878d613151565b9050600061368e836124196012548761315190919063ffffffff16565b905060006136ab846124196013548861315190919063ffffffff16565b9050602360019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156136fd57600080fd5b505af19350505050801561370f575060015b506018546040516001600160a01b03909116906175309083906000818181858888f193505050503d8060008114613762576040519150601f19603f3d011682016040523d82523d6000602084013e613767565b606091505b50508915905061388c57601b5460175460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c4016060604051808303818588803b1580156137dc57600080fd5b505af19350505050801561380d575060408051601f3d908101601f1916820190925261380a91810190613fed565b60015b61384f5760408051600080825260208201527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a161388c565b5050604080518b8152602081018690527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6040518881527fb39214ef4f33ea2d9d329fb67a4f17e7588bf6e00ed15a7967137ba819697a279060200160405180910390a150505050505b50506027805460ff19169055505050565b43601e819055604080519182524260208301527f87dcd6626ffde0faf682a10e7b64aff36ea73a5470d5fa6cc7ebd372e4b19001910160405180910390a1565b6001600160a01b0382166000908152600d602052604081205460ff168061395557506001600160a01b0382166000908152600d602052604090205460ff165b806139605750601e54155b1561396d57506000610d51565b6000601d8054806020026020016040519081016040528092919081815260200182805480156139c557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116139a7575b5050505050905060005b8151811015613a79578181815181106139f857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316856001600160a01b03161480613a575750818181518110613a3a57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316846001600160a01b0316145b15613a6757600192505050610d51565b80613a718161451e565b9150506139cf565b505060235460ff169392505050565b600080613aa7601654612419613aa0610a3888613b55565b8690613151565b306000908152600b6020526040902054909150613ac490826130f2565b306000818152600b6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613b159085815260200190565b60405180910390a3612b3e8382612e7e565b60008183613b485760405162461bcd60e51b8152600401610b19919061430c565b506000612b3e848661446f565b600080601d805480602002602001604051908101604052809291908181526020018280548015613bae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b90575b5050505050905060005b8151811015613c1e57818181518110613be157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316846001600160a01b03161415613c0c575060019392505050565b80613c168161451e565b915050613bb8565b5060009392505050565b80358015158114613c3857600080fd5b919050565b600082601f830112613c4d578081fd5b813567ffffffffffffffff811115613c6757613c6761454f565b604051613c7e601f8301601f1916602001826144f1565b818152846020838601011115613c92578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215613cbd578081fd5b813561135981614607565b60008060408385031215613cda578081fd5b8235613ce581614607565b91506020830135613cf581614607565b809150509250929050565b600080600060608486031215613d14578081fd5b8335613d1f81614607565b92506020840135613d2f81614607565b929592945050506040919091013590565b600080600060408486031215613d54578283fd5b8335613d5f81614607565b9250602084013567ffffffffffffffff80821115613d7b578384fd5b818601915086601f830112613d8e578384fd5b813581811115613d9c578485fd5b8760208260051b8501011115613db0578485fd5b6020830194508093505050509250925092565b60008060408385031215613dd5578182fd5b8235613de081614607565b9150613dee60208401613c28565b90509250929050565b60008060408385031215613e09578182fd5b8235613e1481614607565b9150602083013560098110613cf5578182fd5b60008060408385031215613e39578182fd5b8235613e4481614607565b9150602083013567ffffffffffffffff811115613e5f578182fd5b613e6b85828601613c3d565b9150509250929050565b60008060408385031215613e87578182fd5b8235613e9281614607565b946020939093013593505050565b600060208284031215613eb1578081fd5b61135982613c28565b60008060408385031215613ecc578182fd5b613e9283613c28565b600060208284031215613ee6578081fd5b813567ffffffffffffffff811115613efc578182fd5b613f0884828501613c3d565b949350505050565b60008060408385031215613f22578182fd5b823567ffffffffffffffff80821115613f39578384fd5b613f4586838701613c3d565b9350602085013591508082168214613f5b578283fd5b50809150509250929050565b600060208284031215613f78578081fd5b5035919050565b60008060408385031215613f91578182fd5b82359150613dee60208401613c28565b60008060408385031215613fb3578182fd5b50508035926020909101359150565b600080600060608486031215613fd6578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215614001578081fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215614032578384fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000815180845260208085019450808401835b838110156140945781516001600160a01b03168752958201959082019060010161406f565b509495945050505050565b600081518084526140b78160208601602086016144c5565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b600082516140ed8184602087016144c5565b9190910192915050565b7f4275796261636b206661696c65642077697468206572726f722000000000000081526000825161412f81601a8501602087016144c5565b91909101601a0192915050565b7f537761704261636b206661696c65642077697468206572726f7220000000000081526000825161417481601b8501602087016144c5565b91909101601b0192915050565b7f4e6f7420617574686f72697a65642e20596f75206e656564207468652070657281526000602067036b4b9b9b4b7b7160c51b81840152602882855484600182811c9150808316806141d457607f831692505b8683108114156141f257634e487b7160e01b88526022600452602488fd5b808015614206576001811461421b5761424b565b60ff1985168a880152838a018701955061424b565b60008b815260209020895b858110156142415781548c82018a0152908401908901614226565b505086848b010195505b50939998505050505050505050565b6001600160a01b0385168152606060208201819052810183905282846080830137600080608085840101526080601f19601f860116830101905082604083015295945050505050565b6001600160a01b03841681526060602082018190526000906142c79083018561409f565b9050826040830152949350505050565b8481526080602082015260006142f0608083018661405c565b6001600160a01b03949094166040830152506060015292915050565b602081526000611359602083018461409f565b604081526000614332604083018561409f565b90508260208301529392505050565b606081526000614354606083018661409f565b905083602083015267ffffffffffffffff83166040830152949350505050565b6020808252601590820152742832b936b4b9b9b4b7b71034b9903637b1b5b2b21760591b604082015260600190565b85815284602082015260a0604082015260006143c260a083018661405c565b6001600160a01b0394909416606083015250608001529392505050565b6000808335601e198436030181126143f5578283fd5b83018035915067ffffffffffffffff82111561440f578283fd5b60200191503681900382131561442457600080fd5b9250929050565b6000821982111561443e5761443e614539565b500190565b600067ffffffffffffffff80831681851680830382111561446657614466614539565b01949350505050565b60008261448a57634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156144a9576144a9614539565b500290565b6000828210156144c0576144c0614539565b500390565b60005b838110156144e05781810151838201526020016144c8565b838111156126115750506000910152565b601f8201601f1916810167ffffffffffffffff811182821017156145175761451761454f565b6040525050565b600060001982141561453257614532614539565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561457a57600481823e5160e01c5b90565b600060443d101561458b5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156145bb57505050505090565b82850191508151818111156145d35750505050505090565b843d87010160208285010111156145ed5750505050505090565b6145fc602082860101876144f1565b509095945050505050565b6001600160a01b038116811461461c57600080fd5b5056fe91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7a2646970667358221220cc9a88e155ff5db8243e2c9610840799321054eae8da20c2c3dc596d77a480eb64736f6c634300080400336080604052600180546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d56179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561007d57600080fd5b5060405161107e38038061107e83398101604081905261009c916100f6565b6001600160a01b0381166100c4577310ed43c718714eb63d5aa57b78b54704e256024e6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610124565b600060208284031215610107578081fd5b81516001600160a01b038116811461011d578182fd5b9392505050565b610f4b806101336000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610d20565b610285565b005b34801561013957600080fd5b506100f8610148366004610d06565b6103fd565b34801561015957600080fd5b5061012b610168366004610d99565b610486565b34801561017957600080fd5b506100f860085481565b34801561018f57600080fd5b506100f8600e5481565b3480156101a557600080fd5b506100f860095481565b3480156101bb57600080fd5b506101eb6101ca366004610d06565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f8600b5481565b34801561023057600080fd5b506100f8600a5481565b34801561024657600080fd5b5061012b610711565b34801561025b57600080fd5b5061012b61026a366004610d69565b61071c565b34801561027b57600080fd5b506100f8600d5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260076020526040902054156102c3576102c382610838565b6000811180156102e957506001600160a01b038216600090815260076020526040902054155b1561034f57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526007602052604090205415155b156103825761038282610963565b6001600160a01b0382166000908152600760205260409020546008546103b39183916103ad91610ab0565b90610afb565b6008556001600160a01b03821660009081526007602052604090208190556103da81610b5f565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6001600160a01b03811660009081526007602052604081205461042257506000919050565b6001600160a01b03821660009081526007602052604081205461044490610b5f565b6001600160a01b038416600090815260076020526040902060010154909150808211610474575060009392505050565b61047e8282610ab0565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104bf57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610d81565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061058f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260018054835192169183919081106105cd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061061390600090869030904290600401610dba565b6000604051808303818588803b15801561062c57600080fd5b505af1158015610640573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106cf93508692506001600160a01b03909116906370a082319060240160206040518083038186803b15801561069157600080fd5b505afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190610d81565b90610ab0565b6009549091506106df9082610afb565b600955600854600c5461070991610700916106fa9085610b7c565b90610bfb565b600b5490610afb565b600b55505050565b61071a33610838565b565b6000546001600160a01b0316331461073357600080fd5b6004548061073f575050565b6000805a905060005b848310801561075657508381105b156108315783600f541061076a576000600f555b6107aa6004600f548154811061079057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610c3d565b156107ef576107ef6004600f54815481106107d557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316610838565b6108046107fd5a8490610ab0565b8490610afb565b92505a600f8054919350600061081983610ee4565b9190505550808061082990610ee4565b915050610748565b5050505050565b6001600160a01b0381166000908152600760205260409020546108585750565b6000610863826103fd565b9050801561095f57600a546108789082610afb565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190610d49565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546109359082610afb565b6001600160a01b03831660009081526007602052604090206002810191909155546103da90610b5f565b5050565b6004805461097390600190610ecd565b8154811061099157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03848116845260059092526040909220546004805492909316929181106109dd57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610a2990600190610ecd565b81548110610a4757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a8b57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610af283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c82565b90505b92915050565b600080610b088385610e76565b905083811015610af25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610af5600c546106fa600b5485610b7c90919063ffffffff16565b600082610b8b57506000610af5565b6000610b978385610eae565b905082610ba48583610e8e565b14610af25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b56565b6000610af283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cbc565b600d546001600160a01b03821660009081526006602052604081205490914291610c679190610e76565b108015610af55750600e54610c7b836103fd565b1192915050565b60008184841115610ca65760405162461bcd60e51b8152600401610b569190610e23565b506000610cb38486610ecd565b95945050505050565b60008183610cdd5760405162461bcd60e51b8152600401610b569190610e23565b506000610cb38486610e8e565b80356001600160a01b0381168114610d0157600080fd5b919050565b600060208284031215610d17578081fd5b610af282610cea565b60008060408385031215610d32578081fd5b610d3b83610cea565b946020939093013593505050565b600060208284031215610d5a578081fd5b81518015158114610af2578182fd5b600060208284031215610d7a578081fd5b5035919050565b600060208284031215610d92578081fd5b5051919050565b60008060408385031215610dab578182fd5b50508035926020909101359150565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015610e035784516001600160a01b031683529383019391830191600101610dde565b50506001600160a01b039690961660408501525050506060015292915050565b6000602080835283518082850152825b81811015610e4f57858101830151858201604001528201610e33565b81811115610e605783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e8957610e89610eff565b500190565b600082610ea957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615610ec857610ec8610eff565b500290565b600082821015610edf57610edf610eff565b500390565b6000600019821415610ef857610ef8610eff565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220cd78172288ec4aa146539ced4161fb40b4b536101aced8465d7d49b06bb0eafb64736f6c63430008040033

Deployed ByteCode Sourcemap

19081:16234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34559:115;;;;;;;;;;;;;:::i;:::-;;20825:50;;;;;;;;;;;;;;;;;;;20601:25:1;;;20589:2;20574:18;20825:50:0;;;;;;;;10912:157;;;;;;;;;;-1:-1:-1;10912:157:0;;;;;:::i;:::-;;:::i;22212:80::-;;;;;;;;;;-1:-1:-1;22284:5:0;;;;;;;;;;;;-1:-1:-1;;;22284:5:0;;;;22212:80;;;;;;;:::i;12153:389::-;;;;;;;;;;-1:-1:-1;12153:389:0;;;;;:::i;:::-;;:::i;22634:216::-;;;;;;;;;;-1:-1:-1;22634:216:0;;;;;:::i;:::-;;:::i;:::-;;;14399:14:1;;14392:22;14374:41;;14362:2;14347:18;22634:216:0;14329:92:1;34172:150:0;;;;;;;;;;-1:-1:-1;34172:150:0;;;;;:::i;:::-;;:::i;21942:88::-;;;;;;;;;;-1:-1:-1;22015:12:0;;21942:88;;9286:476;;;;;;;;;;-1:-1:-1;9286:476:0;;;;;:::i;:::-;;:::i;8004:293::-;;;;;;;;;;-1:-1:-1;8004:293:0;;;;;:::i;:::-;;:::i;33186:222::-;;;;;;;;;;-1:-1:-1;33186:222:0;;;;;:::i;:::-;;:::i;30464:381::-;;;;;;;;;;-1:-1:-1;30464:381:0;;;;;:::i;:::-;;:::i;23146:364::-;;;;;;;;;;-1:-1:-1;23146:364:0;;;;;:::i;:::-;;:::i;33835:142::-;;;;;;;;;;;;;:::i;33416:222::-;;;;;;;;;;-1:-1:-1;33416:222:0;;;;;:::i;:::-;;:::i;9822:103::-;;;;;;;;;;-1:-1:-1;9822:103:0;;;;;:::i;:::-;9877:4;9912:5;-1:-1:-1;;;;;9901:16:0;;;9912:5;;9901:16;;9822:103;22036:80;;;;;;;;;;-1:-1:-1;22036:80:0;;19524:1;21898:36:1;;21886:2;21871:18;22036:80:0;21853:87:1;34853:142:0;;;;;;;;;;-1:-1:-1;34853:142:0;;;;;:::i;:::-;;:::i;22858:116::-;;;;;;;;;;-1:-1:-1;22858:116:0;;;;;:::i;:::-;;:::i;10246:154::-;;;;;;;;;;-1:-1:-1;10246:154:0;;;;;:::i;:::-;;:::i;20660:41::-;;;;;;;;;;-1:-1:-1;20660:41:0;;;;;;;;31085:184;;;;;;;;;;-1:-1:-1;31085:184:0;;;;;:::i;:::-;;:::i;31674:150::-;;;;;;;;;;-1:-1:-1;31674:150:0;;;;;:::i;:::-;;:::i;29320:335::-;;;;;;;;;;-1:-1:-1;29320:335:0;;;;;:::i;:::-;;:::i;20788:30::-;;;;;;;;;;-1:-1:-1;20788:30:0;;;;;;;;22382:105;;;;;;;;;;-1:-1:-1;22382:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;22466:18:0;22448:7;22466:18;;;:9;:18;;;;;;;22382:105;19610:49;;;;;;;;;;;;;;;;11395:166;;;;;;;;;;-1:-1:-1;11395:166:0;;;;;:::i;:::-;;:::i;8846:361::-;;;;;;;;;;-1:-1:-1;8846:361:0;;;;;:::i;:::-;;:::i;31998:702::-;;;;;;;;;;-1:-1:-1;31998:702:0;;;;;:::i;:::-;;:::i;22298:78::-;;;;;;;;;;-1:-1:-1;22350:7:0;22368:5;-1:-1:-1;;;;;22368:5:0;22298:78;;;-1:-1:-1;;;;;11741:32:1;;;11723:51;;11711:2;11696:18;22298:78:0;11678:102:1;5192:20:0;;;;;;;;;;-1:-1:-1;5192:20:0;;;;-1:-1:-1;;;;;5192:20:0;;;22122:84;;;;;;;;;;-1:-1:-1;22196:7:0;;;;;;;;;;;;-1:-1:-1;;;22196:7:0;;;;22122:84;;11662:406;;;;;;;;;;-1:-1:-1;11662:406:0;;;;;:::i;:::-;;:::i;33646:177::-;;;;;;;;;;-1:-1:-1;33646:177:0;;;;;:::i;:::-;;:::i;32708:267::-;;;;;;;;;;-1:-1:-1;32708:267:0;;;;;:::i;:::-;;:::i;22982:156::-;;;;;;;;;;-1:-1:-1;22982:156:0;;;;;:::i;:::-;;:::i;8374:408::-;;;;;;;;;;-1:-1:-1;8374:408:0;;;;;:::i;:::-;;:::i;29667:128::-;;;;;;;;;;;;;:::i;20403:22::-;;;;;;;;;;-1:-1:-1;20403:22:0;;;;;:::i;:::-;;:::i;20434:25::-;;;;;;;;;;;;;;;;34422:125;;;;;;;;;;-1:-1:-1;34422:125:0;;;;;:::i;:::-;;:::i;9996:179::-;;;;;;;;;;-1:-1:-1;9996:179:0;;;;;:::i;:::-;;:::i;20170:36::-;;;;;;;;;;-1:-1:-1;20170:36:0;;;;-1:-1:-1;;;;;20170:36:0;;;33985:179;;;;;;;;;;-1:-1:-1;33985:179:0;;;;;:::i;:::-;;:::i;25841:430::-;;;;;;;;;;;;;:::i;22493:133::-;;;;;;;;;;-1:-1:-1;22493:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;22595:19:0;;;22577:7;22595:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;22493:133;32983:195;;;;;;;;;;-1:-1:-1;32983:195:0;;;;;:::i;:::-;;:::i;11141:186::-;;;;;;;;;;-1:-1:-1;11141:186:0;;;;;:::i;:::-;;:::i;20213:35::-;;;;;;;;;;-1:-1:-1;20213:35:0;;;;-1:-1:-1;;;;;20213:35:0;;;34330:80;;;;;;;;;;;;;:::i;25499:334::-;;;;;;;;;;-1:-1:-1;25499:334:0;;;;;:::i;:::-;;:::i;10491:343::-;;;;;;;;;;-1:-1:-1;10491:343:0;;;;;:::i;:::-;;:::i;34686:159::-;;;;;;;;;;-1:-1:-1;34686:159:0;;;;;:::i;:::-;;:::i;31277:389::-;;;;;;;;;;-1:-1:-1;31277:389:0;;;;;:::i;:::-;;:::i;31832:158::-;;;;;;;;;;-1:-1:-1;31832:158:0;;;;;:::i;:::-;;:::i;20341:24::-;;;;;;;;;;-1:-1:-1;20341:24:0;;;;-1:-1:-1;;;;;20341:24:0;;;34559:115;34608:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;;;;;;;;;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;34655:5:::1;:11;;;;;-1:-1:-1::0;;;34655:11:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34655:11:0;;;;;-1:-1:-1;;;;;;34655:11:0::1;::::0;;;;;-1:-1:-1;34559:115:0:o;10912:157::-;10997:7;11024:21;11046:14;11024:37;;;;;;:::i;:::-;;;;;;;;;;;;;;11017:44;;10912:157;;;:::o;12153:389::-;12261:39;12285:14;12261:23;:39::i;:::-;12243:15;:57;12235:114;;;;-1:-1:-1;;;12235:114:0;;18775:2:1;12235:114:0;;;18757:21:1;18814:2;18794:18;;;18787:30;18853:34;18833:18;;;18826:62;-1:-1:-1;;;18904:18:1;;;18897:41;18955:19;;12235:114:0;18747:233:1;12235:114:0;12360:17;12380:21;12402:14;12380:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12468:5;12428:28;;;:17;:28;;;;;;:45;;-1:-1:-1;;12428:45:0;;;12380:37;-1:-1:-1;12489:45:0;;;;12508:14;;12380:37;;12489:45;:::i;:::-;;;;;;;;12153:389;;:::o;22634:216::-;22738:10;22709:4;22726:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22726:32:0;;;;;;;;;;:41;;;22783:37;22709:4;;22726:32;;22783:37;;;;22761:6;20601:25:1;;20589:2;20574:18;;20556:76;22783:37:0;;;;;;;;-1:-1:-1;22838:4:0;22634:216;;;;;:::o;34172:150::-;34252:4;34308:6;34276:29;34296:8;34276:19;:29::i;:::-;:38;;34172:150;-1:-1:-1;;;34172:150:0:o;9286:476::-;9398:22;7676:38;;;;;;;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;9448:5:0::1;::::0;-1:-1:-1;;;;;9441:12:0;;::::1;9448:5:::0;::::1;9441:12;;9433:48;;;::::0;-1:-1:-1;;;9433:48:0;;17596:2:1;9433:48:0::1;::::0;::::1;17578:21:1::0;17635:2;17615:18;;;17608:30;-1:-1:-1;;;17654:18:1;;;17647:53;17717:18;;9433:48:0::1;17568:173:1::0;9433:48:0::1;9499:9;9494:261;9510:26:::0;;::::1;9494:261;;;9558:17;9578:21;9600:15;;9616:1;9600:18;;;;;-1:-1:-1::0;;;9600:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;9578:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;9634:19:0;::::1;9667:5;9634:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;:38;;-1:-1:-1;;9634:38:0::1;::::0;;9578:41;-1:-1:-1;9692:51:0::1;9634:19:::0;9713:15;;9729:1;9713:18;;::::1;;;-1:-1:-1::0;;;9713:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;9733:9;9692:51;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;9538:3:0;::::1;::::0;::::1;:::i;:::-;;;;9494:261;;;;9286:476:::0;;;;:::o;8004:293::-;8090:20;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;8123:17:::1;8143:21;8165:14;8143:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;8191:19:0;::::1;;::::0;;;8224:4:::1;8191:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8191:37:0::1;::::0;;::::1;::::0;;8143;-1:-1:-1;8244:45:0::1;::::0;::::1;::::0;8206:3;;8263:14;;8143:37;;8244:45:::1;:::i;:::-;;;;;;;;7924:1;8004:293:::0;;;:::o;33186:222::-;33276:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33323:15:0::1;:25:::0;;;;33359:26:::1;:41:::0;33186:222::o;30464:381::-;30581:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;30663:1:0::1;30636:23;30648:11:::0;30636:9;:23:::1;:::i;:::-;:28;;:55;;;;;30680:11;30668:9;:23;30636:55;30628:64;;;::::0;::::1;;-1:-1:-1::0;30703:26:0::1;:38:::0;;;;30752:28:::1;:42:::0;30805:23:::1;:32:::0;30464:381::o;23146:364::-;-1:-1:-1;;;;;23266:19:0;;23246:4;23266:19;;;:11;:19;;;;;;;;23286:10;23266:31;;;;;;;;-1:-1:-1;;23266:46:0;23263:180;;23362:69;;;;;;;;;;;-1:-1:-1;;;23362:69:0;;;;;;;;-1:-1:-1;;;;;23362:19:0;;-1:-1:-1;23362:19:0;;;:11;:19;;;;;23382:10;23362:31;;;;;;;;;;:69;;23398:6;;23362:35;:69::i;:::-;-1:-1:-1;;;;;23328:19:0;;;;;;:11;:19;;;;;;;;23348:10;23328:31;;;;;;;:103;23263:180;23462:40;23476:6;23484:9;23495:6;23462:13;:40::i;:::-;23455:47;;23146:364;;;;;;:::o;33835:142::-;33963:4;;-1:-1:-1;;;;;33963:4:0;33888:7;22466:18;;;:9;:18;;;;;;33915:54;;33942:4;;-1:-1:-1;;;;;33942:4:0;22448:7;22466:18;;;:9;:18;;;;;;33915:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33908:61;;33835:142;:::o;33416:222::-;33518:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;33565:11:0::1;::::0;:65:::1;::::0;-1:-1:-1;;;33565:65:0;;::::1;::::0;::::1;15357:25:1::0;;;15398:18;;;15391:34;;;33565:11:0::1;::::0;;::::1;-1:-1:-1::0;;;;;33565:11:0::1;::::0;:35:::1;::::0;15330:18:1;;33565:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33416:222:::0;;;:::o;34853:142::-;34918:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34965:10:0::1;:22:::0;34853:142::o;22858:116::-;22913:4;22937:29;22945:7;-1:-1:-1;;22937:7:0;:29::i;10246:154::-;-1:-1:-1;;;;;10352:19:0;;10328:4;10352:19;;;:14;:19;;;;;10328:4;10380:10;10372:19;;;;;;-1:-1:-1;;;10372:19:0;;;;;;;;;10352:40;;;;;;;;;;;-1:-1:-1;10352:40:0;;;;;10246:154;-1:-1:-1;;;10246:154:0:o;31085:184::-;31144:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;31224:4:::1;31209:12;;:19;;;;:::i;:::-;31199:6;:29;;31191:38;;;::::0;::::1;;-1:-1:-1::0;31240:12:0::1;:21:::0;31085:184::o;31674:150::-;31750:25;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;31788:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;31788:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31674:150::o;29320:335::-;29414:18;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;29463:4:0::1;::::0;29445:23:::1;::::0;29455:6;;-1:-1:-1;;;;;29463:4:0::1;29445:9;:23::i;:::-;29482:24;29479:169;;;29553:15;29522:28;:46:::0;29612:23:::1;::::0;29588:48:::1;::::0;20601:25:1;;;29588:48:0::1;::::0;20589:2:1;20574:18;29588:48:0::1;;;;;;;29479:169;29320:335:::0;;;:::o;11395:166::-;11464:4;11488:17;:56;11506:21;11528:14;11506:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11488:56;;;;;;;;;;-1:-1:-1;11488:56:0;:65;;;;;-1:-1:-1;;11395:166:0:o;8846:361::-;8934:22;7676:38;;;;;;;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;8984:5:0::1;::::0;-1:-1:-1;;;;;8977:12:0;;::::1;8984:5:::0;::::1;8977:12;;8969:48;;;::::0;-1:-1:-1;;;8969:48:0;;17596:2:1;8969:48:0::1;::::0;::::1;17578:21:1::0;17635:2;17615:18;;;17608:30;-1:-1:-1;;;17654:18:1;;;17647:53;17717:18;;8969:48:0::1;17568:173:1::0;8969:48:0::1;9030:17;9050:21;9072:14;9050:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;-1:-1:-1;;;;;9098:19:0;::::1;9131:5;9098:19:::0;;;:14:::1;:19:::0;;;;;:30;;;;;;;;;:38;;-1:-1:-1;;9098:38:0::1;::::0;;9050:37;-1:-1:-1;9152:47:0::1;::::0;::::1;::::0;9113:3;;9173:14;;9050:37;;9152:47:::1;:::i;31998:702::-:0;32177:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;32224:12:0::1;:28:::0;;;32263:10:::1;:24:::0;;;32298:13:::1;:30:::0;;;32339:12:::1;:28:::0;;;32392:69:::1;32354:13:::0;32392:50:::1;32314:14:::0;32392:50;32239:13;32276:11;32392:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;32378:11;:83:::0;32472:14:::1;:32:::0;;;32515:12:::1;:28:::0;;;32577:19:::1;32594:2;32489:15:::0;32577:19:::1;:::i;:::-;32562:11;;:34;;32554:63;;;::::0;-1:-1:-1;;;32554:63:0;;17251:2:1;32554:63:0::1;::::0;::::1;17233:21:1::0;17290:2;17270:18;;;17263:30;-1:-1:-1;;;17309:18:1;;;17302:46;17365:18;;32554:63:0::1;17223:166:1::0;32554:63:0::1;32669:1;32652:14;;:18;;;;:::i;:::-;32636:12;;:34;;32628:64;;;::::0;-1:-1:-1;;;32628:64:0;;19885:2:1;32628:64:0::1;::::0;::::1;19867:21:1::0;19924:2;19904:18;;;19897:30;-1:-1:-1;;;19943:18:1;;;19936:47;20000:18;;32628:64:0::1;19857:167:1::0;11662:406:0;11758:26;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;11797:17:::1;11817:21;11839:14;11817:37;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;-1:-1:-1;11865:17:0::1;11885:30;11911:4:::0;11892:15:::1;11885:30;:::i;:::-;11957:32;::::0;;;;::::1;::::0;;11972:4:::1;11957:32:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;11926:28:0;;;:17:::1;:28:::0;;;;;;:63;;;;;;-1:-1:-1;;11926:63:0;;;;::::1;;-1:-1:-1::0;;11926:63:0;;::::1;::::0;;;::::1;;;::::0;;12005:55;11957:32;;-1:-1:-1;12005:55:0::1;::::0;::::1;::::0;12022:14;;11926:28;;11957:32;;12005:55:::1;:::i;:::-;;;;;;;;7924:1;;11662:406:::0;;;:::o;33646:177::-;33714:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;33776:7:::1;33769:3;:14;;33761:23;;;::::0;::::1;;-1:-1:-1::0;33795:14:0::1;:20:::0;33646:177::o;32708:267::-;32819:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;32866:21:0::1;:46:::0;;-1:-1:-1;;;;;32866:46:0;;::::1;-1:-1:-1::0;;;;;;32866:46:0;;::::1;;::::0;;;32923:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;32708:267::o;22982:156::-;23062:4;23086:44;23100:10;23112:9;23123:6;23086:13;:44::i;8374:408::-;8484:20;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;;8522:9:::1;8517:258;8533:26:::0;;::::1;8517:258;;;8581:17;8601:21;8623:15;;8639:1;8623:18;;;;;-1:-1:-1::0;;;8623:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;8601:41;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;8657:19:0;::::1;;::::0;;;8690:4:::1;8657:19:::0;;;;;;:30;;;;;;;;;;:37;;-1:-1:-1;;8657:37:0::1;::::0;;::::1;::::0;;;8601:41;-1:-1:-1;8714:49:0::1;8657:19:::0;8733:15;;8749:1;8733:18;;::::1;;;-1:-1:-1::0;;;8733:18:0::1;;;;;;;;;;;;;;;;;;;;:::i;:::-;8753:9;8714:49;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;8561:3:0;::::1;::::0;::::1;:::i;:::-;;;;8517:258;;29667:128:::0;29724:18;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;29786:1:0::1;29755:28;:32:::0;29667:128::o;20403:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20403:22:0;;-1:-1:-1;20403:22:0;:::o;34422:125::-;34476:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34523:5:0::1;:16:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34523:16:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34523:16:0::1;-1:-1:-1::0;;;;;34523:16:0;;;::::1;::::0;;;::::1;::::0;;34422:125::o;9996:179::-;-1:-1:-1;;;;;10109:19:0;;10085:4;10109:19;;;:14;:19;;;;;;10129:37;;10085:4;;10129:21;;:37;;10151:14;;10129:37;:::i;:::-;;;;;;;;;;;;;;;;;10109:58;;;;;;;;;;-1:-1:-1;10109:58:0;;;;;9996:179;-1:-1:-1;;;9996:179:0:o;33985:::-;34053:7;34080:76;34133:22;:20;:22::i;:::-;34103:16;;-1:-1:-1;;;;;34103:16:0;22448:7;22466:18;;;:9;:18;;;;;;34080:48;;34093:34;;34125:1;34093:31;:34::i;:::-;34080:8;;:12;:48::i;:::-;:52;;:76::i;25841:430::-;25890:7;25910:13;25926:12;;25910:28;;25949:21;25973:78;26035:15;25973:57;26006:23;;25973:28;;:32;;:57;;;;:::i;:78::-;25949:102;;26062:19;26084:88;26163:8;26084:74;26129:28;;26084:40;26097:26;;26084:8;:12;;:40;;;;:::i;:88::-;26062:110;;26190:73;26203:59;26238:23;;26203:30;26219:13;26203:11;:15;;:30;;;;:::i;:59::-;26190:8;;:12;:73::i;:::-;26183:80;;;;;25841:430;:::o;32983:195::-;33067:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;33114:11:0::1;:22:::0;;-1:-1:-1;;33114:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;33147:13:::1;:23:::0;32983:195::o;11141:186::-;11225:7;11252:17;:56;11270:21;11292:14;11270:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11252:56;;;;;;;;;;-1:-1:-1;11252:56:0;:67;;;;;;;;-1:-1:-1;;11141:186:0:o;34330:80::-;34375:11;;;;;;;;;-1:-1:-1;;;;;34375:11:0;-1:-1:-1;;;;;34375:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34330:80::o;25499:334::-;25555:7;25596:12;25578:10;;25591:1;25578:14;;;;:::i;:::-;:30;25575:67;;25618:14;;:21;;25637:1;25618:18;:21::i;25575:67::-;25655:7;:86;;;;;25726:15;25666:57;25699:23;;25666:28;;:32;;:57;;;;:::i;:::-;:75;25655:86;25652:120;;;25751:18;:16;:18::i;25652:120::-;25789:7;:36;;25814:11;;25789:36;;;-1:-1:-1;;25799:12:0;;;25499:334::o;10491:343::-;9877:4;9912:5;-1:-1:-1;;;;;9912:5:0;7477:10;9901:16;7461:51;;;;-1:-1:-1;;;7461:51:0;;19187:2:1;7461:51:0;;;19169:21:1;19226:2;19206:18;;;19199:30;-1:-1:-1;;;19245:18:1;;;19238:49;19304:18;;7461:51:0;19159:169:1;7461:51:0;10567:16:::1;10586:5:::0;;-1:-1:-1;;;;;10602:11:0;;::::1;-1:-1:-1::0;;;;;;10602:11:0;::::1;;::::0;;10586:5:::1;::::0;10624:150:::1;5365:2;10640:1;:19;10624:150;;;-1:-1:-1::0;;;;;10681:24:0;;::::1;10711:5;10681:24:::0;;;:14:::1;:24;::::0;;;;;;;:27;;;;;;;;:35;;-1:-1:-1;;10681:35:0;;::::1;::::0;;;10746:5;;;;::::1;10731:21:::0;;;;;;;;:24;;;;;;;;;:31;;;;::::1;;::::0;;10706:1;10661:3:::1;10706:1:::0;10661:3:::1;:::i;:::-;;;;10624:150;;;-1:-1:-1::0;10820:5:0::1;::::0;10789:37:::1;::::0;;-1:-1:-1;;;;;12015:15:1;;;11997:34;;10820:5:0;;::::1;12062:2:1::0;12047:18;;12040:43;10789:37:0::1;::::0;11932:18:1;10789:37:0::1;11914:175:1::0;34686:159:0;34758:34;7676:38;;;;:17;:38;;-1:-1:-1;;;;;;;;;;;7676:47:0;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;34805:21:0::1;:32:::0;;-1:-1:-1;;34805:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34686:159::o;31277:389::-;31358:25;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31404:23:0;::::1;31422:4;31404:23;::::0;::::1;::::0;:53:::1;;-1:-1:-1::0;31441:16:0::1;::::0;-1:-1:-1;;;;;31431:26:0;;::::1;31441:16:::0;::::1;31431:26;;31404:53;31396:62;;;::::0;::::1;;-1:-1:-1::0;;;;;31469:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;31469:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;31513:146:::1;;31538:11;::::0;:31:::1;::::0;-1:-1:-1;;;31538:31:0;;-1:-1:-1;;;;;12294:32:1;;;31538:31:0::1;::::0;::::1;12276:51:1::0;31567:1:0::1;12343:18:1::0;;;12336:34;31538:11:0::1;::::0;;::::1;::::0;;::::1;::::0;:20:::1;::::0;12249:18:1;;31538:31:0::1;12231:145:1::0;31513:146:0::1;31600:11;::::0;-1:-1:-1;;;;;31629:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;31600:47;;-1:-1:-1;;;31600:47:0;;::::1;::::0;::::1;12276:51:1::0;;;;12343:18;;;12336:34;31600:11:0::1;::::0;;::::1;;::::0;:20:::1;::::0;12249:18:1;;31600:47:0::1;12231:145:1::0;31832:158:0;31912:25;7676:38;;;;:17;:38;;;:47;;;7675:48;7667:82;;;;-1:-1:-1;;;7667:82:0;;;;;;;:::i;:::-;7768:39;7784:10;7796;7768:15;:39::i;:::-;7877:21;:42;7907:10;7899:19;;;;;;-1:-1:-1;;;7899:19:0;;;;;;;;;7877:42;;;;;;;;;;;7816:104;;;;;;;;:::i;:::-;;;;;;;;;;;;;7760:162;;;;;-1:-1:-1;;;7760:162:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;31950:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;31950:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31832:158::o;1380:192::-;1466:7;1502:12;1494:6;;;;1486:29;;;;-1:-1:-1;;;1486:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1526:9:0;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;1380:192;-1:-1:-1;;;;;1380:192:0:o;23518:1027::-;23632:6;;23610:4;;23632:6;;23629:63;;;23648:41;23663:6;23671:9;23682:6;23648:14;:41::i;:::-;23641:48;;;;23629:63;23712:28;23725:6;23733;23712:12;:28::i;:::-;23756:16;:14;:16::i;:::-;23753:35;;;23775:10;:8;:10::i;:::-;30920;;:15;;;23803:44;;-1:-1:-1;23831:16:0;;-1:-1:-1;;;;;23818:29:0;;;23831:16;;23818:29;23803:44;23800:93;;;-1:-1:-1;;;;;23858:17:0;;23878:1;23858:17;;;:9;:17;;;;;;23850:30;;;;;;23882:8;:6;:8::i;:::-;23925:53;;;;;;;;;;;-1:-1:-1;;;23925:53:0;;;;;;;;-1:-1:-1;;;;;23925:17:0;;-1:-1:-1;23925:17:0;;;:9;:17;;;;;;;;:53;;23947:6;;23925:21;:53::i;:::-;-1:-1:-1;;;;;23905:17:0;;;;;;:9;:17;;;;;:73;;;;24016:32;23915:6;24038:9;24016:13;:32::i;:::-;:78;;24088:6;24016:78;;;24051:34;24059:6;24067:9;24078:6;24051:7;:34::i;:::-;-1:-1:-1;;;;;24128:20:0;;;;;;:9;:20;;;;;;23991:103;;-1:-1:-1;24128:40:0;;23991:103;24128:24;:40::i;:::-;-1:-1:-1;;;;;24105:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;24185:24;;;;;:16;:24;;;;;;;24181:96;;24216:11;;-1:-1:-1;;;;;24245:17:0;;;;;;;:9;:17;;;;;;;;24216:47;;-1:-1:-1;;;24216:47:0;;;;;12276:51:1;;;;12343:18;;;12336:34;24216:11:0;;;;;;:20;;12249:18:1;;24216:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24212:63;;-1:-1:-1;;;;;24291:27:0;;;;;;:16;:27;;;;;;;;24287:105;;24325:11;;-1:-1:-1;;;;;24357:20:0;;;;;;;:9;:20;;;;;;;;24325:53;;-1:-1:-1;;;24325:53:0;;;;;12276:51:1;;;;12343:18;;;12336:34;24325:11:0;;;;;;:20;;12249:18:1;;24325:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24321:69;;24408:11;;24428:14;;;24408:35;;-1:-1:-1;;;;;;24408:35:0;;;;;20601:25:1;;;;24408:11:0;;;;-1:-1:-1;;;;;24408:11:0;;:19;;20574:18:1;24408:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24404:51;24489:9;-1:-1:-1;;;;;24472:43:0;24481:6;-1:-1:-1;;;;;24472:43:0;;24500:14;24472:43;;;;20601:25:1;;20589:2;20574:18;;20556:76;24472:43:0;;;;;;;;-1:-1:-1;24533:4:0;;23518:1027;-1:-1:-1;;;;23518:1027:0:o;1238:136::-;1296:7;1323:43;1327:1;1330;1323:43;;;;;;;;;;;;;;;;;:3;:43::i;29803:653::-;20931:6;:13;;-1:-1:-1;;20931:13:0;20940:4;20931:13;;;29903:16:::1;::::0;;29917:1:::1;29903:16:::0;;;;;::::1;::::0;;-1:-1:-1;;29903:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29940:4:0::1;::::0;29930:7;;;;-1:-1:-1;;;;;;29940:4:0::1;::::0;29930:7;;-1:-1:-1;29940:4:0::1;::::0;29930:7:::1;;-1:-1:-1::0;;;29930:7:0::1;;;;;;;;;;;;;;:14;-1:-1:-1::0;;;;;29930:14:0::1;;;-1:-1:-1::0;;;;;29930:14:0::1;;;::::0;::::1;29973:4;29955;29960:1;29955:7;;;;;;-1:-1:-1::0;;;29955:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;29955:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29995:6:::1;::::0;:167:::1;::::0;-1:-1:-1;;;29995:167:0;;:6;::::1;::::0;:57:::1;::::0;30061:6;;29995:167:::1;::::0;:6:::1;::::0;30100:4;;30119:2;;30136:15:::1;::::0;29995:167:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29991:458;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;30328:6;30281:54;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;30281:54:0;;::::1;::::0;;;;;;;-1:-1:-1;;;30267:70:0;;::::1;::::0;::::1;;;:::i;29991:458::-;;;30371:66;::::0;-1:-1:-1;;;30371:66:0;;17948:2:1;30371:66:0::1;::::0;::::1;17930:21:1::0;17987:2;17967:18;;;17960:30;18026:34;18006:18;;;17999:62;18097:26;18077:18;;;18070:54;18141:19;;30371:66:0::1;17920:246:1::0;29991:458:0::1;30183:22;::::0;;20811:25:1;;;-1:-1:-1;;;;;20872:32:1;;20867:2;20852:18;;20845:60;30183:22:0::1;::::0;20784:18:1;30183:22:0::1;;;;;;;-1:-1:-1::0;;20949:6:0;:14;;-1:-1:-1;;20949:14:0;;;-1:-1:-1;29803:653:0:o;1051:181::-;1109:7;;1141:5;1145:1;1141;:5;:::i;:::-;1129:17;;1170:1;1165;:6;;1157:46;;;;-1:-1:-1;;;1157:46:0;;16895:2:1;1157:46:0;;;16877:21:1;16934:2;16914:18;;;16907:30;16973:29;16953:18;;;16946:57;17020:18;;1157:46:0;16867:177:1;1578:250:0;1636:7;1660:6;1656:47;;-1:-1:-1;1690:1:0;1683:8;;1656:47;1715:9;1727:5;1731:1;1727;:5;:::i;:::-;1715:17;-1:-1:-1;1760:1:0;1751:5;1755:1;1715:17;1751:5;:::i;:::-;:10;1743:56;;;;-1:-1:-1;;;1743:56:0;;18373:2:1;1743:56:0;;;18355:21:1;18412:2;18392:18;;;18385:30;18451:34;18431:18;;;18424:62;-1:-1:-1;;;18502:18:1;;;18495:31;18543:19;;1743:56:0;18345:223:1;1834:132:0;1892:7;1919:39;1923:1;1926;1919:39;;;;;;;;;;;;;;;;;:3;:39::i;24557:330::-;24687:53;;;;;;;;;;;-1:-1:-1;;;24687:53:0;;;;;;;;-1:-1:-1;;;;;24687:17:0;;24650:4;24687:17;;;:9;:17;;;;;;;:53;;24709:6;;24687:21;:53::i;:::-;-1:-1:-1;;;;;24667:17:0;;;;;;;:9;:17;;;;;;:73;;;;24774:20;;;;;;;:32;;24799:6;24774:24;:32::i;:::-;-1:-1:-1;;;;;24751:20:0;;;;;;;:9;:20;;;;;;;:55;;;;24822:35;;;;;;;;;;24850:6;20601:25:1;;20589:2;20574:18;;20556:76;24822:35:0;;;;;;;;-1:-1:-1;24875:4:0;24557:330;;;;;:::o;24895:166::-;24992:12;;24982:6;:22;;:49;;;-1:-1:-1;;;;;;25008:23:0;;;;;;:15;:23;;;;;;;;24982:49;24974:79;;;;-1:-1:-1;;;24974:79:0;;16549:2:1;24974:79:0;;;16531:21:1;16588:2;16568:18;;;16561:30;-1:-1:-1;;;16607:18:1;;;16600:47;16664:18;;24974:79:0;16521:167:1;24974:79:0;24895:166;;:::o;26940:209::-;27027:16;;26989:4;;-1:-1:-1;;;;;27027:16:0;27013:10;:30;;;;:50;;-1:-1:-1;27057:6:0;;;;27056:7;27013:50;:74;;;;-1:-1:-1;27076:11:0;;;;27013:74;:128;;;;-1:-1:-1;;27128:13:0;;27118:4;27100:24;;;;:9;:24;;;;;;:41;;;26940:209::o;27157:2155::-;20931:6;:13;;-1:-1:-1;;20931:13:0;20940:4;20931:13;;;27252:15:::1;::::0;27269:26:::1;::::0;20931:6;;27236:60:::1;::::0;:15:::1;:60::i;:::-;:79;;27303:12;;27236:79;;;27299:1;27236:79;27206:109;;27326:23;27352:62;27412:1;27352:55;27395:11;;27352:38;27370:19;27352:13;;:17;;:38;;;;:::i;:62::-;27326:88;;27425:20;27448:34;27466:15;27448:13;;:17;;:34;;;;:::i;:::-;27519:16;::::0;;27533:1:::1;27519:16:::0;;;;;::::1;::::0;;27425:57;;-1:-1:-1;27495:21:0::1;::::0;27519:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27519:16:0::1;27495:40;;27564:4;27546;27551:1;27546:7;;;;;;-1:-1:-1::0;;;27546:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;27546:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27590:4:::1;::::0;27580:7;;27590:4;::::1;::::0;27580;;27590;;27580:7;::::1;;;-1:-1:-1::0;;;27580:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;27580:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27669:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27669:188:0;;27631:21:::1;::::0;27669:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27741:12;;27607:21:::1;::::0;27784:4;;27811::::1;::::0;27831:15:::1;::::0;27669:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27665:1640;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;29105:74;29175:1;29127:50;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;29127:50:0;;::::1;::::0;;;;;;;29105:74:::1;::::0;::::1;:::i;:::-;;;;;;;;29056:135;27665:1640;;;;;29218:75;;;;;20231:2:1::0;20213:21;;;20270:2;20250:18;;;20243:30;20309:34;20304:2;20289:18;;20282:62;20380:27;20375:2;20360:18;;20353:55;20440:3;20425:19;;20203:247;29218:75:0::1;;;;;;;;27665:1640;;;27875:17;27895:40;:21;27921:13:::0;27895:25:::1;:40::i;:::-;27875:60:::0;-1:-1:-1;27952:19:0::1;27974:43;27990:26;:19:::0;28014:1:::1;27990:23;:26::i;:::-;27974:11;::::0;;:15:::1;:43::i;:::-;27952:65:::0;-1:-1:-1;28034:26:0::1;28063:58;28119:1;28063:51;27952:65:::0;28063:51;:9;28077:19;28063:13:::1;:34::i;:58::-;28034:87;;28136:27;28166:45;28199:11;28166:28;28180:13;;28166:9;:13;;:28;;;;:::i;:45::-;28136:75;;28226:26;28255:44;28287:11;28255:27;28269:12;;28255:9;:13;;:27;;;;:::i;:44::-;28226:73;;28320:11;;;;;;;;;-1:-1:-1::0;;;;;28320:11:0::1;-1:-1:-1::0;;;;;28320:19:0::1;;28347;28320:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;28403:20:0::1;::::0;28395:77:::1;::::0;-1:-1:-1;;;;;28403:20:0;;::::1;::::0;28462:5:::1;::::0;28437:18;;28395:77:::1;::::0;;;28437:18;28403:20;28462:5;28395:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28492:19:0;;;-1:-1:-1;28489:504:0::1;;28535:6;::::0;28731:21:::1;::::0;28535:274:::1;::::0;-1:-1:-1;;;28535:274:0;;28617:4:::1;28535:274;::::0;::::1;13963:34:1::0;14013:18;;;14006:34;;;28535:6:0::1;14056:18:1::0;;;14049:34;;;14099:18;;;14092:34;-1:-1:-1;;;;;28731:21:0;;::::1;14142:19:1::0;;;14135:44;28775:15:0::1;14195:19:1::0;;;14188:35;28535:6:0;::::1;::::0;:22:::1;::::0;28566:18;;13897:19:1;;28535:274:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;28535:274:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;28535:274:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;28531:447;;28941:17;::::0;;28953:1:::1;15357:25:1::0;;;15413:2;15398:18;;15391:34;28941:17:0::1;::::0;15330:18:1;28941:17:0::1;;;;;;;28531:447;;;-1:-1:-1::0;;28838:48:0::1;::::0;;15357:25:1;;;15413:2;15398:18;;15391:34;;;28838:48:0::1;::::0;-1:-1:-1;15330:18:1;28838:48:0::1;;;;;;;28531:447;29014:29;::::0;20601:25:1;;;29014:29:0::1;::::0;20589:2:1;20574:18;29014:29:0::1;;;;;;;27858:1197;;;;;27665:1640;-1:-1:-1::0;;20949:6:0;:14;;-1:-1:-1;;20949:14:0;;;-1:-1:-1;;;27157:2155:0:o;30951:126::-;31002:12;30989:10;:25;;;31030:39;;;15357:25:1;;;31053:15:0;15413:2:1;15398:18;;15391:34;31030:39:0;;15330:18:1;31030:39:0;;;;;;;30951:126::o;25069:422::-;-1:-1:-1;;;;;25171:19:0;;25150:4;25171:19;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;25194:22:0;;;;;;:11;:22;;;;;;;;25171:45;:60;;;-1:-1:-1;30920:10:0;;:15;25171:60;25167:78;;;-1:-1:-1;25240:5:0;25233:12;;25167:78;25258:25;25286:5;25258:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25258:33:0;;;;;;;;;;;;;;;;;;;;;;;25309:9;25304:139;25328:8;:15;25324:1;:19;25304:139;;;25379:8;25388:1;25379:11;;;;;;-1:-1:-1;;;25379:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25369:21:0;:6;-1:-1:-1;;;;;25369:21:0;;:49;;;;25407:8;25416:1;25407:11;;;;;;-1:-1:-1;;;25407:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25394:24:0;:9;-1:-1:-1;;;;;25394:24:0;;25369:49;25365:66;;;25427:4;25420:11;;;;;;25365:66;25345:3;;;;:::i;:::-;;;;25304:139;;;-1:-1:-1;;25462:21:0;;;;;25069:422;-1:-1:-1;;;25069:422:0:o;26279:374::-;26365:7;26385:17;26405:62;26452:14;;26405:42;26416:30;26428:17;26435:9;26428:6;:17::i;26416:30::-;26405:6;;:10;:42::i;:62::-;26525:4;26507:24;;;;:9;:24;;;;;;26385:82;;-1:-1:-1;26507:39:0;;26385:82;26507:28;:39::i;:::-;26498:4;26480:24;;;;:9;:24;;;;;;;:66;;;;26562:42;;-1:-1:-1;;;;;26562:42:0;;;;;;;26594:9;20601:25:1;;20589:2;20574:18;;20556:76;26562:42:0;;;;;;;;26624:21;:6;26635:9;26624:10;:21::i;1972:345::-;2058:7;2160:12;2153:5;2145:28;;;;-1:-1:-1;;;2145:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2184:9:0;2196:5;2200:1;2196;:5;:::i;26669:263::-;26727:4;26744:25;26772:5;26744:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26744:33:0;;;;;;;;;;;;;;;;;;;;;;;26793:9;26788:114;26812:8;:15;26808:1;:19;26788:114;;;26866:8;26875:1;26866:11;;;;;;-1:-1:-1;;;26866:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26853:24:0;:9;-1:-1:-1;;;;;26853:24:0;;26849:41;;;-1:-1:-1;26886:4:0;;26669:263;-1:-1:-1;;;26669:263:0:o;26849:41::-;26829:3;;;;:::i;:::-;;;;26788:114;;;-1:-1:-1;26919:5:0;;26669:263;-1:-1:-1;;;26669:263:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:576::-;222:5;275:3;268:4;260:6;256:17;252:27;242:2;;297:5;290;283:20;242:2;337:6;324:20;363:18;359:2;356:26;353:2;;;385:18;;:::i;:::-;434:2;428:9;446:67;501:2;482:13;;-1:-1:-1;;478:27:1;507:4;474:38;428:9;446:67;:::i;:::-;537:2;529:6;522:18;583:3;576:4;571:2;563:6;559:15;555:26;552:35;549:2;;;604:5;597;590:20;549:2;672;665:4;657:6;653:17;646:4;638:6;634:17;621:54;695:15;;;712:4;691:26;684:41;;;;699:6;232:523;-1:-1:-1;;232:523:1:o;760:257::-;819:6;872:2;860:9;851:7;847:23;843:32;840:2;;;893:6;885;878:22;840:2;937:9;924:23;956:31;981:5;956:31;:::i;1292:398::-;1360:6;1368;1421:2;1409:9;1400:7;1396:23;1392:32;1389:2;;;1442:6;1434;1427:22;1389:2;1486:9;1473:23;1505:31;1530:5;1505:31;:::i;:::-;1555:5;-1:-1:-1;1612:2:1;1597:18;;1584:32;1625:33;1584:32;1625:33;:::i;:::-;1677:7;1667:17;;;1379:311;;;;;:::o;1695:466::-;1772:6;1780;1788;1841:2;1829:9;1820:7;1816:23;1812:32;1809:2;;;1862:6;1854;1847:22;1809:2;1906:9;1893:23;1925:31;1950:5;1925:31;:::i;:::-;1975:5;-1:-1:-1;2032:2:1;2017:18;;2004:32;2045:33;2004:32;2045:33;:::i;:::-;1799:362;;2097:7;;-1:-1:-1;;;2151:2:1;2136:18;;;;2123:32;;1799:362::o;2166:812::-;2273:6;2281;2289;2342:2;2330:9;2321:7;2317:23;2313:32;2310:2;;;2363:6;2355;2348:22;2310:2;2407:9;2394:23;2426:31;2451:5;2426:31;:::i;:::-;2476:5;-1:-1:-1;2532:2:1;2517:18;;2504:32;2555:18;2585:14;;;2582:2;;;2617:6;2609;2602:22;2582:2;2660:6;2649:9;2645:22;2635:32;;2705:7;2698:4;2694:2;2690:13;2686:27;2676:2;;2732:6;2724;2717:22;2676:2;2777;2764:16;2803:2;2795:6;2792:14;2789:2;;;2824:6;2816;2809:22;2789:2;2882:7;2877:2;2867:6;2864:1;2860:14;2856:2;2852:23;2848:32;2845:45;2842:2;;;2908:6;2900;2893:22;2842:2;2944;2940;2936:11;2926:21;;2966:6;2956:16;;;;;2300:678;;;;;:::o;2983:325::-;3048:6;3056;3109:2;3097:9;3088:7;3084:23;3080:32;3077:2;;;3130:6;3122;3115:22;3077:2;3174:9;3161:23;3193:31;3218:5;3193:31;:::i;:::-;3243:5;-1:-1:-1;3267:35:1;3298:2;3283:18;;3267:35;:::i;:::-;3257:45;;3067:241;;;;;:::o;3313:431::-;3395:6;3403;3456:2;3444:9;3435:7;3431:23;3427:32;3424:2;;;3477:6;3469;3462:22;3424:2;3521:9;3508:23;3540:31;3565:5;3540:31;:::i;:::-;3590:5;-1:-1:-1;3647:2:1;3632:18;;3619:32;3682:1;3670:14;;3660:2;;3703:6;3695;3688:22;3749:477;3827:6;3835;3888:2;3876:9;3867:7;3863:23;3859:32;3856:2;;;3909:6;3901;3894:22;3856:2;3953:9;3940:23;3972:31;3997:5;3972:31;:::i;:::-;4022:5;-1:-1:-1;4078:2:1;4063:18;;4050:32;4105:18;4094:30;;4091:2;;;4142:6;4134;4127:22;4091:2;4170:50;4212:7;4203:6;4192:9;4188:22;4170:50;:::i;:::-;4160:60;;;3846:380;;;;;:::o;4231:325::-;4299:6;4307;4360:2;4348:9;4339:7;4335:23;4331:32;4328:2;;;4381:6;4373;4366:22;4328:2;4425:9;4412:23;4444:31;4469:5;4444:31;:::i;:::-;4494:5;4546:2;4531:18;;;;4518:32;;-1:-1:-1;;;4318:238:1:o;4561:190::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:2;;;4691:6;4683;4676:22;4638:2;4719:26;4735:9;4719:26;:::i;4756:258::-;4821:6;4829;4882:2;4870:9;4861:7;4857:23;4853:32;4850:2;;;4903:6;4895;4888:22;4850:2;4931:26;4947:9;4931:26;:::i;5019:342::-;5088:6;5141:2;5129:9;5120:7;5116:23;5112:32;5109:2;;;5162:6;5154;5147:22;5109:2;5207:9;5194:23;5240:18;5232:6;5229:30;5226:2;;;5277:6;5269;5262:22;5226:2;5305:50;5347:7;5338:6;5327:9;5323:22;5305:50;:::i;:::-;5295:60;5099:262;-1:-1:-1;;;;5099:262:1:o;5366:529::-;5443:6;5451;5504:2;5492:9;5483:7;5479:23;5475:32;5472:2;;;5525:6;5517;5510:22;5472:2;5570:9;5557:23;5599:18;5640:2;5632:6;5629:14;5626:2;;;5661:6;5653;5646:22;5626:2;5689:50;5731:7;5722:6;5711:9;5707:22;5689:50;:::i;:::-;5679:60;;5789:2;5778:9;5774:18;5761:32;5748:45;;5833:2;5826:5;5822:14;5815:5;5812:25;5802:2;;5856:6;5848;5841:22;5802:2;;5884:5;5874:15;;;5462:433;;;;;:::o;5900:190::-;5959:6;6012:2;6000:9;5991:7;5987:23;5983:32;5980:2;;;6033:6;6025;6018:22;5980:2;-1:-1:-1;6061:23:1;;5970:120;-1:-1:-1;5970:120:1:o;6095:258::-;6160:6;6168;6221:2;6209:9;6200:7;6196:23;6192:32;6189:2;;;6242:6;6234;6227:22;6189:2;6283:9;6270:23;6260:33;;6312:35;6343:2;6332:9;6328:18;6312:35;:::i;6358:258::-;6426:6;6434;6487:2;6475:9;6466:7;6462:23;6458:32;6455:2;;;6508:6;6500;6493:22;6455:2;-1:-1:-1;;6536:23:1;;;6606:2;6591:18;;;6578:32;;-1:-1:-1;6445:171:1:o;6621:326::-;6698:6;6706;6714;6767:2;6755:9;6746:7;6742:23;6738:32;6735:2;;;6788:6;6780;6773:22;6735:2;-1:-1:-1;;6816:23:1;;;6886:2;6871:18;;6858:32;;-1:-1:-1;6937:2:1;6922:18;;;6909:32;;6725:222;-1:-1:-1;6725:222:1:o;6952:316::-;7040:6;7048;7056;7109:2;7097:9;7088:7;7084:23;7080:32;7077:2;;;7130:6;7122;7115:22;7077:2;7164:9;7158:16;7148:26;;7214:2;7203:9;7199:18;7193:25;7183:35;;7258:2;7247:9;7243:18;7237:25;7227:35;;7067:201;;;;;:::o;7273:533::-;7377:6;7385;7393;7401;7409;7417;7470:3;7458:9;7449:7;7445:23;7441:33;7438:2;;;7492:6;7484;7477:22;7438:2;-1:-1:-1;;7520:23:1;;;7590:2;7575:18;;7562:32;;-1:-1:-1;7641:2:1;7626:18;;7613:32;;7692:2;7677:18;;7664:32;;-1:-1:-1;7743:3:1;7728:19;;7715:33;;-1:-1:-1;7795:3:1;7780:19;7767:33;;-1:-1:-1;7428:378:1;-1:-1:-1;7428:378:1:o;7811:463::-;7864:3;7902:5;7896:12;7929:6;7924:3;7917:19;7955:4;7984:2;7979:3;7975:12;7968:19;;8021:2;8014:5;8010:14;8042:3;8054:195;8068:6;8065:1;8062:13;8054:195;;;8133:13;;-1:-1:-1;;;;;8129:39:1;8117:52;;8189:12;;;;8224:15;;;;8165:1;8083:9;8054:195;;;-1:-1:-1;8265:3:1;;7872:402;-1:-1:-1;;;;;7872:402:1:o;8279:258::-;8321:3;8359:5;8353:12;8386:6;8381:3;8374:19;8402:63;8458:6;8451:4;8446:3;8442:14;8435:4;8428:5;8424:16;8402:63;:::i;:::-;8519:2;8498:15;-1:-1:-1;;8494:29:1;8485:39;;;;8526:4;8481:50;;8329:208;-1:-1:-1;;8329:208:1:o;8542:275::-;8727:6;8719;8714:3;8701:33;8683:3;8753:16;;8778:15;;;8753:16;8691:126;-1:-1:-1;8691:126:1:o;8822:276::-;8953:3;8991:6;8985:13;9007:53;9053:6;9048:3;9041:4;9033:6;9029:17;9007:53;:::i;:::-;9076:16;;;;;8961:137;-1:-1:-1;;8961:137:1:o;9103:445::-;9365:28;9360:3;9353:41;9335:3;9423:6;9417:13;9439:62;9494:6;9489:2;9484:3;9480:12;9473:4;9465:6;9461:17;9439:62;:::i;:::-;9521:16;;;;9539:2;9517:25;;9343:205;-1:-1:-1;;9343:205:1:o;9553:446::-;9815:29;9810:3;9803:42;9785:3;9874:6;9868:13;9890:62;9945:6;9940:2;9935:3;9931:12;9924:4;9916:6;9912:17;9890:62;:::i;:::-;9972:16;;;;9990:2;9968:25;;9793:206;-1:-1:-1;;9793:206:1:o;10214:1358::-;10473:34;10468:3;10461:47;10443:3;10527:2;-1:-1:-1;;;10554:2:1;10549:3;10545:12;10538:32;10589:2;10611:3;10646:6;10640:13;10676:3;10698:1;10726:9;10722:2;10718:18;10708:28;;10786:2;10775:9;10771:18;10808;10798:2;;10852:4;10844:6;10840:17;10830:27;;10798:2;10905;10897:6;10894:14;10874:18;10871:38;10868:2;;;-1:-1:-1;;;10932:33:1;;10988:4;10985:1;10978:15;11018:4;10939:3;11006:17;10868:2;11049:18;11076:122;;;;11212:1;11207:340;;;;11042:505;;11076:122;-1:-1:-1;;11118:24:1;;11104:12;;;11097:46;11167:16;;;11163:25;;;-1:-1:-1;11076:122:1;;11207:340;22531:4;22550:17;;;22600:4;22584:21;;11302:3;11318:174;11332:6;11329:1;11326:13;11318:174;;;11419:14;;11401:11;;;11397:20;;11390:44;11462:16;;;;11347:10;;11318:174;;;11322:3;;11534:2;11525:6;11520:3;11516:16;11512:25;11505:32;;11042:505;-1:-1:-1;11563:3:1;;10451:1121;-1:-1:-1;;;;;;;;;10451:1121:1:o;12381:564::-;-1:-1:-1;;;;;12596:32:1;;12578:51;;12665:2;12660;12645:18;;12638:30;;;12684:18;;12677:34;;;12704:6;12754;12748:3;12733:19;;12720:49;12559:4;12819;12813:3;12804:6;12793:9;12789:22;12785:32;12778:46;12892:3;12885:2;12881:7;12876:2;12868:6;12864:15;12860:29;12849:9;12845:45;12841:55;12833:63;;12932:6;12927:2;12916:9;12912:18;12905:34;12568:377;;;;;;;:::o;12950:388::-;-1:-1:-1;;;;;13155:32:1;;13137:51;;13224:2;13219;13204:18;;13197:30;;;-1:-1:-1;;13244:45:1;;13270:18;;13262:6;13244:45;:::i;:::-;13236:53;;13325:6;13320:2;13309:9;13305:18;13298:34;13127:211;;;;;;:::o;14652:510::-;14923:6;14912:9;14905:25;14966:3;14961:2;14950:9;14946:18;14939:31;14886:4;14987:57;15039:3;15028:9;15024:19;15016:6;14987:57;:::i;:::-;-1:-1:-1;;;;;15080:32:1;;;;15075:2;15060:18;;15053:60;-1:-1:-1;15144:2:1;15129:18;15122:34;14979:65;14895:267;-1:-1:-1;;14895:267:1:o;15436:220::-;15585:2;15574:9;15567:21;15548:4;15605:45;15646:2;15635:9;15631:18;15623:6;15605:45;:::i;15661:291::-;15838:2;15827:9;15820:21;15801:4;15858:45;15899:2;15888:9;15884:18;15876:6;15858:45;:::i;:::-;15850:53;;15939:6;15934:2;15923:9;15919:18;15912:34;15810:142;;;;;:::o;15957:385::-;16160:2;16149:9;16142:21;16123:4;16180:45;16221:2;16210:9;16206:18;16198:6;16180:45;:::i;:::-;16172:53;;16261:6;16256:2;16245:9;16241:18;16234:34;16316:18;16308:6;16304:31;16299:2;16288:9;16284:18;16277:59;16132:210;;;;;;:::o;19333:345::-;19535:2;19517:21;;;19574:2;19554:18;;;19547:30;-1:-1:-1;;;19608:2:1;19593:18;;19586:51;19669:2;19654:18;;19507:171::o;20916:582::-;21215:6;21204:9;21197:25;21258:6;21253:2;21242:9;21238:18;21231:34;21301:3;21296:2;21285:9;21281:18;21274:31;21178:4;21322:57;21374:3;21363:9;21359:19;21351:6;21322:57;:::i;:::-;-1:-1:-1;;;;;21415:32:1;;;;21410:2;21395:18;;21388:60;-1:-1:-1;21479:3:1;21464:19;21457:35;21314:65;21187:311;-1:-1:-1;;;21187:311:1:o;21945:534::-;22023:4;22029:6;22089:11;22076:25;22183:2;22179:7;22168:8;22152:14;22148:29;22144:43;22124:18;22120:68;22110:2;;22205:4;22199;22192:18;22110:2;22235:33;;22287:20;;;-1:-1:-1;22330:18:1;22319:30;;22316:2;;;22365:4;22359;22352:18;22316:2;22401:4;22389:17;;-1:-1:-1;22432:14:1;22428:27;;;22418:38;;22415:2;;;22469:1;22466;22459:12;22415:2;22040:439;;;;;:::o;22616:128::-;22656:3;22687:1;22683:6;22680:1;22677:13;22674:2;;;22693:18;;:::i;:::-;-1:-1:-1;22729:9:1;;22664:80::o;22749:236::-;22788:3;22816:18;22861:2;22858:1;22854:10;22891:2;22888:1;22884:10;22922:3;22918:2;22914:12;22909:3;22906:21;22903:2;;;22930:18;;:::i;:::-;22966:13;;22796:189;-1:-1:-1;;;;22796:189:1:o;22990:217::-;23030:1;23056;23046:2;;-1:-1:-1;;;23081:31:1;;23135:4;23132:1;23125:15;23163:4;23088:1;23153:15;23046:2;-1:-1:-1;23192:9:1;;23036:171::o;23212:168::-;23252:7;23318:1;23314;23310:6;23306:14;23303:1;23300:21;23295:1;23288:9;23281:17;23277:45;23274:2;;;23325:18;;:::i;:::-;-1:-1:-1;23365:9:1;;23264:116::o;23385:125::-;23425:4;23453:1;23450;23447:8;23444:2;;;23458:18;;:::i;:::-;-1:-1:-1;23495:9:1;;23434:76::o;23515:258::-;23587:1;23597:113;23611:6;23608:1;23605:13;23597:113;;;23687:11;;;23681:18;23668:11;;;23661:39;23633:2;23626:10;23597:113;;;23728:6;23725:1;23722:13;23719:2;;;-1:-1:-1;;23763:1:1;23745:16;;23738:27;23568:205::o;23778:249::-;23888:2;23869:13;;-1:-1:-1;;23865:27:1;23853:40;;23923:18;23908:34;;23944:22;;;23905:62;23902:2;;;23970:18;;:::i;:::-;24006:2;23999:22;-1:-1:-1;;23825:202:1:o;24032:135::-;24071:3;-1:-1:-1;;24092:17:1;;24089:2;;;24112:18;;:::i;:::-;-1:-1:-1;24159:1:1;24148:13;;24079:88::o;24172:127::-;24233:10;24228:3;24224:20;24221:1;24214:31;24264:4;24261:1;24254:15;24288:4;24285:1;24278:15;24304:127;24365:10;24360:3;24356:20;24353:1;24346:31;24396:4;24393:1;24386:15;24420:4;24417:1;24410:15;24436:185;24471:3;24513:1;24495:16;24492:23;24489:2;;;24563:1;24558:3;24553;24538:27;24594:10;24589:3;24585:20;24489:2;24479:142;:::o;24626:671::-;24665:3;24707:4;24689:16;24686:26;24683:2;;;24673:624;:::o;24683:2::-;24749;24743:9;-1:-1:-1;;24814:16:1;24810:25;;24807:1;24743:9;24786:50;24865:4;24859:11;24889:16;24924:18;24995:2;24988:4;24980:6;24976:17;24973:25;24968:2;24960:6;24957:14;24954:45;24951:2;;;25002:5;;;;;24673:624;:::o;24951:2::-;25039:6;25033:4;25029:17;25018:28;;25075:3;25069:10;25102:2;25094:6;25091:14;25088:2;;;25108:5;;;;;;24673:624;:::o;25088:2::-;25192;25173:16;25167:4;25163:27;25159:36;25152:4;25143:6;25138:3;25134:16;25130:27;25127:69;25124:2;;;25199:5;;;;;;24673:624;:::o;25124:2::-;25215:57;25266:4;25257:6;25249;25245:19;25241:30;25235:4;25215:57;:::i;:::-;-1:-1:-1;25288:3:1;;24673:624;-1:-1:-1;;;;;24673:624:1:o;25302:131::-;-1:-1:-1;;;;;25377:31:1;;25367:42;;25357:2;;25423:1;25420;25413:12;25357:2;25347:86;:::o

Swarm Source

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