Contract 0x1606940bB5Cd6de59A7E25367F4fB8965f38F122 3

 

Contract Overview

Balance:
7.026747302327775193 BNB

BNB Value:
$4,367.62 (@ $621.57/BNB)
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6b1934e2fa8645f35387164106cfb797308536808e1a678405932d336a821b44Approve131535702021-12-03 7:52:0858 secs ago0x41174cc4bad27bc10cb4a958f3421bbef3272594 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x3f638cb8bd9eb699f2e9957027ff02fa31dfd7371ebc0e30b22f2c09689df7a8Approve131534992021-12-03 7:48:354 mins ago0x67bc08364737b8b874de32f19b1e6d7fb6b8446c IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x18ee6fa171182149eb6fd0242ed1349fff2699773a87164ba8ca56b3f402956fTransfer131528052021-12-03 7:13:2539 mins ago0x92f20ea9a71f5dbdaa161171a16ea905b3528d69 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001779858
0xf990bcd9012dd7e350ac292f6247146dcb2cf8c1838fb0410822b56396c656cdApprove131526432021-12-03 7:05:1947 mins ago0x579424f6d3f261c1a892e0aeeab5eeb3b409288b IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.000072615
0xa29b3722f6aee5ae4a7fb9caca697de2c8bb66d172a54479f83fbfe8b53c7df0Transfer131522382021-12-03 6:44:551 hr 8 mins ago0x205dcae58d9debddfbbd6e9377fac925cbf62066 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001483095
0xd831430b7aca0f3e237d4285cbbf647d21e781645b90205fe30c94c51994d8e1Approve131521942021-12-03 6:42:351 hr 10 mins ago0x73b560ca5e8afd55cd80511c141805b1a03036cb IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00026658
0x3a97a53670aa2860797e5e2d281e6d9d8d47b7d17e94d703c268fd286dfb6825Approve131514342021-12-03 6:04:251 hr 48 mins ago0x8ba1bf47f84d78bcecc5053de2a2b966e16a966e IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00026658
0xd9c28115e95054f3321dc73fd4bb92ce74a5ca91919358cbc76c8f551a26c147Approve131507332021-12-03 5:28:592 hrs 24 mins ago0x6becd6ce175886df4bf2f3921d9e459a9748a742 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x603c9640dbee1ea41119e7646aea2663061a51cef4f4368d94c4354711f08b46Transfer131507142021-12-03 5:27:552 hrs 25 mins ago0xcfcb723ff65ff192d9fe3ebba2c96c7eeec732b5 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001483155
0x4da2524f593b77b9f3066b6619022dcb4fd273352990fc6b76b80649261e2c69Approve131504812021-12-03 5:15:062 hrs 38 mins ago0x48166a3b5fd808ef01bef5fb87cd221c6cefd5f1 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x522c39a4c6a5a1f56ec3a74e642a315cc20ab8e0a2a736c8e34e3ae4ff28e2bfApprove131504712021-12-03 5:14:332 hrs 38 mins ago0xc92c72b14060ac314df423751f18dbf0e2686bdc IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0xafb8fe5e5e2b78d191b9e175e04326e0ad0b69515863e0eaf9e5d5f9a78a62e8Transfer131492212021-12-03 4:11:543 hrs 41 mins ago0xffb1ec411b5cfdc6bc22c5758e4618d0f75c4e7e IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001483215
0x5e7c3381eeee3de3037647381a37f9183f1a58e9233174600287334c98938c04Approve131491652021-12-03 4:09:063 hrs 44 mins ago0x48cfee4d60820e68197c704ec2814f87bd2f7642 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00026658
0x334669f932cd11aa23ab393ed071f4939d7657eca17b93523f9acd30761a103fTransfer131491042021-12-03 4:06:033 hrs 47 mins ago0x48cfee4d60820e68197c704ec2814f87bd2f7642 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001387215
0x7bcb9af1c372e747dc0d2b3adcae9f61671c5d8469f46be6d99d7b38638a984dApprove131489782021-12-03 3:59:453 hrs 53 mins ago0x7a92b1240eae88c57489c07622d42954755ab07c IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0xe13c82f53298351df4d9f50dfc2aeb7f76f40d6ef616c45ab9c6626e1e8ec8acApprove131485352021-12-03 3:37:364 hrs 15 mins ago0x476b09c96be0816f7a5855cec9982cc7065891a4 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0xd4cdf6c36fc9dbcfe3c8000b88088c62ef980dba13ba20b3374f398aab6e0a6eApprove131482042021-12-03 3:20:474 hrs 32 mins ago0xa1508ff2070f4ad84db6668b8ec926c7a7810f98 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x248eaf9bca9e9cbb67e9b0338d2367664aa365ecef1233b1b267b79baca10112Approve131480182021-12-03 3:11:214 hrs 41 mins ago0xffe4c981269cc1f0afae54552978b80dff43ea2a IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x845e65961bb3925f36858814a84d0e1a6e0eb6f0170ff5bd25bb9da38cbabce4Approve131476422021-12-03 2:52:025 hrs 1 min ago0x0bf93b8b94b8f2cc54c126b52b5ea53c2ce8fcaa IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x03e239270424a05715cfff5c99a680c75794ded8a4c971d7464ccd98c4c216cbApprove131467722021-12-03 2:08:325 hrs 44 mins ago0xdb5ad8167047463e13c78d69484454dc05217b6e IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.000072615
0x4cf450950213c745e0bbd924fe13c0150c19f680b48b77eb9059712dfac0d7efTransfer131459912021-12-03 1:29:076 hrs 23 mins ago0x67c0fe504b96108e62067009a5c3833cf173b912 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001689858
0x27b68c8379e89b1f8087f6f3a73af1c7c68c946ba784d0c17a98099f1118bfcdTransfer131454712021-12-03 1:03:076 hrs 49 mins ago0x884ded5853d63c3d4f9ba28523ee05ea901b4a7a IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.001387995
0x7777e8a069512f3eef096f48beaafbd479568c34db6a3d8331eb46493a70a2acApprove131450142021-12-03 0:40:157 hrs 12 mins ago0x9a3aaa419d97aa14ccf6ad4b323a03e73bc0df11 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x94a455431275fb21078e66553334edb6cc5127b6a632d895e2a35b40944f5792Approve131436912021-12-02 23:34:058 hrs 19 mins ago0x35a25e4f05889538dceeb1d69f771e2b7c55fcb3 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00022215
0x4222674e3b6142710e235b0014b191f7a002ac295c1eb9e8057d06b466388ea7Approve131427472021-12-02 22:46:539 hrs 6 mins ago0x798ce9a33ac40b6616daabfb07371d25d4674276 IN  0x1606940bb5cd6de59a7e25367f4fb8965f38f1220 BNB0.00026658
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd40ddc8299889e1dd2d18bb1c34d920c80233d187f595016ace70676f78bd7d6130779582021-11-30 13:51:282 days 18 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.011766389390991773 BNB
0xd40ddc8299889e1dd2d18bb1c34d920c80233d187f595016ace70676f78bd7d6130779582021-11-30 13:51:282 days 18 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v26.284783159399221999 BNB
0xd40ddc8299889e1dd2d18bb1c34d920c80233d187f595016ace70676f78bd7d6130779582021-11-30 13:51:282 days 18 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1226.284783159399221999 BNB
0x5a3d28106e883a76c0ff74bffdebfd52eb9e746dba8be944db9620fa6d241f1d129276582021-11-24 21:23:328 days 10 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.014901800968165922 BNB
0x5a3d28106e883a76c0ff74bffdebfd52eb9e746dba8be944db9620fa6d241f1d129276582021-11-24 21:23:328 days 10 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v27.122969387417483853 BNB
0x5a3d28106e883a76c0ff74bffdebfd52eb9e746dba8be944db9620fa6d241f1d129276582021-11-24 21:23:328 days 10 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1227.122969387417483853 BNB
0xc58d049700ef166dd97ae22dd80e2d3a6b32a85b1a41f4040895edc5fbcf7b96128401622021-11-21 17:56:0811 days 13 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.017806150900831451 BNB
0xc58d049700ef166dd97ae22dd80e2d3a6b32a85b1a41f4040895edc5fbcf7b96128401622021-11-21 17:56:0811 days 13 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v27.722785941299543085 BNB
0xc58d049700ef166dd97ae22dd80e2d3a6b32a85b1a41f4040895edc5fbcf7b96128401622021-11-21 17:56:0811 days 13 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1227.722785941299543085 BNB
0xde2ed45581b73b0e1202b29e8fbefa41eaa5147a8440618bbb8f19e94fc7c1d3127420282021-11-18 4:54:3115 days 2 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.02514264657240027 BNB
0xde2ed45581b73b0e1202b29e8fbefa41eaa5147a8440618bbb8f19e94fc7c1d3127420282021-11-18 4:54:3115 days 2 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v29.133761141201262839 BNB
0xde2ed45581b73b0e1202b29e8fbefa41eaa5147a8440618bbb8f19e94fc7c1d3127420282021-11-18 4:54:3115 days 2 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1229.133761141201262839 BNB
0xc36bcfbcaeadd5df30e181a6970da2f561d4692d402e1322b00f14f3401e0bfa126990422021-11-16 14:50:5616 days 17 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.029524556380704874 BNB
0xc36bcfbcaeadd5df30e181a6970da2f561d4692d402e1322b00f14f3401e0bfa126990422021-11-16 14:50:5616 days 17 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v29.869197325786472601 BNB
0xc36bcfbcaeadd5df30e181a6970da2f561d4692d402e1322b00f14f3401e0bfa126990422021-11-16 14:50:5616 days 17 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1229.869197325786472601 BNB
0xd29310df6b5621db0e0037c168b9dc4738de479f98776e7c8d494a294dabce0d126763462021-11-15 18:57:4517 days 12 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.018326386733695675 BNB
0xd29310df6b5621db0e0037c168b9dc4738de479f98776e7c8d494a294dabce0d126763462021-11-15 18:57:4517 days 12 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v27.70443666586219612 BNB
0xd29310df6b5621db0e0037c168b9dc4738de479f98776e7c8d494a294dabce0d126763462021-11-15 18:57:4517 days 12 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1227.70443666586219612 BNB
0x0915b9a492cf5308803e033577a1e9942550ec7d81126dfa2fc5a1381d95e6b0126224202021-11-13 19:59:0519 days 11 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.016384653002570551 BNB
0x0915b9a492cf5308803e033577a1e9942550ec7d81126dfa2fc5a1381d95e6b0126224202021-11-13 19:59:0519 days 11 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v27.257727152145481644 BNB
0x0915b9a492cf5308803e033577a1e9942550ec7d81126dfa2fc5a1381d95e6b0126224202021-11-13 19:59:0519 days 11 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1227.257727152145481644 BNB
0xfae0aeb32d5b3ab2d9bd3e8b052c0a06384229824f849bbe925bccc2573964a0125691532021-11-11 22:03:3621 days 9 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.019618123062921542 BNB
0xfae0aeb32d5b3ab2d9bd3e8b052c0a06384229824f849bbe925bccc2573964a0125691532021-11-11 22:03:3621 days 9 hrs ago 0x1606940bb5cd6de59a7e25367f4fb8965f38f122 PancakeSwap: Router v27.889828836539296068 BNB
0xfae0aeb32d5b3ab2d9bd3e8b052c0a06384229824f849bbe925bccc2573964a0125691532021-11-11 22:03:3621 days 9 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1227.889828836539296068 BNB
0x866e624d5d5763e9ae5ce0226d455ba12194c560546f463d2b2cfbd2545bf2df125081782021-11-09 17:28:5223 days 14 hrs ago PancakeSwap: Router v2 0x1606940bb5cd6de59a7e25367f4fb8965f38f1220.020434219880485647 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AquaGoat

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
   The new and improved AquaGoat V2. 
   Improved Tokenomics, Lower Supply, A Fresh Start For All
   The original yield-generating ocean-saving cryptocurrency. 
   The next generation of AquaGoat is here.
   Code forked from a SafeMoon fork(forkception), adjusted and built for AquaGoat.
