Contract 0x99919114a6e249a9d7862422211d37c41ea29589 1

 

Contract Overview

Balance:
1.090129502568706071 BNB

BNB Value:
$637.54 (@ $584.83/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd68cc836766062fc4c0aa9230410c092921965c83f3f4b80c0e55ac3ccf80ef5Approve132563552021-12-06 23:19:558 hrs 43 mins ago0x12e424d24dfa089af8c566e45ded16bfc3512027 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x27c8976bf1c04b6fbba7d18240b673b5ea72ec781f1a8ef9e4118ffe11cdddc7Transfer132506462021-12-06 18:32:5613 hrs 30 mins ago0x9e3e287d285046abdc387ae26d5c0b3d3136ab07 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.001243245
0x715730edc1da099318f83141a1a7e82e5d6c3afebe66864937eb991c4a8ab1e4Approve132496542021-12-06 17:43:0914 hrs 19 mins ago0xd93e7fbc41f2cacee49be73bbd13c3a3366477c8 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.00032312
0xda3f351230eb73f2c9fd18a43d95c8634b6183f59aad7586347ce8936a41301fApprove132496452021-12-06 17:42:4114 hrs 20 mins ago0xea8650b291b77233ec338e394662b634636582c1 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x3c6e41248bf2bb5e27702526af3dec597c706c3c9b7dd873113241b3e32f34eaApprove132444652021-12-06 13:02:4619 hrs ago0x9267f94c5204cb9956b1b8be05a1c1396e7b3ac2 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0xb5da4a115b3dd0e969c38673542098b60c9031aa5ec54569cd22761509da3d69Approve132414722021-12-06 10:25:4921 hrs 37 mins ago0x3fc6731aa962e215a8480188704a3e23d9603891 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x90cf2bdacca68058376d63e4127e902f6ad4d379f4ba761a218b83e5efe0a7aaApprove132390222021-12-06 8:20:2023 hrs 42 mins ago0xa3f19eaad1bbfe9c21fb0d5e3bde6868670cc58f IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.00027696
0xd0b20181a9d4ab602876558d98d4cc4cd2dfaea0707d1567860bc4e395f88f44Approve132384602021-12-06 7:51:001 day 12 mins ago0xb0e6827e33d948df19f6bfca825682883390232c IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x3cd1c7ffc21c34cd3cad129217bd702c257e05d47592898cec725dbcbb341597Approve132261692021-12-05 21:27:081 day 10 hrs ago0x8061ac739be4df83570143c71ef005b8b5d8230d IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x6aa264b561fe3bdc1b0abb8ae9f75702de6ffc363153bccb78801fdc1f2213adApprove132256842021-12-05 21:02:521 day 11 hrs ago0x66bae105057e789b92e926c41b055d3951957c12 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x2c44114087a87d591228d5d3605c7ba782afff6a8a84538918cd35a50901e973Approve132125342021-12-05 9:37:231 day 22 hrs ago0xca5b2780f65dc9e241dc015478afa43c5aa78645 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0xe92b59ca1911ac7cd40bc6dc6c4f5579efb176d9e09abd62ea13d90d304f979fRescue BNB132077812021-12-05 5:38:412 days 2 hrs ago0x70117981e4c9fa0309a9bc83412305281db5af8b IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0001521
0xad15408d3f467657e77bfbd983db8c4d55fa1c3a6f08e315adc43308717aa3c8Approve132045122021-12-05 2:54:112 days 5 hrs ago0x2e845657785e738a41db2fe7e6914c545a077ebb IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.00032312
0x56434dd1a507f4ae4d97752a9cdd38cb9e9196b93e6883402eea56eb2424ba00Approve131909892021-12-04 15:36:192 days 16 hrs ago0x9c0982a9b0d0eabbcb08c24a8bfaec058ba488fb IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x03d14a710164390f25b69c5c4dc025f7628f1bddf86475c7283efe4fef82b3b6Approve131846952021-12-04 10:13:052 days 21 hrs ago0xa011c4786a4d96f80c850e74a7496a074e4a8862 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.00032312
0x5c9b6afeab2b6e2650838856babb5e2868f99f8dbda911ae28ef77b5960deaabApprove131823112021-12-04 8:12:482 days 23 hrs ago0xe6c059166e8042a3f7313d9a04ebfc896042155f IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x5ba7bdfc86421c3d29c29cf31cadf4e83dcc6037ea26c310ae01de9fa4160b11Approve131750282021-12-04 2:01:283 days 6 hrs ago0x7bc01f2aad3d73ff1f253f21b78ed833d2a2fdf5 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x5bb624bf1e40980c6126576cc649e668298da3aeac82ab436b85b350579c9476Approve131712132021-12-03 22:50:153 days 9 hrs ago0xe4892e347eec65662d5b867fbc354e8b6ddeb67a IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0xa04e7fd5b5028c4b291111676b555d729098e75274799e44c247e9a508df7cf2Rescue BNB131687982021-12-03 20:48:373 days 11 hrs ago0x70117981e4c9fa0309a9bc83412305281db5af8b IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0001521
0x628d6ba729b04a62983d2a4529333915b7d7bf6254c73b4e4d06b8ff3b33231aRescue BN Bfrom ...131687272021-12-03 20:45:043 days 11 hrs ago0x70117981e4c9fa0309a9bc83412305281db5af8b IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.000169525
0xe0943ce1c59f2dbdea159a10d67f9f948ba4d6ad2e1d9db95fdedd7a3676c5ebApprove131684722021-12-03 20:32:193 days 11 hrs ago0x8c89c7f77d133bb33fadc6d9cca91e3e92f0e7ca IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x817c1d2c2998fce8a8fe65beec26e4fe44665f8571d4d5666fddf5530d48ffd8Approve131683852021-12-03 20:27:513 days 11 hrs ago0x5aaee04831a08b893d41c8afcd82accb539b5e95 IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
0x2d05c85dfe9e6960069492c2117cf8f70c397d92cc31bbc0d7802e5a09e60019Transfer131678202021-12-03 19:59:083 days 12 hrs ago0x2c99012d878505c8f767dcb4bb2e62b2b7d4b70a IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.000430655
0xea848a60174f3d67a717dca0a50e249d9ea52d0bc3845821f6584cc1bd301534Approve131674802021-12-03 19:42:063 days 12 hrs ago0x93355b59fbc1f2f5f34a311b5c947e3121e0ce6e IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0001348
0xd4ed3d56dbd5f8730508d8955661707eeef55e73cd6980af8cede3fda9bef129Approve131674632021-12-03 19:41:153 days 12 hrs ago0x93355b59fbc1f2f5f34a311b5c947e3121e0ce6e IN  0x99919114a6e249a9d7862422211d37c41ea295890 BNB0.0002308
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb2f280283c3b108131163e09d0f876e7a78ff13d07ade269453d0094d3b19d77132563722021-12-06 23:20:468 hrs 42 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.002336994843745933 BNB
0xb2f280283c3b108131163e09d0f876e7a78ff13d07ade269453d0094d3b19d77132563722021-12-06 23:20:468 hrs 42 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.002336994843745933 BNB
0xb2f280283c3b108131163e09d0f876e7a78ff13d07ade269453d0094d3b19d77132563722021-12-06 23:20:468 hrs 42 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.002336994843745933 BNB
0xb2f280283c3b108131163e09d0f876e7a78ff13d07ade269453d0094d3b19d77132563722021-12-06 23:20:468 hrs 42 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295890.011684974218729668 BNB
0xd59ebac96c0ffea091e09a76be4e6987b47f818b58954bb7b224149709a4d8db132536862021-12-06 21:05:0310 hrs 57 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.006831042415392026 BNB
0xd59ebac96c0ffea091e09a76be4e6987b47f818b58954bb7b224149709a4d8db132536862021-12-06 21:05:0310 hrs 57 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.006831042415392026 BNB
0xd59ebac96c0ffea091e09a76be4e6987b47f818b58954bb7b224149709a4d8db132536862021-12-06 21:05:0310 hrs 57 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.006831042415392026 BNB
0xd59ebac96c0ffea091e09a76be4e6987b47f818b58954bb7b224149709a4d8db132536862021-12-06 21:05:0310 hrs 57 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295890.034155212076960132 BNB
0xd276886e7538c89131152f68ca441de37cabe829f3664dff2b5bf695bcfafcf0132509992021-12-06 18:50:4213 hrs 12 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.293028668138384832 BNB
0xd276886e7538c89131152f68ca441de37cabe829f3664dff2b5bf695bcfafcf0132509992021-12-06 18:50:4213 hrs 12 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.293028668138384832 BNB
0xd276886e7538c89131152f68ca441de37cabe829f3664dff2b5bf695bcfafcf0132509992021-12-06 18:50:4213 hrs 12 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.293028668138384832 BNB
0xd276886e7538c89131152f68ca441de37cabe829f3664dff2b5bf695bcfafcf0132509992021-12-06 18:50:4213 hrs 12 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295891.465143340691924164 BNB
0xa3fbdc294792933962f3eba95c115a19bc1efe374931a266d9717bf3f8ac2224132496752021-12-06 17:44:2014 hrs 18 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.058308392563948306 BNB
0xa3fbdc294792933962f3eba95c115a19bc1efe374931a266d9717bf3f8ac2224132496752021-12-06 17:44:2014 hrs 18 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.058308392563948306 BNB
0xa3fbdc294792933962f3eba95c115a19bc1efe374931a266d9717bf3f8ac2224132496752021-12-06 17:44:2014 hrs 18 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.058308392563948306 BNB
0xa3fbdc294792933962f3eba95c115a19bc1efe374931a266d9717bf3f8ac2224132496752021-12-06 17:44:2014 hrs 18 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295890.291541962819741534 BNB
0xd2050a1ec2bf2cfb924fd67bf59a8ae3567a729fb55eea7b3eed12e42e893b09132496642021-12-06 17:43:4014 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.058308392563948306 BNB
0xd2050a1ec2bf2cfb924fd67bf59a8ae3567a729fb55eea7b3eed12e42e893b09132496642021-12-06 17:43:4014 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.058308392563948306 BNB
0xd2050a1ec2bf2cfb924fd67bf59a8ae3567a729fb55eea7b3eed12e42e893b09132496642021-12-06 17:43:4014 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.058308392563948306 BNB
0xd2050a1ec2bf2cfb924fd67bf59a8ae3567a729fb55eea7b3eed12e42e893b09132496642021-12-06 17:43:4014 hrs 19 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295890.291541962819741534 BNB
0x70d7e53950707ec0e19bd035b44ad4dbded384fcc3e5ceb9a3f879889499393e132496592021-12-06 17:43:2514 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.011986687807838277 BNB
0x70d7e53950707ec0e19bd035b44ad4dbded384fcc3e5ceb9a3f879889499393e132496592021-12-06 17:43:2514 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xc475d33a760c3e0325a33c3aba706c135c456c290.011986687807838277 BNB
0x70d7e53950707ec0e19bd035b44ad4dbded384fcc3e5ceb9a3f879889499393e132496592021-12-06 17:43:2514 hrs 19 mins ago 0x99919114a6e249a9d7862422211d37c41ea295890xdcd236b4c77711be7e90bc2b57dea812330165b30.011986687807838277 BNB
0x70d7e53950707ec0e19bd035b44ad4dbded384fcc3e5ceb9a3f879889499393e132496592021-12-06 17:43:2514 hrs 19 mins ago PancakeSwap: Router v2 0x99919114a6e249a9d7862422211d37c41ea295890.059933439039191385 BNB
0x26dc47d51cf3948fb4dd765163a03bbe5f3b8f40dae200b8f67dd53acd8e4f3b132493552021-12-06 17:26:4014 hrs 36 mins ago 0x99919114a6e249a9d7862422211d37c41ea29589 Binance: WBNB Token0.000275766784873518 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KojiEarth

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
constantinople EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : KojiEarth_.sol
// SPDX-License-Identifier: Licensed to Kill Zeroes

/*
koji.earth project
launched on Ethereum 6.2021, high gas fees made trading unreasonable
relaunching on BSC with new, better contract at original public sale price

Website: https://koji.earth
Telegram: https://t.me/kojiearth

25 Million KOJI required to receive divs in BNB
Withdraw/Reinvest dividends : https://app.koji.earth

Staking & Full NFT comic book coming 1.2022 (maybe sooner!)

Tokenomics: 

Supply: 1 Trillion

Phase 1 Taxes - Staking/NFT pools inactive:

                                /   1% KOJI to burn wallet
                                |   6% left converts to BNB
7% tax on buy/sell/transfer -   |   40% of BNB to holders
                                |   20% of BNB to liquidity
                                |   20% of BNB to charity 
                                \   20% of BNB to admin (artwork, marketing, etc..)

Phase 2 Taxes - Staking/NFT pools active:

                                /   1% KOJI to burn wallet
                                |   1% KOJI to stake pool
                                |   6% left converts to BNB
8% tax on buy/sell/transfer -   |   40% of BNB to holders
                                |   15% of BNB to liquidity
                                |   15% of BNB to charity 
                                |   15% of BNB to NFT reward pool
                                \   15% of BNB to admin (artwork, marketing, etc..)       

5% slippage on buys, 10-15% on sells, make sure KOJI amount on sell doesn't end in zero 

No rug, no scam, trusted team; stop by our TG and say hi!
*/

pragma solidity ^0.8.9;

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


/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

    /**
     * Transfer ownership to new address. Caller must be owner. 
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
    function balanceOf(address owner) external view returns (uint);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function addBNB() external payable;
    function setDividendToken(address dividendToken) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 unpaidDividends;
        uint256 totalExcluded;
        uint256 totalRealised;
        bool rewardEligible;
    }

    IBEP20 dividendToken;
    IDEXRouter router;
    
    address WETH;

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

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

    uint256 lastDeposit;
    uint256 distribWalletGas = 40000;
    uint256 distribReinvestGas = 450000;

    uint256 public impoundTimelimit = 2592000; //1 month default
    uint256 public minDistribution = 1000000* (10 ** 9); //0.001
    uint256 public minHoldAmountForRewards = 25000000 * (10**9); // Must hold 25 million tokens to receive rewards

    uint256 currentIndex;

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

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }
    
    event DividendTokenUpdate(address dividendToken);

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

    function setShare(address shareholder, uint256 amount) public override onlyToken {
        if(shares[shareholder].amount > 0){
            shares[shareholder].unpaidDividends = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder));
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            if (amount >= minHoldAmountForRewards) {
                addShareholder(shareholder);
                shareholderExpired[shareholder] = 9999999999;
            }
        }else if(amount == 0 && shares[shareholder].amount > 0){
            if (shares[shareholder].unpaidDividends == 1 || shares[shareholder].unpaidDividends == 0) {
                removeShareholder(shareholder);
            } else {
                shareholderExpired[shareholder] = block.timestamp;
            }
            
        }

        bool boolGetsRewards = shares[shareholder].rewardEligible;

        if (amount >= minHoldAmountForRewards) {
            if (!boolGetsRewards) {
                shares[shareholder].rewardEligible = true;
                totalShares = totalShares.add(amount);
                shares[shareholder].amount = amount;
            } else {
                totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
                shares[shareholder].amount = amount;
            }
        } else {
            if (boolGetsRewards) {
                shares[shareholder].rewardEligible = false;
                totalShares = totalShares.sub(shares[shareholder].amount);
                shares[shareholder].amount = 0;
            } else {
                shares[shareholder].amount = 0;
            }
        }

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

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

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

    function addBNB() external payable override onlyToken {
        uint256 amount = msg.value;
    }

     //withdraw dividends
     function distributeDividend(address shareholder, uint256 percent) public {

         require(percent >= 25 && percent <= 100, "Percent of withdrawal is outside of parameters");
        
         uint256 fullamount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder));
        
         uint256 netamount = fullamount.mul(percent).div(100);
        
        if(netamount > 0){
            
            netamount = netamount.sub(1); //this is so we aren't short on dust in the holding wallet

            totalDistributed = totalDistributed.add(netamount);

            (bool successShareholder, /* bytes memory data */) = payable(shareholder).call{value: netamount, gas: distribWalletGas}("");
            require(successShareholder, "Shareholder rejected BNB transfer");
            shareholderClaims[shareholder] = block.timestamp;
            
            shares[shareholder].unpaidDividends = fullamount.sub(netamount); 
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(netamount);

            totalWithdrawn = totalWithdrawn.add(netamount);
            netDividends = netDividends.sub(netamount);          


        } else {
            return; 
        }
    }

    //Reinvest dividends
    function reinvestDividend(address shareholder, uint256 percent, uint256 minOut) public {

        require(percent >= 25 && percent <= 100, "Percent of reinvestment is outside of parameters");

        uint256 fullamount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder));
        
        uint256 netamount = fullamount.mul(percent).div(100);

        if(netamount >= minDistribution){

           netamount = netamount.sub(1); //this is so we aren't short on dust in the holding wallet

            address[] memory path = new address[](2);
            path[0] = WETH;
            path[1] = _token;

            router.swapExactETHForTokensSupportingFeeOnTransferTokens{value:netamount, gas:distribReinvestGas}(
                minOut,
                path,
                address(shareholder),
                block.timestamp
            );

            totalDistributed = totalDistributed.add(netamount);
            
            shares[shareholder].unpaidDividends = fullamount.sub(netamount); 

            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(netamount);
            
            totalReinvested = totalReinvested.add(netamount);
            shareholderClaims[shareholder] = block.timestamp;
            netDividends = netDividends.sub(netamount);
            
        } else {
            return; 
        }
    }
    
    function getUnpaidDividends(address shareholder) public view returns (uint256 unpaidDividends) {
        return shares[shareholder].unpaidDividends;
    }

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

    //Impounds all divs from non-KOJI holders that sold all, yet didn't claim rewards within time limit
    function sweep(uint256 gas) public {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

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

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

                if (shares[shareholders[currentIndex]].unpaidDividends > 0 
                && shares[shareholders[currentIndex]].amount == 0 
                && block.timestamp.add(impoundTimelimit) > shareholderExpired[shareholders[currentIndex]]) {
                    impoundDividend(shareholders[currentIndex]);
                } 

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();

            currentIndex++;
            iterations++;
        }

        cleanup();
        
    }

    //Removes non-KOJI holders from array after sweep()
    function cleanup() internal {

        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        currentIndex = 0;
    
        while(iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if (shares[shareholders[currentIndex]].unpaidDividends == 0
            && shares[shareholders[currentIndex]].amount == 0 
            && block.timestamp.add(impoundTimelimit) > shareholderExpired[shareholders[currentIndex]]) {
                  removeShareholder(shareholders[currentIndex]); 
            } 

            currentIndex++;
            iterations++;
        }

    }


    //Impounds unclaimed dividends from wallets that sold all their tokens yet didn't claim rewards within the specified timeframe (default 30 days)
    function impoundDividend(address shareholder) internal {

        uint256 amount = shares[shareholder].unpaidDividends.add(getUnpaidEarnings(shareholder));

        uint256 netamount = amount.sub(1); //this is so we aren't short on dust in the holding wallet

        (bool successShareholder, /* bytes memory data */) = payable(_token).call{value: netamount, gas: distribWalletGas}("");
        require(successShareholder, "Shareholder rejected BNB transfer");

        shareholderClaims[shareholder] = block.timestamp;
        shareholderExpired[shareholder] = 9999999999;

        shares[shareholder].unpaidDividends = 0;

        netDividends = netDividends.sub(amount);

    }

    function addShareholder(address shareholder) internal {
        if (shareholderAdded[shareholder]) {
            return;
        } else {
            shareholderIndexes[shareholder] = shareholders.length;
            shareholders.push(shareholder);
            shareholderAdded[shareholder] = true;
        }
        
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
        shareholderAdded[shareholder] = false;
    }
    
    function setDividendToken(address _dividendToken) external override onlyToken {
        dividendToken = IBEP20(_dividendToken);
        emit DividendTokenUpdate(_dividendToken);
    }
    
    function getDividendToken() external view returns (address) {
        return address(dividendToken);
    }

    //Change the min hold requirement for rewards. 
    function changeMinHold(uint256 _amount, uint256 _gas) external {
        require(_amount != minHoldAmountForRewards, "new threshold amount cannot be the same as existing threshold");
        require(_amount >= 1000000000 || _amount <= 100000000000000000, "Min hold amount for divs should between 1 and 100M tokens");
        require(_gas >= 450000, "Please use a gas value equal to or higher than 450,000");
        
        uint256 lastAmount = minHoldAmountForRewards;
        minHoldAmountForRewards = _amount;

        if (lastAmount > minHoldAmountForRewards) { //lowered
            changeMinHoldAmount(_gas, 0);
        } else {                                    //raised
            changeMinHoldAmount(_gas, 1);
        }
        

    }

    function changeMinHoldAmount(uint256 gas, uint256 flag) internal {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

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

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

                if(flag == 0) {
                    if(shares[shareholders[currentIndex]].amount == 0 && shareholderExpired[shareholders[currentIndex]] == 9999999999) {
                        uint256 balance = IBEP20(_token).balanceOf(shareholders[currentIndex]);
                        setShare(shareholders[currentIndex],balance);
                    }
                } else {
                    if(shares[shareholders[currentIndex]].amount > 0) {
                        
                        setShare(shareholders[currentIndex],shares[shareholders[currentIndex]].amount);
                    }
                }
                
                

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();

            currentIndex++;
            iterations++;
        }

    }

    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    function transferBEP20Tokens(address _tokenAddr, address _to, uint _amount) external {
        IBEP20(_tokenAddr).transfer(_to, _amount);
    }

    // This will allow to rescue ETH held in the distributor interface address
    function rescueETHFromContract() external {
        address payable _owner = payable(_token);
        _owner.transfer(address(this).balance);
    }

    function viewMinHold() external view returns (uint256) {
        return minHoldAmountForRewards;
    }

    function holderInfo(address _holder) external view returns (uint256, uint256, uint256, uint256, bool) {
        return (shares[_holder].amount, shares[_holder].unpaidDividends, shares[_holder].totalRealised, shares[_holder].totalExcluded, shares[_holder].rewardEligible);
    }

    function mathInfo() external view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        return (totalShares, netDividends, totalDistributed, totalReinvested, totalWithdrawn, totalDividends);
    }

    function getShareholderExpired(address _holder) external view returns (uint256) {
        return shareholderExpired[_holder];
    }

    function changeImpoundTimelimit(uint256 _timelimit) external {
        impoundTimelimit = _timelimit;
    }

    function changeDistribGas(uint256 _walletGas, uint256 _reinvestGas) external {
        distribWalletGas = _walletGas;
        distribReinvestGas = _reinvestGas;
    }

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

    function getDistributionCriteria() external view returns (uint256) {
        return minDistribution;
    }
}

