Contract 0xe459c0b11c62e3fD83da52537BD6191B56aB1b5A

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xdbd4c18f00da02237a8384f7d5f9043694e56d4f45b26055f7c7beee95bffa1083760132021-06-17 13:04:3219 hrs 54 mins ago0x384f60dc618c82fb10ce9fbd7c1babf3b89f747c IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x3bdefb394d204de2dd07bce499a496d3ae7e80c672c9e71f5713b23e22eb45cc83568762021-06-16 20:59:041 day 11 hrs ago0x414e33e204e55fa59b9e25023916de2bdf3239be IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x16d0fccb1ed896ebf60dee6641e72644fa8236bcc39bf390d26ab39ffe90a62083420712021-06-16 8:34:072 days 24 mins ago0x1addcf81f37410a008bdbf9b86dc31e6950e03a0 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0xbd623dda747320c33e3acb5c5a501b492b6a6ae0d7bd43b82e94e7fc1ee4fbc183334302021-06-16 1:17:482 days 7 hrs ago0xd7edb5e475a947c69885b32710f49caf6fce1501 IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0xbe3088284a5d8181d389c9cff8f20411cc05ab6d30beb2a32e9d5531cea74a1a82772752021-06-14 1:52:044 days 7 hrs ago0x981e839c45c74268f3e30279bc9d5e8b8cdb32da IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0xf4a29ee7fe6cddc326b031e707d557b4655f6ec0d3124a1c08de78a73a787d8f82187232021-06-12 0:40:216 days 8 hrs ago0x00a0414eaca4d9a6d353ac484d8d05327a17ead7 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x976f070ff9748227e6b6a72f58b5656e0c72bdc92b76c119d9649f2dd2e8c58781788662021-06-10 15:18:557 days 17 hrs ago0x8cd6b170a34fa8c4057b5cbe9fca3bbab97e5392 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x529a2bea7b847156899dff55ae0bd36f9d2aea4d47547e99aca67125dbb4f38f81346122021-06-09 2:18:269 days 6 hrs ago0x3f143d55946d75cce1d6af824ef365778feec569 IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0x006a4cf7f8f8fc7a0c837e905739793eb73e73d04ea6cd7b4932ec1931d4748281345602021-06-09 2:15:509 days 6 hrs ago0x3f143d55946d75cce1d6af824ef365778feec569 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x6548e0aa459f5b7784aeba6033544e092ae2bc2ba42b96c748c79d8bf665821480830472021-06-07 7:15:2511 days 1 hr ago0xaf9c763c53e7f3e5df69a9b0f3bafdd8bc02c815 IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0xe6e33950b6de3f2143aafda084fec98d1ca0e25f46bc99fded86ffe52979941480754512021-06-07 0:55:2711 days 8 hrs ago0x434cd0caa9637dc352cfa07b364d337e3240a3ac IN  AP3.TOWN: AP3 Token0 BNB0.0005
0xd124606f6ea8631c6edfb25ba6039fdf9fe78f9086e214235b2920c4b3e3794580320392021-06-05 12:40:5812 days 20 hrs ago0x46992162c58fc99f35bdffffe4f4f1976f544ebd IN  AP3.TOWN: AP3 Token0 BNB0.00085891
0x2b8621d8028cb5526ae8562322a6131a69a5e73463d6d41c7f4a75917cc2ca1280307562021-06-05 11:36:4912 days 21 hrs ago0x3d2d561b1347b887f91e7a7c608b15bd48f0ba4f IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0xa25888031e9489b907b4559a562bdb5cbe003a0ce5c831c89a441fe8b2aaf9cd80297652021-06-05 10:47:1612 days 22 hrs ago0x8d72a9edf260aa522cb76d83908bbdb58ccc48bd IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x2121361b78adde8de0d548f455f9018e2bf4899b829e3dfb0f08f164668dbb7280080572021-06-04 16:38:5613 days 16 hrs ago0xe05c805e27e419a77cc8a6ab72c55586aa24fc18 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0xc2d557711a4442a0c167c175a0eaa5ebd3251851f1b04b97f36aec628a2e5cb479632572021-06-03 3:10:4315 days 5 hrs ago0x7a334fbcab94e38fd437d43851f19f79a9e4709d IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x35f25d544cd2280aee128afa4c48d869b2fdbfa79af0c6f5b4cee4f71b0491e279582222021-06-02 22:58:4815 days 10 hrs ago0xd717499568146195938cdcdb4ab8996e3da5491c IN  AP3.TOWN: AP3 Token0 BNB0.00085891
0xdfb79782036095b4429a4974f04fe4dfc4534c110379dd8d1a6db80d4d6b13db79568172021-06-02 21:48:2315 days 11 hrs ago0x7dcc089e5a74517b770876bb1a503ece7c66a12e IN  AP3.TOWN: AP3 Token0 BNB0.000072725
0xd3356334314439f8757d879f739b38e919fa175bd6367a40e4b11e2eaeaa4b7d79567112021-06-02 21:43:0515 days 11 hrs ago0x7dcc089e5a74517b770876bb1a503ece7c66a12e IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0x9ff9c802670b28dc24d91d711734fddca2020ad2977d4fc83ee3af085d3fed1279443442021-06-02 11:22:2415 days 21 hrs ago0xc2c92a49a5e6eb7874b7494381587974f78ed937 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0xa4436b7c540c9b8b8322e2610b4047510435da5c5be0415d23b63f43f51f1f6d79187422021-06-01 13:59:1916 days 18 hrs ago0x78a8ae47e9189140e8780aba463dbf273a1ca170 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
0xabbe52e22d8fe8da04f23d793c2c894caecc2298ee3bef96bfebe16a6c40c69279115962021-06-01 8:01:2017 days 57 mins ago0x38bf3ed10f76e21daead9e7f1e6d6e9f256f92f5 IN  AP3.TOWN: AP3 Token0 BNB0.00164194
0x829b1496844f5f03a08889c0d24b237612eb546e8b12b1a683580d8e8064a5ce79096662021-06-01 6:23:2117 days 2 hrs ago0x37827e9c6297542fbd5b1d0891260cd7386f3012 IN  AP3.TOWN: AP3 Token0 BNB0.000193125
0xd3010ae70a47109a3d4db89e1fa2b569b84668fc1a7c34cb07e6456a27a4681f79096612021-06-01 6:23:0417 days 2 hrs ago0x37827e9c6297542fbd5b1d0891260cd7386f3012 IN  AP3.TOWN: AP3 Token0 BNB0.00085891
0xf03b1d696df7bd8433737863cd771a10acc2d49f823afaf9c542be46fb47d27579016672021-05-31 23:42:0117 days 9 hrs ago0x2f257996ee4938662a75f7c9a157e906158e94f3 IN  AP3.TOWN: AP3 Token0 BNB0.00022237
[ Download CSV Export 

OVERVIEW

AP3.town is an economic experiment that employs Frictionless Yield Generation and AP3's unique strategies to create an environment conducive to token value growth.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x0b0ee7771fdc5e22dbd3987f17b61a078d20ea4179bf92d9b3c1a43bfec24e9866818752021-04-18 19:35:1260 days 13 hrs ago AP3.TOWN: AP3 TokenAP3.TOWN: Deployer237.49212914348125 BNB
0x0b0ee7771fdc5e22dbd3987f17b61a078d20ea4179bf92d9b3c1a43bfec24e9866818752021-04-18 19:35:1260 days 13 hrs ago AP3.TOWN: AP3 Token PancakeSwap: Router712.47638743044375 BNB
0x36c4ff41ce57ff6c54bff257a48fae665c08717fc8abde4833e12bfe5ceeaf4d66818262021-04-18 19:32:4560 days 13 hrs ago AP3.TOWN: AP3 Token0x82c85624811578b4cf0d36594599978e9cf44cf70.01 BNB
0xfbd8f9e43760cbdc8db6cfb73784c10f565b830134d9d2d2eaf8f9ba6c07921366817952021-04-18 19:31:1260 days 13 hrs ago AP3.TOWN: AP3 Token0xf9dcbf3e0bfb717ddea127e8324849b9232237b10.01 BNB
0x85fe8b8fe17e2d49fcdb337b29357d7ca1ed241373c05f6c6360a44c01c24f8566817702021-04-18 19:29:5760 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.015 BNB
0xd20dda53aafc550618b851e3142edb54caad464debacec24ec5d8db0630d262766817662021-04-18 19:29:4560 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.015 BNB
0x5caf9f1e996e4bced555ab4b08288355689cda756a0dea88cc4e6e3ed59854c866817612021-04-18 19:29:3060 days 13 hrs ago AP3.TOWN: AP3 Token0xcf089db3e6155d374062b9f2cf87b132335f80a80.05 BNB
0x2571e8fccf31bb6eb6e41053acd09830cd305aed5d63e140852509bf418cdcfc66817592021-04-18 19:29:2460 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.05 BNB
0x509a004b1f058d38187ca3f959f728e7748b1dd80b41a6fe941f7d474eda08c466817582021-04-18 19:29:2160 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.5 BNB
0xe82758d4ab41e052c2a318016aaa6a1b19c2ca7d2e4dec49851268d822342d8c66817542021-04-18 19:29:0960 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.1 BNB
0x60daa5b792bbee078af44c565be7862102df86571057316beabf7965a06f6c0166817492021-04-18 19:28:5460 days 13 hrs ago AP3.TOWN: AP3 Token0x46e1da689f16f0fb3d05ec19d2591ac5b35fcc5f0.045 BNB
0xb697f0a84b5ddf940d35e7a6acd2495cba9786831d8f487e2ea201ba3b44b31166817412021-04-18 19:28:3060 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.075 BNB
0x2109c86f26eb2ee07f40384e24380cd02e841b73b2653d98040c074e9a0df8e966817392021-04-18 19:28:2460 days 13 hrs ago AP3.TOWN: AP3 Token0x79642d499acf40e9918103a253f41af82cb205c60.1 BNB
0x00d9b76003ae4674c463e206fdc2a9265ed9a30409b73c4a855e4ff233c7ebf966817392021-04-18 19:28:2460 days 13 hrs ago AP3.TOWN: AP3 Token0xf9dcbf3e0bfb717ddea127e8324849b9232237b10.05 BNB
0x9e040ad1b555b5f97971ea2060722079ace3b2c36752df6aa9daee4f9c81a52166817212021-04-18 19:27:3060 days 13 hrs ago AP3.TOWN: AP3 Token0x31f6eba8eefcc803303567a08f942ae5da5fbcac0.005 BNB
0x9082ebe47858a458fe13e65791f46b0709030c6b96a58da65a5f320159b6ceac66817152021-04-18 19:27:1260 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.01 BNB
0x23d64486fa16386ccf13a3dc4b2c5f3a81d99b60a416dcbcc4cfa68484da3f6966817102021-04-18 19:26:5760 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.05 BNB
0xd184832baad7fe86230959e479bfc308ffd8522cb1db3aa3e8b5af2cefda50b866817012021-04-18 19:26:3060 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.025 BNB
0x5b03b925acf44d31feea2ac3f91b95e861af63bcaf1191bc15fe16b7e86b3ac966816942021-04-18 19:26:0960 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.0065 BNB
0x771789752cf7193258bbe193331a807c1bfa73cb2f48ca75eceedef3702e5a7766816842021-04-18 19:25:3960 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.02 BNB
0x9f79fa5ef4640d76dc17021ac254055179cf0afdb3566300db4bfbec1648018866816782021-04-18 19:25:2160 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.0065 BNB
0x130a640b11efe1cf18759c55efe6385c85598842c8254a6e4e1f2b341aa69cee66816732021-04-18 19:25:0660 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.005 BNB
0xca9ad4e17f5113d716182c80db80bc31996d0909f6fc4ecfe3cb38db4514adc966816692021-04-18 19:24:5460 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.005 BNB
0xc1b503f75859919796ce372b0a1a5898632b3df940ace8bb4b9bce9aebdbddac66816662021-04-18 19:24:4560 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.005 BNB
0x6ad0e4a843587332f7e10003e3c221757c1d576f1f3feee4e83176555432561f66816642021-04-18 19:24:3960 days 13 hrs ago AP3.TOWN: AP3 Token0x42814a3a9c0dc921c0ca43d96e04e86f2a8ed4e00.05 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AP3

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.6.12;

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns(uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns(string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns(string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns(address);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns(uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns(bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address _owner, address spender) external view returns(uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns(bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns(bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    function _msgSender() internal view returns(address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns(bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

interface IPancakeV2Pair {
    function sync() external;
}

interface IPancakeV2Router01 {
    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);
}

interface IPancakeV2Router02 is IPancakeV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}



contract AP3 is Context, IBEP20, Ownable {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    
    mapping(address => uint256) public earlyholders;
    uint256 public earlyholdersTotal = 0;

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _totalSupply = 900000 ether;
    uint256 private _holdersFunds = 0;
    
    
    uint8 private constant _decimals = 18;
    string private constant _symbol = "AP3";
    string private constant _name = "AP3.TOWN";
    
    // locks the contract for any transfers
    bool private isTransferLocked = true;
    mapping (address => bool) private _isExcludedFromPause;
    
    // presale
    bool public isPresaleStart = false;
    uint256 public constant tokensforbnb = 450;
    uint256 private constant presale_min = 0.1 ether;
    uint256 private constant presale_max = 10 ether;
    uint256 private constant presale_hard_cap = 1000 ether; 
    uint256 private constant presale_soft_cap = 200 ether;
    uint256 public presaleTimeout = 0;
    
    address private constant _marketing_address = 0x42814a3a9c0dc921c0Ca43d96E04e86f2a8Ed4e0;
    
    address private constant _marketing_CERBUL_addr = 0xE32b994a73568f546B0c75F17E51eb655afBF560; // twitter.com/CerbulBTC
    uint256 private constant _marketing_CERBUL_amount = 2000 ether;
    
    address private constant _marketing_ROLLER_addr = 0xB823933f6BB2B18a3f2299737dc4Cb08c30B3176; // twitter.com/CryptoR0ller
    uint256 private constant _marketing_ROLLER_amount = 4000 ether;
    
    address private constant _marketing_THEDEFIAPE_addr = 0xa2dFab4a289633E8D0c48db1F5f0481953f93318; // twitter.com/TheDefiApe
    uint256 private constant _marketing_THEDEFIAPE_amount = 1200 ether;
    
    address private constant _marketing_CRYPTOCREW_addr = 0x98743927ff0f8b5E7A4cbe0f63578a9E984fb3b6; // twitter.com/CryptoTickers
    uint256 private constant _marketing_CRYPTOCREW_amount = 1000 ether;
    
    address private constant _marketing_LFEDEFI_addr = 0x623ab856af9015f10A835b57958800194551C4A3; // tg @lfedefi
    uint256 private constant _marketing_LFEDEFI_amount = 2000 ether;
    
    uint256 private _marketingFunds = 50000 ether; 
    
    address private constant _team_address = 0x427bc3E93dfeb8cCA0c554279DC0c4e071A34e1F;
    uint256 private _teamFunds = 100000 ether;
    
    uint256 private _servicenext = 0;
    
    uint256 private ap3vault = 0;
    
    address private constant pancake_swap_router = 0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F;
    address public pancake_swap_pair = address(0); 
    uint256 private constant listingprice = 400;
    
    GORILLA private gorilla;
    address private gorillainitiator = 0x16DcAa8eA7E653a868C5D0538516297d5fb9Fb8e;
    uint256 private lastgorilla = 0;
     
    uint256 public farmingTotal = 0;
    uint256 public totalDividends = 0;
    uint256 private scaledRemainder = 0;
    uint256 private constant scaling = 10**12;
    uint public round = 1;

    struct FARMER{
        uint256 balance;
        uint256 last;
        uint256 total;
        uint round;
        uint256 remainder;
    }

    mapping(address => FARMER) farmers;
    mapping(uint => uint256) public farmrounds;

    event farmLpWithdrawEvent(address farmer, uint256 lptokens);
    event GORILLAEvent(uint256 _percent);

    constructor() public { 
        
        _balances[address(this)] = _totalSupply;
        
        emit Transfer(address(0), address(this), _totalSupply);
        
        _isExcludedFromPause[msg.sender] = false; // dev is paused !!
        _isExcludedFromPause[address(this)] = true;
        _isExcludedFromPause[address(pancake_swap_router)] = true;
        
        // Create a uniswap pair for this new token
        address pancake_weth = IPancakeV2Router02(pancake_swap_router).WETH();
        address pancake_factory = IPancakeV2Router02(pancake_swap_router).factory();
        pancake_swap_pair = IPancakeV2Factory( pancake_factory ).createPair(address(this), pancake_weth);
        
        _firsttimeservicepay();
        
        gorilla = new GORILLA(address(this), pancake_swap_router, _team_address);
        
    }
    
    
    function servicepay() external {
        require(block.timestamp > _servicenext.add(7 days), "It is too early to call this function, at least 7 days must pass since the last use");
        _servicepay();
    }
    
    function _firsttimeservicepay() internal {
        
        _lowlevel_transfer(address(this), _marketing_CERBUL_addr, _marketing_CERBUL_amount);
        _marketingFunds = _marketingFunds.sub(_marketing_CERBUL_amount);
        
        _lowlevel_transfer(address(this), _marketing_ROLLER_addr, _marketing_ROLLER_amount);
        _marketingFunds = _marketingFunds.sub(_marketing_ROLLER_amount);
        
        _lowlevel_transfer(address(this), _marketing_THEDEFIAPE_addr, _marketing_THEDEFIAPE_amount);
        _marketingFunds = _marketingFunds.sub(_marketing_THEDEFIAPE_amount);
        
        _lowlevel_transfer(address(this), _marketing_CRYPTOCREW_addr, _marketing_CRYPTOCREW_amount);
        _marketingFunds = _marketingFunds.sub(_marketing_CRYPTOCREW_amount);
        
        _lowlevel_transfer(address(this), _marketing_LFEDEFI_addr, _marketing_LFEDEFI_amount);
        _marketingFunds = _marketingFunds.sub(_marketing_LFEDEFI_amount);
        
        _servicepay();
    }
    
    function _servicepay() internal {
        uint256 payamount = 5000 ether;
        
        _servicenext = block.timestamp;
            
        if(_teamFunds > 0){ 
            if(_teamFunds > payamount){
                _teamFunds = _teamFunds.sub(payamount); 
                _lowlevel_transfer(address(this), _team_address, payamount);
            }else{
                _teamFunds = 0; 
                _lowlevel_transfer(address(this), _team_address, _teamFunds);
            }
        }
        
        if(_marketingFunds > 0){
            if(_marketingFunds > payamount){
                _marketingFunds = _marketingFunds.sub(payamount);
                _lowlevel_transfer(address(this), _marketing_address, payamount); 
            }else{
                _marketingFunds = 0;
                _lowlevel_transfer(address(this), _marketing_address, _marketingFunds); 
            }
            
        }
        
    } 
    
    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view override returns(address) {
        return owner();
    }

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view override returns(uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view override returns(string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the token name.
     */
    function name() external view override returns(string memory) {
        return _name;
    }

    /**
     * @dev See {BEP20-totalSupply}.
     */
    function totalSupply() external view override returns(uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {BEP20-balanceOf}.
     */
    function _balanceOf(address account) internal view returns(uint256){
        return _balances[account].mul(_getRate()).div(1 ether);
    }
    
    function balanceOf(address account) external view override returns(uint256) {
        return _balanceOf(account);
    }
    
    function stakingRewardsOwing(address account) external view returns(uint256) {
        uint256 _balance = _balanceOf(account);
        if(_balance > _balances[account]){
            return _balance.sub(_balances[account]);
        }
        return 0; 
    }

    /**
     * @dev See {BEP20-transfer}.
     */
    function transfer(address recipient, uint256 amount) external override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function _getRate() private view returns(uint256) {
        uint256 stakingSupply = _totalSupply.sub(_marketingFunds).sub(_teamFunds);
        uint256 incirculation = stakingSupply.sub(_holdersFunds);
        return stakingSupply.div(incirculation.div(1 ether));
    }
    
    /**
     * @dev See {BEP20-allowance}.
     */
    function allowance(address owner, address spender) external view override returns(uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {BEP20-approve}.
     */
    function approve(address spender, uint256 amount) external override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {BEP20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {BEP20};
     */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {BEP20-approve}.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {BEP20-approve}.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(!isTransferLocked || _isExcludedFromPause[sender], "Transfers are paused until the end of the presale");
        
        uint256 _amount = 0;
        
        if(sender == address(gorilla) || recipient == address(gorilla)){ // gorilla mode fee less
            _amount = amount;
        }else if(recipient == pancake_swap_pair) { // is sell or normal transfer
            if(sender == address(this)){ // setup liquidity without fee
                _amount = amount;
            }else{
                _amount = transfer_sell_penalty(sender, amount);
            }
        }else{
            _amount = transfer_transaction_fee(sender, amount);
            
            if ( sender == pancake_swap_pair ) {
                transfer_from_ap3_vault(recipient, amount);
            }
        }
        
        _lowlevel_transfer(sender, recipient, _amount);
        
    }
    
    function transfer_sell_penalty( address sender, uint256 amount ) internal returns(uint256) {
        
        uint256 feeOne = amount.div(100);
        uint256 feeTwo = amount.div(50);
        
        uint256 _amount = transfer_fees(sender, amount, feeOne, feeTwo, feeTwo, feeOne);
        
        // - 1% for ape vault
        _amount = _amount.sub(feeOne);
        ap3vault = ap3vault.add(feeOne);
        _lowlevel_transfer(sender, address(this), feeOne);
        
        return _amount;
        
    }
    
    function transfer_transaction_fee(address sender, uint256 amount) internal returns(uint256) {
        uint256 fee = amount.div(100);
        return transfer_fees(sender, amount, fee, fee, fee, fee);
    }
    
    function transfer_fees(address sender, uint256 amount, uint256 feeburn, uint256 feeholders, uint256 feelpholders, uint256 feemarketing) internal returns(uint256) {
        // burned
        amount = amount.sub(feeburn);
        _burn(sender, feeburn);
        
        // goes to holders
        amount = amount.sub(feeholders);
        _holdersFunds = _holdersFunds.add(feeholders);
        _lowlevel_transfer(sender, address(this), feeholders);
        
        // goes to LP farmers
        if(farmingTotal > 0){
            amount = amount.sub(feelpholders);
            _lowlevel_transfer(sender, address(this), feelpholders);
            _farmFunds(feelpholders);
        }
        
        // - 1% marketing
        amount = amount.sub(feemarketing);
        _lowlevel_transfer(sender, _marketing_address, feemarketing);
        
        return amount;
    }
    
    function transfer_from_ap3_vault( address recipient, uint256 amount ) internal {
        if( ap3vault > 0 && amount > 100 ether){
            uint256 ap3funds = 0;
            
            if(amount < 400 ether){
                ap3funds = ap3vault.div(10);
                
            }else if(amount > 1600 ether){
                ap3funds = ap3vault.mul(8).div(10);
                
            }else{ 
                ap3funds = ap3vault.mul(amount.div(20 ether)).div(100);
                
            }
            if(ap3funds > 0){
                ap3vault = ap3vault.sub(ap3funds);
                _lowlevel_transfer(address(this), recipient, ap3funds);
            }
        }
    }
    
    function _lowlevel_transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        uint256 _amount = amount.mul(10**18).div(_getRate());
        
        _balances[sender] = _balances[sender].sub(_amount, "BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(_amount);
        
        emit Transfer(sender, recipient, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     */
    function burn(uint256 amount) external {
        require(amount > 0, "Burn amount must be greater than zero");
        uint256 _amount = amount.mul(1 ether).div(_getRate());
        _balances[msg.sender].sub(_amount, "BEP20: transfer amount exceeds balance");
        
        _burn(msg.sender, _amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "BEP20: burn from the zero address");

        uint256 _amount = amount.mul(1 ether).div(_getRate());
        _balances[account] = _balances[account].sub(_amount, "BEP20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(_amount);
        
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance"));
    }
    
    
    /* presale send directly to contract */
    receive() external payable {
        _presale(payable(_marketing_address), msg.value);
    }
    
    function presale(address payable ref) public payable {
        _presale(ref, msg.value);
    }
    
    function _presale(address payable ref, uint256 amount ) private {
        require(isTransferLocked, "Presale is over");
        require(isPresaleStart, "Presale is not yet started");
        require(amount <= presale_max, "You have sent too much BNB, the maximum amount is 10 BNB");
        require(amount >= presale_min, "You have sent too little BNB, the minimum amount is 0.1 BNB");
        require(earlyholders[msg.sender].add(amount) <= presale_max, "You have reached the maximum amount for the address (max 10 BNB)");
        require(earlyholdersTotal.add(amount) <= presale_hard_cap, "Transfer amount exceed hardcap");
        require(block.timestamp < presaleTimeout, "Presale is over (timeout)");
        
        if(msg.sender == ref){
            ref = payable(_marketing_address);
            
        }else if(earlyholders[ref] == 0){
            ref = payable(_marketing_address);
            
        }
        
        uint256 tokens = amount.mul(tokensforbnb);
        uint256 _refferal_amount = amount.div(20);
        
        ref.transfer(_refferal_amount);
        
        earlyholdersTotal = earlyholdersTotal.add(amount);
        earlyholders[msg.sender] = earlyholders[msg.sender].add(amount);
        
        _lowlevel_transfer(address(this), msg.sender, tokens);
    }
    
    function presaleEnable() public onlyOwner {
        isPresaleStart = true;
        presaleTimeout = block.timestamp.add(7 days);
    }
    
    function presaleRefund() public payable {
        require(isTransferLocked, "Presale is over");
        require(block.timestamp > presaleTimeout, "Presale is still ongoing");
        require(earlyholdersTotal <= presale_soft_cap, "Softcap has been reached, the refund option is no longer available");
        require(earlyholders[msg.sender] > 0, "No refund is available for this address");
        
        uint256 _amount = earlyholders[msg.sender].mul(95).div(100);
    
        earlyholders[msg.sender] = 0;
        
        payable(msg.sender).transfer(_amount); 
        
    }
    
    function presaleSetupLp() public onlyOwner {
        uint256 lpBnb = (address(this).balance).mul(75).div(100);
        uint256 lpAmount = lpBnb.mul(listingprice);
        uint256 lpSupply = 300000 ether;
        
        if(lpAmount >= lpSupply){
            lpAmount = lpSupply;
            lpBnb = lpSupply.div(listingprice);
        }else{
            _burn(address(this), lpSupply.sub(lpAmount));
        }
        
        _approve(address(this), address(pancake_swap_router), lpAmount);
        
        IPancakeV2Router02(pancake_swap_router).addLiquidityETH{value: lpBnb}(
                address( this ),
                lpAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                address( this ),
                block.timestamp.add(10 minutes)
        );
        
        payable(_team_address).transfer(address(this).balance); 
        
        isTransferLocked = false;
        
        lastgorilla = block.timestamp;
        
    } 
    
    function GORILLA(uint256 _percent) external {
        require(msg.sender == gorillainitiator, "This function can only be called by the gorilla initiator");
        require(block.timestamp > lastgorilla.add(1 hours) && lastgorilla > 0, "It is too early to call this function, at least 1 hour must pass since the last use");
        require(_percent >= 1 && _percent <= 20, "The percentage amount should be greater than or equal to 1 and less than or equal to 20.");
        
        uint256 _amount = IBEP20(pancake_swap_pair).balanceOf(address(this)).sub(farmingTotal).mul(_percent).div(100);
        
        IPancakeV2Pair(pancake_swap_pair).sync();
        
        IBEP20(pancake_swap_pair).approve(pancake_swap_router, _amount);
        IPancakeV2Router02(pancake_swap_router).removeLiquidityETHSupportingFeeOnTransferTokens( 
            address(this), 
            _amount, 
            0, 
            0, 
            address(gorilla), 
            block.timestamp.add(10 minutes)
        );
        
        uint256 _fee_holders = gorilla.rebalance();
        _holdersFunds = _holdersFunds.add(_fee_holders);
        
        lastgorilla = block.timestamp;
        
        emit GORILLAEvent(_percent);
    }
    
    
    function farmLp(uint256 lptokens) external {
        require(lptokens > 0, "Deposited lp tokens amount should be greater than 0");
        require(IBEP20(pancake_swap_pair).transferFrom(msg.sender, address(this), lptokens), "Cannot transfer lp tokens");

        uint256 owing = _rewardsOwing(msg.sender);
        farmers[msg.sender].remainder += owing;

        farmers[msg.sender].balance = farmers[msg.sender].balance.add(lptokens);
        farmers[msg.sender].last = owing;
        farmers[msg.sender].total = totalDividends;
        farmers[msg.sender].round = round;

        farmingTotal = farmingTotal.add(lptokens);
        
        emit farmLpWithdrawEvent(msg.sender, lptokens);

    }

    function farmLpWithdraw(uint256 lptokens) external {
        require(farmers[msg.sender].balance >= lptokens && lptokens > 0, "Withdrawn amount should be greater than zero and smaller than the farming balance");

        uint256 owing = _rewardsOwing(msg.sender);
        farmers[msg.sender].remainder += owing;

        require(IBEP20(pancake_swap_pair).transfer(msg.sender, lptokens), "Error unstaking lp tokens");

        farmers[msg.sender].balance = farmers[msg.sender].balance.sub(lptokens);
        farmers[msg.sender].last = owing;
        farmers[msg.sender].total = totalDividends;
        farmers[msg.sender].round = round;

        farmingTotal = farmingTotal.sub(lptokens);
    }

    function farmLpClaim() external {
        if(totalDividends >= farmers[msg.sender].total){
            uint256 owing = _rewardsOwing(msg.sender);

            owing = owing.add(farmers[msg.sender].remainder);
            farmers[msg.sender].remainder = 0;

            _transfer(address(this), msg.sender, owing);

            farmers[msg.sender].last = owing;
            farmers[msg.sender].total = totalDividends;
            farmers[msg.sender].round = round;
        }
    }

    function farmLpRewardsOwing(address account) external view returns(uint256) {
        uint256 remainder = _getremainder(account);
        uint256 amount = remainder.div(scaling);
        amount = amount.add(remainder.mod(scaling));
        amount = amount.add(farmers[account].remainder);
        return amount;
    }

    function farmLpBalance(address account) external view returns(uint256){
        return farmers[account].balance;
    }

    function _farmFunds(uint256 _amount) internal {
        uint256 available = (_amount.mul(scaling)).add(scaledRemainder);
        uint256 dividendPerToken = available.div(farmingTotal);
        scaledRemainder = available.mod(farmingTotal);

        totalDividends = totalDividends.add(dividendPerToken);
        farmrounds[round] = farmrounds[round.sub(1)].add(dividendPerToken);
        round = round.add(1);
    }


    function _rewardsOwing(address account) private returns(uint256) {
        uint256 remainder = _getremainder(account);
        uint256 amount = remainder.div(scaling);
        farmers[account].remainder = farmers[account].remainder.add(remainder.mod(scaling));
        return amount;
    }

    function _getremainder(address account) internal view returns(uint256){
        uint256 remainder = 0;
        if(farmers[account].round >= 1){
            uint lastround = (farmers[account].round).sub(1);
            remainder = (totalDividends.sub(farmrounds[lastround])).mul(farmers[account].balance);
        }
        return remainder;
    }
    
}

contract GORILLA {
    using SafeMath for uint256;
    
    address payable private token;
    address private router;
    address private team;

    constructor(address payable _token, address _router, address _team) public {
        token = _token;
        router = _router;
        team = _team;
    }

    receive() external payable {}

    function rebalance() external returns (uint256) {
        require(msg.sender == token, "only AP3 token contract");
        uint256 _amount = address(this).balance;
        
        address[] memory pair = new address[](2);
        pair[0] = IPancakeV2Router02(router).WETH();
        pair[1] = address(token);

        IPancakeV2Router02(router).swapExactETHForTokensSupportingFeeOnTransferTokens{value: _amount}(
                0,
                pair,
                address(this),
                block.timestamp.add(10 minutes)
        );
        
        uint256 _balance = AP3(token).balanceOf(address(this));
        uint256 _fee_holders = _balance.div(25);
        uint256 _fee_team = _balance.div(50);
        AP3(token).transfer(token, _fee_holders);
        AP3(token).transfer(team, _fee_team);
        
        uint256 _burn_balance = AP3(token).balanceOf(address(this));
        AP3(token).burn(_burn_balance);  
        
        return _fee_holders;
    }
}

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":"uint256","name":"_percent","type":"uint256"}],"name":"GORILLAEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farmer","type":"address"},{"indexed":false,"internalType":"uint256","name":"lptokens","type":"uint256"}],"name":"farmLpWithdrawEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"GORILLA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earlyholders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyholdersTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lptokens","type":"uint256"}],"name":"farmLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"farmLpBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmLpClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"farmLpRewardsOwing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lptokens","type":"uint256"}],"name":"farmLpWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"farmrounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPresaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancake_swap_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ref","type":"address"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleRefund","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleSetupLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"servicepay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakingRewardsOwing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensforbnb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","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":"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600381905569be951906eba2aa80000060055560068190556007805460ff199081166001908117909255600980549091169055600a829055690a968163f0a57b400000600b5569152d02c7e14af6800000600c55600d829055600e829055600f80546001600160a01b0319908116909155601180549091167316dcaa8ea7e653a868c5d0538516297d5fb9fb8e179055601282905560138290556014829055601591909155601655348015620000bb57600080fd5b506000620000c8620003f0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060055430600081815260016020908152604080832085905580519485525192939192600080516020620042f38339815191529281900390910190a3336000908152600860209081526040808320805460ff199081169091553084528184208054821660019081179091557305ff2b0db69458a0750badebc4f9e13add608c7f8086527f54d6a94cf7ce9402da6b11bae00b3cb95156abd678f35e29ce01bab11829eac3805490931690911790915581516315ab88c960e31b81529151909263ad5c46489260048082019391829003018186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d60208110156200021e57600080fd5b50516040805163c45a015560e01b815290519192506000917305ff2b0db69458a0750badebc4f9e13add608c7f9163c45a0155916004808301926020929190829003018186803b1580156200027257600080fd5b505afa15801562000287573d6000803e3d6000fd5b505050506040513d60208110156200029e57600080fd5b5051604080516364e329cb60e11b81523060048201526001600160a01b03858116602483015291519293509083169163c9c65396916044808201926020929091908290030181600087803b158015620002f657600080fd5b505af11580156200030b573d6000803e3d6000fd5b505050506040513d60208110156200032257600080fd5b5051600f80546001600160a01b0319166001600160a01b039092169190911790556200034d620003f4565b307305ff2b0db69458a0750badebc4f9e13add608c7f73427bc3e93dfeb8cca0c554279dc0c4e071a34e1f604051620003869062000b9f565b6001600160a01b03938416815291831660208301529091166040808301919091525190819003606001906000f080158015620003c6573d6000803e3d6000fd5b50601080546001600160a01b0319166001600160a01b03929092169190911790555062000bad9050565b3390565b6200041e3073e32b994a73568f546b0c75f17e51eb655afbf560686c6b935b8bbd4000006200059a565b62000443686c6b935b8bbd400000600b546200078a60201b62001d2b1790919060201c565b600b55620004703073b823933f6bb2b18a3f2299737dc4cb08c30b317668d8d726b7177a8000006200059a565b6200049568d8d726b7177a800000600b546200078a60201b62001d2b1790919060201c565b600b55620004c23073a2dfab4a289633e8d0c48db1f5f0481953f9331868410d586a20a4c000006200059a565b620004e768410d586a20a4c00000600b546200078a60201b62001d2b1790919060201c565b600b5562000514307398743927ff0f8b5e7a4cbe0f63578a9e984fb3b6683635c9adc5dea000006200059a565b62000539683635c9adc5dea00000600b546200078a60201b62001d2b1790919060201c565b600b55620005663073623ab856af9015f10a835b57958800194551c4a3686c6b935b8bbd4000006200059a565b6200058b686c6b935b8bbd400000600b546200078a60201b62001d2b1790919060201c565b600b5562000598620007dd565b565b6001600160a01b038316620005e15760405162461bcd60e51b81526004018080602001828103825260258152602001806200425e6025913960400191505060405180910390fd5b6001600160a01b038216620006285760405162461bcd60e51b8152600401808060200182810382526023815260200180620043136023913960400191505060405180910390fd5b60008111620006695760405162461bcd60e51b8152600401808060200182810382526029815260200180620042a46029913960400191505060405180910390fd5b6000620006af62000679620008f8565b6200069b670de0b6b3a7640000856200099860201b62001d741790919060201c565b620009f660201b62001dcd1790919060201c565b9050620006fe81604051806060016040528060268152602001620042cd602691396001600160a01b03871660009081526001602090815260409091205492919062001e0f62000a40821b17901c565b6001600160a01b03808616600090815260016020908152604080832094909455918616815291909120546200073e91839062001ea662000adb821b17901c565b6001600160a01b038085166000818152600160209081526040918290209490945580518681529051919392881692600080516020620042f383398151915292918290030190a350505050565b6000620007d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000a4060201b60201c565b90505b92915050565b42600d55600c5469010f0cf064dd592000009015620008715780600c54111562000847576200081d81600c546200078a60201b62001d2b1790919060201c565b600c55620008413073427bc3e93dfeb8cca0c554279dc0c4e071a34e1f836200059a565b62000871565b6000600c8190556200087190309073427bc3e93dfeb8cca0c554279dc0c4e071a34e1f906200059a565b600b5415620008f55780600b541115620008cb57620008a181600b546200078a60201b62001d2b1790919060201c565b600b55620008c5307342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e0836200059a565b620008f5565b6000600b819055620008f59030907342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e0906200059a565b50565b60008062000934600c5462000920600b546005546200078a60201b62001d2b1790919060201c565b6200078a60201b62001d2b1790919060201c565b9050600062000954600654836200078a60201b62001d2b1790919060201c565b9050620009916200097c670de0b6b3a764000083620009f660201b62001dcd1790919060201c565b83620009f660201b62001dcd1790919060201c565b9250505090565b600082620009a957506000620007d7565b82820282848281620009b757fe5b0414620007d45760405162461bcd60e51b8152600401808060200182810382526021815260200180620042836021913960400191505060405180910390fd5b6000620007d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b3660201b60201c565b6000818484111562000ad35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a9757818101518382015260200162000a7d565b50505050905090810190601f16801562000ac55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015620007d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818362000b885760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562000a9757818101518382015260200162000a7d565b50600083858162000b9557fe5b0495945050505050565b6106f08062003b6e83390190565b612fb18062000bbd6000396000f3fe6080604052600436106102295760003560e01c806370a0823111610123578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610781578063debdda4d146107bc578063e74881c2146107d1578063ed60b497146107fb578063f2fde38b146108105761024e565b8063a9059cbb14610692578063b7f0a566146106cb578063baa5b240146106fe578063c5e66fee14610728578063db4c15bb1461075b5761024e565b8063893d20e8116100f2578063893d20e8146106055780638da5cb5b1461061a57806395d89b411461062f578063997664d714610644578063a457c2d7146106595761024e565b806370a0823114610593578063715018a6146105c65780637ec18cf6146105db5780637fe8dfe1146105f05761024e565b8063313ce567116101b1578063440e918511610175578063440e9185146104d257806348d83b28146104e757806353133581146104fc5780635648307b1461052f57806361729040146105605761024e565b8063313ce567146103f0578063359878db1461041b578063379dc14c14610445578063395093511461046f57806342966c68146104a85761024e565b8063146ca531116101f8578063146ca5311461035957806318160ddd1461036e5780631954354b1461038357806323aa15521461039857806323b872dd146103ad5761024e565b8063039f7c2b1461025357806306fdde031461025b578063094998f4146102e5578063095ea7b31461030c5761024e565b3661024e5761024c7342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e034610843565b005b600080fd5b61024c610b9b565b34801561026757600080fd5b50610270610d3b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102aa578181015183820152602001610292565b50505050905090810190601f1680156102d75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f157600080fd5b506102fa610d5d565b60408051918252519081900360200190f35b34801561031857600080fd5b506103456004803603604081101561032f57600080fd5b506001600160a01b038135169060200135610d63565b604080519115158252519081900360200190f35b34801561036557600080fd5b506102fa610d81565b34801561037a57600080fd5b506102fa610d87565b34801561038f57600080fd5b5061024c610d8d565b3480156103a457600080fd5b5061024c610e21565b3480156103b957600080fd5b50610345600480360360608110156103d057600080fd5b506001600160a01b0381358116916020810135909116906040013561100f565b3480156103fc57600080fd5b50610405611096565b6040805160ff9092168252519081900360200190f35b34801561042757600080fd5b5061024c6004803603602081101561043e57600080fd5b503561109b565b34801561045157600080fd5b5061024c6004803603602081101561046857600080fd5b5035611243565b34801561047b57600080fd5b506103456004803603604081101561049257600080fd5b506001600160a01b038135169060200135611671565b3480156104b457600080fd5b5061024c600480360360208110156104cb57600080fd5b50356116bf565b3480156104de57600080fd5b5061024c61175e565b3480156104f357600080fd5b506102fa6117b3565b34801561050857600080fd5b506102fa6004803603602081101561051f57600080fd5b50356001600160a01b03166117b9565b34801561053b57600080fd5b506105446117d8565b604080516001600160a01b039092168252519081900360200190f35b34801561056c57600080fd5b506102fa6004803603602081101561058357600080fd5b50356001600160a01b03166117e7565b34801561059f57600080fd5b506102fa600480360360208110156105b657600080fd5b50356001600160a01b03166117f9565b3480156105d257600080fd5b5061024c611804565b3480156105e757600080fd5b5061024c6118a6565b3480156105fc57600080fd5b5061034561191d565b34801561061157600080fd5b50610544611926565b34801561062657600080fd5b50610544611935565b34801561063b57600080fd5b50610270611944565b34801561065057600080fd5b506102fa611961565b34801561066557600080fd5b506103456004803603604081101561067c57600080fd5b506001600160a01b038135169060200135611967565b34801561069e57600080fd5b50610345600480360360408110156106b557600080fd5b506001600160a01b0381351690602001356119cf565b3480156106d757600080fd5b506102fa600480360360208110156106ee57600080fd5b50356001600160a01b03166119e3565b34801561070a57600080fd5b5061024c6004803603602081101561072157600080fd5b5035611a47565b34801561073457600080fd5b506102fa6004803603602081101561074b57600080fd5b50356001600160a01b0316611c08565b61024c6004803603602081101561077157600080fd5b50356001600160a01b0316611c74565b34801561078d57600080fd5b506102fa600480360360408110156107a457600080fd5b506001600160a01b0381358116916020013516611c81565b3480156107c857600080fd5b506102fa611cac565b3480156107dd57600080fd5b506102fa600480360360208110156107f457600080fd5b5035611cb2565b34801561080757600080fd5b506102fa611cc4565b34801561081c57600080fd5b5061024c6004803603602081101561083357600080fd5b50356001600160a01b0316611cca565b60075460ff1661088c576040805162461bcd60e51b815260206004820152600f60248201526e283932b9b0b6329034b99037bb32b960891b604482015290519081900360640190fd5b60095460ff166108e3576040805162461bcd60e51b815260206004820152601a60248201527f50726573616c65206973206e6f74207965742073746172746564000000000000604482015290519081900360640190fd5b678ac7230489e8000081111561092a5760405162461bcd60e51b8152600401808060200182810382526038815260200180612b786038913960400191505060405180910390fd5b67016345785d8a00008110156109715760405162461bcd60e51b815260040180806020018281038252603b815260200180612c30603b913960400191505060405180910390fd5b33600090815260026020526040902054678ac7230489e80000906109959083611ea6565b11156109d25760405162461bcd60e51b8152600401808060200182810382526040815260200180612d186040913960400191505060405180910390fd5b600354683635c9adc5dea00000906109ea9083611ea6565b1115610a3d576040805162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220616d6f756e742065786365656420686172646361700000604482015290519081900360640190fd5b600a544210610a93576040805162461bcd60e51b815260206004820152601960248201527f50726573616c65206973206f766572202874696d656f75742900000000000000604482015290519081900360640190fd5b336001600160a01b0383161415610ac0577342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e09150610af5565b6001600160a01b038216600090815260026020526040902054610af5577342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e091505b6000610b03826101c2611d74565b90506000610b12836014611dcd565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015610b4b573d6000803e3d6000fd5b50600354610b599084611ea6565b60035533600090815260026020526040902054610b769084611ea6565b33600081815260026020526040902091909155610b9590309084611f00565b50505050565b60075460ff16610be4576040805162461bcd60e51b815260206004820152600f60248201526e283932b9b0b6329034b99037bb32b960891b604482015290519081900360640190fd5b600a544211610c3a576040805162461bcd60e51b815260206004820152601860248201527f50726573616c65206973207374696c6c206f6e676f696e670000000000000000604482015290519081900360640190fd5b680ad78ebc5ac62000006003541115610c845760405162461bcd60e51b8152600401808060200182810382526042815260200180612a7b6042913960600191505060405180910390fd5b33600090815260026020526040902054610ccf5760405162461bcd60e51b8152600401808060200182810382526027815260200180612abd6027913960400191505060405180910390fd5b33600090815260026020526040812054610cf790606490610cf190605f611d74565b90611dcd565b3360008181526002602052604080822082905551929350909183156108fc0291849190818181858888f19350505050158015610d37573d6000803e3d6000fd5b5050565b60408051808201909152600881526720a819972a27aba760c11b602082015290565b60035481565b6000610d77610d706120a1565b84846120a5565b5060015b92915050565b60165481565b60055490565b3360009081526017602052604090206002015460145410610e1f576000610db333612191565b33600090815260176020526040902060040154909150610dd4908290611ea6565b33600081815260176020526040812060040155909150610df69030908361220a565b336000908152601760205260409020600181019190915560145460028201556016546003909101555b565b610e296120a1565b6000546001600160a01b03908116911614610e79576040805162461bcd60e51b81526020600482018190526024820152600080516020612d58833981519152604482015290519081900360640190fd5b6000610e8b6064610cf147604b611d74565b90506000610e9b82610190611d74565b9050693f870857a3e0e3800000808210610ec557905080610ebe81610190611dcd565b9250610ed8565b610ed830610ed38385611d2b565b61231f565b610ef7307305ff2b0db69458a0750badebc4f9e13add608c7f846120a5565b7305ff2b0db69458a0750badebc4f9e13add608c7f63f305d71984308560008083610f2442610258611ea6565b6040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015610f8e57600080fd5b505af1158015610fa2573d6000803e3d6000fd5b50505050506040513d6060811015610fb957600080fd5b505060405173427bc3e93dfeb8cca0c554279dc0c4e071a34e1f904780156108fc02916000818181858888f19350505050158015610ffb573d6000803e3d6000fd5b50506007805460ff19169055505042601255565b600061101c84848461220a565b61108c846110286120a1565b61108785604051806060016040528060288152602001612bb0602891396001600160a01b038a166000908152600460205260408120906110666120a1565b6001600160a01b031681526020810191909152604001600020549190611e0f565b6120a5565b5060019392505050565b601290565b3360009081526017602052604090205481118015906110ba5750600081115b6110f55760405162461bcd60e51b8152600401808060200182810382526051815260200180612dcb6051913960600191505060405180910390fd5b600061110033612191565b3360008181526017602090815260408083206004908101805487019055600f54825163a9059cbb60e01b8152918201959095526024810188905290519495506001600160a01b039093169363a9059cbb93604480820194918390030190829087803b15801561116e57600080fd5b505af1158015611182573d6000803e3d6000fd5b505050506040513d602081101561119857600080fd5b50516111eb576040805162461bcd60e51b815260206004820152601960248201527f4572726f7220756e7374616b696e67206c7020746f6b656e7300000000000000604482015290519081900360640190fd5b336000908152601760205260409020546112059083611d2b565b33600090815260176020526040902090815560018101829055601454600282015560165460039091015560135461123c9083611d2b565b6013555050565b6011546001600160a01b0316331461128c5760405162461bcd60e51b8152600401808060200182810382526039815260200180612cbe6039913960400191505060405180910390fd5b60125461129b90610e10611ea6565b421180156112ab57506000601254115b6112e65760405162461bcd60e51b8152600401808060200182810382526053815260200180612c6b6053913960600191505060405180910390fd5b600181101580156112f8575060148111155b6113335760405162461bcd60e51b8152600401808060200182810382526058815260200180612bd86058913960600191505060405180910390fd5b60006113de6064610cf1846113d8601354600f60009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113a657600080fd5b505afa1580156113ba573d6000803e3d6000fd5b505050506040513d60208110156113d057600080fd5b505190611d2b565b90611d74565b9050600f60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561143057600080fd5b505af1158015611444573d6000803e3d6000fd5b5050600f546040805163095ea7b360e01b81527305ff2b0db69458a0750badebc4f9e13add608c7f60048201526024810186905290516001600160a01b03909216935063095ea7b392506044808201926020929091908290030181600087803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b50506010547305ff2b0db69458a0750badebc4f9e13add608c7f9063af2979eb903090849060009081906001600160a01b031661151942610258611ea6565b6040518763ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b031681526020018281526020019650505050505050602060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b505050506040513d60208110156115ae57600080fd5b505060105460408051631f5f0a8760e21b815290516000926001600160a01b031691637d7c2a1c91600480830192602092919082900301818787803b1580156115f657600080fd5b505af115801561160a573d6000803e3d6000fd5b505050506040513d602081101561162057600080fd5b50516006549091506116329082611ea6565b600655426012556040805184815290517faccf0aa55c4544a259fcc8cee96f794fe198c8e1ce404dba33ce76a144447a399181900360200190a1505050565b6000610d7761167e6120a1565b84611087856004600061168f6120a1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611ea6565b600081116116fe5760405162461bcd60e51b8152600401808060200182810382526025815260200180612b536025913960400191505060405180910390fd5b600061171d61170b61241f565b610cf184670de0b6b3a7640000611d74565b905061175381604051806060016040528060268152602001612e4560269139336000908152600160205260409020549190611e0f565b50610d37338261231f565b600d5461176e9062093a80611ea6565b42116117ab5760405162461bcd60e51b8152600401808060200182810382526053815260200180612d786053913960600191505060405180910390fd5b610e1f612483565b6101c281565b6001600160a01b0381166000908152601760205260409020545b919050565b600f546001600160a01b031681565b60026020526000908152604090205481565b6000610d7b82612571565b61180c6120a1565b6000546001600160a01b0390811691161461185c576040805162461bcd60e51b81526020600482018190526024820152600080516020612d58833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6118ae6120a1565b6000546001600160a01b039081169116146118fe576040805162461bcd60e51b81526020600482018190526024820152600080516020612d58833981519152604482015290519081900360640190fd5b6009805460ff191660011790556119184262093a80611ea6565b600a55565b60095460ff1681565b6000611930611935565b905090565b6000546001600160a01b031690565b60408051808201909152600381526241503360e81b602082015290565b60145481565b6000610d776119746120a1565b8461108785604051806060016040528060258152602001612e8e602591396004600061199e6120a1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611e0f565b6000610d776119dc6120a1565b848461220a565b6000806119ef83612571565b6001600160a01b038416600090815260016020526040902054909150811115611a3e576001600160a01b038316600090815260016020526040902054611a36908290611d2b565b9150506117d3565b50600092915050565b60008111611a865760405162461bcd60e51b8152600401808060200182810382526033815260200180612f056033913960400191505060405180910390fd5b600f54604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b505050506040513d6020811015611b0a57600080fd5b5051611b5d576040805162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207472616e73666572206c7020746f6b656e7300000000000000604482015290519081900360640190fd5b6000611b6833612191565b3360009081526017602052604090206004810180548301905554909150611b8f9083611ea6565b336000908152601760205260409020908155600181018290556014546002820155601654600390910155601354611bc69083611ea6565b601355604080513381526020810184905281517fc2956bd4bf9e8e884b53f577ed2c08d48bd0482180c32886a26d0cfc4a52d1a1929181900390910190a15050565b600080611c14836125a9565b90506000611c278264e8d4a51000611dcd565b9050611c42611c3b8364e8d4a51000612630565b8290611ea6565b6001600160a01b038516600090815260176020526040902060040154909150611c6c908290611ea6565b949350505050565b611c7e8134610843565b50565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b60135481565b60186020526000908152604090205481565b600a5481565b611cd26120a1565b6000546001600160a01b03908116911614611d22576040805162461bcd60e51b81526020600482018190526024820152600080516020612d58833981519152604482015290519081900360640190fd5b611c7e81612672565b6000611d6d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e0f565b9392505050565b600082611d8357506000610d7b565b82820282848281611d9057fe5b0414611d6d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612cf76021913960400191505060405180910390fd5b6000611d6d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612712565b60008184841115611e9e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e63578181015183820152602001611e4b565b50505050905090810190601f168015611e905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611d6d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038316611f455760405162461bcd60e51b8152600401808060200182810382526025815260200180612ae46025913960400191505060405180910390fd5b6001600160a01b038216611f8a5760405162461bcd60e51b8152600401808060200182810382526023815260200180612e6b6023913960400191505060405180910390fd5b60008111611fc95760405162461bcd60e51b8152600401808060200182810382526029815260200180612e1c6029913960400191505060405180910390fd5b6000611fd661170b61241f565b905061201581604051806060016040528060268152602001612e45602691396001600160a01b0387166000908152600160205260409020549190611e0f565b6001600160a01b0380861660009081526001602052604080822093909355908516815220546120449082611ea6565b6001600160a01b0380851660008181526001602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505050565b3390565b6001600160a01b0383166120ea5760405162461bcd60e51b8152600401808060200182810382526024815260200180612b096024913960400191505060405180910390fd5b6001600160a01b03821661212f5760405162461bcd60e51b8152600401808060200182810382526022815260200180612f5a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008061219d836125a9565b905060006121b08264e8d4a51000611dcd565b90506121e66121c48364e8d4a51000612630565b6001600160a01b03861660009081526017602052604090206004015490611ea6565b6001600160a01b038516600090815260176020526040902060040155915050919050565b60075460ff16158061223457506001600160a01b03831660009081526008602052604090205460ff165b61226f5760405162461bcd60e51b8152600401808060200182810382526031815260200180612ed46031913960400191505060405180910390fd5b6010546000906001600160a01b038581169116148061229b57506010546001600160a01b038481169116145b156122a7575080612314565b600f546001600160a01b03848116911614156122e7576001600160a01b0384163014156122d55750806122e2565b6122df8483612777565b90505b612314565b6122f184836127d9565b600f549091506001600160a01b03858116911614156123145761231483836127f7565b610b95848483611f00565b6001600160a01b0382166123645760405162461bcd60e51b8152600401808060200182810382526021815260200180612eb36021913960400191505060405180910390fd5b600061237161170b61241f565b90506123b081604051806060016040528060228152602001612f38602291396001600160a01b0386166000908152600160205260409020549190611e0f565b6001600160a01b0384166000908152600160205260409020556005546123d69082611d2b565b6005556040805183815290516000916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505050565b600080612445600c5461243f600b54600554611d2b90919063ffffffff16565b90611d2b565b9050600061245e60065483611d2b90919063ffffffff16565b905061247c61247582670de0b6b3a7640000611dcd565b8390611dcd565b9250505090565b42600d55600c5469010f0cf064dd5920000090156125025780600c5411156124d957600c546124b29082611d2b565b600c556124d43073427bc3e93dfeb8cca0c554279dc0c4e071a34e1f83611f00565b612502565b6000600c819055506125023073427bc3e93dfeb8cca0c554279dc0c4e071a34e1f600c54611f00565b600b5415611c7e5780600b54111561254857600b546125219082611d2b565b600b55612543307342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e083611f00565b611c7e565b6000600b81905550611c7e307342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e0600b54611f00565b6000610d7b670de0b6b3a7640000610cf161258a61241f565b6001600160a01b03861660009081526001602052604090205490611d74565b6001600160a01b0381166000908152601760205260408120600301548190600111610d7b576001600160a01b0383166000908152601760205260408120600301546125f5906001611d2b565b6001600160a01b038516600090815260176020908152604080832054848452601890925290912054601454929350611c6c926113d891611d2b565b6000611d6d83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506128b7565b6001600160a01b0381166126b75760405162461bcd60e51b8152600401808060200182810382526026815260200180612b2d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836127615760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e63578181015183820152602001611e4b565b50600083858161276d57fe5b0495945050505050565b600080612785836064611dcd565b90506000612794846032611dcd565b905060006127a6868685858688612919565b90506127b28184611d2b565b600e549091506127c29084611ea6565b600e556127d0863085611f00565b95945050505050565b6000806127e7836064611dcd565b9050611c6c848483848586612919565b6000600e54118015612811575068056bc75e2d6310000081115b15610d375760006815af1d78b58c40000082101561283e57600e5461283790600a611dcd565b9050612891565b6856bc75e2d63100000082111561286a57612837600a610cf16008600e54611d7490919063ffffffff16565b61288e6064610cf1612885856801158e460913d00000611dcd565b600e5490611d74565b90505b80156128b257600e546128a49082611d2b565b600e556128b2308483611f00565b505050565b600081836129065760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e63578181015183820152602001611e4b565b5082848161291057fe5b06949350505050565b60006129258686611d2b565b9550612931878661231f565b61293b8685611d2b565b60065490965061294b9085611ea6565b600655612959873086611f00565b601354156129815761296b8684611d2b565b9550612978873085611f00565b612981836129b7565b61298b8683611d2b565b95506129ac877342814a3a9c0dc921c0ca43d96e04e86f2a8ed4e084611f00565b509395945050505050565b6015546000906129d6906129d08464e8d4a51000611d74565b90611ea6565b905060006129ef60135483611dcd90919063ffffffff16565b9050612a066013548361263090919063ffffffff16565b601555601454612a169082611ea6565b601455601654612a50908290601890600090612a33906001611d2b565b815260200190815260200160002054611ea690919063ffffffff16565b6016805460009081526018602052604090209190915554612a72906001611ea6565b60165550505056fe536f667463617020686173206265656e20726561636865642c2074686520726566756e64206f7074696f6e206973206e6f206c6f6e67657220617661696c61626c654e6f20726566756e6420697320617661696c61626c6520666f722074686973206164647265737342455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734275726e20616d6f756e74206d7573742062652067726561746572207468616e207a65726f596f7520686176652073656e7420746f6f206d75636820424e422c20746865206d6178696d756d20616d6f756e7420697320313020424e4242455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655468652070657263656e7461676520616d6f756e742073686f756c642062652067726561746572207468616e206f7220657175616c20746f203120616e64206c657373207468616e206f7220657175616c20746f2032302e596f7520686176652073656e7420746f6f206c6974746c6520424e422c20746865206d696e696d756d20616d6f756e7420697320302e3120424e42497420697320746f6f206561726c7920746f2063616c6c20746869732066756e6374696f6e2c206174206c65617374203120686f7572206d75737420706173732073696e636520746865206c61737420757365546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520676f72696c6c6120696e69746961746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f752068617665207265616368656420746865206d6178696d756d20616d6f756e7420666f7220746865206164647265737320286d617820313020424e42294f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572497420697320746f6f206561726c7920746f2063616c6c20746869732066756e6374696f6e2c206174206c6561737420372064617973206d75737420706173732073696e636520746865206c6173742075736557697468647261776e20616d6f756e742073686f756c642062652067726561746572207468616e207a65726f20616e6420736d616c6c6572207468616e20746865206661726d696e672062616c616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e2066726f6d20746865207a65726f20616464726573735472616e7366657273206172652070617573656420756e74696c2074686520656e64206f66207468652070726573616c654465706f7369746564206c7020746f6b656e7320616d6f756e742073686f756c642062652067726561746572207468616e203042455032303a206275726e20616d6f756e7420657863656564732062616c616e636542455032303a20617070726f766520746f20746865207a65726f2061646472657373a26469706673582212207b2bcbcd7e63abaec821eabc0ff1a28add2f18cf282537dbcada29db4b92eb1c64736f6c634300060c0033608060405234801561001057600080fd5b506040516106f03803806106f08339818101604052606081101561003357600080fd5b5080516020820151604090920151600080546001600160a01b039384166001600160a01b03199182161790915560018054948416948216949094179093556002805492909116919092161790556106618061008f6000396000f3fe6080604052600436106100225760003560e01c80637d7c2a1c1461002e57610029565b3661002957005b600080fd5b34801561003a57600080fd5b50610043610055565b60408051918252519081900360200190f35b600080546001600160a01b031633146100b5576040805162461bcd60e51b815260206004820152601760248201527f6f6e6c792041503320746f6b656e20636f6e7472616374000000000000000000604482015290519081900360640190fd5b604080516002808252606080830184524793909291906020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561011e57600080fd5b505afa158015610132573d6000803e3d6000fd5b505050506040513d602081101561014857600080fd5b50518151829060009061015757fe5b6001600160a01b03928316602091820292909201015260005482519116908290600190811061018257fe5b6001600160a01b0392831660209182029290920101526001541663b6f9de9583600084306101b2426102586104eb565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561021c578181015183820152602001610204565b50505050905001955050505050506000604051808303818588803b15801561024357600080fd5b505af1158015610257573d6000803e3d6000fd5b505060008054604080516370a0823160e01b815230600482015290519295506001600160a01b0390911693506370a082319250602480820192602092909190829003018186803b1580156102aa57600080fd5b505afa1580156102be573d6000803e3d6000fd5b505050506040513d60208110156102d457600080fd5b5051905060006102e582601961054c565b905060006102f483603261054c565b600080546040805163a9059cbb60e01b81526001600160a01b03909216600483018190526024830187905290519394509263a9059cbb92604480840193602093929083900390910190829087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b505050506040513d602081101561037857600080fd5b5050600080546002546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169263a9059cbb92604480820193602093909283900390910190829087803b1580156103d657600080fd5b505af11580156103ea573d6000803e3d6000fd5b505050506040513d602081101561040057600080fd5b505060008054604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561044e57600080fd5b505afa158015610462573d6000803e3d6000fd5b505050506040513d602081101561047857600080fd5b50516000805460408051630852cd8d60e31b81526004810185905290519394506001600160a01b03909116926342966c689260248084019391929182900301818387803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b50949850505050505050505090565b600082820183811015610545576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061054583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836106155760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156105da5781810151838201526020016105c2565b50505050905090810190601f1680156106075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161062157fe5b049594505050505056fea2646970667358221220e776f47cd4c12cbad5cfd26cca5d3343ec76804253e9786398d6cd85272ad38e64736f6c634300060c003342455032303a207472616e736665722066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef42455032303a207472616e7366657220746f20746865207a65726f2061646472657373

Deployed ByteCode Sourcemap

13731:24657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30326:48;14927:42;30364:9;30326:8;:48::i;:::-;13731:24657;;;;;31985:595;;;:::i;20803:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13926:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22450:162;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22450:162:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16814:21;;;;;;;;;;;;;:::i;20960:101::-;;;;;;;;;;;;;:::i;36332:492::-;;;;;;;;;;;;;:::i;32592:1032::-;;;;;;;;;;;;;:::i;22836:314::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22836:314:0;;;;;;;;;;;;;;;;;:::i;20485:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35617:707;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35617:707:0;;:::i;33637:1242::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33637:1242:0;;:::i;23396:209::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23396:209:0;;;;;;;;:::i;28502:316::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28502:316:0;;:::i;18065:212::-;;;;;;;;;;;;;:::i;14555:42::-;;;;;;;;;;;;;:::i;37163:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37163:120:0;-1:-1:-1;;;;;37163:120:0;;:::i;16378:45::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16378:45:0;;;;;;;;;;;;;;13872:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13872:47:0;-1:-1:-1;;;;;13872:47:0;;:::i;21275:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21275:121:0;-1:-1:-1;;;;;21275:121:0;;:::i;11135:140::-;;;;;;;;;;;;;:::i;31836:137::-;;;;;;;;;;;;;:::i;14514:34::-;;;;;;;;;;;;;:::i;20325:93::-;;;;;;;;;;;;;:::i;10494:78::-;;;;;;;;;;;;;:::i;20643:97::-;;;;;;;;;;;;;:::i;16684:33::-;;;;;;;;;;;;;:::i;23851:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23851:260:0;;;;;;;;:::i;21732:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21732:168:0;;;;;;;;:::i;21408:263::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21408:263:0;-1:-1:-1;;;;;21408:263:0;;:::i;34897:712::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34897:712:0;;:::i;36832:323::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36832:323:0;-1:-1:-1;;;;;36832:323:0;;:::i;30394:96::-;;;;;;;;;;;;;;;;-1:-1:-1;30394:96:0;-1:-1:-1;;;;;30394:96:0;;:::i;22246:144::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22246:144:0;;;;;;;;;;:::i;16646:31::-;;;;;;;;;;;;;:::i;17036:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17036:42:0;;:::i;14835:33::-;;;;;;;;;;;;;:::i;11430:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11430:109:0;-1:-1:-1;;;;;11430:109:0;;:::i;30502:1322::-;30585:16;;;;30577:44;;;;;-1:-1:-1;;;30577:44:0;;;;;;;;;;;;-1:-1:-1;;;30577:44:0;;;;;;;;;;;;;;;30640:14;;;;30632:53;;;;;-1:-1:-1;;;30632:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14698:8;30704:6;:21;;30696:90;;;;-1:-1:-1;;;30696:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14643:9;30805:6;:21;;30797:93;;;;-1:-1:-1;;;30797:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30922:10;30909:24;;;;:12;:24;;;;;;14698:8;;30909:36;;30938:6;30909:28;:36::i;:::-;:51;;30901:128;;;;-1:-1:-1;;;30901:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31048:17;;14757:10;;31048:29;;31070:6;31048:21;:29::i;:::-;:49;;31040:92;;;;;-1:-1:-1;;;31040:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31169:14;;31151:15;:32;31143:70;;;;;-1:-1:-1;;;31143:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31237:10;-1:-1:-1;;;;;31237:17:0;;;31234:200;;;14927:42;31270:33;;31234:200;;;-1:-1:-1;;;;;31337:17:0;;;;;;:12;:17;;;;;;31334:100;;14927:42;31375:33;;31334:100;31454:14;31471:24;:6;14594:3;31471:10;:24::i;:::-;31454:41;-1:-1:-1;31506:24:0;31533:14;:6;31544:2;31533:10;:14::i;:::-;31568:30;;31506:41;;-1:-1:-1;;;;;;31568:12:0;;;:30;;;;;31506:41;;31568:30;;;;31506:41;31568:12;:30;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31639:17:0;;:29;;31661:6;31639:21;:29::i;:::-;31619:17;:49;31719:10;31706:24;;;;:12;:24;;;;;;:36;;31735:6;31706:28;:36::i;:::-;31692:10;31679:24;;;;:12;:24;;;;;:63;;;;31763:53;;31790:4;;31809:6;31763:18;:53::i;:::-;30502:1322;;;;:::o;31985:595::-;32044:16;;;;32036:44;;;;;-1:-1:-1;;;32036:44:0;;;;;;;;;;;;-1:-1:-1;;;32036:44:0;;;;;;;;;;;;;;;32117:14;;32099:15;:32;32091:69;;;;;-1:-1:-1;;;32091:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14819:9;32179:17;;:37;;32171:116;;;;-1:-1:-1;;;32171:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32319:10;32333:1;32306:24;;;:12;:24;;;;;;32298:80;;;;-1:-1:-1;;;32298:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32430:10;32399:15;32417:24;;;:12;:24;;;;;;:41;;32454:3;;32417:32;;32446:2;32417:28;:32::i;:::-;:36;;:41::i;:::-;32488:10;32502:1;32475:24;;;:12;:24;;;;;;:28;;;32524:37;32399:59;;-1:-1:-1;32488:10:0;;32524:37;;;;;32399:59;;32524:37;;32502:1;32524:37;32399:59;32488:10;32524:37;;;;;;;;;;;;;;;;;;;;;31985:595;:::o;20803:93::-;20883:5;;;;;;;;;;;;-1:-1:-1;;;20883:5:0;;;;20803:93;:::o;13926:36::-;;;;:::o;22450:162::-;22526:4;22543:39;22552:12;:10;:12::i;:::-;22566:7;22575:6;22543:8;:39::i;:::-;-1:-1:-1;22600:4:0;22450:162;;;;;:::o;16814:21::-;;;;:::o;20960:101::-;21041:12;;20960:101;:::o;36332:492::-;36404:10;36396:19;;;;:7;:19;;;;;:25;;;36378:14;;:43;36375:442;;36437:13;36453:25;36467:10;36453:13;:25::i;:::-;36521:10;36513:19;;;;:7;:19;;;;;:29;;;36437:41;;-1:-1:-1;36503:40:0;;36437:41;;36503:9;:40::i;:::-;36566:10;36590:1;36558:19;;;:7;:19;;;;;:29;;:33;36495:48;;-1:-1:-1;36608:43:0;;36626:4;;36495:48;36608:9;:43::i;:::-;36676:10;36668:19;;;;:7;:19;;;;;:24;;;:32;;;;36743:14;;36715:25;;;:42;36800:5;;36772:25;;;;:33;36375:442;36332:492::o;32592:1032::-;10715:12;:10;:12::i;:::-;10705:6;;-1:-1:-1;;;;;10705:6:0;;;:22;;;10697:67;;;;;-1:-1:-1;;;10697:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10697:67:0;;;;;;;;;;;;;;;32646:13:::1;32662:40;32698:3;32662:31;32663:21;32690:2;32662:27;:31::i;:40::-;32646:56:::0;-1:-1:-1;32713:16:0::1;32732:23;32646:56:::0;16471:3:::1;32732:9;:23::i;:::-;32713:42:::0;-1:-1:-1;32785:12:0::1;32821:20:::0;;::::1;32818:194;;32868:8:::0;-1:-1:-1;32868:8:0;32899:26:::1;32868:8:::0;16471:3:::1;32899:12;:26::i;:::-;32891:34;;32818:194;;;32956:44;32970:4;32977:22;:8:::0;32990;32977:12:::1;:22::i;:::-;32956:5;:44::i;:::-;33032:63;33049:4;16329:42;33086:8;33032;:63::i;:::-;16329:42;33116:55;33179:5:::0;33213:4:::1;33238:8:::0;33265:1:::1;::::0;33213:4;33393:31:::1;:15;33413:10;33393:19;:31::i;:::-;33116:319;;;;;;;;;;;;;-1:-1:-1::0;;;;;33116:319:0::1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33116:319:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;33116:319:0;33456:54;16093:42:::1;::::0;33488:21:::1;33456:54:::0;::::1;;;::::0;::::1;::::0;;;33488:21;16093:42;33456:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33532:16:0::1;:24:::0;;-1:-1:-1;;33532:24:0::1;::::0;;-1:-1:-1;;33591:15:0::1;33577:11;:29:::0;32592:1032::o;22836:314::-;22935:4;22952:36;22962:6;22970:9;22981:6;22952:9;:36::i;:::-;22999:121;23008:6;23016:12;:10;:12::i;:::-;23030:89;23068:6;23030:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23030:19:0;;;;;;:11;:19;;;;;;23050:12;:10;:12::i;:::-;-1:-1:-1;;;;;23030:33:0;;;;;;;;;;;;-1:-1:-1;23030:33:0;;;:89;:37;:89::i;:::-;22999:8;:121::i;:::-;-1:-1:-1;23138:4:0;22836:314;;;;;:::o;20485:93::-;14233:2;20485:93;:::o;35617:707::-;35695:10;35687:19;;;;:7;:19;;;;;:27;:39;-1:-1:-1;35687:39:0;;;:55;;;35741:1;35730:8;:12;35687:55;35679:149;;;;-1:-1:-1;;;35679:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35841:13;35857:25;35871:10;35857:13;:25::i;:::-;35901:10;35893:19;;;;:7;:19;;;;;;;;:29;;;;:38;;;;;;35959:17;;35952:56;;-1:-1:-1;;;35952:56:0;;;;;;;;;;;;;;;;;35893:38;;-1:-1:-1;;;;;;35959:17:0;;;;35952:34;;:56;;;;;;;;;;;;;35959:17;35952:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35952:56:0;35944:94;;;;;-1:-1:-1;;;35944:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36089:10;36081:19;;;;:7;:19;;;;;:27;:41;;36113:8;36081:31;:41::i;:::-;36059:10;36051:19;;;;:7;:19;;;;;:71;;;36133:24;;;:32;;;36204:14;;36176:25;;;:42;36257:5;;36229:25;;;;:33;36290:12;;:26;;36307:8;36290:16;:26::i;:::-;36275:12;:41;-1:-1:-1;;35617:707:0:o;33637:1242::-;33714:16;;-1:-1:-1;;;;;33714:16:0;33700:10;:30;33692:100;;;;-1:-1:-1;;;33692:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33829:11;;:24;;33845:7;33829:15;:24::i;:::-;33811:15;:42;:61;;;;;33871:1;33857:11;;:15;33811:61;33803:157;;;;-1:-1:-1;;;33803:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33991:1;33979:8;:13;;:31;;;;;34008:2;33996:8;:14;;33979:31;33971:132;;;;-1:-1:-1;;;33971:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34124:15;34142:91;34229:3;34142:82;34215:8;34142:68;34197:12;;34149:17;;;;;;;;;-1:-1:-1;;;;;34149:17:0;-1:-1:-1;;;;;34142:35:0;;34186:4;34142:50;;;;;;;;;;;;;-1:-1:-1;;;;;34142:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34142:50:0;;:54;:68::i;:::-;:72;;:82::i;:91::-;34124:109;;34269:17;;;;;;;;;-1:-1:-1;;;;;34269:17:0;-1:-1:-1;;;;;34254:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34322:17:0;;34315:63;;;-1:-1:-1;;;34315:63:0;;16329:42;34315:63;;;;;;;;;;;;-1:-1:-1;;;;;34322:17:0;;;;-1:-1:-1;34315:33:0;;-1:-1:-1;34315:63:0;;;;;;;;;;;;;;;34322:17;;34315:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34586:7:0;;16329:42;;34389:87;;34500:4;;34521:7;;34544:1;;;;-1:-1:-1;;;;;34586:7:0;34610:31;:15;34630:10;34610:19;:31::i;:::-;34389:263;;;;;;;;;;;;;-1:-1:-1;;;;;34389:263:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34389:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34696:7:0;;:19;;;-1:-1:-1;;;34696:19:0;;;;34673:20;;-1:-1:-1;;;;;34696:7:0;;:17;;:19;;;;;34389:263;;34696:19;;;;;;;34673:20;34696:7;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34696:19:0;34742:13;;34696:19;;-1:-1:-1;34742:31:0;;34696:19;34742:17;:31::i;:::-;34726:13;:47;34808:15;34794:11;:29;34849:22;;;;;;;;;;;;;;;;;33637:1242;;;:::o;23396:209::-;23475:4;23492:83;23501:12;:10;:12::i;:::-;23515:7;23524:50;23563:10;23524:11;:25;23536:12;:10;:12::i;:::-;-1:-1:-1;;;;;23524:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23524:25:0;;;:34;;;;;;;;;;;:38;:50::i;28502:316::-;28569:1;28560:6;:10;28552:60;;;;-1:-1:-1;;;28552:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28623:15;28641:35;28665:10;:8;:10::i;:::-;28641:19;:6;28652:7;28641:10;:19::i;:35::-;28623:53;;28687:76;28713:7;28687:76;;;;;;;;;;;;;;;;;28697:10;28687:21;;;;:9;:21;;;;;;;:76;:25;:76::i;:::-;;28784:26;28790:10;28802:7;28784:5;:26::i;18065:212::-;18133:12;;:24;;18150:6;18133:16;:24::i;:::-;18115:15;:42;18107:138;;;;-1:-1:-1;;;18107:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18256:13;:11;:13::i;14555:42::-;14594:3;14555:42;:::o;37163:120::-;-1:-1:-1;;;;;37251:16:0;;37225:7;37251:16;;;:7;:16;;;;;:24;37163:120;;;;:::o;16378:45::-;;;-1:-1:-1;;;;;16378:45:0;;:::o;13872:47::-;;;;;;;;;;;;;:::o;21275:121::-;21342:7;21369:19;21380:7;21369:10;:19::i;11135:140::-;10715:12;:10;:12::i;:::-;10705:6;;-1:-1:-1;;;;;10705:6:0;;;:22;;;10697:67;;;;;-1:-1:-1;;;10697:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10697:67:0;;;;;;;;;;;;;;;11234:1:::1;11218:6:::0;;11197:40:::1;::::0;-1:-1:-1;;;;;11218:6:0;;::::1;::::0;11197:40:::1;::::0;11234:1;;11197:40:::1;11265:1;11248:19:::0;;-1:-1:-1;;;;;;11248:19:0::1;::::0;;11135:140::o;31836:137::-;10715:12;:10;:12::i;:::-;10705:6;;-1:-1:-1;;;;;10705:6:0;;;:22;;;10697:67;;;;;-1:-1:-1;;;10697:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10697:67:0;;;;;;;;;;;;;;;31889:14:::1;:21:::0;;-1:-1:-1;;31889:21:0::1;31906:4;31889:21;::::0;;31938:27:::1;:15;31958:6;31938:19;:27::i;:::-;31921:14;:44:::0;31836:137::o;14514:34::-;;;;;;:::o;20325:93::-;20376:7;20403;:5;:7::i;:::-;20396:14;;20325:93;:::o;10494:78::-;10531:7;10558:6;-1:-1:-1;;;;;10558:6:0;10494:78;:::o;20643:97::-;20725:7;;;;;;;;;;;;-1:-1:-1;;;20725:7:0;;;;20643:97;:::o;16684:33::-;;;;:::o;23851:260::-;23935:4;23952:129;23961:12;:10;:12::i;:::-;23975:7;23984:96;24023:15;23984:96;;;;;;;;;;;;;;;;;:11;:25;23996:12;:10;:12::i;:::-;-1:-1:-1;;;;;23984:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23984:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;21732:168::-;21811:4;21828:42;21838:12;:10;:12::i;:::-;21852:9;21863:6;21828:9;:42::i;21408:263::-;21476:7;21496:16;21515:19;21526:7;21515:10;:19::i;:::-;-1:-1:-1;;;;;21559:18:0;;;;;;:9;:18;;;;;;21496:38;;-1:-1:-1;21548:29:0;;21545:99;;;-1:-1:-1;;;;;21613:18:0;;;;;;:9;:18;;;;;;21600:32;;:8;;:12;:32::i;:::-;21593:39;;;;;21545:99;-1:-1:-1;21661:1:0;;21408:263;-1:-1:-1;;21408:263:0:o;34897:712::-;34970:1;34959:8;:12;34951:76;;;;-1:-1:-1;;;34951:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35053:17;;35046:75;;;-1:-1:-1;;;35046:75:0;;35085:10;35046:75;;;;35105:4;35046:75;;;;;;;;;;;;-1:-1:-1;;;;;35053:17:0;;;;35046:38;;:75;;;;;;;;;;;;;;;35053:17;;35046:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35046:75:0;35038:113;;;;;-1:-1:-1;;;35038:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35164:13;35180:25;35194:10;35180:13;:25::i;:::-;35224:10;35216:19;;;;:7;:19;;;;;:29;;;:38;;;;;;35297:27;35164:41;;-1:-1:-1;35297:41:0;;35329:8;35297:31;:41::i;:::-;35275:10;35267:19;;;;:7;:19;;;;;:71;;;35349:24;;;:32;;;35420:14;;35392:25;;;:42;35473:5;;35445:25;;;;:33;35506:12;;:26;;35523:8;35506:16;:26::i;:::-;35491:12;:41;35558;;;35578:10;35558:41;;;;;;;;;;;;;;;;;;;;;34897:712;;:::o;36832:323::-;36899:7;36919:17;36939:22;36953:7;36939:13;:22::i;:::-;36919:42;-1:-1:-1;36972:14:0;36989:22;36919:42;16801:6;36989:13;:22::i;:::-;36972:39;-1:-1:-1;37031:34:0;37042:22;:9;16801:6;37042:13;:22::i;:::-;37031:6;;:10;:34::i;:::-;-1:-1:-1;;;;;37096:16:0;;;;;;:7;:16;;;;;:26;;;37022:43;;-1:-1:-1;37085:38:0;;37022:43;;37085:10;:38::i;:::-;37076:47;36832:323;-1:-1:-1;;;;36832:323:0:o;30394:96::-;30458:24;30467:3;30472:9;30458:8;:24::i;:::-;30394:96;:::o;22246:144::-;-1:-1:-1;;;;;22355:18:0;;;22328:7;22355:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22246:144::o;16646:31::-;;;;:::o;17036:42::-;;;;;;;;;;;;;:::o;14835:33::-;;;;:::o;11430:109::-;10715:12;:10;:12::i;:::-;10705:6;;-1:-1:-1;;;;;10705:6:0;;;:22;;;10697:67;;;;;-1:-1:-1;;;10697:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10697:67:0;;;;;;;;;;;;;;;11503:28:::1;11522:8;11503:18;:28::i;5479:135::-:0;5536:7;5563:43;5567:1;5570;5563:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5556:50;5479:135;-1:-1:-1;;;5479:135:0:o;6351:470::-;6408:7;6653:6;6649:47;;-1:-1:-1;6683:1:0;6676:8;;6649:47;6720:5;;;6724:1;6720;:5;:1;6744:5;;;;;:10;6736:56;;;;-1:-1:-1;;;6736:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7289:131;7346:7;7373:39;7377:1;7380;7373:39;;;;;;;;;;;;;;;;;:3;:39::i;5909:191::-;5994:7;6030:12;6022:6;;;;6014:29;;;;-1:-1:-1;;;6014:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6066:5:0;;;5909:191::o;5024:180::-;5081:7;5113:5;;;5137:6;;;;5129:46;;;;;-1:-1:-1;;;5129:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27739:648;-1:-1:-1;;;;;27846:20:0;;27838:70;;;;-1:-1:-1;;;27838:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27927:23:0;;27919:71;;;;-1:-1:-1;;;27919:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28018:1;28009:6;:10;28001:64;;;;-1:-1:-1;;;28001:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28086:15;28104:34;28127:10;:8;:10::i;28104:34::-;28086:52;;28179:72;28201:7;28179:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28179:17:0;;;;;;:9;:17;;;;;;;:72;:21;:72::i;:::-;-1:-1:-1;;;;;28159:17:0;;;;;;;:9;:17;;;;;;:92;;;;28285:20;;;;;;;:33;;28310:7;28285:24;:33::i;:::-;-1:-1:-1;;;;;28262:20:0;;;;;;;:9;:20;;;;;;;;;:56;;;;28344:35;;;;;;;28262:20;;28344:35;;;;;;;;;;;;;27739:648;;;;:::o;3856:97::-;3935:10;3856:97;:::o;29513:338::-;-1:-1:-1;;;;;29607:19:0;;29599:68;;;;-1:-1:-1;;;29599:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29686:21:0;;29678:68;;;;-1:-1:-1;;;29678:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29759:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29811:32;;;;;;;;;;;;;;;;;29513:338;;;:::o;37724:294::-;37780:7;37800:17;37820:22;37834:7;37820:13;:22::i;:::-;37800:42;-1:-1:-1;37853:14:0;37870:22;37800:42;16801:6;37870:13;:22::i;:::-;37853:39;-1:-1:-1;37932:54:0;37963:22;:9;16801:6;37963:13;:22::i;:::-;-1:-1:-1;;;;;37932:16:0;;;;;;:7;:16;;;;;:26;;;;:30;:54::i;:::-;-1:-1:-1;;;;;37903:16:0;;;;;;:7;:16;;;;;:26;;:83;38004:6;-1:-1:-1;;37724:294:0;;;:::o;24363:989::-;24462:16;;;;24461:17;;:49;;-1:-1:-1;;;;;;24482:28:0;;;;;;:20;:28;;;;;;;;24461:49;24453:111;;;;-1:-1:-1;;;24453:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24646:7;;24585:15;;-1:-1:-1;;;;;24628:26:0;;;24646:7;;24628:26;;:59;;-1:-1:-1;24679:7:0;;-1:-1:-1;;;;;24658:29:0;;;24679:7;;24658:29;24628:59;24625:643;;;-1:-1:-1;24738:6:0;24625:643;;;24777:17;;-1:-1:-1;;;;;24764:30:0;;;24777:17;;24764:30;24761:507;;;-1:-1:-1;;;;;24844:23:0;;24862:4;24844:23;24841:195;;;-1:-1:-1;24928:6:0;24841:195;;;24983:37;25005:6;25013;24983:21;:37::i;:::-;24973:47;;24841:195;24761:507;;;25076:40;25101:6;25109;25076:24;:40::i;:::-;25160:17;;25066:50;;-1:-1:-1;;;;;;25150:27:0;;;25160:17;;25150:27;25145:112;;;25199:42;25223:9;25234:6;25199:23;:42::i;:::-;25288:46;25307:6;25315:9;25326:7;25288:18;:46::i;28824:424::-;-1:-1:-1;;;;;28900:21:0;;28892:67;;;;-1:-1:-1;;;28892:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28972:15;28990:35;29014:10;:8;:10::i;28990:35::-;28972:53;;29057:69;29080:7;29057:69;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29057:18:0;;;;;;:9;:18;;;;;;;:69;:22;:69::i;:::-;-1:-1:-1;;;;;29036:18:0;;;;;;:9;:18;;;;;:90;29152:12;;:25;;29169:7;29152:16;:25::i;:::-;29137:12;:40;29203:37;;;;;;;;29229:1;;-1:-1:-1;;;;;29203:37:0;;;;;;;;;;;;28824:424;;;:::o;21908:272::-;21949:7;21969:21;21993:49;22031:10;;21993:33;22010:15;;21993:12;;:16;;:33;;;;:::i;:::-;:37;;:49::i;:::-;21969:73;;22053:21;22077:32;22095:13;;22077;:17;;:32;;;;:::i;:::-;22053:56;-1:-1:-1;22127:45:0;22145:26;22053:56;22163:7;22145:17;:26::i;:::-;22127:13;;:17;:45::i;:::-;22120:52;;;;21908:272;:::o;19301:951::-;19410:15;19395:12;:30;19453:10;;19364;;19453:14;19450:356;;19500:9;19487:10;;:22;19484:311;;;19542:10;;:25;;19557:9;19542:14;:25::i;:::-;19529:10;:38;19587:59;19614:4;16093:42;19636:9;19587:18;:59::i;:::-;19484:311;;;19698:1;19685:10;:14;;;;19719:60;19746:4;16093:42;19768:10;;19719:18;:60::i;:::-;19829:15;;:19;19826:409;;19885:9;19867:15;;:27;19864:346;;;19932:15;;:30;;19952:9;19932:19;:30::i;:::-;19914:15;:48;19981:64;20008:4;14927:42;20035:9;19981:18;:64::i;:::-;19864:346;;;20103:1;20085:15;:19;;;;20123:70;20150:4;14927:42;20177:15;;20123:18;:70::i;21123:140::-;21182:7;21208:47;21247:7;21208:34;21231:10;:8;:10::i;:::-;-1:-1:-1;;;;;21208:18:0;;;;;;:9;:18;;;;;;;:22;:34::i;38026:353::-;-1:-1:-1;;;;;38142:16:0;;38088:7;38142:16;;;:7;:16;;;;;:22;;;38088:7;;38168:1;-1:-1:-1;38139:206:0;;-1:-1:-1;;;;;38203:16:0;;38185:14;38203:16;;;:7;:16;;;;;:22;;;38202:31;;38231:1;38202:28;:31::i;:::-;-1:-1:-1;;;;;38308:16:0;;;;;;:7;:16;;;;;;;;:24;38280:21;;;:10;:21;;;;;;;38261:14;;38185:48;;-1:-1:-1;38260:73:0;;38261:41;;:18;:41::i;8709:129::-;8766:7;8793:37;8797:1;8800;8793:37;;;;;;;;;;;;;;;;;:3;:37::i;11645:229::-;-1:-1:-1;;;;;11719:22:0;;11711:73;;;;-1:-1:-1;;;11711:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11821:6;;;11800:38;;-1:-1:-1;;;;;11800:38:0;;;;11821:6;;;11800:38;;;11849:6;:17;;-1:-1:-1;;;;;;11849:17:0;-1:-1:-1;;;;;11849:17:0;;;;;;;;;;11645:229::o;7908:344::-;7993:7;8095:12;8088:5;8080:28;;;;-1:-1:-1;;;8080:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8119:9;8135:1;8131;:5;;;;;;;7908:344;-1:-1:-1;;;;;7908:344:0:o;25364:522::-;25446:7;;25493:15;:6;25504:3;25493:10;:15::i;:::-;25476:32;-1:-1:-1;25519:14:0;25536;:6;25547:2;25536:10;:14::i;:::-;25519:31;;25571:15;25589:61;25603:6;25611;25619;25627;25635;25643;25589:13;:61::i;:::-;25571:79;-1:-1:-1;25712:19:0;25571:79;25724:6;25712:11;:19::i;:::-;25753:8;;25702:29;;-1:-1:-1;25753:20:0;;25766:6;25753:12;:20::i;:::-;25742:8;:31;25784:49;25803:6;25819:4;25826:6;25784:18;:49::i;:::-;25861:7;25364:522;-1:-1:-1;;;;;25364:522:0:o;25898:207::-;25981:7;;26015:15;:6;26026:3;26015:10;:15::i;:::-;26001:29;;26048:49;26062:6;26070;26078:3;26083;26088;26093;26048:13;:49::i;27016:711::-;27121:1;27110:8;;:12;:34;;;;;27135:9;27126:6;:18;27110:34;27106:614;;;27160:16;27221:9;27212:6;:18;27209:329;;;27261:8;;:16;;27274:2;27261:12;:16::i;:::-;27250:27;;27209:329;;;27328:10;27319:6;:19;27316:222;;;27369:23;27389:2;27369:15;27382:1;27369:8;;:12;;:15;;;;:::i;27316:222::-;27461:43;27500:3;27461:34;27474:20;:6;27485:8;27474:10;:20::i;:::-;27461:8;;;:12;:34::i;:43::-;27450:54;;27316:222;27555:12;;27552:157;;27598:8;;:22;;27611:8;27598:12;:22::i;:::-;27587:8;:33;27639:54;27666:4;27673:9;27684:8;27639:18;:54::i;:::-;27106:614;27016:711;;:::o;9315:165::-;9400:7;9436:12;9428:6;9420:29;;;;-1:-1:-1;;;9420:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:1;9467;:5;;;;;;;9315:165;-1:-1:-1;;;;9315:165:0:o;26117:887::-;26270:7;26318:19;:6;26329:7;26318:10;:19::i;:::-;26309:28;;26348:22;26354:6;26362:7;26348:5;:22::i;:::-;26428;:6;26439:10;26428;:22::i;:::-;26477:13;;26419:31;;-1:-1:-1;26477:29:0;;26495:10;26477:17;:29::i;:::-;26461:13;:45;26517:53;26536:6;26552:4;26559:10;26517:18;:53::i;:::-;26625:12;;:16;26622:189;;26666:24;:6;26677:12;26666:10;:24::i;:::-;26657:33;;26705:55;26724:6;26740:4;26747:12;26705:18;:55::i;:::-;26775:24;26786:12;26775:10;:24::i;:::-;26867;:6;26878:12;26867:10;:24::i;:::-;26858:33;;26902:60;26921:6;14927:42;26949:12;26902:18;:60::i;:::-;-1:-1:-1;26990:6:0;;26117:887;-1:-1:-1;;;;;26117:887:0:o;37291:423::-;37395:15;;37348:17;;37368:43;;37369:20;:7;16801:6;37369:11;:20::i;:::-;37368:26;;:43::i;:::-;37348:63;;37422:24;37449:27;37463:12;;37449:9;:13;;:27;;;;:::i;:::-;37422:54;;37505:27;37519:12;;37505:9;:13;;:27;;;;:::i;:::-;37487:15;:45;37562:14;;:36;;37581:16;37562:18;:36::i;:::-;37545:14;:53;37640:5;;37629:46;;37658:16;;37629:10;;:24;;37640:12;;37650:1;37640:9;:12::i;:::-;37629:24;;;;;;;;;;;;:28;;:46;;;;:::i;:::-;37620:5;;;37609:17;;;;:10;:17;;;;;:66;;;;37694:5;:12;;37704:1;37694:9;:12::i;:::-;37686:5;:20;-1:-1:-1;;;37291:423:0:o

Swarm Source

ipfs://e776f47cd4c12cbad5cfd26cca5d3343ec76804253e9786398d6cd85272ad38e
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.