*/

pragma solidity ^0.6.12;

// SPDX-License-Identifier: Unlicensed
interface BEP20 {

    function totalSupply() external view returns (uint256);

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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;
    address private _previousOwner;
    uint256 private _lockTime;
    bool private _renouncedOwnership;
    
    address private _charityWalletAddress;
    address private _previousCharityWalletAddress;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event CharityWalletTransferred(address indexed previousCharityWalletAddress, address indexed newCharityWalletAddress);

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

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

    function charity() public view returns (address) {
        return _charityWalletAddress;
    }

    /**
     * @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 virtual onlyOwner() {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
        _renouncedOwnership = true;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner() {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    /**
     * @dev Set charity wallet address to a new address (`newCharityWalletAddress`).
     * Can only be called by the current owner.
     */
    function setCharityWalletAddress(address newCharityWalletAddress) public virtual onlyOwner() {
        require(newCharityWalletAddress != _charityWalletAddress, "Ownable: new charity wallet address is the current charity wallet address");
        emit CharityWalletTransferred(_charityWalletAddress, newCharityWalletAddress);
        _charityWalletAddress = newCharityWalletAddress;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    // Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner() {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    // Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_renouncedOwnership == false, "Contract cannot be unlocked as the ownership has been renounced");
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime, "Contract is locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

contract AquaGoat is Context, BEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address=> bool) private isBlacklisted;
    
    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "AquaGoat";
    string private constant _symbol = "AQUAGOAT";
    uint8 private constant _decimals = 9;
    
    uint256 public _reflectionTaxFee = 4;
    uint256 private _previousReflectionTaxFee = _reflectionTaxFee;
    
    uint256 public _liquidityFee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _charityFee = 1;
    uint256 private _previousCharityFee = _charityFee;

    IPancakeswapV2Router02 public pancakeswapV2Router;
    address public pancakeswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 5000000 * 10**6 * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiquidity);
    event ReflectionTaxUpdate(uint256 newReflectionTaxValue);
    event LiquidityTaxUpdate(uint256 newLiquidityTaxValue);
    event CharityTaxUpdate(uint256 newCharityTaxValue);
    event MaxTaxUpdate(uint256 newMaxTaxValue);
    event PancakeSwapRouterUpdate(address newAddress);
    event TokenSellToLiquidityUpdate(uint256 value);
    event WithdrawLeftOverBNB(address recipient, uint256 amount);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        // Route to PancakeSwap V2 0x10ED43C718714eb63d5aA57B78B54704E256024E
        setRouterAddress(0x10ED43C718714eb63d5aA57B78B54704E256024E);

        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    // Returns contract name
    function name() public pure returns (string memory) {
        return _name;
    }
    
    // Returns contract symbol
    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }
    
    // Returns total supply
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    
    // Returns balance (includes reflection) of address
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    
    // Returns allowance amount between owner and spender
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    // Approve transaction
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    // Transfer AquaGoat from sender to recipient
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance"));
        return true;
    }
    
    // Increase the allowance of a authorized msgSender spender
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    
    // Decrease the allowance of a authorized msgSender spender
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));
        return true;
    }
    
    // Is an address excluded from the reflection rewards?
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    
    // Returns total amount of fees
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

        function blackList(address _user) public onlyOwner {
        require(!isBlacklisted[_user], "user already blacklisted");
        isBlacklisted[_user] = true;
        // emit events as well
        
    }
    
       function removeFromBlacklist(address _user) public onlyOwner {
        require(isBlacklisted[_user], "user already whitelisted");
        isBlacklisted[_user] = false;
        // emit events as well
    }


    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
    
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
    
    // Exclude an address from reflection reward.
    // Cannot exclude pancakeswap router.
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    // Include an address in reflection reward.
    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    // Exclude an address from reflection fee, liquidity fee, and charity fee.
    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    // Remove an address from fee exclusion.
    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }
    
    // Set reflection tax fee percentage.
    function setReflectionTaxFeePercent(uint256 reflectionTaxFee) external onlyOwner() {
        _reflectionTaxFee = reflectionTaxFee;
        emit ReflectionTaxUpdate(reflectionTaxFee);
    }
    
    // Set the liquidity fee percentage
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
        emit LiquidityTaxUpdate(liquidityFee);
    }
    
    // Set the charity wallet fee percentage
    function setCharityFeePercent(uint256 charityFee) external onlyOwner() {
        _charityFee = charityFee;
        emit CharityTaxUpdate(charityFee);
    }
   
    // Set max tax amount calculated by a percentage
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
        emit MaxTaxUpdate(maxTxPercent);
    }

    // Set minimum tokens required in contract to sell for liquidity
    function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner() {
        numTokensSellToAddToLiquidity = amount.div(10**2);
        emit TokenSellToLiquidityUpdate(amount);
    }

    // Set liquidity swap
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner() {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    // Set the PancakeSwap router address.
    function setRouterAddress(address newRouter) public onlyOwner() {
        IPancakeswapV2Router02 _pancakeswapV2Router = IPancakeswapV2Router02(newRouter);
         // Create a Pancakeswap pair for this new token
        pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory()).createPair(address(this), _pancakeswapV2Router.WETH());

        // set the rest of the contract variables
        pancakeswapV2Router = _pancakeswapV2Router;

        emit PancakeSwapRouterUpdate(newRouter);
    }
    
     // to receive BNB from pancakeswapV2Router when swapping
    receive() external payable {}

    // Handle reflection fees.
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    // Returns fee amounts based on transfer from sender to receiver amount
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tCharityFee, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tCharityFee);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateFee(_reflectionTaxFee, tAmount);
        uint256 tLiquidity = calculateFee(_liquidityFee, tAmount);
        uint256 tCharityFee = calculateFee(_charityFee, tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tCharityFee);
        return (tTransferAmount, tFee, tLiquidity, tCharityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rCharityFee = tCharityFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rCharityFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    // Returns reflection supply and total supply
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    // Takes liquidity fee from transfer
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    // Takes charity fee from transfer
    function _takeCharityFee(uint256 tCharityFee) private {
        uint256 currentRate =  _getRate();
        uint256 rCharityFee = tCharityFee.mul(currentRate);
        
        _rOwned[charity()] = _rOwned[charity()].add(rCharityFee);
        
        if (_isExcluded[charity()])
            _tOwned[charity()] = _tOwned[charity()].add(rCharityFee);
    }
    
    /*
    * Calculate Reflection Fee, Liquidity Fee, and Charity Fee 
    */
    function calculateFee(uint256 _fee, uint256 _amount) private pure returns (uint256) {
        return _amount.mul(_fee).div(10**2);
    }
    
    // Remove all fees
    function removeAllFee() private {
        if (_reflectionTaxFee == 0 && _liquidityFee == 0 && _charityFee == 0) return;
        
        _previousReflectionTaxFee = _reflectionTaxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousCharityFee = _charityFee;
        
        _reflectionTaxFee = 0;
        _liquidityFee = 0;
        _charityFee = 0;
    }
    
    // Restore fees
    function restoreAllFee() private {
        _reflectionTaxFee = _previousReflectionTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _charityFee = _previousCharityFee;
    }
    
    /*
    * Returns true if account is included in excluded fee list
    */
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    /*
    * Approve transaction from owner
    */
    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is Pancakeswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != pancakeswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            // add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        // indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        
        // transfer amount, it will take tax, burn, liquidity fee and charity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForBNB(half); // <- this breaks the BNB -> HATE swap when swap+liquify is triggered

        // how much BNB did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakeswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    /*
        * For every swapAndLiquify function call, a small amount of BNB is left over in the contract.
        * This function will be called manually and will emit an event containing the withdrawal address and amount withdrawn.
        * It's not ideal that more and more BNB are locked into the contract over time. The simplest solution was to add a withdrawal function suggested by Certik.
    */
    function withdrawLeftoverBNBToCharity(address payable recipient, uint256 amount) public onlyOwner() {
        if (amount <= 0)
            amount = address(this).balance;
        
        require(address(this).balance >= amount, "Address: insufficient balance");
        
        recipient.transfer(amount);

        emit WithdrawLeftOverBNB(recipient, amount);
    }

    // Returns BNB (wei) left-over in the contract
    function getLeftOverContractBNBBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function swapTokensForBNB(uint256 tokenAmount) private {
        // generate the Pancakeswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeswapV2Router.WETH();

        _approve(address(this), address(pancakeswapV2Router), tokenAmount);

        // make the swap
        pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(pancakeswapV2Router), tokenAmount);

        // add the liquidity
        pancakeswapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        
    }

    /*
        * Handle token transfer request from sender to receipient
        * takeFee boolean is self-explanatory
    */
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) { // If sender is excluded from fees and recipient isn't
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) { // If recipient is excluded from fees and sender isn't
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) { // If sender and recipient are both excluded from fees
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount); // If both the sender and recipient are fee'd
        }
        
        if (!takeFee)
            restoreAllFee();
    }

    // If both the sender and recipient are fee'd
    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        
        _takeFee(tLiquidity, tCharityFee, rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // If recipient is excluded from fees and sender isn't
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        
        _takeFee(tLiquidity, tCharityFee, rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // If sender is excluded from fees and recipient isn't
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        
        _takeFee(tLiquidity, tCharityFee, rFee, tFee);

        emit Transfer(sender, recipient, tTransferAmount);
    }

    // If sender and recipient are both excluded from fees
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tCharityFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        
        _takeFee(tLiquidity, tCharityFee, rFee, tFee);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    // Handles liquidity fee, charity fee and reflection fee. Code was reused, so merged into one function. 
    function _takeFee(uint256 tLiquidity, uint256 tCharityFee, uint256 rFee, uint256 tFee) private {
        _takeLiquidity(tLiquidity);
        _takeCharityFee(tCharityFee);
        _reflectFee(rFee, tFee);
    }
}