contract KojiEarth is IBEP20, Auth, ReentrancyGuard {
    using SafeMath for uint256;

    address WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    IWETH WETHrouter;
    
    string constant _name = "koji.earth";
    string constant _symbol = "KOJI";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000000 * (10 ** _decimals);
    uint256 public _maxTxAmountBuy = _totalSupply;
    uint256 public _maxTxAmountSell = _totalSupply; 
    uint256 public _maxWalletToken = _totalSupply; 

    struct Partners {
        address token_addr;
        uint256 minHoldAmount;
        uint256 discount;
        bool enabled;
    }

    mapping (uint256 => Partners) private partners;
    address[] partneraddr;
    mapping (address => bool) partnerAdded;

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

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

    uint256 initialBlockLimit = 1;
    
    uint256 public burnRatio = 142;
    uint256 public stakepoolRatio = 142;
    uint256 public taxRatio = 200;

    uint256 public totalFee = 70; //(7%)
    uint256 public partnerFeeLimiter = 50;
    uint256 public feeDenominator = 1000;
    uint256 public WETHaddedToPool;

    address public charityWallet;
    address public adminWallet;
    address public nftRewardWallet;
    address public stakePoolWallet;

    uint256 public totalCharity;
    uint256 public totalAdmin;
    uint256 public totalNFTrewards;
    uint256 public totalStakepool;

    IDEXRouter public router;
    
    address public pair;

    uint256 public launchedAt;

    bool public swapEnabled = true;
    bool public stakePoolActive = false;
    bool public nftPoolActive = false;
    bool public distributorDeposit = true;
    bool public teamWalletDeposit = true;
    bool public addToLiquid = true;
    bool public enablePartners = false;
    bool public airdropEnabled = true;
    bool public launchEnabled = false;

    bool inSwap;
    
    DividendDistributor distributor;
    uint256 distributorGas = 750000;
    uint256 walletGas = 40000;
    uint256 depositGas = 350000;

    uint256 private swapThreshold = 100000000000000; //100k tokens
    
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E); 
        
        address _presaler = msg.sender;
            
        WETH = router.WETH();
        
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router), WETH);

        isFeeExempt[_presaler] = true;
        isDividendExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        isTxLimitExempt[DEAD] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        charityWallet = 0xb629Fb3426877640C6fB6734360D81D719062bF6;
        adminWallet = 0x04e7CA1445041822A2EAE8CC46964DbaEc5b53a3;
        nftRewardWallet = 0x70117981e4C9fA0309a9BC83412305281dB5Af8B;
        stakePoolWallet = 0x70117981e4C9fA0309a9BC83412305281dB5Af8B;

        isFeeExempt[stakePoolWallet] = true;
        isDividendExempt[stakePoolWallet] = true;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _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) {
        if(!isOwner(msg.sender)){require(launchEnabled, "Liquid has not been added yet!");}
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

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

        return _tF(sender, recipient, amount);
    }

    function _tF(address s, address r, uint256 amount) internal returns (bool) {
        require(amount > 0, "Insufficient Amount: cannot send 0 KOJI");
        
        if(airdropEnabled){ return _basicTransfer(s, r, amount); }
        if(inSwap){ return _basicTransfer(s, r, amount); }

        checkTxLimit(s, r, amount);

        if (r == pair) {
            
            if(shouldSwapBack()){ swapBack(); }
        }

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

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

        uint256 amountReceived = shouldTakeFee(s) && shouldTakeFee(r) ? takeFee(s, r, amount) : amount;

        
        if(r != pair && !isTxLimitExempt[r]){
            uint256 contractBalanceRecepient = balanceOf(r);
            require(contractBalanceRecepient + amountReceived <= _maxWalletToken, "Exceeds maximum wallet token amount"); 
        }
        
        _balances[r] = _balances[r].add(amountReceived);

        if(!isDividendExempt[s]){ try distributor.setShare(s, _balances[s]) {} catch {}}
        if(!isDividendExempt[r]){ try distributor.setShare(r, _balances[r]) {} catch {}}
        
        emit Transfer(s, r, 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 manualBurn(uint256 amount) external onlyOwner returns (bool) {
        return _basicTransfer(address(this), DEAD, amount);
    }

    function checkTxLimit(address sender, address receiver, uint256 amount) internal view {
        if(sender == pair) {require(amount <= _maxTxAmountBuy || isTxLimitExempt[receiver], "Buy TX Limit Exceeded");}
        if(receiver == pair) {require(amount <= _maxTxAmountSell || isTxLimitExempt[sender], "Sell TX Limit Exceeded");}
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool bot) public view returns (uint256) {
        // Anti-bot, fees as 99% for the first block
        if(launchedAt + initialBlockLimit >= block.number || bot){ return feeDenominator.sub(1); }
        return totalFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount; 
        uint256 regularFee = getTotalFee(isBot[sender]);
        uint256 discountFee = 0;

        if (enablePartners && recipient != pair && sender == pair) {
            //scan wallet for BEP20 tokens matching those in struct 

            uint256 partnerCount = partneraddr.length;
            
            for (uint256 x = 0; x <= partnerCount; ++x) {

                Partners storage tokenpartners = partners[x];

                if (tokenpartners.enabled) {

                   if(IBEP20(address(tokenpartners.token_addr)).balanceOf(address(recipient)) >= tokenpartners.minHoldAmount) {

                       discountFee = discountFee.add(tokenpartners.discount);

                   } 

                } 
            }

            if (discountFee > regularFee.mul(partnerFeeLimiter).div(100)) {
                discountFee = regularFee.mul(partnerFeeLimiter).div(100);
            } else {
                discountFee = regularFee.sub(discountFee);
            }
            
            feeAmount = amount.mul(discountFee).div(feeDenominator);

        } else {

            feeAmount = amount.mul(regularFee).div(feeDenominator);

        }

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

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

    function swapBack() internal swapping {

        uint256 amountToSwap = IBEP20(address(this)).balanceOf(address(this));
        uint256 burnAmount = amountToSwap.mul(burnRatio).div(feeDenominator);

        IBEP20(address(this)).transfer(address(DEAD), burnAmount);

        if (stakePoolActive) {  
             
            uint256 stakePoolAmount = amountToSwap.mul(stakepoolRatio).div(feeDenominator);

            amountToSwap = amountToSwap.sub(stakePoolAmount);

            IBEP20(address(this)).transfer(address(stakePoolWallet), stakePoolAmount);

            totalStakepool = totalStakepool.add(stakePoolAmount);

            amountToSwap = amountToSwap.sub(burnAmount);

        } else {
            amountToSwap = amountToSwap.sub(burnAmount);
        }

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

        uint256 balanceBefore = address(this).balance;

        //We want to put any built up WBNB back into the pool 
        if (addToLiquid) {
            uint256 balance = IWETH(WETH).balanceOf(address(this));
            if (balance > 0) {
                IWETH(WETH).transfer(pair, balance);
                WETHaddedToPool = WETHaddedToPool.add(balance);
            }
        }

        //Exchange the built up tokens
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp           
        );

        //Calculate the distribution
        uint256 amountBNB = address(this).balance.sub(balanceBefore);

        uint256 taxSplit = amountBNB.mul(taxRatio).div(feeDenominator);
        uint256 amountBNBcharity = taxSplit;
        uint256 amountBNBadmin = taxSplit;
        uint256 amountBNBbuyback = taxSplit;
        uint256 amountBNBReflection;
        uint256 amountBNBnft;

        if (nftPoolActive) {
            amountBNBnft = taxSplit;
            amountBNBReflection = amountBNB.sub(amountBNBcharity).sub(amountBNBbuyback).sub(amountBNBadmin).sub(amountBNBnft);

            (bool successTeam3, /* bytes memory data */) = payable(nftRewardWallet).call{value: amountBNBnft, gas: walletGas}("");
            require(successTeam3, "NFT reward wallet rejected BNB transfer");

            totalNFTrewards = totalNFTrewards.add(amountBNBnft);

        } else {

            amountBNBReflection = amountBNB.sub(amountBNBcharity).sub(amountBNBbuyback).sub(amountBNBadmin);
        }
        
        //Deposit into the distributor
        if (distributorDeposit) {

            try distributor.deposit{value: amountBNBReflection}() {} catch {}
        }
        
        //Deposit to the team wallets
        if (teamWalletDeposit) {
        (bool successTeam1, /* bytes memory data */) = payable(charityWallet).call{value: amountBNBcharity, gas: walletGas}("");
        require(successTeam1, "Charity wallet rejected BNB transfer");

        totalCharity = totalCharity.add(amountBNBcharity);

        (bool successTeam2, /* bytes memory data */) = payable(adminWallet).call{value: amountBNBadmin, gas: walletGas}("");
        require(successTeam2, "Admin wallet rejected BNB transfer");

        totalAdmin = totalAdmin.add(amountBNBadmin);
        
        }
        
        //Convert the buyback amount to WBNB and hold until the next qualifying sell
        IWETH(WETH).deposit{value : amountBNBbuyback}();

    }

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

    function launch() internal {
        launchedAt = block.number;
    }
    
    function setInitialBlockLimit(uint256 blocks) external onlyOwner {
        require(blocks > 0, "Blocks should be greater than 0");
        initialBlockLimit = blocks;
    }

    function setBuyTxLimit(uint256 amount) external onlyOwner {
        _maxTxAmountBuy = amount;
    }
    
    function setSellTxLimit(uint256 amount) external onlyOwner {
        require(amount >= 250000000000000000, "Sell limit must not be less than 250M tokens");
        _maxTxAmountSell = amount;
    }
    
    function setMaxWalletToken(uint256 amount) external onlyOwner {
        require(amount >= 250000000000000000, "Wallet limit must not be less than 250M tokens");
        _maxWalletToken = amount;
    }
    
    function setBot(address _address, bool toggle) external onlyOwner {
        isBot[_address] = toggle;
        _setIsDividendExempt(_address, toggle);
    }
    
    function isInBot(address _address) public view returns (bool) {
        return isBot[_address];
    }

    function _setIsDividendExempt(address holder, bool exempt) internal {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }
    
    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        _setIsDividendExempt(holder, exempt);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

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

    function setFee(uint256 _totalFee) external onlyOwner {
        //Total fees has to be between 0 and 10 percent
        require(_totalFee >= 0 && _totalFee <= 100, "Total Fee must be between 0 and 100 (100 = ten percent)");
        totalFee = _totalFee;
        
    }
    
    function setFeeReceivers(address _charityWallet, address _adminWallet, address _nftRewardWallet, address _stakePoolWallet) external onlyOwner {
        require(_charityWallet != ZERO, "Charity wallet must not be zero address");
        require(_adminWallet != ZERO, "Admin wallet must not be zero address");
        require(_nftRewardWallet != ZERO, "NFT reward wallet must not be zero address");
        require(_stakePoolWallet != ZERO, "Stakepool wallet must not be zero address");
         require(_charityWallet != DEAD, "Charity wallet must not be dead address");
        require(_adminWallet != DEAD, "Admin wallet must not be dead address");
        require(_nftRewardWallet != DEAD, "NFT reward wallet must not be dead address");
        require(_stakePoolWallet != DEAD, "Stakepool wallet must not be dead address");
        charityWallet = _charityWallet;
        nftRewardWallet = _nftRewardWallet;
        adminWallet = _adminWallet;
        stakePoolWallet = _stakePoolWallet;

    }
    
    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function setDistributorDeposit(bool _status) external onlyOwner {
        distributorDeposit = _status;
    }

    function setTeamWalletDeposit(bool _status) external onlyOwner {
        teamWalletDeposit = _status;
    }

    function setAddToLiquid(bool _status) external onlyOwner {
        addToLiquid = _status;
    }

    function viewTeamWalletInfo() public view returns (uint256 charityDivs, uint256 adminDivs, uint256 nftDivs, uint256 stakeDivs) {
        return (totalCharity, totalAdmin, totalNFTrewards, totalStakepool);
    }

    // This will allow owner to rescue BNB sent by mistake directly to the contract
    function rescueBNB() external onlyOwner {
        address payable _owner = payable(msg.sender);
        _owner.transfer(address(this).balance);
    }

    // Converts to WBNB any BNB held in the contract (from sweep() function, for example)
    function convertBNBtoWBNB() external onlyOwner {
         IWETH(WETH).deposit{value : address(this).balance}();
    }

    // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake)
    function transferBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
       require(_tokenAddr != address(this), "Cannot transfer out native token");
        IBEP20(_tokenAddr).transfer(_to, _amount);
    }

    // This allows us to get any BNB out of the distributor address 
    function RescueBNBfromDistributor() external onlyOwner {
        distributor.rescueETHFromContract();
    }

    // Function to allow admin to claim *other* ERC20 tokens sent to the distributor  (by mistake)
    function TransferBEP20fromDistributor(address _tokenAddr, address _to, uint _amount) external onlyOwner {
        distributor.transferBEP20Tokens(_tokenAddr, _to, _amount);
    }

    //Depost BNB into the contract, then call this to increase holders dividends
    function AddToDistributorDeposit() external onlyOwner { 
       distributor.deposit{value: address(this).balance}();
    }

    //Deposit BNB into the contract, then call this to add BNB to the distributor in case it doesn't have enough to cover withdrawals (shouldn't happen, but just in case)
    function AddToDistributorBalance() external onlyOwner { 
       distributor.addBNB{value: address(this).balance}();
    }

    function GetClaimed(address _holder) external view returns (uint256 pending) {
        return distributor.getUnpaidDividends(_holder);
    }

    function GetPending(address _holder) external view returns (uint256 pending) {
        return distributor.getUnpaidEarnings(_holder);
    }

    function Withdrawal(uint256 _percent) external nonReentrant {
        distributor.distributeDividend(msg.sender, _percent);
    }

    function Reinvest(uint256 _percent, uint256 _amountOutMin) external nonReentrant {
        distributor.reinvestDividend(msg.sender, _percent, _amountOutMin);
    }

    function setburnRatio(uint256 _amount) external onlyOwner {
        require(_amount <= taxRatio.div(2), "burn ratio cannot be more than 50 percent of total tax");
        burnRatio = _amount;
    } 

    function setstakepoolRatio(uint256 _amount) external onlyOwner {
        require(_amount <= taxRatio.div(2), "stakepool ratio cannot be more than 50 percent of total tax");
        stakepoolRatio = _amount;
    } 

    function settaxRatio(uint256 _amount) external onlyOwner {
        require(_amount <= feeDenominator.div(4), "tax ratio cannot be more than 250 (25%)");
        taxRatio = _amount;
    }

    function ChangeMinHold(uint256 _amount, uint256 _gas) external onlyOwner swapping {
        distributor.changeMinHold(_amount, _gas);
    }

    function ViewMinHold() external view returns (uint256 amount) {
        return distributor.viewMinHold();
    }
 
    function ViewHolderInfo(address _address) external view returns (uint256 amount, uint256 unpaid, uint256 realised, uint256 excluded, bool rewardeligible) {
        return distributor.holderInfo(_address);
    }
    
    function ViewMathInfo() external view returns (uint256 totalshares, uint256 netdividends, uint256 totaldistributed, uint256 totalreinvested, uint256 totalwithdrawn, uint256 totaldividends) {
        return distributor.mathInfo();
    }

    function GetMinDistribution() external view returns (uint256) {
        return distributor.getDistributionCriteria();
    }

     function GetRewardsToken() external view returns (address) {
        return distributor.getDividendToken();
    }

    function SetDistributionCriteria(uint256 _amount) external onlyOwner {
        require(_amount > 0, "minimum distribution level must be greater than zero");
        distributor.setDistributionCriteria(_amount);
    }

    function GetShareholderExpired(address _holder) external view returns (uint256) {
        return distributor.getShareholderExpired(_holder);
    }

    function ChangeImpoundTimelimit(uint256 _timelimit) external onlyOwner {
        require(_timelimit >= 2592000, "Holder should have minimum 30 days (2592000) to withdraw unclaimed divs");
        distributor.changeImpoundTimelimit(_timelimit);
    }

    //reclaim divs from anyone who dumped KOJI over 30 days (default) ago but never withdrew their dividends
    function SweepDivs() external onlyOwner {
      try distributor.sweep(distributorGas) {} catch {}
    }

    function setStakePoolActive(bool _status) external onlyOwner {
        stakePoolActive = _status; 
    }

    function setNFTPoolActive(bool _status) external onlyOwner {
        nftPoolActive = _status; 
    }

    function changeContractGas(uint256 _distributorgas, uint256 _walletgas) external onlyOwner {
        require(_distributorgas > 0, "distributor cannot be equal to zero");
        require(_walletgas > 0, "distributor cannot be equal to zero");
        
        distributorGas = _distributorgas;
        walletGas = _walletgas;
    
    }

    function ChangeDistribGas(uint256 _walletGas, uint256 _reinvestGas) external onlyOwner {
         require(_walletGas > 0, "distributor cannot be equal to zero");
         require(_reinvestGas > 0, "distributor cannot be equal to zero");
         distributor.changeDistribGas(_walletGas, _reinvestGas);
    }

    function isContract(address addr) internal view returns (bool) {
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

        bytes32 codehash;
        assembly {
            codehash := extcodehash(addr)
        }
            return (codehash != 0x0 && codehash != accountHash);
    }

    function addPartnership(address _tokencontract, uint256 _minHoldAmount, uint256 _percent) external onlyOwner {

        require(_tokencontract != DEAD && _tokencontract != ZERO && _tokencontract != pair, "Please input a valid token contract address");
        require(isContract(_tokencontract), "Please input an actual token contract");
        require(!partnerAdded[_tokencontract], "Contract already added. To change parameters please remove first.");
        require(_minHoldAmount > 0, "Min hold must be greater than zero");
        require(_percent <= totalFee, "Discount cannot be greater than total tax");

        uint256 partnerCount = partneraddr.length;
        
        Partners storage tokenpartners = partners[partnerCount];

            tokenpartners.token_addr = _tokencontract;
            tokenpartners.minHoldAmount = _minHoldAmount;
            tokenpartners.discount =_percent;
            tokenpartners.enabled = true;

            partnerAdded[_tokencontract] = true;
            partneraddr.push(_tokencontract);
        
    }

    function removePartnership(address _tokencontract) external onlyOwner {

        uint256 partnerCount = partneraddr.length;

        if (partnerCount > 0) {
            for (uint256 x = 0; x < partnerCount; ++x) {

                Partners storage tokenpartners = partners[x];

                if (address(tokenpartners.token_addr) == address(_tokencontract)) {

                    if (x == partnerCount) {
                        tokenpartners.token_addr = ZERO;
                        tokenpartners.minHoldAmount = 0;
                        tokenpartners.discount = 0;
                        tokenpartners.enabled = false;

                        partnerAdded[_tokencontract] = false;

                        partneraddr.pop();
                        
                    } else {

                        Partners storage tokenpartnerscopy = partners[partneraddr.length-1];

                        tokenpartners.token_addr = tokenpartnerscopy.token_addr;
                        tokenpartners.minHoldAmount = tokenpartnerscopy.minHoldAmount;
                        tokenpartners.discount = tokenpartnerscopy.discount;
                        tokenpartners.enabled = true;

                        partnerAdded[_tokencontract] = false;

                        tokenpartnerscopy.token_addr = ZERO;
                        tokenpartnerscopy.minHoldAmount = 0;
                        tokenpartnerscopy.discount = 0;
                        tokenpartnerscopy.enabled = false;

                        partneraddr[x] = partneraddr[partneraddr.length-1];
                        partneraddr.pop();

                    }
                    
                }
            }

        } else {
            return;
        }
    }

    function getPartnershipIndex() external view returns (uint256) {
        return partneraddr.length;
    }

    function viewPartnership(uint256 _index) external view returns (string memory name, string memory symbol, uint8 decimals, address tokencontract, uint256 minHoldAmount, uint256 discount, bool enabled) {
        Partners storage tokenpartners = partners[_index];
        string memory token_name = IBEP20(tokenpartners.token_addr).name();
        string memory token_symbol = IBEP20(tokenpartners.token_addr).symbol();
        uint8 token_decimals = IBEP20(tokenpartners.token_addr).decimals();
        return (token_name, token_symbol, token_decimals, tokenpartners.token_addr,tokenpartners.minHoldAmount,tokenpartners.discount,tokenpartners.enabled);
    }

    function setEnablePartners(bool _status) external onlyOwner {
        enablePartners = _status;
    }

    //value of 100 allows partner taxes to reduce 0% of totalFee tax, 50 = 50% of total tax (default), 1 allows 99% tax reduction of total tax for partners
    function setPartnerFeeLimiter(uint256 _limiter) external onlyOwner {
        require(_limiter <= 100 && _limiter >= 1, "fee limiter must be between 1 and 100");
        partnerFeeLimiter = _limiter;
    }

    //once the airdrop is complete, this function turns off _basicTransfer permanently for airdropEnabled
    function setAirdropDisabled() external onlyOwner {
        airdropEnabled = false;
    }

    //once the liquid is added, this function turns on launchEnabled permanently
    function setLaunchEnabled() external onlyOwner {
        require(!airdropEnabled, "Please disable airdrop mode first");
        launchEnabled = true;
    }

    function registerShares() external {
        uint256 balance = IBEP20(address(this)).balanceOf(msg.sender);
        distributor.setShare(msg.sender,balance);
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "constantinople",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

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":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AddToDistributorBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddToDistributorDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletGas","type":"uint256"},{"internalType":"uint256","name":"_reinvestGas","type":"uint256"}],"name":"ChangeDistribGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timelimit","type":"uint256"}],"name":"ChangeImpoundTimelimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_gas","type":"uint256"}],"name":"ChangeMinHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetClaimed","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetMinDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetPending","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GetRewardsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"GetShareholderExpired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"}],"name":"Reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RescueBNBfromDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SetDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SweepDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferBEP20fromDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"ViewHolderInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unpaid","type":"uint256"},{"internalType":"uint256","name":"realised","type":"uint256"},{"internalType":"uint256","name":"excluded","type":"uint256"},{"internalType":"bool","name":"rewardeligible","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ViewMathInfo","outputs":[{"internalType":"uint256","name":"totalshares","type":"uint256"},{"internalType":"uint256","name":"netdividends","type":"uint256"},{"internalType":"uint256","name":"totaldistributed","type":"uint256"},{"internalType":"uint256","name":"totalreinvested","type":"uint256"},{"internalType":"uint256","name":"totalwithdrawn","type":"uint256"},{"internalType":"uint256","name":"totaldividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ViewMinHold","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETHaddedToPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"Withdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokencontract","type":"address"},{"internalType":"uint256","name":"_minHoldAmount","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"addPartnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addToLiquid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorgas","type":"uint256"},{"internalType":"uint256","name":"_walletgas","type":"uint256"}],"name":"changeContractGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertBNBtoWBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePartners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPartnershipIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"bot","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isInBot","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":"launchEnabled","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":"uint256","name":"amount","type":"uint256"}],"name":"manualBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nftPoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerFeeLimiter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokencontract","type":"address"}],"name":"removePartnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAddToLiquid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAirdropDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"toggle","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setDistributorDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setEnablePartners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_adminWallet","type":"address"},{"internalType":"address","name":"_nftRewardWallet","type":"address"},{"internalType":"address","name":"_stakePoolWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setInitialBlockLimit","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":[],"name":"setLaunchEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setNFTPoolActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limiter","type":"uint256"}],"name":"setPartnerFeeLimiter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStakePoolActive","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":"bool","name":"_status","type":"bool"}],"name":"setTeamWalletDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setburnRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setstakepoolRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"settaxRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakePoolActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakePoolWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakepoolRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTrewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakepool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferBEP20Tokens","outputs":[],"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":"_index","type":"uint256"}],"name":"viewPartnership","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"tokencontract","type":"address"},{"internalType":"uint256","name":"minHoldAmount","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTeamWalletInfo","outputs":[{"internalType":"uint256","name":"charityDivs","type":"uint256"},{"internalType":"uint256","name":"adminDivs","type":"uint256"},{"internalType":"uint256","name":"nftDivs","type":"uint256"},{"internalType":"uint256","name":"stakeDivs","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a62000665565b620000439064e8d4a510006200067d565b6006819055600781905560088190556009556001601355608e601481905560155560c8601655604660175560326018556103e8601955602680546001600160481b031916670100010101000001179055620b71b0602755619c4060285562055730602955655af3107a4000602a55348015620000be57600080fd5b5060008054336001600160a01b0319918216811790925560018055602380547310ed43c718714eb63d5aa57b78b54704e256024e921682179055604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905163ad5c464891600480820192602092909190829003018186803b1580156200014857600080fd5b505afa1580156200015d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018391906200069f565b600280546001600160a01b0319166001600160a01b03928316179055602354604080517fc45a01550000000000000000000000000000000000000000000000000000000081529051919092169163c45a0155916004808301926020929190829003018186803b158015620001f657600080fd5b505afa1580156200020b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023191906200069f565b6002546040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200029757600080fd5b505af1158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d291906200069f565b602480546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320602380548616855292529182902060001990555460025491519083169291909116906200032d9062000529565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000361573d6000803e3d6000fd5b5060268054600160501b600160f01b0319166a01000000000000000000006001600160a01b03938416021790558181166000818152600f60209081526040808320805460ff199081166001908117909255601180855283862080548316841790556010855283862080548316841790556003805489168752848720805484168517905560245489168752908552838620805483168417905530865283862080548316841790555490961684528184208054871682179055601b805473b629fb3426877640c6fb6734360d81d719062bf66001600160a01b031991821617909155601c80547304e7ca1445041822a2eae8cc46964dbaec5b53a3908316179055601d80547370117981e4c9fa0309a9bc83412305281db5af8b9083168117909155601e80549092161790557f240c61d8c007a2530a063e3b0321c8922b6968a6cc0d5e816e2344f887441ebd80548716821790557f593c9f2fe20d73d68078ad926fc4bcb20b3b0cc69d71769263bb806bc511d900805490961617909455600654838352600d82528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350620006ca565b6121df806200596683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115620005a75781600019048211156200058b576200058b62000537565b808516156200059957918102915b93841c93908002906200056b565b509250929050565b600082620005c0575060016200065f565b81620005cf575060006200065f565b8160018114620005e85760028114620005f35762000613565b60019150506200065f565b60ff84111562000607576200060762000537565b50506001821b6200065f565b5060208310610133831016604e8410600b841016171562000638575081810a6200065f565b62000644838362000566565b80600019048211156200065b576200065b62000537565b0290505b92915050565b60006200067660ff841683620005af565b9392505050565b60008160001904831182151516156200069a576200069a62000537565b500290565b600060208284031215620006b257600080fd5b81516001600160a01b03811681146200067657600080fd5b61528c80620006da6000396000f3fe6080604052600436106105775760003560e01c806377d4e37a116102d8578063b786a79611610180578063dd62ed3e116100e7578063f2fde38b116100a0578063f708a64f1161007a578063f708a64f14611175578063f84ba65d14611195578063f887ea40146111b5578063f8989346146111d557600080fd5b8063f2fde38b1461111f578063f3107ee71461113f578063f59d047c1461115f57600080fd5b8063dd62ed3e14611022578063df20fd4914611068578063e27b95a714611088578063e2b88782146110ca578063f1f3bca3146110ea578063f25f136c1461110a57600080fd5b8063c3647c8c11610139578063c3647c8c14610f4c578063c7606d2114610f6c578063c7e42c2f14610f8c578063cc4b12e514610fa2578063cf2157ea14610fec578063d608b3b21461100c57600080fd5b8063b786a79614610e9e578063b99fe64714610eb3578063bac283fe14610ed3578063bea23c6b14610ef3578063bee3eae414610f16578063bf56b37114610f3657600080fd5b806391d55f411161023f5780639cc0e357116101f8578063a9059cbb116101d2578063a9059cbb14610e26578063ac5433f214610e46578063b16a3bb114610e5b578063b340348d14610e7c57600080fd5b80639cc0e35714610dc5578063a7d742ba14610de6578063a8aa1b3114610e0657600080fd5b806391d55f4114610d0d57806393d8e30214610d2d578063943ff60714610d4d57806395d89b4114610d6357806398a17ed214610d905780639c95df3414610da557600080fd5b806382122d981161029157806382122d9814610c5957806383b09dcf14610c795780638877bf2e14610c99578063893d20e814610cb95780638b3e65d214610cd757806390e2301414610cf757600080fd5b806377d4e37a14610ba057806378109e5414610bbf5780637b20876914610bd55780637bc000ca14610bf55780637c542bf814610c0a5780637d9b451414610c4357600080fd5b80632f54bf6e1161043b578063571ac8b0116103a257806369fe0e2d1161035b578063719f04b411610335578063719f04b414610b2a578063736ad05014610b4a57806376c7a80714610b6a5780637791563914610b8a57600080fd5b806369fe0e2d14610aba5780636ddd171314610ada57806370a0823114610af457600080fd5b8063571ac8b014610a1957806359bb84cd14610a39578063634341fc14610a4f57806364319e3314610a64578063658d4b7f14610a7a57806368d86de614610a9a57600080fd5b80633dc47345116103f45780633dc473451461095f578063416501c814610974578063433c994c146109ad57806346469ae7146109cd5780634e70a604146109e35780635192c82c14610a0357600080fd5b80632f54bf6e1461087c578063313ce567146108ab578063342aa8b5146108c75780633615e7d5146108e757806336b19cd7146109075780633c8e556d1461093f57600080fd5b80631b3efe30116104df57806323b872dd1161049857806323b872dd146107ca57806327c89d30146107ea5780632807293a1461080a578063297bc9471461081f5780632b112e49146108525780632d686ebb1461086757600080fd5b80631b3efe301461071d5780631df4ccfc1461073257806320104289146107485780632362dd3914610769578063236a4afb1461078957806323b63585146107aa57600080fd5b80630c3f9cbd116105315780630c3f9cbd1461067a578063149537f21461068f578063151396ff146106bd578063168f857a146106dd578063180b0d7e146106f257806318160ddd1461070857600080fd5b8062b75d1c146105835780630197aeac146105a557806306fdde03146105c557806308cad4e51461060a578063095ea7b31461062a57806309ec68301461065a57600080fd5b3661057e57005b600080fd5b34801561058f57600080fd5b506105a361059e366004614c01565b6111ea565b005b3480156105b157600080fd5b506105a36105c0366004614c1e565b61123b565b3480156105d157600080fd5b5060408051808201909152600a8152690d6ded4d25ccac2e4e8d60b31b60208201525b6040516106019190614c98565b60405180910390f35b34801561061657600080fd5b506105a3610625366004614cab565b6112f5565b34801561063657600080fd5b5061064a610645366004614cd9565b611391565b6040519015158152602001610601565b34801561066657600080fd5b506105a3610675366004614c01565b611462565b34801561068657600080fd5b506105a36114a8565b34801561069b57600080fd5b506106af6106aa366004614d05565b611588565b604051908152602001610601565b3480156106c957600080fd5b506105a36106d8366004614d22565b61160e565b3480156106e957600080fd5b506106af611717565b3480156106fe57600080fd5b506106af60195481565b34801561071457600080fd5b506006546106af565b34801561072957600080fd5b506105a36117a4565b34801561073e57600080fd5b506106af60175481565b34801561075457600080fd5b5060265461064a90600160381b900460ff1681565b34801561077557600080fd5b506105a3610784366004614d63565b611828565b34801561079557600080fd5b5060265461064a90600160401b900460ff1681565b3480156107b657600080fd5b5061064a6107c5366004614cab565b611b4f565b3480156107d657600080fd5b5061064a6107e5366004614d22565b611b92565b3480156107f657600080fd5b506105a3610805366004614cab565b611c54565b34801561081657600080fd5b506105a3611d3e565b34801561082b57600080fd5b5061083f61083a366004614cab565b611dcc565b6040516106019796959493929190614d98565b34801561085e57600080fd5b506106af611fbc565b34801561087357600080fd5b506105a3612009565b34801561088857600080fd5b5061064a610897366004614d05565b6000546001600160a01b0391821691161490565b3480156108b757600080fd5b5060405160098152602001610601565b3480156108d357600080fd5b506105a36108e2366004614df6565b612046565b3480156108f357600080fd5b506105a3610902366004614cab565b6120a2565b34801561091357600080fd5b50601c54610927906001600160a01b031681565b6040516001600160a01b039091168152602001610601565b34801561094b57600080fd5b506105a361095a366004614e2f565b612170565b34801561096b57600080fd5b506105a361255f565b34801561098057600080fd5b5061064a61098f366004614d05565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156109b957600080fd5b506105a36109c8366004614c01565b612607565b3480156109d957600080fd5b506106af60075481565b3480156109ef57600080fd5b506105a36109fe366004614cab565b612653565b348015610a0f57600080fd5b506106af60145481565b348015610a2557600080fd5b5061064a610a34366004614d05565b61271c565b348015610a4557600080fd5b506106af60185481565b348015610a5b57600080fd5b506105a361272a565b348015610a7057600080fd5b506106af60205481565b348015610a8657600080fd5b506105a3610a95366004614df6565b61279c565b348015610aa657600080fd5b5060265461064a9062010000900460ff1681565b348015610ac657600080fd5b506105a3610ad5366004614cab565b6127f1565b348015610ae657600080fd5b5060265461064a9060ff1681565b348015610b0057600080fd5b506106af610b0f366004614d05565b6001600160a01b03166000908152600d602052604090205490565b348015610b3657600080fd5b506105a3610b45366004614cab565b612897565b348015610b5657600080fd5b506105a3610b65366004614cab565b612933565b348015610b7657600080fd5b506105a3610b85366004614c01565b612962565b348015610b9657600080fd5b506106af60165481565b348015610bac57600080fd5b5060265461064a90610100900460ff1681565b348015610bcb57600080fd5b506106af60095481565b348015610be157600080fd5b50601b54610927906001600160a01b031681565b348015610c0157600080fd5b50600b546106af565b348015610c1657600080fd5b50601f54602054602154602254604080519485526020850193909352918301526060820152608001610601565b348015610c4f57600080fd5b506106af60225481565b348015610c6557600080fd5b506105a3610c74366004614cab565b6129ad565b348015610c8557600080fd5b506106af610c94366004614d05565b612a58565b348015610ca557600080fd5b506105a3610cb4366004614c01565b612a92565b348015610cc557600080fd5b506000546001600160a01b0316610927565b348015610ce357600080fd5b506105a3610cf2366004614cab565b612ad6565b348015610d0357600080fd5b506106af60155481565b348015610d1957600080fd5b506105a3610d28366004614cab565b612b71565b348015610d3957600080fd5b50601e54610927906001600160a01b031681565b348015610d5957600080fd5b506106af60215481565b348015610d6f57600080fd5b506040805180820190915260048152634b4f4a4960e01b60208201526105f4565b348015610d9c57600080fd5b506105a3612c0f565b348015610db157600080fd5b506105a3610dc0366004614c1e565b612c9d565b348015610dd157600080fd5b5060265461064a90600160301b900460ff1681565b348015610df257600080fd5b506105a3610e01366004614d05565b612d77565b348015610e1257600080fd5b50602454610927906001600160a01b031681565b348015610e3257600080fd5b5061064a610e41366004614cd9565b612fdc565b348015610e5257600080fd5b50610927612fe9565b348015610e6757600080fd5b5060265461064a906301000000900460ff1681565b348015610e8857600080fd5b5060265461064a90640100000000900460ff1681565b348015610eaa57600080fd5b506106af613071565b348015610ebf57600080fd5b506105a3610ece366004614c01565b6130c1565b348015610edf57600080fd5b506105a3610eee366004614d22565b61310b565b348015610eff57600080fd5b5060265461064a9065010000000000900460ff1681565b348015610f2257600080fd5b506105a3610f31366004614c1e565b6131b0565b348015610f4257600080fd5b506106af60255481565b348015610f5857600080fd5b506105a3610f67366004614cab565b613225565b348015610f7857600080fd5b506105a3610f87366004614c1e565b6132a4565b348015610f9857600080fd5b506106af601a5481565b348015610fae57600080fd5b50610fc2610fbd366004614d05565b613375565b6040805195865260208601949094529284019190915260608301521515608082015260a001610601565b348015610ff857600080fd5b506106af611007366004614d05565b613417565b34801561101857600080fd5b506106af601f5481565b34801561102e57600080fd5b506106af61103d366004614e8b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561107457600080fd5b506105a3611083366004614eb9565b613451565b34801561109457600080fd5b5061109d613492565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610601565b3480156110d657600080fd5b506105a36110e5366004614cab565b613534565b3480156110f657600080fd5b506106af611105366004614c01565b6135e6565b34801561111657600080fd5b506105a361361e565b34801561112b57600080fd5b506105a361113a366004614d05565b613677565b34801561114b57600080fd5b50601d54610927906001600160a01b031681565b34801561116b57600080fd5b506106af60085481565b34801561118157600080fd5b506105a3611190366004614df6565b6136f5565b3480156111a157600080fd5b506105a36111b0366004614df6565b613729565b3480156111c157600080fd5b50602354610927906001600160a01b031681565b3480156111e157600080fd5b506105a361377e565b6000546001600160a01b0316331461121d5760405162461bcd60e51b815260040161121490614ed7565b60405180910390fd5b6026805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146112655760405162461bcd60e51b815260040161121490614ed7565b60268054600160481b60ff60481b19909116179081905560405163e2b2782d60e01b81526004810184905260248101839052600160501b9091046001600160a01b03169063e2b2782d90604401600060405180830381600087803b1580156112cc57600080fd5b505af11580156112e0573d6000803e3d6000fd5b50506026805460ff60481b1916905550505050565b6000546001600160a01b0316331461131f5760405162461bcd60e51b815260040161121490614ed7565b6703782dace9d9000081101561138c5760405162461bcd60e51b815260206004820152602c60248201527f53656c6c206c696d6974206d757374206e6f74206265206c657373207468616e60448201526b203235304d20746f6b656e7360a01b6064820152608401611214565b600855565b600080546001600160a01b031633146113fd57602654600160401b900460ff166113fd5760405162461bcd60e51b815260206004820152601e60248201527f4c697175696420686173206e6f74206265656e206164646564207965742100006044820152606401611214565b336000818152600e602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b0316331461148c5760405162461bcd60e51b815260040161121490614ed7565b60268054911515620100000262ff000019909216919091179055565b6040516370a0823160e01b815233600482015260009030906370a082319060240160206040518083038186803b1580156114e157600080fd5b505afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115199190614ef7565b602654604051630a5b654b60e11b8152919250600160501b90046001600160a01b0316906314b6ca96906115539033908590600401614f10565b600060405180830381600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b5050505050565b602654604051630958a1f960e01b81526001600160a01b038381166004830152600092600160501b90041690630958a1f9906024015b60206040518083038186803b1580156115d657600080fd5b505afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c9190614ef7565b6000546001600160a01b031633146116385760405162461bcd60e51b815260040161121490614ed7565b6001600160a01b0383163014156116915760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207472616e73666572206f7574206e617469766520746f6b656e6044820152606401611214565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906116bf9085908590600401614f10565b602060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117119190614f29565b50505050565b60006026600a9054906101000a90046001600160a01b03166001600160a01b0316634ff3dff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561176757600080fd5b505afa15801561177b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f9190614ef7565b905090565b6000546001600160a01b031633146117ce5760405162461bcd60e51b815260040161121490614ed7565b6026600a9054906101000a90046001600160a01b03166001600160a01b03166320c9f5fc306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b15801561156d57600080fd5b6000546001600160a01b031633146118525760405162461bcd60e51b815260040161121490614ed7565b6003546001600160a01b0384811691161480159061187e57506004546001600160a01b03848116911614155b801561189857506024546001600160a01b03848116911614155b6118f85760405162461bcd60e51b815260206004820152602b60248201527f506c6561736520696e70757420612076616c696420746f6b656e20636f6e747260448201526a616374206164647265737360a81b6064820152608401611214565b61190183613802565b61195b5760405162461bcd60e51b815260206004820152602560248201527f506c6561736520696e70757420616e2061637475616c20746f6b656e20636f6e6044820152641d1c9858dd60da1b6064820152608401611214565b6001600160a01b0383166000908152600c602052604090205460ff16156119f45760405162461bcd60e51b815260206004820152604160248201527f436f6e747261637420616c72656164792061646465642e20546f206368616e6760448201527f6520706172616d657465727320706c656173652072656d6f76652066697273746064820152601760f91b608482015260a401611214565b60008211611a4f5760405162461bcd60e51b815260206004820152602260248201527f4d696e20686f6c64206d7573742062652067726561746572207468616e207a65604482015261726f60f01b6064820152608401611214565b601754811115611ab35760405162461bcd60e51b815260206004820152602960248201527f446973636f756e742063616e6e6f742062652067726561746572207468616e206044820152680e8dee8c2d840e8c2f60bb1b6064820152608401611214565b600b80546000908152600a6020908152604080832080546001600160a01b039098166001600160a01b0319988916811782556001808301989098556002820196909655600301805460ff199081168817909155858452600c909252822080549091168517905581549384018255527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db99091018054909216179055565b600080546001600160a01b03163314611b7a5760405162461bcd60e51b815260040161121490614ed7565b60035461145c9030906001600160a01b03168461383e565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914611c3f576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054611c1a918490613924565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b611c4a84848461395e565b90505b9392505050565b6000546001600160a01b03163314611c7e5760405162461bcd60e51b815260040161121490614ed7565b62278d00811015611d075760405162461bcd60e51b815260206004820152604760248201527f486f6c6465722073686f756c642068617665206d696e696d756d20333020646160448201527f79732028323539323030302920746f20776974686472617720756e636c61696d6064820152666564206469767360c81b608482015260a401611214565b60265460405163352e051560e11b815260048101839052600160501b9091046001600160a01b031690636a5c0a2a90602401611553565b6000546001600160a01b03163314611d685760405162461bcd60e51b815260040161121490614ed7565b6026600a9054906101000a90046001600160a01b03166001600160a01b0316631b51972c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611db857600080fd5b505af1158015611711573d6000803e3d6000fd5b6000818152600a6020526040808220805482516306fdde0360e01b815292516060948594909384938493849384939284926001600160a01b03909116916306fdde039160048083019286929190829003018186803b158015611e2d57600080fd5b505afa158015611e41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e699190810190614f5c565b905060008260000160009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611ebd57600080fd5b505afa158015611ed1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ef99190810190614f5c565b905060008360000160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4d57600080fd5b505afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190614ffe565b845460018601546002870154600390970154959f949e50919c506001600160a01b03169a50985092965060ff909116945092505050565b6004546001600160a01b03166000908152600d602052604081205461179f906003546001600160a01b03166000908152600d60205260409020546120039060065490613dbb565b90613dbb565b6000546001600160a01b031633146120335760405162461bcd60e51b815260040161121490614ed7565b6026805467ff0000000000000019169055565b6000546001600160a01b031633146120705760405162461bcd60e51b815260040161121490614ed7565b6001600160a01b0382166000908152601260205260409020805460ff191682151517905561209e8282613dfd565b5050565b6000546001600160a01b031633146120cc5760405162461bcd60e51b815260040161121490614ed7565b600081116121395760405162461bcd60e51b815260206004820152603460248201527f6d696e696d756d20646973747269627574696f6e206c6576656c206d7573742060448201527362652067726561746572207468616e207a65726f60601b6064820152608401611214565b602654604051634c72dff760e11b815260048101839052600160501b9091046001600160a01b0316906398e5bfee90602401611553565b6000546001600160a01b0316331461219a5760405162461bcd60e51b815260040161121490614ed7565b6004546001600160a01b03858116911614156122085760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f74206265207a65726f206044820152666164647265737360c81b6064820152608401611214565b6004546001600160a01b03848116911614156122745760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f74206265207a65726f206164604482015264647265737360d81b6064820152608401611214565b6004546001600160a01b03838116911614156122e55760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f74206265207a65604482015269726f206164647265737360b01b6064820152608401611214565b6004546001600160a01b03828116911614156123555760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f74206265207a65726044820152686f206164647265737360b81b6064820152608401611214565b6003546001600160a01b03858116911614156123c35760405162461bcd60e51b815260206004820152602760248201527f436861726974792077616c6c6574206d757374206e6f742062652064656164206044820152666164647265737360c81b6064820152608401611214565b6003546001600160a01b038481169116141561242f5760405162461bcd60e51b815260206004820152602560248201527f41646d696e2077616c6c6574206d757374206e6f742062652064656164206164604482015264647265737360d81b6064820152608401611214565b6003546001600160a01b03838116911614156124a05760405162461bcd60e51b815260206004820152602a60248201527f4e4654207265776172642077616c6c6574206d757374206e6f742062652064656044820152696164206164647265737360b01b6064820152608401611214565b6003546001600160a01b03828116911614156125105760405162461bcd60e51b815260206004820152602960248201527f5374616b65706f6f6c2077616c6c6574206d757374206e6f742062652064656160448201526864206164647265737360b81b6064820152608401611214565b601b80546001600160a01b03199081166001600160a01b0396871617909155601d8054821693861693909317909255601c8054831693851693909317909255601e805490911691909216179055565b6000546001600160a01b031633146125895760405162461bcd60e51b815260040161121490614ed7565b602654600160381b900460ff16156125ed5760405162461bcd60e51b815260206004820152602160248201527f506c656173652064697361626c652061697264726f70206d6f646520666972736044820152601d60fa1b6064820152608401611214565b6026805468ff00000000000000001916600160401b179055565b6000546001600160a01b031633146126315760405162461bcd60e51b815260040161121490614ed7565b60268054911515650100000000000265ff000000000019909216919091179055565b600260015414156126a65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611214565b60026001556026546040516335027f1960e01b8152600160501b9091046001600160a01b0316906335027f19906126e39033908590600401614f10565b600060405180830381600087803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b505060018055505050565b600061145c82600019611391565b6000546001600160a01b031633146127545760405162461bcd60e51b815260040161121490614ed7565b60025460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db091303191600480830192600092919082900301818588803b15801561156d57600080fd5b6000546001600160a01b031633146127c65760405162461bcd60e51b815260040161121490614ed7565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461281b5760405162461bcd60e51b815260040161121490614ed7565b60648111156128925760405162461bcd60e51b815260206004820152603760248201527f546f74616c20466565206d757374206265206265747765656e203020616e642060448201527f3130302028313030203d2074656e2070657263656e74290000000000000000006064820152608401611214565b601755565b6000546001600160a01b031633146128c15760405162461bcd60e51b815260040161121490614ed7565b6019546128cf906004613edf565b81111561292e5760405162461bcd60e51b815260206004820152602760248201527f74617820726174696f2063616e6e6f74206265206d6f7265207468616e2032356044820152663020283235252960c81b6064820152608401611214565b601655565b6000546001600160a01b0316331461295d5760405162461bcd60e51b815260040161121490614ed7565b600755565b6000546001600160a01b0316331461298c5760405162461bcd60e51b815260040161121490614ed7565b60268054911515600160301b0266ff00000000000019909216919091179055565b6000546001600160a01b031633146129d75760405162461bcd60e51b815260040161121490614ed7565b6016546129e5906002613edf565b811115612a535760405162461bcd60e51b815260206004820152603660248201527f6275726e20726174696f2063616e6e6f74206265206d6f7265207468616e203560448201527506040e0cae4c6cadce840decc40e8dee8c2d840e8c2f60531b6064820152608401611214565b601455565b60265460405163051fa63360e31b81526001600160a01b038381166004830152600092600160501b900416906328fd3198906024016115be565b6000546001600160a01b03163314612abc5760405162461bcd60e51b815260040161121490614ed7565b602680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314612b005760405162461bcd60e51b815260040161121490614ed7565b60648111158015612b12575060018110155b612b6c5760405162461bcd60e51b815260206004820152602560248201527f666565206c696d69746572206d757374206265206265747765656e203120616e604482015264064203130360dc1b6064820152608401611214565b601855565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260040161121490614ed7565b6703782dace9d90000811015612c0a5760405162461bcd60e51b815260206004820152602e60248201527f57616c6c6574206c696d6974206d757374206e6f74206265206c65737320746860448201526d616e203235304d20746f6b656e7360901b6064820152608401611214565b600955565b6000546001600160a01b03163314612c395760405162461bcd60e51b815260040161121490614ed7565b60265460275460405163aa60e73360e01b81526004810191909152600160501b9091046001600160a01b03169063aa60e73390602401600060405180830381600087803b158015612c8957600080fd5b505af1925050508015612c9a575060015b50565b6000546001600160a01b03163314612cc75760405162461bcd60e51b815260040161121490614ed7565b60008211612ce75760405162461bcd60e51b815260040161121490615021565b60008111612d075760405162461bcd60e51b815260040161121490615021565b6026546040516349465b8360e11b81526004810184905260248101839052600160501b9091046001600160a01b03169063928cb706906044015b600060405180830381600087803b158015612d5b57600080fd5b505af1158015612d6f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314612da15760405162461bcd60e51b815260040161121490614ed7565b600b54801561209e5760005b81811015612fd7576000818152600a6020526040902080546001600160a01b0385811691161415612fc65782821415612e695760045481546001600160a01b0319166001600160a01b039182161782556000600183018190556002830181905560038301805460ff199081169091559186168152600c6020526040902080549091169055600b805480612e4257612e42615064565b600082815260209020810160001990810180546001600160a01b0319169055019055612fc6565b6000600a60006001600b80549050612e819190615090565b815260208082019290925260409081016000908120805486546001600160a01b03199081166001600160a01b03928316178855600180840180548a83015560028086018054918c01919091556003808c01805460ff1990811686179091558f87168952600c909a5297872080548a169055600454865490941693909416929092178455908490559290559182018054909316909255600b805491935091612f2791615090565b81548110612f3757612f376150a7565b600091825260209091200154600b80546001600160a01b039092169185908110612f6357612f636150a7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480612fa257612fa2615064565b600082815260209020810160001990810180546001600160a01b0319169055019055505b50612fd0816150bd565b9050612dad565b505050565b6000611c4d33848461395e565b60006026600a9054906101000a90046001600160a01b03166001600160a01b031663162db73f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561303957600080fd5b505afa15801561304d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179f91906150d8565b60006026600a9054906101000a90046001600160a01b03166001600160a01b0316631b57ef7d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561176757600080fd5b6000546001600160a01b031633146130eb5760405162461bcd60e51b815260040161121490614ed7565b602680549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b031633146131355760405162461bcd60e51b815260040161121490614ed7565b60265460405163151396ff60e01b81526001600160a01b038581166004830152848116602483015260448201849052600160501b9092049091169063151396ff90606401600060405180830381600087803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146131da5760405162461bcd60e51b815260040161121490614ed7565b600082116131fa5760405162461bcd60e51b815260040161121490615021565b6000811161321a5760405162461bcd60e51b815260040161121490615021565b602791909155602855565b6000546001600160a01b0316331461324f5760405162461bcd60e51b815260040161121490614ed7565b6000811161329f5760405162461bcd60e51b815260206004820152601f60248201527f426c6f636b732073686f756c642062652067726561746572207468616e2030006044820152606401611214565b601355565b600260015414156132f75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611214565b6002600155602654604051633900720360e21b81523360048201526024810184905260448101839052600160501b9091046001600160a01b03169063e401c80c90606401600060405180830381600087803b15801561335557600080fd5b505af1158015613369573d6000803e3d6000fd5b50506001805550505050565b602654604051630da3ab3560e31b81526001600160a01b0383811660048301526000928392839283928392600160501b90910490911690636d1d59a89060240160a06040518083038186803b1580156133cd57600080fd5b505afa1580156133e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340591906150f5565b939a9299509097509550909350915050565b602654604051633b1eaf3160e01b81526001600160a01b038381166004830152600092600160501b90041690633b1eaf31906024016115be565b6000546001600160a01b0316331461347b5760405162461bcd60e51b815260040161121490614ed7565b6026805460ff191692151592909217909155602a55565b6000806000806000806026600a9054906101000a90046001600160a01b03166001600160a01b031663c11df1d76040518163ffffffff1660e01b815260040160c06040518083038186803b1580156134e957600080fd5b505afa1580156134fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135219190615142565b949b939a50919850965094509092509050565b6000546001600160a01b0316331461355e5760405162461bcd60e51b815260040161121490614ed7565b60165461356c906002613edf565b8111156135e15760405162461bcd60e51b815260206004820152603b60248201527f7374616b65706f6f6c20726174696f2063616e6e6f74206265206d6f7265207460448201527f68616e2035302070657263656e74206f6620746f74616c2074617800000000006064820152608401611214565b601555565b6000436013546025546135f9919061518c565b1015806136035750815b156136165760195461145c906001613dbb565b505060175490565b6000546001600160a01b031633146136485760405162461bcd60e51b815260040161121490614ed7565b60405133908190303180156108fc02916000818181858888f1935050505015801561209e573d6000803e3d6000fd5b6000546001600160a01b031633146136a15760405162461bcd60e51b815260040161121490614ed7565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b0316331461371f5760405162461bcd60e51b815260040161121490614ed7565b61209e8282613dfd565b6000546001600160a01b031633146137535760405162461bcd60e51b815260040161121490614ed7565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146137a85760405162461bcd60e51b815260040161121490614ed7565b6026600a9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0306001600160a01b0316316040518263ffffffff1660e01b81526004016000604051808303818588803b15801561156d57600080fd5b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f80158015906138365750818114155b949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d9091529182205461388f918490613924565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546138be9083613f21565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906139129086815260200190565b60405180910390a35060019392505050565b600081848411156139485760405162461bcd60e51b81526004016112149190614c98565b5060006139558486615090565b95945050505050565b60008082116139bf5760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e7420416d6f756e743a2063616e6e6f742073656e646044820152662030204b4f4a4960c81b6064820152608401611214565b602654600160381b900460ff16156139e3576139dc84848461383e565b9050611c4d565b602654600160481b900460ff1615613a00576139dc84848461383e565b613a0b848484613f80565b6024546001600160a01b0384811691161415613a3657613a29614087565b15613a3657613a366140dd565b602554158015613a5357506024546001600160a01b038481169116145b15613a83576001600160a01b0384166000908152600d6020526040902054613a7a57600080fd5b613a8343602555565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152600d9091529190912054613ad5918490613924565b6001600160a01b0385166000908152600d6020908152604080832093909355600f90529081205460ff16158015613b2557506001600160a01b0384166000908152600f602052604090205460ff16155b613b2f5782613b3a565b613b3a8585856148fb565b6024549091506001600160a01b03858116911614801590613b7457506001600160a01b03841660009081526010602052604090205460ff16155b15613bfb576001600160a01b0384166000908152600d6020526040902054600954613b9f838361518c565b1115613bf95760405162461bcd60e51b815260206004820152602360248201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152621d5b9d60ea1b6064820152608401611214565b505b6001600160a01b0384166000908152600d6020526040902054613c1e9082613f21565b6001600160a01b038086166000908152600d602090815260408083209490945591881681526011909152205460ff16613cca576026546001600160a01b038681166000908152600d602052604090819020549051630a5b654b60e11b8152600160501b909304909116916314b6ca9691613c9d91899190600401614f10565b600060405180830381600087803b158015613cb757600080fd5b505af1925050508015613cc8575060015b505b6001600160a01b03841660009081526011602052604090205460ff16613d63576026546001600160a01b038581166000908152600d602052604090819020549051630a5b654b60e11b8152600160501b909304909116916314b6ca9691613d3691889190600401614f10565b600060405180830381600087803b158015613d5057600080fd5b505af1925050508015613d61575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613da891815260200190565b60405180910390a3506001949350505050565b6000611c4d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613924565b6001600160a01b0382163014801590613e2457506024546001600160a01b03838116911614155b613e2d57600080fd5b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155613e9357602654604051630a5b654b60e11b8152600160501b9091046001600160a01b0316906314b6ca9690612d41908590600090600401614f10565b6026546001600160a01b038381166000908152600d602052604090819020549051630a5b654b60e11b8152600160501b909304909116916314b6ca9691612d4191869190600401614f10565b6000611c4d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614b46565b600080613f2e838561518c565b905083811015611c4d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611214565b6024546001600160a01b03848116911614156140035760075481111580613fbf57506001600160a01b03821660009081526010602052604090205460ff165b6140035760405162461bcd60e51b8152602060048201526015602482015274109d5e48151608131a5b5a5d08115e18d959591959605a1b6044820152606401611214565b6024546001600160a01b0383811691161415612fd7576008548111158061404257506001600160a01b03831660009081526010602052604090205460ff165b612fd75760405162461bcd60e51b815260206004820152601660248201527514d95b1b08151608131a5b5a5d08115e18d95959195960521b6044820152606401611214565b6024546000906001600160a01b031633148015906140af5750602654600160481b900460ff16155b80156140bd575060265460ff165b801561179f575050602a54306000908152600d6020526040902054101590565b6026805460ff60481b1916600160481b1790556040516370a0823160e01b815230600482018190526000916370a082319060240160206040518083038186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141619190614ef7565b9050600061418660195461418060145485614b7490919063ffffffff16565b90613edf565b60035460405163a9059cbb60e01b8152919250309163a9059cbb916141bb916001600160a01b03909116908590600401614f10565b602060405180830381600087803b1580156141d557600080fd5b505af11580156141e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420d9190614f29565b50602654610100900460ff16156142f157600061423b60195461418060155486614b7490919063ffffffff16565b90506142478382613dbb565b601e5460405163a9059cbb60e01b8152919450309163a9059cbb9161427c916001600160a01b03909116908590600401614f10565b602060405180830381600087803b15801561429657600080fd5b505af11580156142aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ce9190614f29565b506022546142dc9082613f21565b6022556142e98383613dbb565b9250506142fe565b6142fb8282613dbb565b91505b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614333576143336150a7565b6001600160a01b039283166020918202929092010152600254825191169082906001908110614364576143646150a7565b6001600160a01b039092166020928302919091019091015260265430319060ff6501000000000090910416156144b4576002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156143d857600080fd5b505afa1580156143ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144109190614ef7565b905080156144b25760025460245460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261444e929116908590600401614f10565b602060405180830381600087803b15801561446857600080fd5b505af115801561447c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a09190614f29565b50601a546144ae9082613f21565b601a555b505b60235460405163791ac94760e01b81526001600160a01b039091169063791ac947906144ed9087906000908790309042906004016151a4565b600060405180830381600087803b15801561450757600080fd5b505af115801561451b573d6000803e3d6000fd5b506000925061452e915050303183613dbb565b9050600061454d60195461418060165485614b7490919063ffffffff16565b602654909150819081908190600090819062010000900460ff161561465257508461458081612003868187818d8c613dbb565b601d546028546040519294506000926001600160a01b0390921691849084818181858888f193505050503d80600081146145d6576040519150601f19603f3d011682016040523d82523d6000602084013e6145db565b606091505b505090508061463c5760405162461bcd60e51b815260206004820152602760248201527f4e4654207265776172642077616c6c65742072656a656374656420424e4220746044820152663930b739b332b960c91b6064820152608401611214565b6021546146499083613f21565b60215550614665565b6146628461200385818b8a613dbb565b91505b6026546301000000900460ff16156146db576026600a9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156146c757600080fd5b505af1935050505080156146d9575060015b505b602654640100000000900460ff161561487857601b546028546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614740576040519150601f19603f3d011682016040523d82523d6000602084013e614745565b606091505b50509050806147a25760405162461bcd60e51b8152602060048201526024808201527f436861726974792077616c6c65742072656a656374656420424e42207472616e60448201526339b332b960e11b6064820152608401611214565b601f546147af9087613f21565b601f55601c546028546040516000926001600160a01b03169190889084818181858888f193505050503d8060008114614804576040519150601f19603f3d011682016040523d82523d6000602084013e614809565b606091505b50509050806148655760405162461bcd60e51b815260206004820152602260248201527f41646d696e2077616c6c65742072656a656374656420424e42207472616e736660448201526132b960f11b6064820152608401611214565b6020546148729087613f21565b60205550505b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156148c857600080fd5b505af11580156148dc573d6000803e3d6000fd5b50506026805460ff60481b191690555050505050505050505050505050565b6001600160a01b038316600090815260126020526040812054819081906149249060ff166135e6565b602654909150600090600160301b900460ff16801561495157506024546001600160a01b03878116911614155b801561496a57506024546001600160a01b038881169116145b15614aaa57600b5460005b818111614a41576000818152600a60205260409020600381015460ff1615614a3057600181015481546040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a082319060240160206040518083038186803b1580156149e057600080fd5b505afa1580156149f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a189190614ef7565b10614a30576002810154614a2d908590613f21565b93505b50614a3a816150bd565b9050614975565b50614a5c606461418060185486614b7490919063ffffffff16565b821115614a8457614a7d606461418060185486614b7490919063ffffffff16565b9150614a91565b614a8e8383613dbb565b91505b601954614aa2906141808885614b74565b935050614abe565b601954614abb906141808785614b74565b92505b306000908152600d6020526040902054614ad89084613f21565b306000818152600d6020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90614b299087815260200190565b60405180910390a3614b3b8584613dbb565b979650505050505050565b60008183614b675760405162461bcd60e51b81526004016112149190614c98565b5060006139558486615215565b600082614b835750600061145c565b6000614b8f8385615237565b905082614b9c8583615215565b14611c4d5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611214565b8015158114612c9a57600080fd5b600060208284031215614c1357600080fd5b8135611c4d81614bf3565b60008060408385031215614c3157600080fd5b50508035926020909101359150565b60005b83811015614c5b578181015183820152602001614c43565b838111156117115750506000910152565b60008151808452614c84816020860160208601614c40565b601f01601f19169290920160200192915050565b602081526000611c4d6020830184614c6c565b600060208284031215614cbd57600080fd5b5035919050565b6001600160a01b0381168114612c9a57600080fd5b60008060408385031215614cec57600080fd5b8235614cf781614cc4565b946020939093013593505050565b600060208284031215614d1757600080fd5b8135611c4d81614cc4565b600080600060608486031215614d3757600080fd5b8335614d4281614cc4565b92506020840135614d5281614cc4565b929592945050506040919091013590565b600080600060608486031215614d7857600080fd5b8335614d8381614cc4565b95602085013595506040909401359392505050565b60e081526000614dab60e083018a614c6c565b8281036020840152614dbd818a614c6c565b60ff98909816604084015250506001600160a01b03949094166060850152608084019290925260a0830152151560c09091015292915050565b60008060408385031215614e0957600080fd5b8235614e1481614cc4565b91506020830135614e2481614bf3565b809150509250929050565b60008060008060808587031215614e4557600080fd5b8435614e5081614cc4565b93506020850135614e6081614cc4565b92506040850135614e7081614cc4565b91506060850135614e8081614cc4565b939692955090935050565b60008060408385031215614e9e57600080fd5b8235614ea981614cc4565b91506020830135614e2481614cc4565b60008060408385031215614ecc57600080fd5b8235614cf781614bf3565b60208082526006908201526510a7bbb732b960d11b604082015260600190565b600060208284031215614f0957600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215614f3b57600080fd5b8151611c4d81614bf3565b634e487b7160e01b600052604160045260246000fd5b600060208284031215614f6e57600080fd5b815167ffffffffffffffff80821115614f8657600080fd5b818401915084601f830112614f9a57600080fd5b815181811115614fac57614fac614f46565b604051601f8201601f19908116603f01168101908382118183101715614fd457614fd4614f46565b81604052828152876020848701011115614fed57600080fd5b614b3b836020830160208801614c40565b60006020828403121561501057600080fd5b815160ff81168114611c4d57600080fd5b60208082526023908201527f6469737472696275746f722063616e6e6f7420626520657175616c20746f207a60408201526265726f60e81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156150a2576150a261507a565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156150d1576150d161507a565b5060010190565b6000602082840312156150ea57600080fd5b8151611c4d81614cc4565b600080600080600060a0868803121561510d57600080fd5b85519450602086015193506040860151925060608601519150608086015161513481614bf3565b809150509295509295909350565b60008060008060008060c0878903121561515b57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b6000821982111561519f5761519f61507a565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156151f45784516001600160a01b0316835293830193918301916001016151cf565b50506001600160a01b03969096166060850152505050608001529392505050565b60008261523257634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156152515761525161507a565b50029056fea2646970667358221220e525b1afcde10a3ebeb2c1ccb39ff9b80c221aa802a7d5d5a4cf25b7c56e37cf64736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000601155619c406013556206ddd060145562278d0060155566038d7ea4c680006016556658d15e176280006017553480156200004e57600080fd5b50604051620021df380380620021df8339810160408190526200007191620001aa565b6001600160a01b0382166200009b577310ed43c718714eb63d5aa57b78b54704e256024e6200009d565b815b600280546001600160a01b039283166001600160a01b0319918216811790925560008054821633179055600180549385169390911692909217909155604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905163ad5c464891600480820192602092909190829003018186803b1580156200012957600080fd5b505afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001649190620001e2565b600380546001600160a01b0319166001600160a01b039290921691909117905550620002079050565b80516001600160a01b0381168114620001a557600080fd5b919050565b60008060408385031215620001be57600080fd5b620001c9836200018d565b9150620001d9602084016200018d565b90509250929050565b600060208284031215620001f557600080fd5b62000200826200018d565b9392505050565b611fc880620002176000396000f3fe6080604052600436106101f95760003560e01c80636a5c0a2a1161010d578063c11df1d7116100a0578063d87db7521161006f578063d87db75214610601578063e2b2782d1461062e578063e2d2e2191461064e578063e401c80c14610664578063efca2eed1461068457600080fd5b8063c11df1d71461054a578063ce7c2ac214610596578063d0e30db0146105e3578063d627ab79146105eb57600080fd5b8063997664d7116100dc578063997664d7146104e8578063a7c37992146104fe578063aa37d61014610514578063aa60e7331461052a57600080fd5b80636a5c0a2a146103ff5780636d1d59a81461041f578063928cb706146104a257806398e5bfee146104c857600080fd5b806320ffe2fd116101905780633a98ef391161015f5780633a98ef391461036f5780633b1eaf31146103855780634b319713146103be5780634fab0ae8146103d45780634ff3dff5146103ea57600080fd5b806320ffe2fd146102f957806327c95e201461031957806328fd31981461032f57806335027f191461034f57600080fd5b8063162db73f116101cc578063162db73f1461029f5780631b51972c146102c75780631b57ef7d146102dc57806320c9f5fc146102f157600080fd5b80630958a1f9146101fe57806311ce023d1461024757806314b6ca961461025d578063151396ff1461027f575b600080fd5b34801561020a57600080fd5b50610234610219366004611c9b565b6001600160a01b031660009081526007602052604090205490565b6040519081526020015b60405180910390f35b34801561025357600080fd5b5061023460115481565b34801561026957600080fd5b5061027d610278366004611cb6565b61069a565b005b34801561028b57600080fd5b5061027d61029a366004611ce0565b610983565b3480156102ab57600080fd5b506001546040516001600160a01b03909116815260200161023e565b3480156102d357600080fd5b5061027d610a0b565b3480156102e857600080fd5b50601754610234565b61027d610a4d565b34801561030557600080fd5b5061027d610314366004611c9b565b610a66565b34801561032557600080fd5b50610234600c5481565b34801561033b57600080fd5b5061023461034a366004611c9b565b610ad1565b34801561035b57600080fd5b5061027d61036a366004611cb6565b610b5a565b34801561037b57600080fd5b50610234600d5481565b34801561039157600080fd5b506102346103a0366004611c9b565b6001600160a01b031660009081526008602052604090206001015490565b3480156103ca57600080fd5b50610234600a5481565b3480156103e057600080fd5b5061023460165481565b3480156103f657600080fd5b50601654610234565b34801561040b57600080fd5b5061027d61041a366004611d1c565b601555565b34801561042b57600080fd5b5061047861043a366004611c9b565b6001600160a01b031660009081526008602052604090208054600182015460038301546002840154600490940154929491939092909160ff90911690565b6040805195865260208601949094529284019190915260608301521515608082015260a00161023e565b3480156104ae57600080fd5b5061027d6104bd366004611d35565b601391909155601455565b3480156104d457600080fd5b5061027d6104e3366004611d1c565b610d77565b3480156104f457600080fd5b50610234600e5481565b34801561050a57600080fd5b5061023460155481565b34801561052057600080fd5b50610234600b5481565b34801561053657600080fd5b5061027d610545366004611d1c565b610d93565b34801561055657600080fd5b50600d54600c54600f54600b54600a54600e54604080519687526020870195909552938501929092526060840152608083015260a082015260c00161023e565b3480156105a257600080fd5b506104786105b1366004611c9b565b600860205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b61027d610f38565b3480156105f757600080fd5b5061023460175481565b34801561060d57600080fd5b5061023461061c366004611c9b565b60076020526000908152604090205481565b34801561063a57600080fd5b5061027d610649366004611d35565b610f9c565b34801561065a57600080fd5b5061023460105481565b34801561067057600080fd5b5061027d61067f366004611d57565b61113e565b34801561069057600080fd5b50610234600f5481565b6000546001600160a01b031633146106b157600080fd5b6001600160a01b0382166000908152600860205260409020541561071a576106fd6106db83610ad1565b6001600160a01b038416600090815260086020526040902060010154906113af565b6001600160a01b0383166000908152600860205260409020600101555b60008111801561074057506001600160a01b038216600090815260086020526040902054155b1561077d5760175481106107785761075782611417565b6001600160a01b03821660009081526007602052604090206402540be3ff90555b610814565b801580156107a257506001600160a01b03821660009081526008602052604090205415155b15610814576001600160a01b038216600090815260086020526040902060019081015414806107ea57506001600160a01b038216600090815260086020526040902060010154155b156107f857610778826114b0565b6001600160a01b03821660009081526007602052604090204290555b6001600160a01b03821660009081526008602052604090206004015460175460ff9091169082106108cb578061089a576001600160a01b0383166000908152600860205260409020600401805460ff19166001179055600d5461087790836113af565b600d556001600160a01b038316600090815260086020526040902082905561093d565b6001600160a01b038316600090815260086020526040902054600d546108779184916108c5916115e7565b906113af565b8015610923576001600160a01b038316600090815260086020526040902060048101805460ff1916905554600d54610902916115e7565b600d556001600160a01b03831660009081526008602052604081205561093d565b6001600160a01b0383166000908152600860205260408120555b6001600160a01b03831660009081526008602052604090205461095f90611629565b6001600160a01b039093166000908152600860205260409020600201929092555050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b1580156109cd57600080fd5b505af11580156109e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a059190611d8a565b50505050565b600080546040516001600160a01b03909116918291303180156108fc0292909190818181858888f19350505050158015610a49573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610a6457600080fd5b565b6000546001600160a01b03163314610a7d57600080fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f8f14af6e51856288e65b250dbddfce7be3cf8785fae01f7498d98a6765a02c849060200160405180910390a150565b6001600160a01b038116600090815260086020526040812054610af657506000919050565b6001600160a01b038216600090815260086020526040812054610b1890611629565b6001600160a01b038416600090815260086020526040902060020154909150808211610b48575060009392505050565b610b5282826115e7565b949350505050565b60198110158015610b6c575060648111155b610bd45760405162461bcd60e51b815260206004820152602e60248201527f50657263656e74206f66207769746864726177616c206973206f75747369646560448201526d206f6620706172616d657465727360901b60648201526084015b60405180910390fd5b6000610c04610be284610ad1565b6001600160a01b038516600090815260086020526040902060010154906113af565b90506000610c1d6064610c178486611646565b906116c5565b90508015610a0557610c308160016115e7565b600f54909150610c4090826113af565b600f556013546040516000916001600160a01b03871691849084818181858888f193505050503d8060008114610c92576040519150601f19603f3d011682016040523d82523d6000602084013e610c97565b606091505b5050905080610cb85760405162461bcd60e51b8152600401610bcb90611dac565b6001600160a01b0385166000908152600660205260409020429055610cdd83836115e7565b6001600160a01b0386166000908152600860205260409020600181019190915554610d0790611629565b6001600160a01b0386166000908152600860205260409020600281019190915560030154610d3590836113af565b6001600160a01b038616600090815260086020526040902060030155600a54610d5e90836113af565b600a55600c54610d6e90836115e7565b600c5550610a05565b6000546001600160a01b03163314610d8e57600080fd5b601655565b60045480610d9f575050565b6000805a600060188190559091505b8483108015610dbc57508381105b15610f29578360185410610dd05760006018555b600060086000600460185481548110610deb57610deb611ded565b60009182526020808320909101546001600160a01b03168352820192909252604001902060010154118015610e5b575060086000600460185481548110610e3457610e34611ded565b60009182526020808320909101546001600160a01b03168352820192909252604001902054155b8015610eb0575060076000600460185481548110610e7b57610e7b611ded565b60009182526020808320909101546001600160a01b03168352820192909252604001902054601554610eae9042906113af565b115b15610ee757610ee7600460185481548110610ecd57610ecd611ded565b6000918252602090912001546001600160a01b0316611707565b610efc610ef55a84906115e7565b84906113af565b92505a601880549193506000610f1183611e19565b91905055508080610f2190611e19565b915050610dae565b610f316117ef565b5050505050565b6000546001600160a01b03163314610f4f57600080fd5b346012819055600c54610f6290826113af565b600c55600e54610f7290826113af565b600e55600d54601154610f9691610f8d91610c179085611646565b601054906113af565b60105550565b6017548214156110145760405162461bcd60e51b815260206004820152603d60248201527f6e6577207468726573686f6c6420616d6f756e742063616e6e6f74206265207460448201527f68652073616d65206173206578697374696e67207468726573686f6c640000006064820152608401610bcb565b633b9aca008210158061102f575067016345785d8a00008211155b6110a15760405162461bcd60e51b815260206004820152603960248201527f4d696e20686f6c6420616d6f756e7420666f7220646976732073686f756c642060448201527f6265747765656e203120616e64203130304d20746f6b656e73000000000000006064820152608401610bcb565b6206ddd08110156111135760405162461bcd60e51b815260206004820152603660248201527f506c65617365207573652061206761732076616c756520657175616c20746f2060448201527506f7220686967686572207468616e203435302c3030360541b6064820152608401610bcb565b6017805490839055828111156111335761112e826000611956565b505050565b61112e826001611956565b60198210158015611150575060648211155b6111b55760405162461bcd60e51b815260206004820152603060248201527f50657263656e74206f66207265696e766573746d656e74206973206f7574736960448201526f6465206f6620706172616d657465727360801b6064820152608401610bcb565b60006111e56111c385610ad1565b6001600160a01b038616600090815260086020526040902060010154906113af565b905060006111f86064610c178487611646565b90506016548110610f315761120e8160016115e7565b6040805160028082526060820183529293506000929091602083019080368337505060035482519293506001600160a01b03169183915060009061125457611254611ded565b6001600160a01b03928316602091820292909201015260005482519116908290600190811061128557611285611ded565b6001600160a01b03928316602091820292909201015260025460145460405163b6f9de9560e01b8152919092169163b6f9de959185906112cf90899087908d904290600401611e34565b6000604051808303818589803b1580156112e857600080fd5b5088f11580156112fc573d6000803e3d6000fd5b50505050505061131782600f546113af90919063ffffffff16565b600f5561132483836115e7565b6001600160a01b038716600090815260086020526040902060018101919091556003015461135290836113af565b6001600160a01b038716600090815260086020526040902060030155600b5461137b90836113af565b600b556001600160a01b0386166000908152600660205260409020429055600c546113a690836115e7565b600c5550610f31565b6000806113bc8385611e9e565b90508381101561140e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcb565b90505b92915050565b6001600160a01b03811660009081526009602052604090205460ff161561143b5750565b600480546001600160a01b038316600081815260056020908152604080832085905560018086019096557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90940180546001600160a01b03191684179055918152600990915220805460ff1916909117905550565b600480546114c090600190611eb6565b815481106114d0576114d0611ded565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061150e5761150e611ded565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526005918290526040812054600480549193929161155a90600190611eb6565b8154811061156a5761156a611ded565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560048054806115a0576115a0611ecd565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03929092168152600990915260409020805460ff19169055565b600061140e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c17565b6000611411601154610c176010548561164690919063ffffffff16565b60008261165557506000611411565b60006116618385611ee3565b90508261166e8583611f02565b1461140e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcb565b600061140e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c51565b60006117156106db83610ad1565b905060006117248260016115e7565b6000805460135460405193945091926001600160a01b039091169190849084818181858888f193505050503d806000811461177b576040519150601f19603f3d011682016040523d82523d6000602084013e611780565b606091505b50509050806117a15760405162461bcd60e51b8152600401610bcb90611dac565b6001600160a01b0384166000908152600660209081526040808320429055600782528083206402540be3ff90556008909152812060010155600c546117e690846115e7565b600c5550505050565b600454806117fa5750565b600060188190555b81811015610a495781601854106118195760006018555b6008600060046018548154811061183257611832611ded565b60009182526020808320909101546001600160a01b031683528201929092526040019020600101541580156118a257506008600060046018548154811061187b5761187b611ded565b60009182526020808320909101546001600160a01b03168352820192909252604001902054155b80156118f75750600760006004601854815481106118c2576118c2611ded565b60009182526020808320909101546001600160a01b031683528201929092526040019020546015546118f59042906113af565b115b1561192e5761192e60046018548154811061191457611914611ded565b6000918252602090912001546001600160a01b03166114b0565b6018805490600061193e83611e19565b9190505550808061194e90611e19565b915050611802565b6004548061196357505050565b6000805a600060188190559091505b858310801561198057508381105b15611c0f5783601854106119945760006018555b84611b1557600860006004601854815481106119b2576119b2611ded565b60009182526020808320909101546001600160a01b03168352820192909252604001902054158015611a255750600760006004601854815481106119f8576119f8611ded565b60009182526020808320909101546001600160a01b031683528201929092526040019020546402540be3ff145b15611b105760008054601854600480546001600160a01b03909316926370a0823192908110611a5657611a56611ded565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b03909116600482015260240160206040518083038186803b158015611aa157600080fd5b505afa158015611ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad99190611f24565b9050611b0e600460185481548110611af357611af3611ded565b6000918252602090912001546001600160a01b03168261069a565b505b611bd4565b600060086000600460185481548110611b3057611b30611ded565b60009182526020808320909101546001600160a01b031683528201929092526040019020541115611bd457611bd4600460185481548110611b7357611b73611ded565b9060005260206000200160009054906101000a90046001600160a01b031660086000600460185481548110611baa57611baa611ded565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461069a565b611be2610ef55a84906115e7565b92505a601880549193506000611bf783611e19565b91905055508080611c0790611e19565b915050611972565b505050505050565b60008184841115611c3b5760405162461bcd60e51b8152600401610bcb9190611f3d565b506000611c488486611eb6565b95945050505050565b60008183611c725760405162461bcd60e51b8152600401610bcb9190611f3d565b506000611c488486611f02565b80356001600160a01b0381168114611c9657600080fd5b919050565b600060208284031215611cad57600080fd5b61140e82611c7f565b60008060408385031215611cc957600080fd5b611cd283611c7f565b946020939093013593505050565b600080600060608486031215611cf557600080fd5b611cfe84611c7f565b9250611d0c60208501611c7f565b9150604084013590509250925092565b600060208284031215611d2e57600080fd5b5035919050565b60008060408385031215611d4857600080fd5b50508035926020909101359150565b600080600060608486031215611d6c57600080fd5b611d7584611c7f565b95602085013595506040909401359392505050565b600060208284031215611d9c57600080fd5b8151801515811461140e57600080fd5b60208082526021908201527f5368617265686f6c6465722072656a656374656420424e42207472616e7366656040820152603960f91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611e2d57611e2d611e03565b5060010190565b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015611e7e5784516001600160a01b031683529383019391830191600101611e59565b50506001600160a01b039690961660408501525050506060015292915050565b60008219821115611eb157611eb1611e03565b500190565b600082821015611ec857611ec8611e03565b500390565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615611efd57611efd611e03565b500290565b600082611f1f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611f3657600080fd5b5051919050565b600060208083528351808285015260005b81811015611f6a57858101830151858201604001528201611f4e565b81811115611f7c576000604083870101525b50601f01601f191692909201604001939250505056fea264697066735822122009eb0664cc01099c0301fad576cfb4d18dd9f5d26b53daf2f9e7fb5e325f2e7664736f6c63430008090033

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.