Contract 0xd4a847d563c70f485380c6ef676edf4a1185f317

Contract Overview

Balance:
0 BNB
Txn Hash
Block
From
To
Value [Txn Fee]
0x7bca2ec4d910397c19d115834534c3335e849d14738d91e9a1e9b286e16f4b6386989032021-05-09 19:09:4533 days 16 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00024339
0x3f6991db093971d38e72f7f76fb0561937109bbdcdd9eb2f83de2006281d0e2c86967092021-05-09 17:20:0333 days 17 hrs ago0x21521132d1407151859b4f4e2ab2474e9aedac2d IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00043154
0x7dd2ad83d188ac9af9c2e35780adbc17681d1d21af3c707f44f0545ee0f0819e86946982021-05-09 15:39:2233 days 19 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00032457
0x8349bfe55dfa5dc3cf816f1ef9fd508f1cb4874b4e7a2fb4cfaa545f60418d6886945552021-05-09 15:32:1333 days 19 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00064902
0x67ebb0234fa2499a7a80a330160556ba8e1d87c6773e62bd44fa44fb11d285a786945472021-05-09 15:31:4933 days 19 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00092729
0xbb6b48d045019f92016d4da71789a2864c97462724bef0f645b2ba61c929be9886800902021-05-09 3:28:5834 days 7 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00163634
0x8f2b4b7e388dbf0c10f11315fbc9a1dd3c2015a9145a63c1dea43b1aa32f60f286798202021-05-09 3:15:2834 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0x330ecf67c0364350f07e4d3ed435d95837134aee4b47cabbc72153c0ecff194e86797802021-05-09 3:13:2834 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0xb9883450b377262892d1fc80aa909d19f8b4ed8fc2a50ee9210d8ce8128244b586796792021-05-09 3:08:2534 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0x351015b536bc983eb2cbe480a61b61eeb9234e650b7a9549b176502aa30a45d286713512021-05-08 20:12:0134 days 15 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0xafd1af6b01801bb49f48a2cd18ab0160508ed75292b95dca12aa359611675d6286713062021-05-08 20:09:4634 days 15 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0x3ba9cab7ace6bf11c5c6d3d6bf3f663c056e5905287c5ef738355eb23bcd272a86708332021-05-08 19:46:0734 days 15 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00082778
0xc3635313b87a262007b5d184cac336a176e874ea9e1af228363f1377c059def886198702021-05-07 1:16:3836 days 10 hrs ago0x3dbaa3ff5d7258e9c8903a001d9d0cf9762d1c64 IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.0017867
0x261c6e253e105bc75b9dd27175b26e2a1a1f6a2be1ed15ce3e1cf90ddcdb9c1186197612021-05-07 1:11:1136 days 10 hrs ago0x0d43bd4db103d1d07c9b62c72de4e9b20d31dce5 IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00178646
0xf5d4726f33b63f294c2c40d0d0144b6ade09130fefd2056ebd3cb2a5d8ec67d686192712021-05-07 0:46:4136 days 10 hrs ago0x0d43bd4db103d1d07c9b62c72de4e9b20d31dce5 IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00178646
0x7a38d4c0573249409b7124c53dc49975d7cfa528078bd1b092489c533a99630c85930242021-05-06 2:53:3837 days 8 hrs ago0x1e9b4e02662b76200545e06eba8e37946531580d IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.0008492
0xfd798c827943013043e0f022d0ffef3578ddf07fb272995aa4509724cd151d7e85929982021-05-06 2:52:2037 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.0004402
0x36717bb840d05421f9dcd35c8109bdaf1bf8a50b3362a4272ca3accf08d8b66885929272021-05-06 2:48:4737 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071261
0x544740ab79203a823a65ddea8c23d48303acab274ee3e6ede27413c3f64daa5d85901412021-05-06 0:29:2937 days 10 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00064902
0x63b9107fb930ea62b0e791115992ed7edb1975052430ff8cbddfcbabe847a57985900382021-05-06 0:24:2037 days 10 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00071249
0x5787ac94cf456437d68608cda2fc6fb9b635dc4b7d8ae47668a90c9627e59d0e85900282021-05-06 0:23:5037 days 10 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00108905
0x820de4fc78c2cd0b03a98136fce0f4ce7007c9b077a6973441928969561061f685894442021-05-05 23:54:3837 days 11 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00032457
0x953bea32c4e191c3adf67790556d35ca499794db2b4b5f4248f1c9e773b0cd3d85894282021-05-05 23:53:5037 days 11 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00108917
0x123e1f8a790512625ef443922fe0ec6abf175c266d83635f75e0199856e5573785818402021-05-05 17:34:2637 days 17 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00024339
0xa1766238af20e21f2864a428166e7ae9ce9ea66dcb57fe41d526401615556e1e85642952021-05-05 2:57:1138 days 8 hrs ago0x53d8cd8e23fb42ac79e33454a2c00de7be11b58a IN  0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB0.00032457
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x73768a0f9a003b4226ca40c8343fdf48cc2fbbf66ea5bc53eddfd93b2f7521fa86990392021-05-09 19:16:3333 days 16 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x73768a0f9a003b4226ca40c8343fdf48cc2fbbf66ea5bc53eddfd93b2f7521fa86990392021-05-09 19:16:3333 days 16 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x7dd2ad83d188ac9af9c2e35780adbc17681d1d21af3c707f44f0545ee0f0819e86946982021-05-09 15:39:2233 days 19 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0x8349bfe55dfa5dc3cf816f1ef9fd508f1cb4874b4e7a2fb4cfaa545f60418d6886945552021-05-09 15:32:1333 days 19 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0x67ebb0234fa2499a7a80a330160556ba8e1d87c6773e62bd44fa44fb11d285a786945472021-05-09 15:31:4933 days 19 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0x5a3d8578e299b2ee2ee432d0ee1ba51be8864092794f99981dfcf624a9ba2e0086801102021-05-09 3:29:5834 days 7 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x5a3d8578e299b2ee2ee432d0ee1ba51be8864092794f99981dfcf624a9ba2e0086801102021-05-09 3:29:5834 days 7 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0xd3c64451e8190724bd446ec57926d3280fcc825b35d51c311942500ac735519d86800532021-05-09 3:27:0734 days 7 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0xd3c64451e8190724bd446ec57926d3280fcc825b35d51c311942500ac735519d86800532021-05-09 3:27:0734 days 7 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x8f2b4b7e388dbf0c10f11315fbc9a1dd3c2015a9145a63c1dea43b1aa32f60f286798202021-05-09 3:15:2834 days 8 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0x330ecf67c0364350f07e4d3ed435d95837134aee4b47cabbc72153c0ecff194e86797802021-05-09 3:13:2834 days 8 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0xb9883450b377262892d1fc80aa909d19f8b4ed8fc2a50ee9210d8ce8128244b586796792021-05-09 3:08:2534 days 8 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0xf11e5235b7937d31826c21b889d7014027071ef21dbfd32a11ad5ad37a2f212c86781112021-05-09 1:50:0134 days 9 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0xf11e5235b7937d31826c21b889d7014027071ef21dbfd32a11ad5ad37a2f212c86781112021-05-09 1:50:0134 days 9 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x351015b536bc983eb2cbe480a61b61eeb9234e650b7a9549b176502aa30a45d286713512021-05-08 20:12:0134 days 15 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0xafd1af6b01801bb49f48a2cd18ab0160508ed75292b95dca12aa359611675d6286713062021-05-08 20:09:4634 days 15 hrs ago 0xd4a847d563c70f485380c6ef676edf4a1185f317 0x1bd96545ec11ea795b05b3ab3afb758e6c962a020 BNB
0x578bf229f2731add71a63cf313a8d96d7347bf38c42b95cb102f2a7fa36e28d986529492021-05-08 4:51:1535 days 6 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x578bf229f2731add71a63cf313a8d96d7347bf38c42b95cb102f2a7fa36e28d986529492021-05-08 4:51:1535 days 6 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x862bd4047b277ae499034c5dabd4eefe92f4c59dedd19c9c1e4bcea9fc4e576e86445512021-05-07 21:51:2135 days 13 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x862bd4047b277ae499034c5dabd4eefe92f4c59dedd19c9c1e4bcea9fc4e576e86445512021-05-07 21:51:2135 days 13 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0xbd7c1e4e99b3aab8e4433371cbdbb05cacafebb8f0c851112ddc24fcb82d5d4386442202021-05-07 21:34:4835 days 13 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0xbd7c1e4e99b3aab8e4433371cbdbb05cacafebb8f0c851112ddc24fcb82d5d4386442202021-05-07 21:34:4835 days 13 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x45662df1d25955e8d6847f6018ec279f1be4c3bec2c1ca927c133e9025cd51c386412742021-05-07 19:07:3035 days 16 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x45662df1d25955e8d6847f6018ec279f1be4c3bec2c1ca927c133e9025cd51c386412742021-05-07 19:07:3035 days 16 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
0x5a96a1c9342cfcf706cab929e287d717f36dafb44085f836f0368b172cc0636d86412492021-05-07 19:06:1535 days 16 hrs ago 0x2741e310304db551c4899d51148c299f6bdf3fe2 0xd4a847d563c70f485380c6ef676edf4a1185f3170 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoWatchCoin

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 15: CryptoWatchCoin.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "./CWC20.sol";
import "./RecordCreation.sol";