/* 
* PANCAKESWAP HANDLERS
*/
// pragma solidity >=0.5.0;
interface IPancakeswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IPancakeswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// pragma solidity >=0.6.2;
interface IPancakeswapV2Router02 is IPancakeswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCharityTaxValue","type":"uint256"}],"name":"CharityTaxUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousCharityWalletAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newCharityWalletAddress","type":"address"}],"name":"CharityWalletTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newLiquidityTaxValue","type":"uint256"}],"name":"LiquidityTaxUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTaxValue","type":"uint256"}],"name":"MaxTaxUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"PancakeSwapRouterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newReflectionTaxValue","type":"uint256"}],"name":"ReflectionTaxUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokenSellToLiquidityUpdate","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":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawLeftOverBNB","type":"event"},{"inputs":[],"name":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLeftOverContractBNBBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeswapV2Router","outputs":[{"internalType":"contract IPancakeswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setCharityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCharityWalletAddress","type":"address"}],"name":"setCharityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionTaxFee","type":"uint256"}],"name":"setReflectionTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawLeftoverBNBToCharity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269085afffa6ff50bffffff19600c556004600e819055600f5560056010819055601155600160128190556013556015805460ff60a81b1916600160a81b17905569010f0cf064dd5920000060168190556017553480156200006457600080fd5b506000620000716200020b565b600080546001600160a01b0319166001600160a01b038316908117825560038054610100600160a81b03191661010083021760ff19169055604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36040516001600160a01b038216906000907f3d50f2c482cbe68d0390e05d2fe2f46bd0af87e09b8a45c5b5d3e851a1284a04908290a350600c54600560006200011d6200020b565b6001600160a01b03168152602081019190915260400160002055620001567310ed43c718714eb63d5aa57b78b54704e256024e6200020f565b600160096000620001666200044a565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620001b06200020b565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda10000006040518082815260200191505060405180910390a362000459565b3390565b620002196200020b565b6000546001600160a01b039081169116146200027c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bb57600080fd5b505afa158015620002d0573d6000803e3d6000fd5b505050506040513d6020811015620002e757600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200033857600080fd5b505afa1580156200034d573d6000803e3d6000fd5b505050506040513d60208110156200036457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003b757600080fd5b505af1158015620003cc573d6000803e3d6000fd5b505050506040513d6020811015620003e357600080fd5b5051601580546001600160a01b03199081166001600160a01b039384161790915560148054909116838316179055604080519184168252517fc7e807bc4d2657f8086eb221b7f3cbf27a835910f672bccce37841d05bbfe056916020908290030190a15050565b6000546001600160a01b031690565b61350280620004696000396000f3fe60806040526004361061028c5760003560e01c8063715018a61161015a578063a746c53b116100c1578063dd4670641161007a578063dd46706414610984578063dd62ed3e146109ae578063e5dffed3146109e9578063ea2f0b37146109fe578063f0f165af14610a31578063f2fde38b14610a5b57610293565b8063a746c53b146108a1578063a9059cbb146108b6578063af41063b146108ef578063c49b9a8014610919578063d543dbeb14610945578063d5d834b21461096f57610293565b80638ee88c53116101135780638ee88c53146107cc5780638f95a445146107f6578063934aa0231461082957806395d89b411461083e578063a457c2d714610853578063a69df4b51461088c57610293565b8063715018a6146106f75780637ce7e0091461070c5780637d1db4a5146107455780638044186d1461075a57806388f82020146107845780638da5cb5b146107b757610293565b806341cb87fc116101fe57806352892884116101b757806352892884146106035780635342acb414610634578063537df3b614610667578063602bc62b1461069a5780636bc87c3a146106af57806370a08231146106c457610293565b806341cb87fc146104f0578063437823ec146105235780634549b039146105565780634838d165146105885780634a74bb02146105bb57806352390c02146105d057610293565b80632d838119116102505780632d838119146103ee578063313ce567146104185780633685d4191461044357806339509351146104785780633bd5d173146104b157806340f8007a146104db57610293565b806306fdde0314610298578063095ea7b31461032257806313114a9d1461036f57806318160ddd1461039657806323b872dd146103ab57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610a8e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e75781810151838201526020016102cf565b50505050905090810190601f1680156103145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032e57600080fd5b5061035b6004803603604081101561034557600080fd5b506001600160a01b038135169060200135610ab0565b604080519115158252519081900360200190f35b34801561037b57600080fd5b50610384610ace565b60408051918252519081900360200190f35b3480156103a257600080fd5b50610384610ad4565b3480156103b757600080fd5b5061035b600480360360608110156103ce57600080fd5b506001600160a01b03813581169160208101359091169060400135610ae2565b3480156103fa57600080fd5b506103846004803603602081101561041157600080fd5b5035610b69565b34801561042457600080fd5b5061042d610bcb565b6040805160ff9092168252519081900360200190f35b34801561044f57600080fd5b506104766004803603602081101561046657600080fd5b50356001600160a01b0316610bd0565b005b34801561048457600080fd5b5061035b6004803603604081101561049b57600080fd5b506001600160a01b038135169060200135610d91565b3480156104bd57600080fd5b50610476600480360360208110156104d457600080fd5b5035610ddf565b3480156104e757600080fd5b50610384610ebb565b3480156104fc57600080fd5b506104766004803603602081101561051357600080fd5b50356001600160a01b0316610ec1565b34801561052f57600080fd5b506104766004803603602081101561054657600080fd5b50356001600160a01b03166110de565b34801561056257600080fd5b506103846004803603604081101561057957600080fd5b5080359060200135151561115a565b34801561059457600080fd5b50610476600480360360208110156105ab57600080fd5b50356001600160a01b03166111f6565b3480156105c757600080fd5b5061035b6112e0565b3480156105dc57600080fd5b50610476600480360360208110156105f357600080fd5b50356001600160a01b03166112f0565b34801561060f57600080fd5b50610618611476565b604080516001600160a01b039092168252519081900360200190f35b34801561064057600080fd5b5061035b6004803603602081101561065757600080fd5b50356001600160a01b0316611485565b34801561067357600080fd5b506104766004803603602081101561068a57600080fd5b50356001600160a01b03166114a3565b3480156106a657600080fd5b50610384611589565b3480156106bb57600080fd5b5061038461158f565b3480156106d057600080fd5b50610384600480360360208110156106e757600080fd5b50356001600160a01b0316611595565b34801561070357600080fd5b506104766115f7565b34801561071857600080fd5b506104766004803603604081101561072f57600080fd5b506001600160a01b038135169060200135611694565b34801561075157600080fd5b506103846117cb565b34801561076657600080fd5b506104766004803603602081101561077d57600080fd5b50356117d1565b34801561079057600080fd5b5061035b600480360360208110156107a757600080fd5b50356001600160a01b0316611864565b3480156107c357600080fd5b50610618611882565b3480156107d857600080fd5b50610476600480360360208110156107ef57600080fd5b5035611891565b34801561080257600080fd5b506104766004803603602081101561081957600080fd5b50356001600160a01b0316611924565b34801561083557600080fd5b50610618611a35565b34801561084a57600080fd5b506102ad611a49565b34801561085f57600080fd5b5061035b6004803603604081101561087657600080fd5b506001600160a01b038135169060200135611a6b565b34801561089857600080fd5b50610476611ad3565b3480156108ad57600080fd5b50610384611bf8565b3480156108c257600080fd5b5061035b600480360360408110156108d957600080fd5b506001600160a01b038135169060200135611bfc565b3480156108fb57600080fd5b506104766004803603602081101561091257600080fd5b5035611c10565b34801561092557600080fd5b506104766004803603602081101561093c57600080fd5b50351515611ca3565b34801561095157600080fd5b506104766004803603602081101561096857600080fd5b5035611d4e565b34801561097b57600080fd5b50610384611dfe565b34801561099057600080fd5b50610476600480360360208110156109a757600080fd5b5035611e04565b3480156109ba57600080fd5b50610384600480360360408110156109d157600080fd5b506001600160a01b0381358116916020013516611ea2565b3480156109f557600080fd5b50610618611ecd565b348015610a0a57600080fd5b5061047660048036036020811015610a2157600080fd5b50356001600160a01b0316611edc565b348015610a3d57600080fd5b5061047660048036036020811015610a5457600080fd5b5035611f55565b348015610a6757600080fd5b5061047660048036036020811015610a7e57600080fd5b50356001600160a01b0316611ff1565b604080518082019091526008815267105c5d5851dbd85d60c21b602082015290565b6000610ac4610abd6120d7565b84846120db565b5060015b92915050565b600d5490565b69d3c21bcecceda100000090565b6000610aef8484846121c7565b610b5f84610afb6120d7565b610b5a856040518060600160405280602881526020016132f1602891396001600160a01b038a16600090815260076020526040812090610b396120d7565b6001600160a01b0316815260208101919091526040016000205491906123f2565b6120db565b5060019392505050565b6000600c54821115610bac5760405162461bcd60e51b815260040180806020018281038252602a815260200180613262602a913960400191505060405180910390fd5b6000610bb6612489565b9050610bc283826124ac565b9150505b919050565b600990565b610bd86120d7565b6000546001600160a01b03908116911614610c28576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16610c95576040805162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604482015290519081900360640190fd5b60005b600b54811015610d8d57816001600160a01b0316600b8281548110610cb957fe5b6000918252602090912001546001600160a01b03161415610d8557600b80546000198101908110610ce657fe5b600091825260209091200154600b80546001600160a01b039092169183908110610d0c57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600a90925220805460ff19169055600b805480610d5e57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610d8d565b600101610c98565b5050565b6000610ac4610d9e6120d7565b84610b5a8560076000610daf6120d7565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906124f5565b6000610de96120d7565b6001600160a01b0381166000908152600a602052604090205490915060ff1615610e445760405162461bcd60e51b815260040180806020018281038252602c81526020018061345c602c913960400191505060405180910390fd5b6000610e4f8361254f565b5050506001600160a01b038616600090815260056020526040902054939450610e7d939250849150506125aa565b6001600160a01b038316600090815260056020526040902055600c54610ea390826125aa565b600c55600d54610eb390846124f5565b600d55505050565b60125481565b610ec96120d7565b6000546001600160a01b03908116911614610f19576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5757600080fd5b505afa158015610f6b573d6000803e3d6000fd5b505050506040513d6020811015610f8157600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015610fd157600080fd5b505afa158015610fe5573d6000803e3d6000fd5b505050506040513d6020811015610ffb57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b505050506040513d602081101561107757600080fd5b5051601580546001600160a01b03199081166001600160a01b039384161790915560148054909116838316179055604080519184168252517fc7e807bc4d2657f8086eb221b7f3cbf27a835910f672bccce37841d05bbfe056916020908290030190a15050565b6110e66120d7565b6000546001600160a01b03908116911614611136576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600069d3c21bcecceda10000008311156111bb576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816111db5760006111cb8461254f565b50949650610ac895505050505050565b60006111e68461254f565b50939650610ac895505050505050565b6111fe6120d7565b6000546001600160a01b0390811691161461124e576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16156112bc576040805162461bcd60e51b815260206004820152601860248201527f7573657220616c726561647920626c61636b6c69737465640000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b601554600160a81b900460ff1681565b6112f86120d7565b6000546001600160a01b03908116911614611348576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600a602052604090205460ff16156113b6576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526005602052604090205415611410576001600160a01b0381166000908152600560205260409020546113f690610b69565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6015546001600160a01b031681565b6001600160a01b031660009081526009602052604090205460ff1690565b6114ab6120d7565b6000546001600160a01b039081169116146114fb576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff16611568576040805162461bcd60e51b815260206004820152601860248201527f7573657220616c72656164792077686974656c69737465640000000000000000604482015290519081900360640190fd5b6001600160a01b03166000908152600860205260409020805460ff19169055565b60025490565b60105481565b6001600160a01b0381166000908152600a602052604081205460ff16156115d557506001600160a01b038116600090815260066020526040902054610bc6565b6001600160a01b038216600090815260056020526040902054610ac890610b69565b6115ff6120d7565b6000546001600160a01b0390811691161461164f576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020613382833981519152908390a3600080546001600160a01b03191690556003805460ff19166001179055565b61169c6120d7565b6000546001600160a01b039081169116146116ec576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b600081116116f75750475b8047101561174c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611782573d6000803e3d6000fd5b50604080516001600160a01b03841681526020810183905281517f14f62aa096b230b7f02d7602e954025c6ded1938f2ab3158ca05f9dc5d581027929181900390910190a15050565b60165481565b6117d96120d7565b6000546001600160a01b03908116911614611829576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b600e8190556040805182815290517f4a86ef11ac240a76c18acd6f16e279310b02a5a0b9b855351e62f89916a8b4579181900360200190a150565b6001600160a01b03166000908152600a602052604090205460ff1690565b6000546001600160a01b031690565b6118996120d7565b6000546001600160a01b039081169116146118e9576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b60108190556040805182815290517f3e05a55abfed8de6fd39720c006c7b1ba8fbb6f1b924b79793275a6ce32de62f9181900360200190a150565b61192c6120d7565b6000546001600160a01b0390811691161461197c576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6003546001600160a01b038281166101009092041614156119ce5760405162461bcd60e51b81526004018080602001828103825260498152602001806133cb6049913960600191505060405180910390fd5b6003546040516001600160a01b0380841692610100900416907f3d50f2c482cbe68d0390e05d2fe2f46bd0af87e09b8a45c5b5d3e851a1284a0490600090a3600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60035461010090046001600160a01b031690565b6040805180820190915260088152671054555051d3d05560c21b602082015290565b6000610ac4611a786120d7565b84610b5a856040518060600160405280602581526020016134376025913960076000611aa26120d7565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123f2565b60035460ff1615611b155760405162461bcd60e51b815260040180806020018281038252603f8152602001806132b2603f913960400191505060405180910390fd5b6001546001600160a01b03163314611b5e5760405162461bcd60e51b81526004018080602001828103825260238152602001806134aa6023913960400191505060405180910390fd5b6002544211611ba9576040805162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81b1bd8dad95960721b604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061338283398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b4790565b6000610ac4611c096120d7565b84846121c7565b611c186120d7565b6000546001600160a01b03908116911614611c68576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b60128190556040805182815290517f20a8407f915da10965546f548e4ca2cb03f808424857be70380d28356eb38afc9181900360200190a150565b611cab6120d7565b6000546001600160a01b03908116911614611cfb576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b60158054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611d566120d7565b6000546001600160a01b03908116911614611da6576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b611dc56064611dbf69d3c21bcecceda1000000846125ec565b906124ac565b6016556040805182815290517f7630fccaa1750d4c13710d2083cad3251e883536bd3b426f47c9efed29d51bf39181900360200190a150565b600e5481565b611e0c6120d7565b6000546001600160a01b03908116911614611e5c576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613382833981519152908290a350565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6014546001600160a01b031681565b611ee46120d7565b6000546001600160a01b03908116911614611f34576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b611f5d6120d7565b6000546001600160a01b03908116911614611fad576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b611fb88160646124ac565b6017556040805182815290517fb05c772b77f1ce0e45d6461e8112994b5f02f00ee4e89c058b568f0d857be2889181900360200190a150565b611ff96120d7565b6000546001600160a01b03908116911614612049576040805162461bcd60e51b81526020600482018190526024820152600080516020613362833981519152604482015290519081900360640190fd5b6001600160a01b03811661208e5760405162461bcd60e51b815260040180806020018281038252602681526020018061328c6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061338283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166121205760405162461bcd60e51b815260040180806020018281038252602481526020018061323e6024913960400191505060405180910390fd5b6001600160a01b0382166121655760405162461bcd60e51b81526004018080602001828103825260228152602001806134886022913960400191505060405180910390fd5b6001600160a01b03808416600081815260076020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831661220c5760405162461bcd60e51b81526004018080602001828103825260258152602001806132196025913960400191505060405180910390fd5b6001600160a01b0382166122515760405162461bcd60e51b81526004018080602001828103825260238152602001806134146023913960400191505060405180910390fd5b600081116122905760405162461bcd60e51b81526004018080602001828103825260298152602001806133a26029913960400191505060405180910390fd5b612298611882565b6001600160a01b0316836001600160a01b0316141580156122d257506122bc611882565b6001600160a01b0316826001600160a01b031614155b15612318576016548111156123185760405162461bcd60e51b81526004018080602001828103825260288152602001806133196028913960400191505060405180910390fd5b600061232330611595565b9050601654811061233357506016545b601754811080159081906123515750601554600160a01b900460ff16155b801561236b57506015546001600160a01b03868116911614155b80156123805750601554600160a81b900460ff165b1561239357601754915061239382612645565b6001600160a01b03851660009081526009602052604090205460019060ff16806123d557506001600160a01b03851660009081526009602052604090205460ff165b156123de575060005b6123ea868686846126eb565b505050505050565b600081848411156124815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561244657818101518382015260200161242e565b50505050905090810190601f1680156124735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061249661280d565b90925090506124a582826124ac565b9250505090565b60006124ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612990565b9392505050565b6000828201838110156124ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060008060006125698c6129f5565b9350935093509350600080600061258a8f878787612585612489565b612a53565b919f509d509b509599509397509195509350505050919395979092949650565b60006124ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123f2565b6000826125fb57506000610ac8565b8282028284828161260857fe5b04146124ee5760405162461bcd60e51b81526004018080602001828103825260218152602001806133416021913960400191505060405180910390fd5b6015805460ff60a01b1916600160a01b17905560006126658260026124ac565b9050600061267383836125aa565b90504761267f83612ab5565b600061268b47836125aa565b90506126978382612c5b565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506015805460ff60a01b19169055505050565b806126f8576126f8612d28565b6001600160a01b0384166000908152600a602052604090205460ff16801561273957506001600160a01b0383166000908152600a602052604090205460ff16155b1561274e57612749848484612d71565b6127fa565b6001600160a01b0384166000908152600a602052604090205460ff1615801561278f57506001600160a01b0383166000908152600a602052604090205460ff165b1561279f57612749848484612ea5565b6001600160a01b0384166000908152600a602052604090205460ff1680156127df57506001600160a01b0383166000908152600a602052604090205460ff165b156127ef57612749848484612f64565b6127fa848484612fed565b8061280757612807613047565b50505050565b600c54600090819069d3c21bcecceda1000000825b600b5481101561294e578260056000600b848154811061283e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128a357508160066000600b848154811061287c57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128c257600c5469d3c21bcecceda10000009450945050505061298c565b61290260056000600b84815481106128d657fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125aa565b925061294460066000600b848154811061291857fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125aa565b9150600101612822565b50600c546129669069d3c21bcecceda10000006124ac565b82101561298657600c5469d3c21bcecceda100000093509350505061298c565b90925090505b9091565b600081836129df5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561244657818101518382015260200161242e565b5060008385816129eb57fe5b0495945050505050565b6000806000806000612a09600e548761305b565b90506000612a196010548861305b565b90506000612a296012548961305b565b90506000612a4382612a3d85818d896125aa565b906125aa565b9993985091965094509092505050565b6000808080612a6289866125ec565b90506000612a7089876125ec565b90506000612a7e89886125ec565b90506000612a8c89896125ec565b90506000612aa082612a3d858189896125aa565b949d949c50929a509298505050505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612ae357fe5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612b3757600080fd5b505afa158015612b4b573d6000803e3d6000fd5b505050506040513d6020811015612b6157600080fd5b5051815182906001908110612b7257fe5b6001600160a01b039283166020918202929092010152601454612b9891309116846120db565b60145460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612c1e578181015183820152602001612c06565b505050509050019650505050505050600060405180830381600087803b158015612c4757600080fd5b505af11580156123ea573d6000803e3d6000fd5b601454612c739030906001600160a01b0316846120db565b6014546001600160a01b031663f305d719823085600080612c92611882565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b50505050506040513d606081101561280757600080fd5b600e54158015612d385750601054155b8015612d445750601254155b15612d4e57612d6f565b600e8054600f55601080546011556012805460135560009283905590829055555b565b6000806000806000806000612d858861254f565b9650965096509650965096509650612dcb88600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125aa90919063ffffffff16565b6001600160a01b038b16600090815260066020908152604080832093909355600590522054612dfa90886125aa565b6001600160a01b03808c1660009081526005602052604080822093909355908b1681522054612e2990876124f5565b6001600160a01b038a16600090815260056020526040902055612e4e8282878661306c565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b6000806000806000806000612eb98861254f565b9650965096509650965096509650612eff87600560008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125aa90919063ffffffff16565b6001600160a01b03808c16600090815260056020908152604080832094909455918c16815260069091522054612f3590856124f5565b6001600160a01b038a16600090815260066020908152604080832093909355600590522054612e2990876124f5565b6000806000806000806000612f788861254f565b9650965096509650965096509650612fbe88600660008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125aa90919063ffffffff16565b6001600160a01b038b16600090815260066020908152604080832093909355600590522054612eff90886125aa565b60008060008060008060006130018861254f565b9650965096509650965096509650612dfa87600560008d6001600160a01b03166001600160a01b03168152602001908152602001600020546125aa90919063ffffffff16565b600f54600e55601154601055601354601255565b60006124ee6064611dbf84866125ec565b61307584613088565b61307e83613111565b61280782826131f4565b6000613092612489565b905060006130a083836125ec565b306000908152600560205260409020549091506130bd90826124f5565b30600090815260056020908152604080832093909355600a9052205460ff161561310c57306000908152600660205260409020546130fb90846124f5565b306000908152600660205260409020555b505050565b600061311b612489565b9050600061312983836125ec565b905061315b816005600061313b611a35565b6001600160a01b03168152602081019190915260400160002054906124f5565b60056000613167611a35565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600a6000613197611a35565b6001600160a01b0316815260208101919091526040016000205460ff161561310c576131c9816006600061313b611a35565b600660006131d5611a35565b6001600160a01b03168152602081019190915260400160002055505050565b600c5461320190836125aa565b600c55600d5461321190826124f5565b600d55505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f6e74726163742063616e6e6f7420626520756e6c6f636b656420617320746865206f776e65727368697020686173206265656e2072656e6f756e63656442455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4f776e61626c653a206e657720636861726974792077616c6c65742061646472657373206973207468652063757272656e7420636861726974792077616c6c6574206164647265737342455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e42455032303a20617070726f766520746f20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636ba26469706673582212202f2fc14c8cc9ef163938bf587ec5b51936dffb3e2b36159967b93dfb32ebb65a64736f6c634300060c0033

Deployed ByteCode Sourcemap

19142:24176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21887:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23020:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23020:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24439:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22233:95;;;;;;;;;;;;;:::i;23244:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23244:313:0;;;;;;;;;;;;;;;;;:::i;25815:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25815:253:0;;:::i;22109:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26565:475;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26565:475:0;-1:-1:-1;;;;;26565:475:0;;:::i;:::-;;23634:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23634:218:0;;;;;;;;:::i;24979:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24979:378:0;;:::i;20226:30::-;;;;;;;;;;;;;:::i;28884:517::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28884:517:0;-1:-1:-1;;;;;28884:517:0;;:::i;27132:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27132:113:0;-1:-1:-1;;;;;27132:113:0;;:::i;25365:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25365:438:0;;;;;;;;;:::i;24538:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24538:208:0;-1:-1:-1;;;;;24538:208:0;;:::i;20450:40::-;;;;;;;;;;;;;:::i;26174:334::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26174:334:0;-1:-1:-1;;;;;26174:334:0;;:::i;20377:32::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;20377:32:0;;;;;;;;;;;;;;33831:123;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33831:123:0;-1:-1:-1;;;;;33831:123:0;;:::i;24761:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24761:208:0;-1:-1:-1;;;;;24761:208:0;;:::i;18281:90::-;;;;;;;;;;;;;:::i;20125:32::-;;;;;;;;;;;;;:::i;22397:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22397:198:0;-1:-1:-1;;;;;22397:198:0;;:::i;17128:187::-;;;;;;;;;;;;;:::i;37583:376::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37583:376:0;;;;;;;;:::i;20503:53::-;;;;;;;;;;;;;:::i;27470:191::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27470:191:0;;:::i;24270:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24270:120:0;-1:-1:-1;;;;;24270:120:0;;:::i;16381:79::-;;;;;;;;;;;;;:::i;27714:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27714:170:0;;:::i;17881:392::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17881:392:0;-1:-1:-1;;;;;17881:392:0;;:::i;16468:96::-;;;;;;;;;;;;;:::i;22014:87::-;;;;;;;;;;;;;:::i;23929:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23929:269:0;;;;;;;;:::i;18741:394::-;;;;;;;;;;;;;:::i;38019:118::-;;;;;;;;;;;;;:::i;22603:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22603:167:0;;;;;;;;:::i;27942:158::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27942:158:0;;:::i;28655:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28655:173:0;;;;:::i;28165:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28165:180:0;;:::i;20008:36::-;;;;;;;;;;;;;:::i;18448:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18448:216:0;;:::i;22841:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22841:143:0;;;;;;;;;;:::i;20321:49::-;;;;;;;;;;;;;:::i;27303:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27303:112:0;-1:-1:-1;;;;;27303:112:0;;:::i;28423:197::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28423:197:0;;:::i;17470:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17470:246:0;-1:-1:-1;;;;;17470:246:0;;:::i;21887:83::-;21957:5;;;;;;;;;;;;-1:-1:-1;;;21957:5:0;;;;21887:83;:::o;23020:161::-;23095:4;23112:39;23121:12;:10;:12::i;:::-;23135:7;23144:6;23112:8;:39::i;:::-;-1:-1:-1;23169:4:0;23020:161;;;;;:::o;24439:87::-;24508:10;;24439:87;:::o;22233:95::-;19735:26;22233:95;:::o;23244:313::-;23342:4;23359:36;23369:6;23377:9;23388:6;23359:9;:36::i;:::-;23406:121;23415:6;23423:12;:10;:12::i;:::-;23437:89;23475:6;23437:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23437:19:0;;;;;;:11;:19;;;;;;23457:12;:10;:12::i;:::-;-1:-1:-1;;;;;23437:33:0;;;;;;;;;;;;-1:-1:-1;23437:33:0;;;:89;:37;:89::i;:::-;23406:8;:121::i;:::-;-1:-1:-1;23545:4:0;23244:313;;;;;:::o;25815:253::-;25881:7;25920;;25909;:18;;25901:73;;;;-1:-1:-1;;;25901:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25985:19;26008:10;:8;:10::i;:::-;25985:33;-1:-1:-1;26036:24:0;:7;25985:33;26036:11;:24::i;:::-;26029:31;;;25815:253;;;;:::o;22109:83::-;19994:1;22109:83;:::o;26565:475::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26647:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26639:56;;;::::0;;-1:-1:-1;;;26639:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26711:9;26706:327;26730:9;:16:::0;26726:20;::::1;26706:327;;;26788:7;-1:-1:-1::0;;;;;26772:23:0::1;:9;26782:1;26772:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26772:12:0::1;:23;26768:254;;;26831:9;26841:16:::0;;-1:-1:-1;;26841:20:0;;;26831:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;26816:9:::1;:12:::0;;-1:-1:-1;;;;;26831:31:0;;::::1;::::0;26826:1;;26816:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;26816:46:0::1;-1:-1:-1::0;;;;;26816:46:0;;::::1;;::::0;;26881:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26920:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26920:28:0::1;::::0;;26967:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26967:15:0;;;;;-1:-1:-1;;;;;;26967:15:0::1;::::0;;;;;27001:5:::1;;26768:254;26748:3;;26706:327;;;;26565:475:::0;:::o;23634:218::-;23722:4;23739:83;23748:12;:10;:12::i;:::-;23762:7;23771:50;23810:10;23771:11;:25;23783:12;:10;:12::i;:::-;-1:-1:-1;;;;;23771:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;23771:25:0;;;:34;;;;;;;;;;;:38;:50::i;24979:378::-;25031:14;25048:12;:10;:12::i;:::-;-1:-1:-1;;;;;25080:19:0;;;;;;:11;:19;;;;;;25031:29;;-1:-1:-1;25080:19:0;;25079:20;25071:77;;;;-1:-1:-1;;;25071:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25160:15;25185:19;25196:7;25185:10;:19::i;:::-;-1:-1:-1;;;;;;;;25233:15:0;;;;;;:7;:15;;;;;;25159:45;;-1:-1:-1;25233:28:0;;:15;-1:-1:-1;25159:45:0;;-1:-1:-1;;25233:19:0;:28::i;:::-;-1:-1:-1;;;;;25215:15:0;;;;;;:7;:15;;;;;:46;25282:7;;:20;;25294:7;25282:11;:20::i;:::-;25272:7;:30;25326:10;;:23;;25341:7;25326:14;:23::i;:::-;25313:10;:36;-1:-1:-1;;;24979:378:0:o;20226:30::-;;;;:::o;28884:517::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;28959:43:::1;29028:9;28959:79;;29149:20;-1:-1:-1::0;;;;;29149:28:0::1;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29149:30:0;29207:27:::1;::::0;;-1:-1:-1;;;29207:27:0;;;;-1:-1:-1;;;;;29127:64:0;;::::1;::::0;::::1;::::0;29200:4:::1;::::0;29207:25;;::::1;::::0;::::1;::::0;:27:::1;::::0;;::::1;::::0;29149:30:::1;::::0;29207:27;;;;;;;;:25;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29207:27:0;29127:108:::1;::::0;;-1:-1:-1;;;;;;29127:108:0::1;::::0;;;;;;-1:-1:-1;;;;;29127:108:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;29207:27:::1;::::0;29127:108;;;;;;;-1:-1:-1;29127:108:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29127:108:0;29107:17:::1;:128:::0;;-1:-1:-1;;;;;;29107:128:0;;::::1;-1:-1:-1::0;;;;;29107:128:0;;::::1;;::::0;;;29299:19:::1;:42:::0;;;;::::1;::::0;;::::1;;::::0;;29359:34:::1;::::0;;;;::::1;::::0;;;::::1;::::0;29127:108:::1;29359:34:::0;;;;;;::::1;16767:1;28884:517:::0;:::o;27132:113::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27203:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;27203:34:0::1;27233:4;27203:34;::::0;;27132:113::o;25365:438::-;25455:7;19735:26;25483:7;:18;;25475:62;;;;;-1:-1:-1;;;25475:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25553:17;25548:248;;25588:15;25613:19;25624:7;25613:10;:19::i;:::-;-1:-1:-1;25587:45:0;;-1:-1:-1;25647:14:0;;-1:-1:-1;;;;;;25647:14:0;25548:248;25696:23;25728:19;25739:7;25728:10;:19::i;:::-;-1:-1:-1;25694:53:0;;-1:-1:-1;25762:22:0;;-1:-1:-1;;;;;;25762:22:0;24538:208;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24609:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;24608:21;24600:58;;;::::0;;-1:-1:-1;;;24600:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24669:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;24669:27:0::1;24692:4;24669:27;::::0;;24538:208::o;20450:40::-;;;-1:-1:-1;;;20450:40:0;;;;;:::o;26174:334::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26257:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26256:21;26248:61;;;::::0;;-1:-1:-1;;;26248:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;26324:16:0;::::1;26343:1;26324:16:::0;;;:7:::1;:16;::::0;;;;;:20;26320:109:::1;;-1:-1:-1::0;;;;;26400:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26380:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26361:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26320:109:::1;-1:-1:-1::0;;;;;26439:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26439:27:0::1;26462:4;26439:27:::0;;::::1;::::0;;;26477:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26477:23:0::1;::::0;;::::1;::::0;;26174:334::o;20377:32::-;;;-1:-1:-1;;;;;20377:32:0;;:::o;33831:123::-;-1:-1:-1;;;;;33919:27:0;33895:4;33919:27;;;:18;:27;;;;;;;;;33831:123::o;24761:208::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24841:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;::::1;;24833:57;;;::::0;;-1:-1:-1;;;24833:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24901:20:0::1;24924:5;24901:20:::0;;;:13:::1;:20;::::0;;;;:28;;-1:-1:-1;;24901:28:0::1;::::0;;24761:208::o;18281:90::-;18354:9;;18281:90;:::o;20125:32::-;;;;:::o;22397:198::-;-1:-1:-1;;;;;22487:20:0;;22463:7;22487:20;;;:11;:20;;;;;;;;22483:49;;;-1:-1:-1;;;;;;22516:16:0;;;;;;:7;:16;;;;;;22509:23;;22483:49;-1:-1:-1;;;;;22570:16:0;;;;;;:7;:16;;;;;;22550:37;;:19;:37::i;17128:187::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;17237:1:::1;17221:6:::0;;17200:40:::1;::::0;-1:-1:-1;;;;;17221:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17200:40:0;17237:1;;17200:40:::1;17268:1;17251:19:::0;;-1:-1:-1;;;;;;17251:19:0::1;::::0;;17281::::1;:26:::0;;-1:-1:-1;;17281:26:0::1;17251:19:::0;17281:26:::1;::::0;;17128:187::o;37583:376::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;37708:1:::1;37698:6;:11;37694:60;;-1:-1:-1::0;37733:21:0::1;37694:60;37808:6;37783:21;:31;;37775:73;;;::::0;;-1:-1:-1;;;37775:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37869:26;::::0;-1:-1:-1;;;;;37869:18:0;::::1;::::0;:26;::::1;;;::::0;37888:6;;37869:26:::1;::::0;;;37888:6;37869:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;37913:38:0::1;::::0;;-1:-1:-1;;;;;37913:38:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;37583:376:::0;;:::o;20503:53::-;;;;:::o;27470:191::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;27564:17:::1;:36:::0;;;27616:37:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;27470:191:::0;:::o;24270:120::-;-1:-1:-1;;;;;24362:20:0;24338:4;24362:20;;;:11;:20;;;;;;;;;24270:120::o;16381:79::-;16419:7;16446:6;-1:-1:-1;;;;;16446:6:0;16381:79;:::o;27714:170::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;27800:13:::1;:28:::0;;;27844:32:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;27714:170:::0;:::o;17881:392::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;18020:21:::1;::::0;-1:-1:-1;;;;;17993:48:0;;::::1;18020:21;::::0;;::::1;;17993:48;;17985:134;;;;-1:-1:-1::0;;;17985:134:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18160:21;::::0;18135:72:::1;::::0;-1:-1:-1;;;;;18135:72:0;;::::1;::::0;18160:21:::1;::::0;::::1;;::::0;18135:72:::1;::::0;;;::::1;18218:21;:47:::0;;-1:-1:-1;;;;;18218:47:0;;::::1;;;-1:-1:-1::0;;;;;;18218:47:0;;::::1;::::0;;;::::1;::::0;;17881:392::o;16468:96::-;16535:21;;;;;-1:-1:-1;;;;;16535:21:0;;16468:96::o;22014:87::-;22086:7;;;;;;;;;;;;-1:-1:-1;;;22086:7:0;;;;22014:87;:::o;23929:269::-;24022:4;24039:129;24048:12;:10;:12::i;:::-;24062:7;24071:96;24110:15;24071:96;;;;;;;;;;;;;;;;;:11;:25;24083:12;:10;:12::i;:::-;-1:-1:-1;;;;;24071:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24071:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;18741:394::-;18793:19;;;;:28;18785:104;;;;-1:-1:-1;;;18785:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18908:14;;-1:-1:-1;;;;;18908:14:0;18926:10;18908:28;18900:76;;;;-1:-1:-1;;;18900:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19001:9;;18995:3;:15;18987:46;;;;;-1:-1:-1;;;18987:46:0;;;;;;;;;;;;-1:-1:-1;;;18987:46:0;;;;;;;;;;;;;;;19078:14;;;19070:6;;19049:44;;-1:-1:-1;;;;;19078:14:0;;;;19070:6;;;;-1:-1:-1;;;;;;;;;;;19049:44:0;;19113:14;;;19104:23;;-1:-1:-1;;;;;;19104:23:0;-1:-1:-1;;;;;19113:14:0;;;19104:23;;;;;;18741:394::o;38019:118::-;38108:21;38019:118;:::o;22603:167::-;22681:4;22698:42;22708:12;:10;:12::i;:::-;22722:9;22733:6;22698:9;:42::i;27942:158::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;28024:11:::1;:24:::0;;;28064:28:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;27942:158:::0;:::o;28655:173::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;28734:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;28734:32:0;::::1;-1:-1:-1::0;;;;28734:32:0;;::::1;::::0;;;::::1;::::0;;;28782:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;28655:173:::0;:::o;28165:180::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;28259:36:::1;28289:5;28259:25;19735:26;28271:12:::0;28259:11:::1;:25::i;:::-;:29:::0;::::1;:36::i;:::-;28244:12;:51:::0;28311:26:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;28165:180:::0;:::o;20008:36::-;;;;:::o;18448:216::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;18531:6:::1;::::0;;;18514:23;;-1:-1:-1;;;;;;18514:23:0;;::::1;-1:-1:-1::0;;;;;18531:6:0;::::1;18514:23;::::0;;;18548:19:::1;::::0;;18590:3:::1;:10:::0;::::1;18578:9;:22:::0;18616:40:::1;::::0;18531:6;;-1:-1:-1;;;;;;;;;;;18616:40:0;18531:6;;18616:40:::1;18448:216:::0;:::o;22841:143::-;-1:-1:-1;;;;;22949:18:0;;;22922:7;22949:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22841:143::o;20321:49::-;;;-1:-1:-1;;;;;20321:49:0;;:::o;27303:112::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27372:27:0::1;27402:5;27372:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;27372:35:0::1;::::0;;27303:112::o;28423:197::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;28545:17:::1;:6:::0;28556:5:::1;28545:10;:17::i;:::-;28513:29;:49:::0;28578:34:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;28423:197:::0;:::o;17470:246::-;16707:12;:10;:12::i;:::-;16697:6;;-1:-1:-1;;;;;16697:6:0;;;:22;;;16689:67;;;;;-1:-1:-1;;;16689:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16689:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17561:22:0;::::1;17553:73;;;;-1:-1:-1::0;;;17553:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17663:6;::::0;;17642:38:::1;::::0;-1:-1:-1;;;;;17642:38:0;;::::1;::::0;17663:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17642:38:0;::::1;17691:6;:17:::0;;-1:-1:-1;;;;;;17691:17:0::1;-1:-1:-1::0;;;;;17691:17:0;;;::::1;::::0;;;::::1;::::0;;17470:246::o;8274:106::-;8362:10;8274:106;:::o;34016:337::-;-1:-1:-1;;;;;34109:19:0;;34101:68;;;;-1:-1:-1;;;34101:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34188:21:0;;34180:68;;;;-1:-1:-1;;;34180:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34261:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34313:32;;;;;;;;;;;;;;;;;34016:337;;;:::o;34361:1805::-;-1:-1:-1;;;;;34449:18:0;;34441:68;;;;-1:-1:-1;;;34441:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34528:16:0;;34520:64;;;;-1:-1:-1;;;34520:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34612:1;34603:6;:10;34595:64;;;;-1:-1:-1;;;34595:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34682:7;:5;:7::i;:::-;-1:-1:-1;;;;;34674:15:0;:4;-1:-1:-1;;;;;34674:15:0;;;:32;;;;;34699:7;:5;:7::i;:::-;-1:-1:-1;;;;;34693:13:0;:2;-1:-1:-1;;;;;34693:13:0;;;34674:32;34670:126;;;34739:12;;34729:6;:22;;34721:75;;;;-1:-1:-1;;;34721:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35095:28;35126:24;35144:4;35126:9;:24::i;:::-;35095:55;;35199:12;;35175:20;:36;35171:104;;-1:-1:-1;35251:12:0;;35171:104;35346:29;;35322:53;;;;;;;35404;;-1:-1:-1;35441:16:0;;-1:-1:-1;;;35441:16:0;;;;35440:17;35404:53;:95;;;;-1:-1:-1;35482:17:0;;-1:-1:-1;;;;;35474:25:0;;;35482:17;;35474:25;;35404:95;:133;;;;-1:-1:-1;35516:21:0;;-1:-1:-1;;;35516:21:0;;;;35404:133;35386:323;;;35587:29;;35564:52;;35661:36;35676:20;35661:14;:36::i;:::-;-1:-1:-1;;;;;35920:24:0;;35791:12;35920:24;;;:18;:24;;;;;;35806:4;;35920:24;;;:50;;-1:-1:-1;;;;;;35948:22:0;;;;;;:18;:22;;;;;;;;35920:50;35916:98;;;-1:-1:-1;35997:5:0;35916:98;36117:41;36132:4;36138:2;36142:6;36150:7;36117:14;:41::i;:::-;34361:1805;;;;;;:::o;4684:192::-;4770:7;4806:12;4798:6;;;;4790:29;;;;-1:-1:-1;;;4790:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4842:5:0;;;4684:192::o;31262:163::-;31303:7;31324:15;31341;31360:19;:17;:19::i;:::-;31323:56;;-1:-1:-1;31323:56:0;-1:-1:-1;31397:20:0;31323:56;;31397:11;:20::i;:::-;31390:27;;;;31262:163;:::o;6082:132::-;6140:7;6167:39;6171:1;6174;6167:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6160:46;6082:132;-1:-1:-1;;;6082:132:0:o;3781:181::-;3839:7;3871:5;;;3895:6;;;;3887:46;;;;;-1:-1:-1;;;3887:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29777:475;29836:7;29845;29854;29863;29872;29881;29890;29911:23;29936:12;29950:18;29970:19;29993:20;30005:7;29993:11;:20::i;:::-;29910:103;;;;;;;;30025:15;30042:23;30067:12;30083:63;30095:7;30104:4;30110:10;30122:11;30135:10;:8;:10::i;:::-;30083:11;:63::i;:::-;30024:122;;-1:-1:-1;30024:122:0;-1:-1:-1;30024:122:0;-1:-1:-1;30197:15:0;;-1:-1:-1;30214:4:0;;-1:-1:-1;30220:10:0;;-1:-1:-1;30232:11:0;-1:-1:-1;;;;29777:475:0;;;;;;;;;:::o;4245:136::-;4303:7;4330:43;4334:1;4337;4330:43;;;;;;;;;;;;;;;;;:3;:43::i;5135:471::-;5193:7;5438:6;5434:47;;-1:-1:-1;5468:1:0;5461:8;;5434:47;5505:5;;;5509:1;5505;:5;:1;5529:5;;;;;:10;5521:56;;;;-1:-1:-1;;;5521:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36174:989;21315:16;:23;;-1:-1:-1;;;;21315:23:0;-1:-1:-1;;;21315:23:0;;;;36325:27:::1;:20:::0;36350:1:::1;36325:24;:27::i;:::-;36310:42:::0;-1:-1:-1;36363:17:0::1;36383:30;:20:::0;36310:42;36383:24:::1;:30::i;:::-;36363:50:::0;-1:-1:-1;36716:21:0::1;36782:22;36799:4:::0;36782:16:::1;:22::i;:::-;36935:18;36956:41;:21;36982:14:::0;36956:25:::1;:41::i;:::-;36935:62;;37051:35;37064:9;37075:10;37051:12;:35::i;:::-;37112:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;21361:16:0;:24;;-1:-1:-1;;;;21361:24:0;;;-1:-1:-1;;;36174:989:0:o;39427:918::-;39540:7;39535:41;;39562:14;:12;:14::i;:::-;-1:-1:-1;;;;;39601:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;39625:22:0;;;;;;:11;:22;;;;;;;;39624:23;39601:46;39597:678;;;39719:48;39741:6;39749:9;39760:6;39719:21;:48::i;:::-;39597:678;;;-1:-1:-1;;;;;39790:19:0;;;;;;:11;:19;;;;;;;;39789:20;:46;;;;-1:-1:-1;;;;;;39813:22:0;;;;;;:11;:22;;;;;;;;39789:46;39785:490;;;39907:46;39927:6;39935:9;39946:6;39907:19;:46::i;39785:490::-;-1:-1:-1;;;;;39975:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;39998:22:0;;;;;;:11;:22;;;;;;;;39975:45;39971:304;;;40092:48;40114:6;40122:9;40133:6;40092:21;:48::i;39971:304::-;40173:44;40191:6;40199:9;40210:6;40173:17;:44::i;:::-;40300:7;40295:42;;40322:15;:13;:15::i;:::-;39427:918;;;;:::o;31484:561::-;31581:7;;31534;;;;19735:26;31534:7;31641:289;31665:9;:16;31661:20;;31641:289;;;31731:7;31707;:21;31715:9;31725:1;31715:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31715:12:0;31707:21;;;;;;;;;;;;;:31;;:66;;;31766:7;31742;:21;31750:9;31760:1;31750:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31750:12:0;31742:21;;;;;;;;;;;;;:31;31707:66;31703:97;;;31783:7;;19735:26;31775:25;;;;;;;;;31703:97;31825:34;31837:7;:21;31845:9;31855:1;31845:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31845:12:0;31837:21;;;;;;;;;;;;;31825:7;;:11;:34::i;:::-;31815:44;;31884:34;31896:7;:21;31904:9;31914:1;31904:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31904:12:0;31896:21;;;;;;;;;;;;;31884:7;;:11;:34::i;:::-;31874:44;-1:-1:-1;31683:3:0;;31641:289;;;-1:-1:-1;31954:7:0;;:20;;19735:26;31954:11;:20::i;:::-;31944:7;:30;31940:61;;;31984:7;;19735:26;31976:25;;;;;;;;31940:61;32020:7;;-1:-1:-1;32029:7:0;-1:-1:-1;31484:561:0;;;:::o;6710:278::-;6796:7;6831:12;6824:5;6816:28;;;;-1:-1:-1;;;6816:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6855:9;6871:1;6867;:5;;;;;;;6710:278;-1:-1:-1;;;;;6710:278:0:o;30260:458::-;30320:7;30329;30338;30347;30367:12;30382:40;30395:17;;30414:7;30382:12;:40::i;:::-;30367:55;;30433:18;30454:36;30467:13;;30482:7;30454:12;:36::i;:::-;30433:57;;30501:19;30523:34;30536:11;;30549:7;30523:12;:34::i;:::-;30501:56;-1:-1:-1;30568:23:0;30594:50;30501:56;30594:33;30616:10;30594:33;:7;30606:4;30594:11;:17::i;:::-;:21;;:33::i;:50::-;30568:76;30680:4;;-1:-1:-1;30686:10:0;;-1:-1:-1;30686:10:0;-1:-1:-1;30260:458:0;;-1:-1:-1;;;30260:458:0:o;30726:528::-;30862:7;;;;30918:24;:7;30930:11;30918;:24::i;:::-;30900:42;-1:-1:-1;30953:12:0;30968:21;:4;30977:11;30968:8;:21::i;:::-;30953:36;-1:-1:-1;31000:18:0;31021:27;:10;31036:11;31021:14;:27::i;:::-;31000:48;-1:-1:-1;31059:19:0;31081:28;:11;31097;31081:15;:28::i;:::-;31059:50;-1:-1:-1;31120:23:0;31146:50;31059;31146:33;31168:10;31146:33;:7;31158:4;31146:11;:17::i;:50::-;31215:7;;;;-1:-1:-1;31241:4:0;;-1:-1:-1;30726:528:0;;-1:-1:-1;;;;;;;;;30726:528:0:o;38145:605::-;38299:16;;;38313:1;38299:16;;;38275:21;38299:16;;;;;38275:21;38299:16;;;;;;;;;;-1:-1:-1;38299:16:0;38275:40;;38344:4;38326;38331:1;38326:7;;;;;;;;-1:-1:-1;;;;;38326:23:0;;;:7;;;;;;;;;;:23;;;;38370:19;;:26;;;-1:-1:-1;;;38370:26:0;;;;:19;;;;;:24;;:26;;;;;38326:7;;38370:26;;;;;:19;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38370:26:0;38360:7;;:4;;38365:1;;38360:7;;;;;;-1:-1:-1;;;;;38360:36:0;;;:7;;;;;;;;;:36;38441:19;;38409:66;;38426:4;;38441:19;38463:11;38409:8;:66::i;:::-;38514:19;;:228;;-1:-1:-1;;;38514:228:0;;;;;;;;:19;:228;;;;;;38696:4;38514:228;;;;;;38716:15;38514:228;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38514:19:0;;;;:70;;38599:11;;38669:4;;38696;38716:15;38514:228;;;;;;;;;;;;;;;;:19;:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38758:531;38938:19;;38906:66;;38923:4;;-1:-1:-1;;;;;38938:19:0;38960:11;38906:8;:66::i;:::-;39015:19;;-1:-1:-1;;;;;39015:19:0;:35;39058:9;39091:4;39111:11;39015:19;;39223:7;:5;:7::i;:::-;39245:15;39015:256;;;;;;;;;;;;;-1:-1:-1;;;;;39015:256:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39015:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33136:381;33183:17;;:22;:44;;;;-1:-1:-1;33209:13:0;;:18;33183:44;:64;;;;-1:-1:-1;33231:11:0;;:16;33183:64;33179:77;;;33249:7;;33179:77;33304:17;;;33276:25;:45;33356:13;;;33332:21;:37;33402:11;;;33380:19;:33;-1:-1:-1;33434:21:0;;;;33466:17;;;;33494:15;33136:381;:::o;41664:584::-;41767:15;41784:23;41809:12;41823:23;41848:12;41862:18;41882:19;41905;41916:7;41905:10;:19::i;:::-;41766:158;;;;;;;;;;;;;;41953:28;41973:7;41953;:15;41961:6;-1:-1:-1;;;;;41953:15:0;-1:-1:-1;;;;;41953:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;41935:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42010:7;:15;;;;:28;;42030:7;42010:19;:28::i;:::-;-1:-1:-1;;;;;41992:15:0;;;;;;;:7;:15;;;;;;:46;;;;42070:18;;;;;;;:39;;42093:15;42070:22;:39::i;:::-;-1:-1:-1;;;;;42049:18:0;;;;;;:7;:18;;;;;:60;42133:45;42142:10;42154:11;42167:4;42173;42133:8;:45::i;:::-;42213:9;-1:-1:-1;;;;;42196:44:0;42205:6;-1:-1:-1;;;;;42196:44:0;;42224:15;42196:44;;;;;;;;;;;;;;;;;;41664:584;;;;;;;;;;:::o;40992:604::-;41093:15;41110:23;41135:12;41149:23;41174:12;41188:18;41208:19;41231;41242:7;41231:10;:19::i;:::-;41092:158;;;;;;;;;;;;;;41279:28;41299:7;41279;:15;41287:6;-1:-1:-1;;;;;41279:15:0;-1:-1:-1;;;;;41279:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;41261:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;41339:18;;;;;:7;:18;;;;;:39;;41362:15;41339:22;:39::i;:::-;-1:-1:-1;;;;;41318:18:0;;;;;;:7;:18;;;;;;;;:60;;;;41410:7;:18;;;;:39;;41433:15;41410:22;:39::i;42316:668::-;42419:15;42436:23;42461:12;42475:23;42500:12;42514:18;42534:19;42557;42568:7;42557:10;:19::i;:::-;42418:158;;;;;;;;;;;;;;42605:28;42625:7;42605;:15;42613:6;-1:-1:-1;;;;;42605:15:0;-1:-1:-1;;;;;42605:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;42587:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42662:7;:15;;;;:28;;42682:7;42662:19;:28::i;40404:520::-;40503:15;40520:23;40545:12;40559:23;40584:12;40598:18;40618:19;40641;40652:7;40641:10;:19::i;:::-;40502:158;;;;;;;;;;;;;;40689:28;40709:7;40689;:15;40697:6;-1:-1:-1;;;;;40689:15:0;-1:-1:-1;;;;;40689:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;33550:189::-;33614:25;;33594:17;:45;33666:21;;33650:13;:37;33712:19;;33698:11;:33;33550:189::o;32962:138::-;33037:7;33064:28;33086:5;33064:17;:7;33076:4;33064:11;:17::i;43102:213::-;43208:26;43223:10;43208:14;:26::i;:::-;43245:28;43261:11;43245:15;:28::i;:::-;43284:23;43296:4;43302;43284:11;:23::i;32099:356::-;32162:19;32185:10;:8;:10::i;:::-;32162:33;-1:-1:-1;32206:18:0;32227:27;:10;32162:33;32227:14;:27::i;:::-;32306:4;32290:22;;;;:7;:22;;;;;;32206:48;;-1:-1:-1;32290:38:0;;32206:48;32290:26;:38::i;:::-;32281:4;32265:22;;;;:7;:22;;;;;;;;:63;;;;32343:11;:26;;;;;;32339:108;;;32425:4;32409:22;;;;:7;:22;;;;;;:38;;32436:10;32409:26;:38::i;:::-;32400:4;32384:22;;;;:7;:22;;;;;:63;32339:108;32099:356;;;:::o;32507:362::-;32572:19;32595:10;:8;:10::i;:::-;32572:33;-1:-1:-1;32616:19:0;32638:28;:11;32572:33;32638:15;:28::i;:::-;32616:50;;32708:35;32731:11;32708:7;:18;32716:9;:7;:9::i;:::-;-1:-1:-1;;;;;32708:18:0;;;;;;;;;;;;-1:-1:-1;32708:18:0;;;:22;:35::i;:::-;32687:7;:18;32695:9;:7;:9::i;:::-;-1:-1:-1;;;;;32687:18:0;-1:-1:-1;;;;;32687:18:0;;;;;;;;;;;;:56;;;;32768:11;:22;32780:9;:7;:9::i;:::-;-1:-1:-1;;;;;32768:22:0;;;;;;;;;;;;-1:-1:-1;32768:22:0;;;;32764:97;;;32826:35;32849:11;32826:7;:18;32834:9;:7;:9::i;32826:35::-;32805:7;:18;32813:9;:7;:9::i;:::-;-1:-1:-1;;;;;32805:18:0;;;;;;;;;;;;-1:-1:-1;32805:18:0;:56;32507:362;;;:::o;29545:147::-;29623:7;;:17;;29635:4;29623:11;:17::i;:::-;29613:7;:27;29664:10;;:20;;29679:4;29664:14;:20::i;:::-;29651:10;:33;-1:-1:-1;;29545:147:0:o

Swarm Source

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