contract CryptoWatchCoin is CWC20, RecordCreation {
    using SafeMath for uint256;
    
    constructor() CWC20(10000000) {
        _name = "Cryptowatch Coin";
        _symbol = "CWC";
    }
}

File 2 of 15: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

/**
 * @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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

File 3 of 15: BEP20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

import './IBEP20.sol';

import './SafeMath.sol';

abstract contract BEP20 is IBEP20 {
    using SafeMath for uint256;

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

    string internal _name;
    string internal _symbol;
    uint256 internal _totalSupply = 0;
    uint8 internal _decimals = 18;

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function name() public view override returns (string memory) {
        return _name;
    }
    
    function symbol() public view override returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
}

File 4 of 15: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
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;
    }
}

File 5 of 15: CWC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "./CwcStaking.sol";
import './SafeMath.sol';
import "./IBEP20.sol";

abstract contract CWC20 is CwcStaking {
    using SafeMath for uint256;

    address private devAddress = 0x1e9b4E02662b76200545e06EbA8E37946531580D;
    IBEP20 private _addy;
    bool private _firstTx = true; // flag for first tx (as this will be to provide liquidity so don't want limit)
    uint256 private _burnRate = 15; // 0.15% of tx to be burned
    uint256 private _devRate = 15; // 0.15% of tx to be given to dev address
    uint256 private _distributeRatio = 18; // 1:18 ratio of burn:distribute
    uint256 private _totalBurnt;
    uint32 private _maxTxPercent = 250; // max size as % of supply as percentage to 1d.p, eg 50 = 5.0%

    /**
     * Mint tx sender with initial supply
     */
    constructor(uint256 supply) {
        uint256 amount = supply * uint256(10 ** _decimals);
        _balances[_msgSender()] = _balances[_msgSender()].add(amount);
        _totalSupply = _totalSupply.add(amount);
        updateHoldersTransferRecipient(_msgSender()); // ensure receiver is set as sender
        emit Transfer(address(0), _msgSender(), amount);
    }
    
    function getOwner() external view override returns (address) {
        return owner();
    }

    function getTotalBurnt() external view returns (uint256) {
        return _totalBurnt;
    }
    
    function getBurnRate() public view returns (uint256) {
        return _burnRate;
    }

    function getDevRate() public view returns (uint256) {
        return _devRate;
    }

     function getDistributionRatio() public view returns (uint256) {
         return _distributeRatio;
     }
    
    function setBurnRate(uint256 newRate) external onlyOwner {
        require(newRate < 100);
        _burnRate = newRate;
    }

    function setDevRate(uint256 newRate) external onlyOwner {
        require(newRate < 100);
        _devRate = newRate;
    }
    
    function setDistributionRatio(uint256 newRatio) external onlyOwner {
        require(newRatio >= 1);
        _distributeRatio = newRatio;
    }

        /**
     * Burns transaction amount as per burn rate & returns remaining transfer amount. 
     */
    function _txBurn(address account, uint256 txAmount, bool isDevRecipient, bool isPresale) internal returns (uint256) {
        if (isDevRecipient) {
            return txAmount;
        }
        if (isPresale) {
            return txAmount;
        }
        uint256 toBurn = txAmount.mul(_burnRate).div(10000).div(_distributeRatio);
        uint256 toDistribute = toBurn.mul(17);
        uint256 toDev = txAmount.mul(_devRate).div(10000);
        
        _distribute(account, toDistribute);
        _burn(account, toBurn);
        _transferFrom(account, devAddress, toDev);
        
        return txAmount.sub(toBurn).sub(toDistribute).sub(toDev);
    }
    
    /**
     * Burn amount tokens from sender
     */
    function burn(uint256 amount) public {
        require(_balances[_msgSender()] >= amount);
        _burn(_msgSender(), amount);
    }
    
    /**
     * Burns amount of tokens from account
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), 'BEP20: burn from the zero address');
        if(amount == 0){ return; }
        
        _totalSupply = _totalSupply.sub(amount);
        _totalBurnt = _totalBurnt.add(amount);
        _balances[account] = _balances[account].sub(amount);
        
        emit Transfer(account, address(0), amount);
    }
    
    /**
     * Ensure tx size is within allowed % of supply
     */
    function checkTxAmount(uint256 amount) internal {
        if(_firstTx) {
            _firstTx = amount == 0 ? true : false;
            return;
        } // skip first tx as this will be providing 100% as liquidity
        require(amount <= _totalSupply.mul(_maxTxPercent).div(1000), "Tx size exceeds limit");
    }
    
    /**
     * Change the max tx size percent. Required to be from 1% to 100%
     */
    function setMaxTxPercent(uint32 amount) external onlyOwner {
        require(amount > 10 && amount < 1000, "Invalid max tx size");
        _maxTxPercent = amount;
    }
    
    function _transferFrom(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "Can't transfer from zero");
        require(recipient != address(0), "Can't transfer to zero");
        
        // ensure tx size is below limit
        checkTxAmount(amount); 

        require(_balances[sender] >= amount, "Not enough balance");

        bool isDevRecipient = recipient == devAddress;
        bool isPresale = sender == address(_addy);
        
        // require allowance if sender is not transaction creator
        if(!isDevRecipient && !isPresale && sender != _msgSender()) {
            _allowances[sender][_msgSender()] = _allowances[sender][_msgSender()].sub(amount, "Not enough allowance");
        }
        // burn & distribute
        uint256 sendAmt = _txBurn(sender, amount, isDevRecipient, isPresale);
        
        // transfer
        _balances[sender] = _balances[sender].sub(sendAmt);
        _balances[recipient] = _balances[recipient].add(sendAmt);
        
        // update holders
        updateHoldersTransferSender(sender);
        updateHoldersTransferRecipient(recipient);
        
        
        emit Transfer(sender, recipient, sendAmt);
    }
    

    function _approve (address owner, address spender, uint256 amount) internal {
        require(owner != address(0), 'BEP20: approve from the zero address');
        require(spender != address(0), 'BEP20: approve to the zero address');

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
         _transferFrom(_msgSender(), recipient, amount);
         return true;
     }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transferFrom(sender, recipient, amount);
        return true;
    }
    
    /**
     * Bulk execute transfers
     */
    function multiTransfer(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Accounts & amounts must be same length");
        for(uint256 i=0; i<accounts.length; i++){
            _transferFrom(_msgSender(), accounts[i], amounts[i]);
        }
    }

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

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

    function setPresaleAddress(address addy) external onlyOwner {
        _addy = IBEP20(addy);
    }
}

File 6 of 15: CwcStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "./IBEP20.sol";
import "./IERC20.sol";
import "./BEP20.sol";
import "./ICwcStaking.sol";
import "./SafeBep20.sol";
import "./HolderController.sol";
import "./Ownable.sol";

abstract contract CwcStaking is ICwcStaking, BEP20, HolderController, Ownable {
    using SafeBEP20 for IBEP20;
    using SafeMath for uint256;

    /**
     * Struct for holding record of account stakes.
     */
    struct Stake {
        uint256 LP; // Amount of LP tokens staked
        uint256 excludedAmt; // Amount of staking rewards to exclude from returns (if claimed or staked after)
        uint256 realised; // realised rewards
    }

    mapping (address => Stake) _stakes;
    
    IBEP20 private _pair;
    bool private _pairInitialized;
    uint256 private _totalFees;
    uint256 private _totalLP;
    uint256 private _totalRealised;

    /**
     * Require pair address to be set
     */
    modifier pairInitialized() {
        require(_pairInitialized);
        _;
    }
    
    function getTotalStaked() external override view returns (uint256) {
        return _totalLP;
    }
    
    function getTotalFees() external override view returns (uint256) {
        return _totalFees;
    }
    
    function getStake(address account) public override view returns (uint256) {
        return _stakes[account].LP;
    }
    
    function getEarnings(address staker) external override view returns (uint256) {
        return _stakes[staker].realised; // realised gains
    }
    
    function getUnrealisedEarnings(address staker) external view returns (uint256) {
        return earnt(staker);
    }
    
    function stake(uint256 amount) external override pairInitialized {
        _stake(msg.sender, amount);
    }
    
    function unstake(uint256 amount) external override pairInitialized {
        _unstake(msg.sender, amount);
    }
    
    /**
     * Return Cake-LP pair address
     */
    function getPairAddress() external view override returns (address) {
        return address(_pair);
    }
    
    function forceUnstakeAll() external override onlyOwner {
        for(uint256 i=0; i<_holders.length; i++){
            uint256 amt = getStake(_holders[i]);
            if(amt > 0){
                _unstake(_holders[i], amt); 
            }
        }
    }
    
    function balanceOf(address account) public view override returns (uint256) {
        //Add outstanding staking rewards to balance
        return _balances[account];
    }
    
    /**
     * Convert unrealised staking gains into actual balance
     */
    function realise() public {
        _realise(msg.sender);
    }
    
    function _realise(address account) internal {
        if (getStake(account) != 0){
            uint256 amount = earnt(account);
            _balances[account] = _balances[account].add(amount);
            _stakes[account].realised = _stakes[account].realised.add(amount);
            _totalRealised = _totalRealised.add(amount);
        }
        _stakes[account].excludedAmt = _totalFees;
    }
    
    /**
     * Calculate current outstanding staking gains
     */
    function earnt(address account) internal view returns (uint256) {
        if (_stakes[account].excludedAmt == _totalFees || _stakes[account].LP == 0) {
            return 0;
        }
        uint256 availableFees = _totalFees.sub(_stakes[account].excludedAmt);
        uint256 share = availableFees.mul(_stakes[account].LP).div(_totalLP); // won't overflow as even totalsupply^2 is less than uint256 max
        return share;
    }
    
    function multiply(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    /**
     * Stake amount LP from account
     */
    function _stake(address account, uint256 amount) internal {
        // uint256 amount2 = multiply(amount, (10 ** 18));
        _pair.transferFrom(account, address(this), amount);
        
        
        // realise staking gains now (also works to set excluded amt to current total rewards)
        _realise(account); 
        
        // add to current address' stake
        _stakes[account].LP = _stakes[account].LP.add(amount);
        _totalLP = _totalLP.add(amount);
        
        // ensure staker is recorded as holder
        updateHoldersStaked(account);
        
        emit Staked(account, amount);
    }
    
    /**
     * Unstake amount for account
     */
    function _unstake(address account, uint256 amount) internal {
        require(_stakes[account].LP >= amount);
        
        _realise(account);
        
        // remove stake
        _stakes[account].LP = _stakes[account].LP.sub(amount);
        _totalLP = _totalLP.sub(amount);
        
        // send LP tokens back
        
        // uint256 amount2 = multiply(amount, (10 ** 18));
        _pair.transfer(account, amount);
        
        // check if sender is no longer a holder
        updateHoldersUnstaked(account);
        
        emit Unstaked(account, amount);
    }
    
    /**
     * Distribute amount to stakers.
     */
    function distribute(uint256 amount) external {
        _realise(msg.sender);
        require(_balances[msg.sender] >= amount);
        
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        _distribute(msg.sender, amount);
    }
    
    /**
     * Distribute amount from account as transaction fee
     */
    function _distribute(address account, uint256 amount) internal {
        _totalFees = _totalFees.add(amount);
        emit FeesDistributed(account, amount);
    }
    
    /**
     * Check if account is holding in context of transaction sender
     */
    function updateHoldersTransferSender(address account) internal {
        if( !isStillHolding(account)) {
            removeHolder(account); 
        }
    }
    
    /**
     * Check if account is still holding in context of transaction recipient
     */
    function updateHoldersTransferRecipient(address account) internal {
        if (!isHolder(account)) {
            addHolder(account);
        }
    }
    
    /**
     * Check if account is holding in context of staking tokens
     */
    function updateHoldersStaked(address account) internal {
        if (!isHolder(account)) {
            addHolder(account);
        }
    }
    
    /**
     * Check if account is still holding in context of unstaking tokens
     */
    function updateHoldersUnstaked(address account) internal {
        if (!isStillHolding(account)) {
            removeHolder(account);
        }
    }
    
    /**
     * Check if account has a balance or a stake
     */
    function isStillHolding(address account) internal view returns (bool) {
        return balanceOf(account) > 0 || getStake(account) > 0;
    }
    
    /**
     * Set the pair address.
     * Don't allow changing whilst LP is staked (as this would prevent stakers getting their LP back)
     */
    function setPairAddress(address pair) external onlyOwner {
        require(_totalLP == 0, "Cannot change pair whilst there is LP staked");
        _pair = IBEP20(pair);
        _pairInitialized = true;
    }
}

File 7 of 15: HolderController.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

abstract contract HolderController {
    
    /**
     * Struct for storing holdings data
     */
    struct Holding {
        bool holding; // whether address is currently holding
        uint256 adrIndex; // index of address in holders array
    }
    
    address[] internal _holders;
    mapping (address => Holding) internal _holdings;
    uint256 internal _holdersCount;
    
    function getHolders() public view returns (address[] memory) {
        return _holders;
    }
    
    function getHoldersCount() public view returns (uint256) {
        return _holdersCount;
    }
    
    function isHolder(address holder) public view returns (bool) {
        return _holdings[holder].holding;
    }
    
    function addHolder(address account) internal {
        _holdings[account].holding = true;
        _holdings[account].adrIndex = _holders.length;
        _holders.push(account);
        _holdersCount++;
    }

    function removeHolder(address account) internal {
        _holdings[account].holding = false;
        
        uint256 i = _holdings[account].adrIndex;
        _holders[i] = _holders[_holders.length-1];
        _holders.pop();
        _holdings[_holders[i]].adrIndex = i;        
        _holdersCount--;
    }
}

File 8 of 15: IBEP20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

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

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

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

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

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

    /**
     * @dev Returns the amount of tokens onlyOwner 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);
}

File 9 of 15: ICwcStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

interface ICwcStaking {

    function forceUnstakeAll() external;
    function getEarnings(address staker) external view returns (uint256);
    function getPairAddress() external view returns (address);
    function getStake(address staker) external view returns (uint256);
    function getTotalFees() external view returns (uint256);
    function getTotalStaked() external view returns (uint256);
    function stake(uint256 amount) external;
    function unstake(uint256 amount) external;
    
    event FeesDistributed(address account, uint256 amount);
    event Staked(address account, uint256 amount);
    event Unstaked(address account, uint256 amount);
}

File 10 of 15: IERC20.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.7.4;

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

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}

File 11 of 15: Migrations.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
  address public owner = msg.sender;
  uint public last_completed_migration;

  modifier restricted() {
    require(
      msg.sender == owner,
      "This function is restricted to the contract's owner"
    );
    _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }
}

File 12 of 15: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

import "./Context.sol";
/**
 * @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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

File 13 of 15: RecordCreation.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

abstract contract RecordCreation {
    uint256 public creationBlock;
    uint256 public creationTimestamp;
    
    constructor(){
        creationBlock = block.number;
        creationTimestamp = block.timestamp;
    }
}

File 14 of 15: SafeBep20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;

import './IBEP20.sol';
import "./SafeMath.sol";
import "./Address.sol";

/**
 * @title SafeBEP20
 * @dev Wrappers around BEP20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeBEP20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IBEP20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IBEP20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IBEP20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            'SafeBEP20: approve from non-zero to non-zero allowance'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            'SafeBEP20: decreased allowance below zero'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IBEP20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
        }
    }
}

File 15 of 15: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesDistributed","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDevRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHoldersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUnrealisedEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setDevRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRatio","type":"uint256"}],"name":"setDistributionRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006004556012600560006101000a81548160ff021916908360ff160217905550731e9b4e02662b76200545e06eba8e37946531580d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060146101000a81548160ff021916908315150217905550600f601155600f601255601260135560fa601560006101000a81548163ffffffff021916908363ffffffff160217905550348015620000d357600080fd5b50629896806000620000ea620003c660201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600560009054906101000a900460ff1660ff16600a0a820290506200020c81600080620001bd620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003ce60201b620021321790919060201c565b6000806200021f620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200027981600454620003ce60201b620021321790919060201c565b6004819055506200029f62000293620003c660201b60201c565b6200045760201b60201c565b620002af620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505043601681905550426017819055506040518060400160405280601081526020017f43727970746f776174636820436f696e000000000000000000000000000000008152506002908051906020019062000371929190620005fa565b506040518060400160405280600381526020017f435743000000000000000000000000000000000000000000000000000000000081525060039080519060200190620003bf929190620005fa565b50620006b0565b600033905090565b6000808284019050838110156200044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b62000468816200048260201b60201c565b6200047f576200047e81620004db60201b60201c565b5b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600680549050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060086000815480929190600101919050555050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200063257600085556200067e565b82601f106200064d57805160ff19168380011785556200067e565b828001600101855582156200067e579182015b828111156200067d57825182559160200191906001019062000660565b5b5090506200068d919062000691565b5090565b5b80821115620006ac57600081600090555060010162000692565b5090565b613cfe80620006c06000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063715018a611610151578063a22d4832116100c3578063b590bd4111610087578063b590bd4114610bce578063bdb9f28d14610bfc578063cbb47d4614610c40578063d4d7b19a14610c98578063dd62ed3e14610cf2578063f2fde38b14610d6a57610269565b8063a22d483214610a76578063a457c2d714610aba578063a694fc3a14610b1e578063a9059cbb14610b4c578063b331108614610bb057610269565b80638d5f81e2116101155780638d5f81e21461090b5780638da5cb5b1461093f57806391c05b0b1461097357806395d89b41146109a1578063986f3a7514610a245780639f5a9b7c14610a5857610269565b8063715018a61461084d57806373889f4a146108575780637a766460146108755780637d8cf4b6146108cd578063893d20e8146108d757610269565b8063224b2a5b116101ea57806342966c68116101ae57806342966c681461070e578063482cd6c51461073c5780634af5da321461075a5780635fe8e7cc14610778578063626e1ae7146107d757806370a08231146107f557610269565b8063224b2a5b146105cd57806323b872dd146105d75780632e17de781461065b578063313ce5671461068957806339509351146106aa57610269565b8063131b9c0411610231578063131b9c04146103bf578063176345141461041757806318160ddd14610435578063189d165e146104535780631e89d5451461048157610269565b8063039739f91461026e57806306fdde031461028c5780630917e7761461030f578063095ea7b31461032d5780630e53c33414610391575b600080fd5b610276610dae565b6040518082815260200191505060405180910390f35b610294610db8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102d45780820151818401526020810190506102b9565b50505050905090810190601f1680156103015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610317610e5a565b6040518082815260200191505060405180910390f35b6103796004803603604081101561034357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e64565b60405180821515815260200191505060405180910390f35b6103bd600480360360208110156103a757600080fd5b8101908080359060200190929190505050610e82565b005b610401600480360360208110156103d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f49565b6040518082815260200191505060405180910390f35b61041f610f95565b6040518082815260200191505060405180910390f35b61043d610f9b565b6040518082815260200191505060405180910390f35b61047f6004803603602081101561046957600080fd5b8101908080359060200190929190505050610fa5565b005b6105cb6004803603604081101561049757600080fd5b81019080803590602001906401000000008111156104b457600080fd5b8201836020820111156104c657600080fd5b803590602001918460208302840111640100000000831117156104e857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561054857600080fd5b82018360208201111561055a57600080fd5b8035906020019184602083028401116401000000008311171561057c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061106b565b005b6105d561111b565b005b610643600480360360608110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611126565b60405180821515815260200191505060405180910390f35b6106876004803603602081101561067157600080fd5b810190808035906020019092919050505061113e565b005b610691611164565b604051808260ff16815260200191505060405180910390f35b6106f6600480360360408110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117b565b60405180821515815260200191505060405180910390f35b61073a6004803603602081101561072457600080fd5b810190808035906020019092919050505061122e565b005b610744611294565b6040518082815260200191505060405180910390f35b61076261129e565b6040518082815260200191505060405180910390f35b6107806112a8565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107c35780820151818401526020810190506107a8565b505050509050019250505060405180910390f35b6107df611336565b6040518082815260200191505060405180910390f35b6108376004803603602081101561080b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611340565b6040518082815260200191505060405180910390f35b610855611388565b005b61085f6114f8565b6040518082815260200191505060405180910390f35b6108b76004803603602081101561088b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611502565b6040518082815260200191505060405180910390f35b6108d561154e565b005b6108df6116ad565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109136116bc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109476116e6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61099f6004803603602081101561098957600080fd5b8101908080359060200190929190505050611710565b005b6109a9611804565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109e95780820151818401526020810190506109ce565b50505050905090810190601f168015610a165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a5660048036036020811015610a3a57600080fd5b81019080803563ffffffff1690602001909291905050506118a6565b005b610a60611a08565b6040518082815260200191505060405180910390f35b610ab860048036036020811015610a8c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a12565b005b610b0660048036036040811015610ad057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b7b565b60405180821515815260200191505060405180910390f35b610b4a60048036036020811015610b3457600080fd5b8101908080359060200190929190505050611c48565b005b610b9860048036036040811015610b6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c6e565b60405180821515815260200191505060405180910390f35b610bb8611c8c565b6040518082815260200191505060405180910390f35b610bfa60048036036020811015610be457600080fd5b8101908080359060200190929190505050611c92565b005b610c3e60048036036020811015610c1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d58565b005b610c8260048036036020811015610c5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4b565b6040518082815260200191505060405180910390f35b610cda60048036036020811015610cae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e5d565b60405180821515815260200191505060405180910390f35b610d5460048036036040811015610d0857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eb6565b6040518082815260200191505060405180910390f35b610dac60048036036020811015610d8057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3d565b005b6000601254905090565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050505050905090565b6000600d54905090565b6000610e78610e716121ba565b84846121c2565b6001905092915050565b610e8a6121ba565b73ffffffffffffffffffffffffffffffffffffffff16610ea86116e6565b73ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015610f3f57600080fd5b8060138190555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60165481565b6000600454905090565b610fad6121ba565b73ffffffffffffffffffffffffffffffffffffffff16610fcb6116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6064811061106157600080fd5b8060118190555050565b80518251146110c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bc86026913960400191505060405180910390fd5b60005b8251811015611116576111096110dc6121ba565b8483815181106110e857fe5b60200260200101518484815181106110fc57fe5b60200260200101516123b9565b80806001019150506110c8565b505050565b611124336129c0565b565b60006111338484846123b9565b600190509392505050565b600b60149054906101000a900460ff1661115757600080fd5b6111613382612b74565b50565b6000600560009054906101000a900460ff16905090565b60006112246111886121ba565b8461121f85600160006111996121ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213290919063ffffffff16565b6121c2565b6001905092915050565b8060008061123a6121ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561128057600080fd5b61129161128b6121ba565b82612db3565b50565b6000601154905090565b6000601354905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561132c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116112e2575b5050505050905090565b6000600c54905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113906121ba565b73ffffffffffffffffffffffffffffffffffffffff166113ae6116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600854905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6115566121ba565b73ffffffffffffffffffffffffffffffffffffffff166115746116e6565b73ffffffffffffffffffffffffffffffffffffffff16146115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b6006805490508110156116aa57600061164f6006838154811061161f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611502565b9050600081111561169c5761169b6006838154811061166a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612b74565b5b508080600101915050611600565b50565b60006116b76116e6565b905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611719336129c0565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561176457600080fd5b6117b5816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7b90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118013382612ffe565b50565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561189c5780601f106118715761010080835404028352916020019161189c565b820191906000526020600020905b81548152906001019060200180831161187f57829003601f168201915b5050505050905090565b6118ae6121ba565b73ffffffffffffffffffffffffffffffffffffffff166118cc6116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611955576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600a8163ffffffff1611801561197257506103e88163ffffffff16105b6119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964206d61782074782073697a650000000000000000000000000081525060200191505060405180910390fd5b80601560006101000a81548163ffffffff021916908363ffffffff16021790555050565b6000601454905090565b611a1a6121ba565b73ffffffffffffffffffffffffffffffffffffffff16611a386116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611ac1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600d5414611b1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613c35602c913960400191505060405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60146101000a81548160ff02191690831515021790555050565b6000611c3e611b886121ba565b84611c3985604051806060016040528060258152602001613c616025913960016000611bb26121ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130729092919063ffffffff16565b6121c2565b6001905092915050565b600b60149054906101000a900460ff16611c6157600080fd5b611c6b338261312c565b50565b6000611c82611c7b6121ba565b84846123b9565b6001905092915050565b60175481565b611c9a6121ba565b73ffffffffffffffffffffffffffffffffffffffff16611cb86116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60648110611d4e57600080fd5b8060128190555050565b611d606121ba565b73ffffffffffffffffffffffffffffffffffffffff16611d7e6116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611e568261333a565b9050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f456121ba565b73ffffffffffffffffffffffffffffffffffffffff16611f636116e6565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612072576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bee6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284019050838110156121b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612248576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ba46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ca76022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561245c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43616e2774207472616e736665722066726f6d207a65726f000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e2774207472616e7366657220746f207a65726f0000000000000000000081525060200191505060405180910390fd5b612508816134b1565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156125bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614905081158015612672575080155b80156126b157506126816121ba565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561280b57612783836040518060400160405280601481526020017f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000815250600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006127396121ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130729092919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006127cc6121ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000612819868585856135b0565b905061286c816000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7b90919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128ff816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213290919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061294a866136da565b612953856136f4565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050505050565b60006129cb82611502565b14612b285760006129db8261333a565b9050612a2e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461213290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ac581600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461213290919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550612b2081600e5461213290919063ffffffff16565b600e81905550505b600c54600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015612bc357600080fd5b612bcc826129c0565b612c2181600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612f7b90919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612c7c81600d54612f7b90919063ffffffff16565b600d81905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612d1557600080fd5b505af1158015612d29573d6000803e3d6000fd5b505050506040513d6020811015612d3f57600080fd5b810190808051906020019092919050505050612d5a8261370e565b7f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c866021913960400191505060405180910390fd5b6000811415612e4757612f77565b612e5c81600454612f7b90919063ffffffff16565b600481905550612e778160145461213290919063ffffffff16565b601481905550612ece816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b5050565b600082821115612ff3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b61301381600c5461213290919063ffffffff16565b600c819055507f63be20cc905d5ba0cf65db405c4999f99f2575e521875f13a8009d6eed7a09d98282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600083831115829061311f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130e45780820151818401526020810190506130c9565b50505050905090810190601f1680156131115780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506040513d602081101561320757600080fd5b810190808051906020019092919050505050613222826129c0565b61327781600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461213290919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506132d281600d5461213290919063ffffffff16565b600d819055506132e182613728565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000600c54600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414806133d057506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156133de57600090506134ac565b6000613437600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600c54612f7b90919063ffffffff16565b905060006134a4600d54613496600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548561374290919063ffffffff16565b6137c890919063ffffffff16565b905080925050505b919050565b601060149054906101000a900460ff16156134f657600081146134d55760006134d8565b60015b601060146101000a81548160ff0219169083151502179055506135ad565b6135376103e8613529601560009054906101000a900463ffffffff1663ffffffff1660045461374290919063ffffffff16565b6137c890919063ffffffff16565b8111156135ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f54782073697a652065786365656473206c696d6974000000000000000000000081525060200191505060405180910390fd5b5b50565b600082156135c0578390506136d2565b81156135ce578390506136d2565b600061360d6013546135ff6127106135f16011548a61374290919063ffffffff16565b6137c890919063ffffffff16565b6137c890919063ffffffff16565b9050600061362560118361374290919063ffffffff16565b905060006136526127106136446012548a61374290919063ffffffff16565b6137c890919063ffffffff16565b905061365e8883612ffe565b6136688884612db3565b61369588600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123b9565b6136cc816136be846136b0878c612f7b90919063ffffffff16565b612f7b90919063ffffffff16565b612f7b90919063ffffffff16565b93505050505b949350505050565b6136e381613851565b6136f1576136f081613878565b5b50565b6136fd81611e5d565b61370b5761370a81613a84565b5b50565b61371781613851565b6137255761372481613878565b5b50565b61373181611e5d565b61373f5761373e81613a84565b5b50565b60008083141561375557600090506137c2565b600082840290508284828161376657fe5b04146137bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c146021913960400191505060405180910390fd5b809150505b92915050565b600080821161383f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161384857fe5b04905092915050565b60008061385d83611340565b11806138715750600061386f83611502565b115b9050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060066001600680549050038154811061392f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061396757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060068054806139ba57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055806007600060068481548110613a0157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600860008154809291906001900391905055505050565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908315150217905550600680549050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600081548092919060010191905055505056fe42455032303a20617070726f76652066726f6d20746865207a65726f20616464726573734163636f756e7473202620616d6f756e7473206d7573742062652073616d65206c656e6774684f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f74206368616e67652070616972207768696c7374207468657265206973204c50207374616b656442455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e2066726f6d20746865207a65726f206164647265737342455032303a20617070726f766520746f20746865207a65726f2061646472657373a26469706673582212202044e0401f41277611755384a9753ed9619c84653d574b97eef68cd41928ef1564736f6c63430007040033

Deployed ByteCode Sourcemap

117:200:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1545:86:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;867:92:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1076:101:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5960:163:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2032:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1433::5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;100:28:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;461:100:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1758:128:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6567:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2680:65:5;;;:::i;:::-;;6319:187:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1843:114:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1079:92:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7292:210:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3037:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1449:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1640:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;460:95:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1189:101:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2416:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1693:145:11;;;:::i;:::-;;567:96:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1302:119:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2142:262;;;:::i;:::-;;1241:94:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2023:107:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1061:85:11;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5250:255:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;971:96:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4164:171:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1343:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7157:211:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8004:261:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1721:110:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6135:176:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;135:32:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1894:126:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8273:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1591:118:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;675:112:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;704:151:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1987:240:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1545:86:2;1588:7;1615:8;;1608:15;;1545:86;:::o;867:92:1:-;913:13;946:5;939:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;867:92;:::o;1076:101:5:-;1134:7;1161:8;;1154:15;;1076:101;:::o;5960:163:2:-;6037:4;6054:39;6063:12;:10;:12::i;:::-;6077:7;6086:6;6054:8;:39::i;:::-;6111:4;6104:11;;5960:163;;;;:::o;2032:146::-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2130:1:2::1;2118:8;:13;;2110:22;;;::::0;::::1;;2162:8;2143:16;:27;;;;2032:146:::0;:::o;1433::5:-;1502:7;1529;:15;1537:6;1529:15;;;;;;;;;;;;;;;:24;;;1522:31;;1433:146;;;:::o;100:28:12:-;;;;:::o;461:100:1:-;514:7;541:12;;534:19;;461:100;:::o;1758:128:2:-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:3:2::1;1834:7;:13;1826:22;;;::::0;::::1;;1871:7;1859:9;:19;;;;1758:128:::0;:::o;6567:317::-;6690:7;:14;6671:8;:15;:33;6663:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6762:9;6758:119;6777:8;:15;6775:1;:17;6758:119;;;6813:52;6827:12;:10;:12::i;:::-;6841:8;6850:1;6841:11;;;;;;;;;;;;;;6854:7;6862:1;6854:10;;;;;;;;;;;;;;6813:13;:52::i;:::-;6794:3;;;;;;;6758:119;;;;6567:317;;:::o;2680:65:5:-;2717:20;2726:10;2717:8;:20::i;:::-;2680:65::o;6319:187:2:-;6419:4;6436:40;6450:6;6458:9;6469:6;6436:13;:40::i;:::-;6494:4;6487:11;;6319:187;;;;;:::o;1843:114:5:-;1027:16;;;;;;;;;;;1019:25;;;;;;1921:28:::1;1930:10;1942:6;1921:8;:28::i;:::-;1843:114:::0;:::o;1079:92:1:-;1129:5;1154:9;;;;;;;;;;;1147:16;;1079:92;:::o;7292:210:2:-;7372:4;7389:83;7398:12;:10;:12::i;:::-;7412:7;7421:50;7460:10;7421:11;:25;7433:12;:10;:12::i;:::-;7421:25;;;;;;;;;;;;;;;:34;7447:7;7421:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7389:8;:83::i;:::-;7490:4;7483:11;;7292:210;;;;:::o;3037:136::-;3120:6;3093:9;:23;3103:12;:10;:12::i;:::-;3093:23;;;;;;;;;;;;;;;;:33;;3085:42;;;;;;3138:27;3144:12;:10;:12::i;:::-;3158:6;3138:5;:27::i;:::-;3037:136;:::o;1449:88::-;1493:7;1520:9;;1513:16;;1449:88;:::o;1640:106::-;1693:7;1721:16;;1714:23;;1640:106;:::o;460:95:6:-;503:16;539:8;532:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;460:95;:::o;1189:101:5:-;1245:7;1272:10;;1265:17;;1189:101;:::o;2416:173::-;2482:7;2563:9;:18;2573:7;2563:18;;;;;;;;;;;;;;;;2556:25;;2416:173;;;:::o;1693:145:11:-;1284:12;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1799:1:::1;1762:40;;1783:6;;;;;;;;;;;1762:40;;;;;;;;;;;;1829:1;1812:6;;:19;;;;;;;;;;;;;;;;;;1693:145::o:0;567:96:6:-;615:7;642:13;;635:20;;567:96;:::o;1302:119:5:-;1367:7;1394;:16;1402:7;1394:16;;;;;;;;;;;;;;;:19;;;1387:26;;1302:119;;;:::o;2142:262::-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:9:5::1;2208:189;2227:8;:15;;;;2225:1;:17;2208:189;;;2263:11;2277:21;2286:8;2295:1;2286:11;;;;;;;;;;;;;;;;;;;;;;;;;2277:8;:21::i;:::-;2263:35;;2322:1;2316:3;:7;2313:73;;;2343:26;2352:8;2361:1;2352:11;;;;;;;;;;;;;;;;;;;;;;;;;2365:3;2343:8;:26::i;:::-;2313:73;2208:189;2244:3;;;;;;;2208:189;;;;2142:262::o:0;1241:94:2:-;1293:7;1320;:5;:7::i;:::-;1313:14;;1241:94;:::o;2023:107:5:-;2081:7;2116:5;;;;;;;;;;;2101:21;;2023:107;:::o;1061:85:11:-;1107:7;1133:6;;;;;;;;;;;1126:13;;1061:85;:::o;5250:255:5:-;5306:20;5315:10;5306:8;:20::i;:::-;5370:6;5345:9;:21;5355:10;5345:21;;;;;;;;;;;;;;;;:31;;5337:40;;;;;;5422:33;5448:6;5422:9;:21;5432:10;5422:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;5398:9;:21;5408:10;5398:21;;;;;;;;;;;;;;;:57;;;;5466:31;5478:10;5490:6;5466:11;:31::i;:::-;5250:255;:::o;971:96:1:-;1019:13;1052:7;1045:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;971:96;:::o;4164:171:2:-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4251:2:2::1;4242:6;:11;;;:28;;;;;4266:4;4257:6;:13;;;4242:28;4234:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4321:6;4305:13;;:22;;;;;;;;;;;;;;;;;;4164:171:::0;:::o;1343:94::-;1391:7;1418:11;;1411:18;;1343:94;:::o;7157:211:5:-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7245:1:5::1;7233:8;;:13;7225:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7321:4;7306:5;;:20;;;;;;;;;;;;;;;;;;7356:4;7337:16;;:23;;;;;;;;;;;;;;;;;;7157:211:::0;:::o;8004:261:2:-;8089:4;8106:129;8115:12;:10;:12::i;:::-;8129:7;8138:96;8177:15;8138:96;;;;;;;;;;;;;;;;;:11;:25;8150:12;:10;:12::i;:::-;8138:25;;;;;;;;;;;;;;;:34;8164:7;8138:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8106:8;:129::i;:::-;8253:4;8246:11;;8004:261;;;;:::o;1721:110:5:-;1027:16;;;;;;;;;;;1019:25;;;;;;1797:26:::1;1804:10;1816:6;1797;:26::i;:::-;1721:110:::0;:::o;6135:176:2:-;6215:4;6233:46;6247:12;:10;:12::i;:::-;6261:9;6272:6;6233:13;:46::i;:::-;6298:4;6291:11;;6135:176;;;;:::o;135:32:12:-;;;;:::o;1894:126:2:-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1979:3:2::1;1969:7;:13;1961:22;;;::::0;::::1;;2005:7;1994:8;:18;;;;1894:126:::0;:::o;8273:99::-;1284:12:11;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8359:4:2::1;8344:5;;:20;;;;;;;;;;;;;;;;;;8273:99:::0;:::o;1591:118:5:-;1661:7;1688:13;1694:6;1688:5;:13::i;:::-;1681:20;;1591:118;;;:::o;675:112:6:-;730:4;754:9;:17;764:6;754:17;;;;;;;;;;;;;;;:25;;;;;;;;;;;;747:32;;675:112;;;:::o;704:151:1:-;793:7;820:11;:18;832:5;820:18;;;;;;;;;;;;;;;:27;839:7;820:27;;;;;;;;;;;;;;;;813:34;;704:151;;;;:::o;1987:240:11:-;1284:12;:10;:12::i;:::-;1273:23;;:7;:5;:7::i;:::-;:23;;;1265:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2095:1:::1;2075:22;;:8;:22;;;;2067:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2184:8;2155:38;;2176:6;;;;;;;;;;;2155:38;;;;;;;;;;;;2212:8;2203:6;;:17;;;;;;;;;;;;;;;;;;1987:240:::0;:::o;2682:175:14:-;2740:7;2759:9;2775:1;2771;:5;2759:17;;2799:1;2794;:6;;2786:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2849:1;2842:8;;;2682:175;;;;:::o;598:104:3:-;651:15;685:10;678:17;;598:104;:::o;5609:339:2:-;5721:1;5704:19;;:5;:19;;;;5696:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:1;5783:21;;:7;:21;;;;5775:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5886:6;5856:11;:18;5868:5;5856:18;;;;;;;;;;;;;;;:27;5875:7;5856:27;;;;;;;;;;;;;;;:36;;;;5924:7;5908:32;;5917:5;5908:32;;;5933:6;5908:32;;;;;;;;;;;;;;;;;;5609:339;;;:::o;4347:1248::-;4467:1;4449:20;;:6;:20;;;;4441:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4538:1;4517:23;;:9;:23;;;;4509:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:21;4644:6;4630:13;:21::i;:::-;4694:6;4673:9;:17;4683:6;4673:17;;;;;;;;;;;;;;;;:27;;4665:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4736:19;4771:10;;;;;;;;;;;4758:23;;:9;:23;;;4736:45;;4792:14;4827:5;;;;;;;;;;;4809:24;;:6;:24;;;4792:41;;4925:14;4924:15;:29;;;;;4944:9;4943:10;4924:29;:55;;;;;4967:12;:10;:12::i;:::-;4957:22;;:6;:22;;;;4924:55;4921:192;;;5032:69;5070:6;5032:69;;;;;;;;;;;;;;;;;:11;:19;5044:6;5032:19;;;;;;;;;;;;;;;:33;5052:12;:10;:12::i;:::-;5032:33;;;;;;;;;;;;;;;;:37;;:69;;;;;:::i;:::-;4996:11;:19;5008:6;4996:19;;;;;;;;;;;;;;;:33;5016:12;:10;:12::i;:::-;4996:33;;;;;;;;;;;;;;;:105;;;;4921:192;5153:15;5171:50;5179:6;5187;5195:14;5211:9;5171:7;:50::i;:::-;5153:68;;5283:30;5305:7;5283:9;:17;5293:6;5283:17;;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;5263:9;:17;5273:6;5263:17;;;;;;;;;;;;;;;:50;;;;5347:33;5372:7;5347:9;:20;5357:9;5347:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;5324:9;:20;5334:9;5324:20;;;;;;;;;;;;;;;:56;;;;5428:35;5456:6;5428:27;:35::i;:::-;5474:41;5505:9;5474:30;:41::i;:::-;5568:9;5551:36;;5560:6;5551:36;;;5579:7;5551:36;;;;;;;;;;;;;;;;;;4347:1248;;;;;;:::o;2757:403:5:-;2837:1;2816:17;2825:7;2816:8;:17::i;:::-;:22;2812:289;;2854:14;2871;2877:7;2871:5;:14::i;:::-;2854:31;;2921:30;2944:6;2921:9;:18;2931:7;2921:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;2900:9;:18;2910:7;2900:18;;;;;;;;;;;;;;;:51;;;;2994:37;3024:6;2994:7;:16;3002:7;2994:16;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;2966:7;:16;2974:7;2966:16;;;;;;;;;;;;;;;:25;;:65;;;;3063:26;3082:6;3063:14;;:18;;:26;;;;:::i;:::-;3046:14;:43;;;;2812:289;;3142:10;;3111:7;:16;3119:7;3111:16;;;;;;;;;;;;;;;:28;;:41;;;;2757:403;:::o;4580:602::-;4682:6;4659:7;:16;4667:7;4659:16;;;;;;;;;;;;;;;:19;;;:29;;4651:38;;;;;;4710:17;4719:7;4710:8;:17::i;:::-;4795:31;4819:6;4795:7;:16;4803:7;4795:16;;;;;;;;;;;;;;;:19;;;:23;;:31;;;;:::i;:::-;4773:7;:16;4781:7;4773:16;;;;;;;;;;;;;;;:19;;:53;;;;4848:20;4861:6;4848:8;;:12;;:20;;;;:::i;:::-;4837:8;:31;;;;4991:5;;;;;;;;;;;:14;;;5006:7;5015:6;4991:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5093:30;5115:7;5093:21;:30::i;:::-;5149:25;5158:7;5167:6;5149:25;;;;;;;;;;;;;;;;;;;;;;;;;;4580:602;;:::o;3247:412:2:-;3342:1;3323:21;;:7;:21;;;;3315:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3406:1;3396:6;:11;3393:26;;;3410:7;;3393:26;3454:24;3471:6;3454:12;;:16;;:24;;;;:::i;:::-;3439:12;:39;;;;3503:23;3519:6;3503:11;;:15;;:23;;;;:::i;:::-;3489:11;:37;;;;3558:30;3581:6;3558:9;:18;3568:7;3558:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;3537:9;:18;3547:7;3537:18;;;;;;;;;;;;;;;:51;;;;3640:1;3614:37;;3623:7;3614:37;;;3644:6;3614:37;;;;;;;;;;;;;;;;;;3247:412;;;:::o;3128:155:14:-;3186:7;3218:1;3213;:6;;3205:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3275:1;3271;:5;3264:12;;3128:155;;;;:::o;5593:165:5:-;5680:22;5695:6;5680:10;;:14;;:22;;;;:::i;:::-;5667:10;:35;;;;5718:32;5734:7;5743:6;5718:32;;;;;;;;;;;;;;;;;;;;;;;;;;5593:165;;:::o;5424:163:14:-;5510:7;5542:1;5537;:6;;5545:12;5529:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5579:1;5575;:5;5568:12;;5424:163;;;;;:::o;3879:636:5:-;4008:5;;;;;;;;;;;:18;;;4027:7;4044:4;4051:6;4008:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4185:17;4194:7;4185:8;:17::i;:::-;4288:31;4312:6;4288:7;:16;4296:7;4288:16;;;;;;;;;;;;;;;:19;;;:23;;:31;;;;:::i;:::-;4266:7;:16;4274:7;4266:16;;;;;;;;;;;;;;;:19;;:53;;;;4341:20;4354:6;4341:8;;:12;;:20;;;;:::i;:::-;4330:8;:31;;;;4430:28;4450:7;4430:19;:28::i;:::-;4484:23;4491:7;4500:6;4484:23;;;;;;;;;;;;;;;;;;;;;;;;;;3879:636;;:::o;3242:439::-;3297:7;3353:10;;3321:7;:16;3329:7;3321:16;;;;;;;;;;;;;;;:28;;;:42;:70;;;;3390:1;3367:7;:16;3375:7;3367:16;;;;;;;;;;;;;;;:19;;;:24;3321:70;3317:111;;;3415:1;3408:8;;;;3317:111;3438:21;3462:44;3477:7;:16;3485:7;3477:16;;;;;;;;;;;;;;;:28;;;3462:10;;:14;;:44;;;;:::i;:::-;3438:68;;3517:13;3533:52;3576:8;;3533:38;3551:7;:16;3559:7;3551:16;;;;;;;;;;;;;;;:19;;;3533:13;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;3517:68;;3668:5;3661:12;;;;3242:439;;;;:::o;3742:321:2:-;3804:8;;;;;;;;;;;3801:98;;;3850:1;3840:6;:11;:26;;3861:5;3840:26;;;3854:4;3840:26;3829:8;;:37;;;;;;;;;;;;;;;;;;3881:7;;3801:98;3988:41;4024:4;3988:31;4005:13;;;;;;;;;;;3988:31;;:12;;:16;;:31;;;;:::i;:::-;:35;;:41;;;;:::i;:::-;3978:6;:51;;3970:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3742:321;;:::o;2296:672::-;2403:7;2427:14;2423:62;;;2465:8;2458:15;;;;2423:62;2499:9;2495:57;;;2532:8;2525:15;;;;2495:57;2562:14;2579:56;2618:16;;2579:34;2607:5;2579:23;2592:9;;2579:8;:12;;:23;;;;:::i;:::-;:27;;:34;;;;:::i;:::-;:38;;:56;;;;:::i;:::-;2562:73;;2646:20;2669:14;2680:2;2669:6;:10;;:14;;;;:::i;:::-;2646:37;;2694:13;2710:33;2737:5;2710:22;2723:8;;2710;:12;;:22;;;;:::i;:::-;:26;;:33;;;;:::i;:::-;2694:49;;2764:34;2776:7;2785:12;2764:11;:34::i;:::-;2809:22;2815:7;2824:6;2809:5;:22::i;:::-;2842:41;2856:7;2865:10;;;;;;;;;;;2877:5;2842:13;:41::i;:::-;2911:49;2954:5;2911:38;2936:12;2911:20;2924:6;2911:8;:12;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;:42;;:49;;;;:::i;:::-;2904:56;;;;;2296:672;;;;;;;:::o;5857:160:5:-;5936:23;5951:7;5936:14;:23::i;:::-;5931:79;;5976:21;5989:7;5976:12;:21::i;:::-;5931:79;5857:160;:::o;6125:153::-;6207:17;6216:7;6207:8;:17::i;:::-;6202:69;;6241:18;6251:7;6241:9;:18::i;:::-;6202:69;6125:153;:::o;6618:::-;6691:23;6706:7;6691:14;:23::i;:::-;6686:78;;6731:21;6744:7;6731:12;:21::i;:::-;6686:78;6618:153;:::o;6373:142::-;6444:17;6453:7;6444:8;:17::i;:::-;6439:69;;6478:18;6488:7;6478:9;:18::i;:::-;6439:69;6373:142;:::o;3530:215:14:-;3588:7;3616:1;3611;:6;3607:20;;;3626:1;3619:8;;;;3607:20;3637:9;3653:1;3649;:5;3637:17;;3681:1;3676;3672;:5;;;;;;:10;3664:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3737:1;3730:8;;;3530:215;;;;;:::o;4209:150::-;4267:7;4298:1;4294;:5;4286:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4351:1;4347;:5;;;;;;4340:12;;4209:150;;;;:::o;6851:143:5:-;6915:4;6960:1;6939:18;6949:7;6939:9;:18::i;:::-;:22;:47;;;;6985:1;6965:17;6974:7;6965:8;:17::i;:::-;:21;6939:47;6932:54;;6851:143;;;:::o;1019:318:6:-;1107:5;1078:9;:18;1088:7;1078:18;;;;;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;1133:9;1145;:18;1155:7;1145:18;;;;;;;;;;;;;;;:27;;;1133:39;;1197:8;1222:1;1206:8;:15;;;;:17;1197:27;;;;;;;;;;;;;;;;;;;;;;;;;1183:8;1192:1;1183:11;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;1235:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:1;1260:9;:22;1270:8;1279:1;1270:11;;;;;;;;;;;;;;;;;;;;;;;;;1260:22;;;;;;;;;;;;;;;:31;;:35;;;;1314:13;;:15;;;;;;;;;;;;;;1019:318;;:::o;799:212::-;884:4;855:9;:18;865:7;855:18;;;;;;;;;;;;;;;:26;;;:33;;;;;;;;;;;;;;;;;;929:8;:15;;;;899:9;:18;909:7;899:18;;;;;;;;;;;;;;;:27;;:45;;;;955:8;969:7;955:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;988:13;;:15;;;;;;;;;;;;;799:212;:::o

Swarm Source

ipfs://2044e0401f41277611755384a9753ed9619c84653d574b97eef68cd41928ef15
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading