Contract 0xf664264e835Bc27cBF71Da6a6633A6C7B99B9De1

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x7f310dc3c915110b9abb54bb74196776ce28d40580aeec31c906a123fa0d965e83872762021-06-17 22:31:0810 hrs 6 mins ago0xd9976e872f70285e5c3c1fc65ae5d194d13514d6 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x39711e8e63908da0df6bcdc02bd6ed97928403bff9d865a282cf012170aa6c2583447532021-06-16 10:49:121 day 21 hrs ago0xaed01c555a5a3e0bb395eb75bb23f442ab8329e1 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x47dac418ea123a9911014c6596defdc68a32e1a1aea6c81802e899ec661bfb7d83128152021-06-15 7:51:323 days 45 mins ago0x291f763d1062a1b29c75c422c864ad0859355e62 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xfa027aa074e3c4658bc09cdbf667ca067f3563ad899411ffb30df9ac52a99ce283024332021-06-14 23:06:463 days 9 hrs ago0xa23bcf74b0e3abaa3840a1a961cf84e6e9e410a9 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xb4924785d6cfc97ed8511048292fb9fef24aa614a6ab3e0f9209c61baf591b3a83006862021-06-14 21:36:183 days 11 hrs ago0xd460271daa00c1659bb310116a9ee6130811e7ed IN  Ascension Protocol: ASCEND Token0 BNB0.005161485
0x9b1c51a2af8227c75f8e93fedf7f9dc5bae1e07f60236d0a661be364ac3a1c6282756312021-06-14 0:28:024 days 8 hrs ago0x6d8ea1f6a5757fd45418da561b5f3e4a7e895716 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xa2f1355a07e08ef96a4768c3f514114164d4bd4fbea62668a6d35b96b865888182360452021-06-12 15:08:445 days 17 hrs ago0x23b886d9242adfda18203d4b0ce9e4c5499166b6 IN  Ascension Protocol: ASCEND Token0 BNB0.000072555
0xe3e527e3422b47e11949d7daba47904df3681a373a8bae1bdf81bc8fafc2dc3682173532021-06-11 23:31:516 days 9 hrs ago0xd460271daa00c1659bb310116a9ee6130811e7ed IN  Ascension Protocol: ASCEND Token0 BNB0.005162575
0x6caa92a6d32edc36df01bcda8e656a2d50dc77f24906a0cc3b931a1f617c528281754192021-06-10 12:25:437 days 20 hrs ago0x00e3f235f2ebb8467ff1c9974512b055873f9ae1 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xc786f70ab6e8c5ab49932d0260e8965376338a953b229f2f0e9bcd7cb9cfab0c81727192021-06-10 10:10:417 days 22 hrs ago0xd460271daa00c1659bb310116a9ee6130811e7ed IN  Ascension Protocol: ASCEND Token0 BNB0.00516203
0x59dcc713de14dac6192d78dd6e14ab91013fca13aebad5364a49c5a4f454abc881606042021-06-10 0:03:158 days 8 hrs ago0x23b886d9242adfda18203d4b0ce9e4c5499166b6 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x31e2df49e2ab48921798aee65730c27b6517cae0ed73acef127f377854c3a13181605492021-06-10 0:00:308 days 8 hrs ago0x23b886d9242adfda18203d4b0ce9e4c5499166b6 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x7ec459e1931fc6d781792961da40769de180791db75d7ecd5798d871a548cc9881585572021-06-09 22:20:538 days 10 hrs ago0xf5ee62a3ee119e3bf7e6e0aa9fe2163b6a465511 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x3795141ad495a25cb37f2ea1e1d11443788e6ef61c17f518e20b500c9e3d1d0f81542492021-06-09 18:43:568 days 13 hrs ago0x33a5ee1c096da55244668057b80a1faa40f1f107 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xa7d077dfe5338c32467e92c44e569b3af610e08b06aea03fd8c27e18e64ac07581260242021-06-08 19:07:579 days 13 hrs ago0x35f1c0bc07e4ea8ddc251f6be764936087adda6c IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x3b6bed5f8844ab9c39207fd64e7e9d890728e7eb0dea30a3070fede92f1ec06b81209312021-06-08 14:52:529 days 17 hrs ago0x8d3ad608fc2a0e93ace48c13a68e55552500f55d IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x93dc940a1741f9feadeca43873b4ab02c3e151525ac52e6da5f0c488cd895e3a81122132021-06-08 7:36:4110 days 1 hr ago0x528ff694744b40ea8de582c08cc3e2183c1ad9eb IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xbcc95f0f1eb475ce3a4d84bdf74d22e338c9e2b839b7a4427fd7ea266a28fb4d80765162021-06-07 1:48:4211 days 6 hrs ago0x7cd9605656b3564d83bf8dd62f792a4751e0c978 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x64051a63042a77b464af0b05012cb33e354edd082a5052948152188910fdaadd80589452021-06-06 11:09:0411 days 21 hrs ago0x23b886d9242adfda18203d4b0ce9e4c5499166b6 IN  Ascension Protocol: ASCEND Token0 BNB0.000072555
0xccae614c8bc7b5a28ae26d3f8dd2992c646c7e3a0c1be36d071765dfe2dafdf780585942021-06-06 10:51:0111 days 21 hrs ago0xef6c9ecf3616a250af9b9e72ec3e0fb3fbb71473 IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0xfca11d08d8e2cb9dcd04a7f3d3d593b5d3e90b026af6ed47cf7c70fd300abaec80504552021-06-06 4:03:2112 days 4 hrs ago0x852c86ddecd1e5d15ab1056bd7cd2eecaeea28ee IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x741dc899aef3efea15761d57eaa2177a569f80bd1f05e38e218c618f772674ff80427332021-06-05 21:36:1912 days 11 hrs ago0xf1f9ef83d836c82931096d1ba375559c21a83ca4 IN  Ascension Protocol: ASCEND Token0 BNB0.0019924
0xe42cc603fb96850c456732fc5629fcc6c30a9b57a4d438dd4d985792d870684980305132021-06-05 11:24:4012 days 21 hrs ago0xaf4a1fee4599a76cda1c2b2055eba39235708950 IN  Ascension Protocol: ASCEND Token0 BNB0.00125
0x8c027d7e4654ac401321a7a406ea31a0fe6d36d0534b0061c95c9d94ad8e608179999682021-06-04 9:54:2913 days 22 hrs ago0xfe721c8d46d96b99eade530d1e4c22068a31806a IN  Ascension Protocol: ASCEND Token0 BNB0.000222025
0x7341b64a150ebeac54bec19d1e9704f0474519b63cb94de621ebf65b5aeb1e6a79856822021-06-03 21:56:3014 days 10 hrs ago0xd460271daa00c1659bb310116a9ee6130811e7ed IN  Ascension Protocol: ASCEND Token0 BNB0.005161485
[ Download CSV Export 

OVERVIEW

Ascension Protocol is aims to be a fully decentralized ecosystems that offers risk-reduced opportunities to generate income for it's DAO members.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb4924785d6cfc97ed8511048292fb9fef24aa614a6ab3e0f9209c61baf591b3a83006862021-06-14 21:36:183 days 11 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.023620684775174361 BNB
0xb4924785d6cfc97ed8511048292fb9fef24aa614a6ab3e0f9209c61baf591b3a83006862021-06-14 21:36:183 days 11 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.023620684775174361 BNB
0xe3e527e3422b47e11949d7daba47904df3681a373a8bae1bdf81bc8fafc2dc3682173532021-06-11 23:31:516 days 9 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.029889462899837525 BNB
0xe3e527e3422b47e11949d7daba47904df3681a373a8bae1bdf81bc8fafc2dc3682173532021-06-11 23:31:516 days 9 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.029889462899837525 BNB
0xc786f70ab6e8c5ab49932d0260e8965376338a953b229f2f0e9bcd7cb9cfab0c81727192021-06-10 10:10:417 days 22 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.026961278507867974 BNB
0xc786f70ab6e8c5ab49932d0260e8965376338a953b229f2f0e9bcd7cb9cfab0c81727192021-06-10 10:10:417 days 22 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.026961278507867974 BNB
0x7341b64a150ebeac54bec19d1e9704f0474519b63cb94de621ebf65b5aeb1e6a79856822021-06-03 21:56:3014 days 10 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.03689724316142917 BNB
0x7341b64a150ebeac54bec19d1e9704f0474519b63cb94de621ebf65b5aeb1e6a79856822021-06-03 21:56:3014 days 10 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.03689724316142917 BNB
0xc03e9f88e5c25c4de67c0fb335c9b519cdd5eb7835c0410e98d85495524c8f0479446552021-06-02 11:37:5715 days 20 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.063611977413669817 BNB
0xc03e9f88e5c25c4de67c0fb335c9b519cdd5eb7835c0410e98d85495524c8f0479446552021-06-02 11:37:5715 days 20 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.063611977413669817 BNB
0xa88de11943ef816d2962904ee2c8093a42a0ac50b3ef1869278021344537e37979389152021-06-02 6:49:4716 days 1 hr ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.063046584589992997 BNB
0xa88de11943ef816d2962904ee2c8093a42a0ac50b3ef1869278021344537e37979389152021-06-02 6:49:4716 days 1 hr ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.063046584589992997 BNB
0x7e0fea83f986bfd8ac32956795c6c33bb500faf328c792b7e1221f980c1a85e779382542021-06-02 6:16:4416 days 2 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.039677145462118772 BNB
0x7e0fea83f986bfd8ac32956795c6c33bb500faf328c792b7e1221f980c1a85e779382542021-06-02 6:16:4416 days 2 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.039677145462118772 BNB
0xd65019082c23683ff3b65928d0796a6777cec97ffe84bb9a16825197813475bf79378632021-06-02 5:57:0216 days 2 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.074610121750306411 BNB
0xd65019082c23683ff3b65928d0796a6777cec97ffe84bb9a16825197813475bf79378632021-06-02 5:57:0216 days 2 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.074610121750306411 BNB
0xe4761a43ac8d1e65fdfffccd5f70da0c06c2e79e37d7d766eec4ad262713e7ce77562112021-05-26 21:59:3222 days 10 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.057944741703500895 BNB
0xe4761a43ac8d1e65fdfffccd5f70da0c06c2e79e37d7d766eec4ad262713e7ce77562112021-05-26 21:59:3222 days 10 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.057944741703500895 BNB
0x7cc5a00e28ed6cbedcfa50eaf186128c4a598e49584dfb27bbb7686752f21f9276296872021-05-22 11:59:0826 days 20 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.025784804507635173 BNB
0x7cc5a00e28ed6cbedcfa50eaf186128c4a598e49584dfb27bbb7686752f21f9276296872021-05-22 11:59:0826 days 20 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.025784804507635173 BNB
0x4ef2e0197c3e5e8a9af89e7599199bff019495a717f4a5b07ce95740598b3b5575694932021-05-20 9:34:5428 days 23 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.029362260454628058 BNB
0x4ef2e0197c3e5e8a9af89e7599199bff019495a717f4a5b07ce95740598b3b5575694932021-05-20 9:34:5428 days 23 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.029362260454628058 BNB
0x5ffd0c0627e620882b45f6919c566820e8f6c2799b69999fe06232d8d85dcdf275550532021-05-19 21:27:3329 days 11 hrs ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.033156791543502019 BNB
0x5ffd0c0627e620882b45f6919c566820e8f6c2799b69999fe06232d8d85dcdf275550532021-05-19 21:27:3329 days 11 hrs ago PancakeSwap: Router Ascension Protocol: ASCEND Token0.033156791543502019 BNB
0x9fbf3fcd73b04e0adfd9f2067030a4ddb60accd5fbbb139a8bf48d8631a093b675391982021-05-19 8:11:0730 days 26 mins ago Ascension Protocol: ASCEND Token PancakeSwap: Router0.028521713646305589 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ASCENSIONV2

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
//ASCENSION PROTOCOL V2
//ascensionprotocol.io

pragma solidity =0.6.8;

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, 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;
  }
}

interface IUniswapV2Router01 {
  function factory() external pure returns (address);

  function WETH() external pure returns (address);

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

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

  function removeLiquidity(
    address tokenA,
    address tokenB,
    uint256 liquidity,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountA, uint256 amountB);

  function removeLiquidityETH(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountToken, uint256 amountETH);

  function removeLiquidityWithPermit(
    address tokenA,
    address tokenB,
    uint256 liquidity,
    uint256 amountAMin,
    uint256 amountBMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountA, uint256 amountB);

  function removeLiquidityETHWithPermit(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountToken, uint256 amountETH);

  function swapExactTokensForTokens(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapTokensForExactTokens(
    uint256 amountOut,
    uint256 amountInMax,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapExactETHForTokens(
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external payable returns (uint256[] memory amounts);

  function swapTokensForExactETH(
    uint256 amountOut,
    uint256 amountInMax,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapExactTokensForETH(
    uint256 amountIn,
    uint256 amountOutMin,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external returns (uint256[] memory amounts);

  function swapETHForExactTokens(
    uint256 amountOut,
    address[] calldata path,
    address to,
    uint256 deadline
  ) external payable returns (uint256[] memory amounts);

  function quote(
    uint256 amountA,
    uint256 reserveA,
    uint256 reserveB
  ) external pure returns (uint256 amountB);

  function getAmountOut(
    uint256 amountIn,
    uint256 reserveIn,
    uint256 reserveOut
  ) external pure returns (uint256 amountOut);

  function getAmountIn(
    uint256 amountOut,
    uint256 reserveIn,
    uint256 reserveOut
  ) external pure returns (uint256 amountIn);

  function getAmountsOut(uint256 amountIn, address[] calldata path)
    external
    view
    returns (uint256[] memory amounts);

  function getAmountsIn(uint256 amountOut, address[] calldata path)
    external
    view
    returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
  function removeLiquidityETHSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountETH);

  function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountETH);

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

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

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

interface IUniswapV2Factory {
  event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

  function feeTo() external view returns (address);

  function feeToSetter() external view returns (address);

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

  function allPairs(uint256) external view returns (address pair);

  function allPairsLength() external view returns (uint256);

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

  function setFeeTo(address) external;

  function setFeeToSetter(address) external;
}

interface IAscensionStrategy {
  function validateProposal(address[] calldata targets, uint256[] calldata values)
    external
    returns (bool);

  function executeStrategy(address[] calldata targets, uint256[] calldata values)
    external
    returns (bool);
}

interface IAscension {
  function checkExcluded(address account) external view returns (bool);

  function totalFees() external view returns (uint256);

  function getNumCheckpoints(address account) external view returns (uint256);

  function getPriorValue(address account, uint256 blockNumber) external view returns (uint256);

  function getLevel(address account) external view returns (uint256);

  function distributeShares(uint256 tAmount) external;

  function bulkTransfer(address[] calldata _to, uint256[] calldata _values) external returns (bool);

  function ascensionEvent(
    address payable strategy,
    address[] calldata targets,
    uint256[] calldata values
  ) external;

  function lockLiquidity() external;
}

//------------------------------------------------------------------------------------------------------------------------------

contract ASCENSIONV2 is Context, IERC20, IAscension {
  using SafeMath for uint256;
  using Address for address;

  address public owner; //contract admin, will be transferred to GOVERNANCE

  struct Checkpoint {
    uint256 fromBlock;
    uint256 value;
  }
  //checkpoints tracks previous balances updated on every transaction
  mapping(address => mapping(uint256 => Checkpoint)) private checkpoints;
  //numCheckpoints tracks the number of checkpoints for each account
  mapping(address => uint256) private numCheckpoints;
  //_shares tracks the total shares of each user, multiplied by rate to calculate token balance
  mapping(address => uint256) private _shares;
  //_tokens tracks balance directly for excluded accounts
  mapping(address => uint256) private _tokens;
  mapping(address => mapping(address => uint256)) private _allowances;

  //excluded addresses dont accumulate or pay fees
  mapping(address => bool) private isExcluded;
  address[] private _excluded;

  //token state variables
  uint256 private constant MAX = ~uint256(0);
  uint256 private constant TOTAL_TOKENS = 14400000e9;
  uint256 private totalShares;
  uint256 private tFeeTotal;
  address public burn;

  //treasury state variables
  address public uniswapV2Router;
  address public pairAddress;
  address public daoAddress;
  uint256 public totalAscensions; //total number of ascension events
  uint256 public previousAscensionEth; //value of previous ascension event liquidity pull
  uint256 public previousAscensionTimestamp; //timestamp of previous ascension event liquidity pull
  uint256 public ascensionInterval; //the amount of time that must pass before another ascension event can be called
  uint256 public ascensionDivisor; //the divisor used to calculate the price increase required for ascension
  uint256 public pullDivisor; //the divisor used to calculate the amount of liquidity called for ascension
  uint256 public lockDivisor; //the divisor used to calculate the amount of transfer fees sent to contract for lock
  uint256 public rewardFee; //The amount of tokens a user gets from a rewardable function rewardFee/100;
  uint256 public minLockAmount; //The minimum token balance required in this contract to call lock liquidity function
  bool public ascensionActive; //bool controls calling ascensionEvents

  //ERC-20 standard state variables
  string private _name;
  string private _symbol;
  uint8 private _decimals;

  //MODIFIERS----------------------------------------------------------------------------------------
  modifier onlyOwner() {
    require(
      _msgSender() == owner,
      "ASCENSION:onlyOwner:This function can only be called by the contract owner"
    );
    _;
  }

  //EVENTS-------------------------------------------------------------------------------------------
  event AccountCheckpointUpdated(address account, uint256 newValue);
  event AscensionEvent(address strategy, uint256 amountETH, address[] targets, uint256[] values);
  event AscensionIntervalSet(uint256 interval, uint256 timestamp);
  event AscensionActive(bool active);
  event DaoAddressSet(address dao, uint256 timestamp);
  event RouterSet(address router, uint256 timestamp);
  event LiquidityLocked(
    address caller,
    uint256 ethAmount,
    uint256 tokenAmount,
    uint256 rewardAmount,
    uint256 liquidity
  );

  //CONSTRUCTOR--------------------------------------------------------------------------------------
  constructor(address _uniswapV2Router, address _owner) public {
    require(_uniswapV2Router != address(0) && _owner != address(0));

    //set router
    uniswapV2Router = _uniswapV2Router;

    //set owner
    owner = _owner;

    //set pair token
    pairAddress = IUniswapV2Factory(IUniswapV2Router02(uniswapV2Router).factory()).createPair(
      address(this),
      IUniswapV2Router02(uniswapV2Router).WETH()
    );

    //default values
    _name = "ASCENSION PROTOCOL V2";
    _symbol = "ASCEND";
    _decimals = 9;
    totalShares = (MAX - (MAX % TOTAL_TOKENS));
    burn = 0x3333333333333333333333333333333333333333;
    ascensionDivisor = 10;
    ascensionInterval = 3600; //1 hour
    pullDivisor = 50;
    lockDivisor = 2;
    rewardFee = 5;
    minLockAmount = 1000e9;

    //mint to owner
    _shares[_owner] = totalShares;
    _writeCheckpoint(_owner, TOTAL_TOKENS);
    emit Transfer(address(0), _owner, TOTAL_TOKENS);
  }

  //RECEIVE ETH FOR LIQUIDITY-------------------------------------------------------------------------
  receive() external payable {}

  //OWNABLE FUNCTIONS-----------------------------------------------------------------------------------
  function transferOwnership(address _newOwner) external onlyOwner() {
    require(_newOwner != address(0));
    owner = _newOwner;
  }

  //ERC20 BASIC FUNCTIONS-----------------------------------------------------------------------------
  function name() external view returns (string memory) {
    return _name;
  }

  function symbol() external view returns (string memory) {
    return _symbol;
  }

  function decimals() external view returns (uint8) {
    return _decimals;
  }

  function totalSupply() external view override returns (uint256) {
    return TOTAL_TOKENS;
  }

  function balanceOf(address account) public view override returns (uint256) {
    if (isExcluded[account]) return _tokens[account];
    return tokenFromShares(_shares[account]);
  }

  function transfer(address recipient, uint256 amount) external override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address account, address spender) external view override returns (uint256) {
    return _allowances[account][spender];
  }

  function approve(address spender, uint256 amount) external override returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(
      sender,
      _msgSender(),
      _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
    );
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    virtual
    returns (bool)
  {
    _approve(
      _msgSender(),
      spender,
      _allowances[_msgSender()][spender].sub(
        subtractedValue,
        "ERC20: decreased allowance below zero"
      )
    );
    return true;
  }

  //ASCENSION EXTERNAL FUNCTIONS---------------------------------------------------
  function checkExcluded(address account) external view override returns (bool) {
    return isExcluded[account];
  }

  function totalFees() external view override returns (uint256) {
    return tFeeTotal;
  }

  function getNumCheckpoints(address account) external view override returns (uint256) {
    return numCheckpoints[account];
  }

  function getPriorValue(address account, uint256 blockNumber)
    external
    view
    override
    returns (uint256)
  {
    require(blockNumber < block.number, "ASCENSION:getPriorValue: not yet determined");

    uint256 nCheckpoints = numCheckpoints[account];
    if (nCheckpoints == 0) {
      return 0;
    }

    // First check most recent balance
    if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
      return checkpoints[account][nCheckpoints - 1].value;
    }

    // Next check implicit zero balance
    if (checkpoints[account][0].fromBlock > blockNumber) {
      return 0;
    }

    uint256 lower = 0;
    uint256 upper = nCheckpoints - 1;
    while (upper > lower) {
      uint256 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
      Checkpoint memory cp = checkpoints[account][center];
      if (cp.fromBlock == blockNumber) {
        return cp.value;
      } else if (cp.fromBlock < blockNumber) {
        lower = center;
      } else {
        upper = center - 1;
      }
    }
    return checkpoints[account][lower].value;
  }

  function getLevel(address account) external view override returns (uint256) {
    if (balanceOf(account) >= 1000000e9) {
      return 9;
    } else if (balanceOf(account) >= 500000e9) {
      return 8;
    } else if (balanceOf(account) >= 320000e9) {
      return 7;
    } else if (balanceOf(account) >= 160000e9) {
      return 6;
    } else if (balanceOf(account) >= 80000e9) {
      return 5;
    } else if (balanceOf(account) >= 40000e9) {
      return 4;
    } else if (balanceOf(account) >= 20000e9) {
      return 3;
    } else if (balanceOf(account) >= 10000e9) {
      return 2;
    } else if (balanceOf(account) >= 1000e9) {
      return 1;
    } else {
      return 0;
    }
  }

  function distributeShares(uint256 tAmount) external override {
    address sender = _msgSender();
    require(
      !isExcluded[sender],
      "ASCENSION:distributeShares: Excluded addresses cannot call this function"
    );
    (uint256 sAmount, , , , ) = _getValues(sender, tAmount);
    //subtract shares from sender
    _shares[sender] = _shares[sender].sub(sAmount);
    //update checkpoint
    _writeCheckpoint(sender, tokenFromShares(_shares[sender]));
    //subtract shares from total to distribute
    totalShares = totalShares.sub(sAmount);
    //add tAmount to total fees tFeeTotal
    tFeeTotal = tFeeTotal.add(tAmount);
  }

  function includeAccount(address account) external onlyOwner() {
    require(isExcluded[account], "ASCENSION:includeAccount: Account is already included");
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_excluded[i] == account) {
        _excluded[i] = _excluded[_excluded.length - 1];
        _tokens[account] = 0;
        isExcluded[account] = false;
        _excluded.pop();
        break;
      }
    }
  }

  function excludeAccount(address account) external onlyOwner() {
    require(!isExcluded[account], "ASCENSION:excludeAccount: Account is already excluded");
    if (_shares[account] > 0) {
      _tokens[account] = tokenFromShares(_shares[account]);
    }
    isExcluded[account] = true;
    _excluded.push(account);
  }

  function bulkTransfer(address[] calldata _to, uint256[] calldata _values)
    external
    override
    returns (bool)
  {
    require(_to.length == _values.length);
    for (uint256 i = 0; i < _to.length; i++) {
      _transfer(msg.sender, _to[i], _values[i]);
    }
    return true;
  }

  //ASCENSION INTERNAL FUNCTIONS---------------------------------------------------
  function sharesFromToken(uint256 tAmount, bool deductTransferFee)
    internal
    view
    returns (uint256)
  {
    require(tAmount <= TOTAL_TOKENS, "ASCENSION:sharesFromToken: Amount must be less than supply");
    address sender = _msgSender();
    if (!deductTransferFee) {
      (uint256 sAmount, , , , ) = _getValues(sender, tAmount);
      return sAmount;
    } else {
      (, uint256 sTransferAmount, , , ) = _getValues(sender, tAmount);
      return sTransferAmount;
    }
  }

  function tokenFromShares(uint256 sAmount) internal view returns (uint256) {
    require(
      sAmount <= totalShares,
      "ASCENSION:tokenFromShares: Amount must be less than total shares"
    );
    uint256 currentRate = _getRate();
    return sAmount.div(currentRate);
  }

  function _approve(
    address account,
    address spender,
    uint256 amount
  ) private {
    require(account != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

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

  function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) private {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    require(amount > 0, "Transfer amount must be greater than zero");

    if (isExcluded[sender] && !isExcluded[recipient]) {
      _transferFromExcluded(sender, recipient, amount);
    } else if (!isExcluded[sender] && isExcluded[recipient]) {
      _transferToExcluded(sender, recipient, amount);
    } else if (!isExcluded[sender] && !isExcluded[recipient]) {
      _transferStandard(sender, recipient, amount);
    } else if (isExcluded[sender] && isExcluded[recipient]) {
      _transferBothExcluded(sender, recipient, amount);
    } else {
      _transferStandard(sender, recipient, amount);
    }
  }

  function _transferStandard(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    (
      uint256 sAmount,
      uint256 sTransferAmount,
      uint256 sFee,
      uint256 tTransferAmount,
      uint256 tFee
    ) = _getValues(sender, tAmount);
    //update shares balances
    _shares[sender] = _shares[sender].sub(sAmount);
    _shares[recipient] = _shares[recipient].add(sTransferAmount);
    //update checkpoints
    _writeCheckpoint(sender, tokenFromShares(_shares[sender]));
    _writeCheckpoint(recipient, tokenFromShares(_shares[recipient]));
    //distribute fee to all users
    _distributeFee(sFee, tFee);
    emit Transfer(sender, recipient, tTransferAmount);
  }

  function _transferToExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    (
      uint256 sAmount,
      uint256 sTransferAmount,
      uint256 sFee,
      uint256 tTransferAmount,
      uint256 tFee
    ) = _getValues(sender, tAmount);
    //update token balance for excluded account
    _tokens[recipient] = _tokens[recipient].add(tTransferAmount);
    //update shares balance
    _shares[sender] = _shares[sender].sub(sAmount);
    _shares[recipient] = _shares[recipient].add(sTransferAmount);
    //update checkpoints
    _writeCheckpoint(sender, tokenFromShares(_shares[sender]));
    _writeCheckpoint(recipient, tokenFromShares(_shares[recipient]));
    //distribute fee to all users
    _distributeFee(sFee, tFee);
    emit Transfer(sender, recipient, tTransferAmount);
  }

  function _transferFromExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    (uint256 sAmount, , , , ) = _getValues(sender, tAmount);
    //update token balance for excluded account
    _tokens[sender] = _tokens[sender].sub(tAmount);
    //update shares balance
    _shares[sender] = _shares[sender].sub(sAmount);
    _shares[recipient] = _shares[recipient].add(sAmount);
    //update checkpoints
    _writeCheckpoint(sender, tokenFromShares(_shares[sender]));
    _writeCheckpoint(recipient, tokenFromShares(_shares[recipient]));

    emit Transfer(sender, recipient, tAmount);
  }

  function _transferBothExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    (uint256 sAmount, , , , ) = _getValues(sender, tAmount);
    //update token balances for excluded accounts
    _tokens[sender] = _tokens[sender].sub(tAmount);
    _tokens[recipient] = _tokens[recipient].add(tAmount);
    //update shares balances
    _shares[sender] = _shares[sender].sub(sAmount);
    _shares[recipient] = _shares[recipient].add(sAmount);
    //update checkpoints
    _writeCheckpoint(sender, tokenFromShares(_shares[sender]));
    _writeCheckpoint(recipient, tokenFromShares(_shares[recipient]));

    emit Transfer(sender, recipient, tAmount);
  }

  function _writeCheckpoint(address account, uint256 newValue) internal {
    uint256 nCheckpoints = numCheckpoints[account];
    if (nCheckpoints > 0 && checkpoints[account][nCheckpoints - 1].fromBlock == block.number) {
      checkpoints[account][nCheckpoints - 1].value = newValue;
    } else {
      checkpoints[account][nCheckpoints] = Checkpoint(block.number, newValue);
      numCheckpoints[account] = nCheckpoints + 1;
    }

    emit AccountCheckpointUpdated(account, tokenFromShares(newValue));
  }

  function _distributeFee(uint256 sFee, uint256 tFee) private {
    //portion of fee goes to contract for liquidity locks, amount controlled by lockDivisor
    uint256 lockFee = sFee.div(lockDivisor);
    _shares[address(this)] = _shares[address(this)].add(lockFee);

    //distribute remaining fee to holders
    totalShares = totalShares.sub(sFee.sub(lockFee));

    //update total fee variable
    tFeeTotal = tFeeTotal.add(tFee);
  }

  function _getValues(address sender, uint256 tAmount)
    private
    view
    returns (
      uint256,
      uint256,
      uint256,
      uint256,
      uint256
    )
  {
    (uint256 tTransferAmount, uint256 tFee) = _getTValues(sender, tAmount);
    uint256 currentRate = _getRate();
    (uint256 sAmount, uint256 sTransferAmount, uint256 sFee) =
      _getSValues(tAmount, tFee, currentRate);
    return (sAmount, sTransferAmount, sFee, tTransferAmount, tFee);
  }

  function _getTValues(address sender, uint256 tAmount) private view returns (uint256, uint256) {
    uint256 tFee = _getFee(sender, tAmount);
    uint256 tTransferAmount = tAmount.sub(tFee);
    return (tTransferAmount, tFee);
  }

  function _getSValues(
    uint256 tAmount,
    uint256 tFee,
    uint256 currentRate
  )
    private
    pure
    returns (
      uint256,
      uint256,
      uint256
    )
  {
    uint256 sAmount = tAmount.mul(currentRate);
    uint256 sFee = tFee.mul(currentRate);
    uint256 sTransferAmount = sAmount.sub(sFee);
    return (sAmount, sTransferAmount, sFee);
  }

  function _getFee(address account, uint256 tAmount) private view returns (uint256) {
    if (balanceOf(account) >= 1000000e9) {
      return 0;
    } else if (balanceOf(account) >= 500000e9) {
      return tAmount.div(100);
    } else if (balanceOf(account) >= 320000e9) {
      return tAmount.div(95);
    } else if (balanceOf(account) >= 160000e9) {
      return tAmount.div(90);
    } else if (balanceOf(account) >= 80000e9) {
      return tAmount.div(85);
    } else if (balanceOf(account) >= 40000e9) {
      return tAmount.div(80);
    } else if (balanceOf(account) >= 20000e9) {
      return tAmount.div(75);
    } else if (balanceOf(account) >= 10000e9) {
      return tAmount.div(70);
    } else if (balanceOf(account) >= 1000e9) {
      return tAmount.div(65);
    } else {
      return tAmount.div(60);
    }
  }

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

  function _getCurrentSupply() private view returns (uint256, uint256) {
    uint256 rSupply = totalShares;
    uint256 tSupply = TOTAL_TOKENS;
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_shares[_excluded[i]] > rSupply || _tokens[_excluded[i]] > tSupply)
        return (totalShares, TOTAL_TOKENS);
      rSupply = rSupply.sub(_shares[_excluded[i]]);
      tSupply = tSupply.sub(_tokens[_excluded[i]]);
    }
    if (rSupply < totalShares.div(TOTAL_TOKENS)) return (totalShares, TOTAL_TOKENS);
    return (rSupply, tSupply);
  }

  //TREASURY EXTERNAL FUNCTIONS--------------------------------------------------------------------------------------
  function setUniswapRouter(address _newAddr) external onlyOwner() {
    require(_newAddr != address(0));
    uniswapV2Router = _newAddr;

    emit RouterSet(_newAddr, block.timestamp);
  }

  function setDao(address _newAddr) external onlyOwner() {
    require(_newAddr != address(0));
    daoAddress = _newAddr;

    emit DaoAddressSet(_newAddr, block.timestamp);
  }

  function setAscensionInterval(uint256 _interval) external onlyOwner() {
    ascensionInterval = _interval;

    emit AscensionIntervalSet(_interval, block.timestamp);
  }

  function setAscensionActive(bool _active) external onlyOwner() {
    ascensionActive = _active;

    emit AscensionActive(_active);
  }

  function setAscensionDivisor(uint256 _divisor) external onlyOwner() {
    require(_divisor > 0 && _divisor <= 25);
    ascensionDivisor = _divisor;
  }

  function setPullDivisor(uint256 _divisor) external onlyOwner() {
    require(_divisor > 0 && _divisor <= 100);
    pullDivisor = _divisor;
  }

  function setLockDivisor(uint256 _divisor) external onlyOwner() {
    require(_divisor > 0 && _divisor <= 100);
    lockDivisor = _divisor;
  }

  function setMinLockAmount(uint256 _amount) external onlyOwner() {
    require(_amount >= 1e9, "ASCENSION:setMinLockAmount:amount must but greater than 1 token!");
    minLockAmount = _amount;
  }

  function setRewardFee(uint256 _fee) external onlyOwner() {
    require(_fee > 0 && _fee <= 5, "ASCENSION:setRewardFee: Reward fee can only be in 1-5");
    rewardFee = _fee;
  }

  function ascensionEvent(
    address payable _strategy,
    address[] calldata _targets,
    uint256[] calldata _values
  ) external override {
    require(
      ascensionActive,
      "ASCENSION:ascensionEvent: Ascension functions are currently inactive!"
    );
    require(
      _msgSender() == daoAddress || _msgSender() == owner,
      "ASCENSION:ascensionEvent: Sender must be DAO address!"
    );
    require(
      block.timestamp > previousAscensionTimestamp + ascensionInterval,
      "ASCENSION:ascensionEvent: Too soon to call Ascension Event!"
    );
    require(
      pairAddress != address(0),
      "ASCENSION:ascensionEvent: Liquidity pair token not yet set!"
    );
    require(uniswapV2Router != address(0), "ASCENSION:ascensionEvent: Router address not yet set!");
    require(
      IERC20(pairAddress).balanceOf(address(this)) > 0,
      "ASCENSION:ascensionEvent: No liquidity to remove!"
    );

    //+1 total Ascension events
    totalAscensions++;

    //set ascension timestamp
    previousAscensionTimestamp = block.timestamp;

    //set amount liquidity to be pulled
    uint256 pullAmount = IERC20(pairAddress).balanceOf(address(this)).div(pullDivisor);

    //aprove router contract
    require(IERC20(pairAddress).approve(uniswapV2Router, pullAmount));

    //pull liquidity
    //both ASCEND and BNB from pull are sent to strategy address
    uint256 amountEth =
      IUniswapV2Router02(uniswapV2Router).removeLiquidityETHSupportingFeeOnTransferTokens(
        address(this),
        pullAmount,
        0,
        0,
        _strategy,
        block.timestamp
      );
    //require amountEth is greater than previous ascension event by at least x
    require(
      amountEth >= previousAscensionEth.add(previousAscensionEth.div(ascensionDivisor)),
      "ASCENSION:ascensionEvent: price has not ascended!"
    );

    //set Ascension ETH amount
    previousAscensionEth = amountEth;

    //execute strategy
    require(IAscensionStrategy(_strategy).executeStrategy(_targets, _values));

    emit AscensionEvent(_strategy, amountEth, _targets, _values);
  }

  function lockLiquidity() external override {
    address caller = _msgSender();
    require(
      ascensionActive,
      "ASCENSION:ascensionEvent: Ascension functions are currently inactive!"
    );
    require(
      balanceOf(address(this)) >= minLockAmount,
      "ASCENSION:lockLiquidity: Balance of contract is too low to lock"
    );
    require(balanceOf(caller) >= 1e9, "ASCENSION:lockLiquidity: Caller has no ASCEND!");

    //get the amount of tokens
    uint256 callerReward = _shares[address(this)].mul(rewardFee).div(100);
    uint256 lockAmount = _shares[address(this)].sub(callerReward);

    uint256 half = lockAmount.div(2);
    uint256 otherHalf = lockAmount.sub(half);

    //add reward shares to caller _shares
    _shares[caller] = _shares[caller].add(callerReward);

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

    // swap tokens for ETH
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = IUniswapV2Router02(uniswapV2Router).WETH();

    _approve(address(this), address(uniswapV2Router), half);

    // make the swap
    IUniswapV2Router02(uniswapV2Router).swapExactTokensForETHSupportingFeeOnTransferTokens(
      tokenFromShares(half),
      0, // accept any amount of ETH
      path,
      address(this),
      block.timestamp
    );

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

    // add liquidity to uniswap
    // approve token transfer to cover all possible scenarios
    _approve(address(this), address(uniswapV2Router), tokenFromShares(otherHalf));

    // add the liquidity
    (, , uint256 liquidity) =
      IUniswapV2Router02(uniswapV2Router).addLiquidityETH{ value: ethAmount }(
        address(this),
        tokenFromShares(otherHalf),
        0, // slippage is unavoidable
        0, // slippage is unavoidable
        address(this),
        block.timestamp
      );

    emit LiquidityLocked(
      _msgSender(),
      ethAmount,
      tokenFromShares(otherHalf),
      tokenFromShares(callerReward),
      liquidity
    );
  }

  //--------------------------------------------------------------------------------------------------------------------
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniswapV2Router","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"AccountCheckpointUpdated","type":"event"},{"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":"bool","name":"active","type":"bool"}],"name":"AscensionActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"AscensionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"interval","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AscensionIntervalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dao","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DaoAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","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":[],"name":"ascensionActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ascensionDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_strategy","type":"address"},{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"ascensionEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ascensionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"bulkTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"tAmount","type":"uint256"}],"name":"distributeShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNumCheckpoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minLockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousAscensionEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousAscensionTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setAscensionActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_divisor","type":"uint256"}],"name":"setAscensionDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setAscensionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddr","type":"address"}],"name":"setDao","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_divisor","type":"uint256"}],"name":"setLockDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinLockAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_divisor","type":"uint256"}],"name":"setPullDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddr","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAscensions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200441338038062004413833981810160405260408110156200003757600080fd5b5080516020909101516001600160a01b038216158015906200006157506001600160a01b03811615155b6200006b57600080fd5b600b80546001600160a01b038085166001600160a01b03199283161792839055600080548583169316929092179091556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b158015620000d757600080fd5b505afa158015620000ec573d6000803e3d6000fd5b505050506040513d60208110156200010357600080fd5b5051600b54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200015657600080fd5b505afa1580156200016b573d6000803e3d6000fd5b505050506040513d60208110156200018257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620001d557600080fd5b505af1158015620001ea573d6000803e3d6000fd5b505050506040513d60208110156200020157600080fd5b5051600c80546001600160a01b0319166001600160a01b039092169190911790556040805180820190915260158082527f415343454e53494f4e2050524f544f434f4c205632000000000000000000000060209092019182526200026891601891620007e6565b50604080518082019091526006808252651054d0d1539160d21b60209092019182526200029891601991620007e6565b50601a805460ff19166009179055663328b944c4000060001906196008819055600a80546001600160a01b031916733333333333333333333333333333333333333333178155601255610e1060115560326013556002601455600560155564e8d4a510006016556001600160a01b0382166000908152600360205260409020556200033481663328b944c400006001600160e01b036200038416565b60408051663328b944c40000815290516001600160a01b038316916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505062000888565b6001600160a01b0382166000908152600260205260409020548015801590620003d357506001600160a01b03831660009081526001602090815260408083206000198501845290915290205443145b156200040b576001600160a01b038316600090815260016020818152604080842060001986018552909152909120018290556200045b565b60408051808201825243815260208082018581526001600160a01b038716600081815260018085528682208883528552868220955186559251948301949094558352600290915291902090820190555b7f2bc33bae6beaa19fbab9b467c85d8cc49be5061957a8574b146e24e4cfe2a2dd8362000491846001600160e01b03620004b816565b604080516001600160a01b03909316835260208301919091528051918290030190a1505050565b6000600854821115620004fd5760405162461bcd60e51b8152600401808060200182810382526040815260200180620043d36040913960400191505060405180910390fd5b6000620005126001600160e01b036200053516565b90506200052e81846200057260201b6200273b1790919060201c565b9392505050565b600080806200054c6001600160e01b03620005db16565b915091506200056a81836200057260201b6200273b1790919060201c565b925050505b90565b6000808211620005c9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381620005d357fe5b049392505050565b6008546000908190663328b944c40000825b6007548110156200073b578260036000600784815481106200060b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200067257508160046000600784815481106200064b57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200069057600854663328b944c400009450945050505062000784565b620006df6003600060078481548110620006a657fe5b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205485916200279f62000788821b17901c565b9250620007306004600060078481548110620006f757fe5b60009182526020808320909101546001600160a01b0316835282810193909352604090910190205484916200279f62000788821b17901c565b9150600101620005ed565b506200075f663328b944c400006008546200057260201b6200273b1790919060201c565b8210156200077e57600854663328b944c4000093509350505062000784565b90925090505b9091565b600082821115620007e0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200082957805160ff191683800117855562000859565b8280016001018555821562000859579182015b82811115620008595782518255916020019190600101906200083c565b50620008679291506200086b565b5090565b6200056f91905b8082111562000867576000815560010162000872565b613b3b80620008986000396000f3fe60806040526004361061021c5760003560e01c806304b1b0ca1461022857806306fdde031461024f57806308804275146102d9578063095ea7b3146102ee5780630f68ae401461033b57806313114a9d14610367578063153a1f3e1461037c5780631694505e1461044757806318160ddd1461047857806319e5299b1461048d57806320d4dc98146104a25780632131c68c146104b757806323b872dd146104cc578063313ce5671461050f57806334a6fbc71461053a57806337315f4414610564578063395093511461059057806341a2ac70146105c957806344df8e70146105f35780635178dd351461060857806355382a6c146106325780636637b8821461064757806370a082311461067a578063774e6f30146106ad5780637cb52737146106e6578063817c8966146107195780638368e79f1461074c5780638b4242671461077f5780638da5cb5b1461079457806395d89b41146107a95780639b92a744146107be578063a457c2d7146107d3578063a8b089821461080c578063a9059cbb14610821578063ac7010701461085a578063afd749401461086f578063b4ba9ead1461094a578063bb2f719914610974578063bea9849e14610989578063c531ffda146109bc578063dd62ed3e146109e6578063e272e2aa14610a21578063ec672f0914610a36578063f2cc0c1814610a4b578063f2fde38b14610a7e578063f84354f114610ab1578063fb4a255814610ae457610223565b3661022357005b600080fd5b34801561023457600080fd5b5061023d610b0e565b60408051918252519081900360200190f35b34801561025b57600080fd5b50610264610b14565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029e578181015183820152602001610286565b50505050905090810190601f1680156102cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e557600080fd5b5061023d610baa565b3480156102fa57600080fd5b506103276004803603604081101561031157600080fd5b506001600160a01b038135169060200135610bb0565b604080519115158252519081900360200190f35b34801561034757600080fd5b506103656004803603602081101561035e57600080fd5b5035610bce565b005b34801561037357600080fd5b5061023d610c6f565b34801561038857600080fd5b506103276004803603604081101561039f57600080fd5b810190602081018135600160201b8111156103b957600080fd5b8201836020820111156103cb57600080fd5b803590602001918460208302840111600160201b831117156103ec57600080fd5b919390929091602081019035600160201b81111561040957600080fd5b82018360208201111561041b57600080fd5b803590602001918460208302840111600160201b8311171561043c57600080fd5b509092509050610c75565b34801561045357600080fd5b5061045c610cda565b604080516001600160a01b039092168252519081900360200190f35b34801561048457600080fd5b5061023d610ce9565b34801561049957600080fd5b50610327610cf4565b3480156104ae57600080fd5b5061023d610cfd565b3480156104c357600080fd5b5061045c610d03565b3480156104d857600080fd5b50610327600480360360608110156104ef57600080fd5b506001600160a01b03813581169160208101359091169060400135610d12565b34801561051b57600080fd5b50610524610d9f565b6040805160ff9092168252519081900360200190f35b34801561054657600080fd5b506103656004803603602081101561055d57600080fd5b5035610da8565b34801561057057600080fd5b506103656004803603602081101561058757600080fd5b50351515610e20565b34801561059c57600080fd5b50610327600480360360408110156105b357600080fd5b506001600160a01b038135169060200135610ec0565b3480156105d557600080fd5b50610365600480360360208110156105ec57600080fd5b5035610f14565b3480156105ff57600080fd5b5061045c610fbe565b34801561061457600080fd5b506103656004803603602081101561062b57600080fd5b5035610fcd565b34801561063e57600080fd5b5061023d611068565b34801561065357600080fd5b506103656004803603602081101561066a57600080fd5b50356001600160a01b031661106e565b34801561068657600080fd5b5061023d6004803603602081101561069d57600080fd5b50356001600160a01b0316611134565b3480156106b957600080fd5b5061023d600480360360408110156106d057600080fd5b506001600160a01b03813516906020013561119e565b3480156106f257600080fd5b506103276004803603602081101561070957600080fd5b50356001600160a01b031661135a565b34801561072557600080fd5b5061023d6004803603602081101561073c57600080fd5b50356001600160a01b0316611378565b34801561075857600080fd5b5061023d6004803603602081101561076f57600080fd5b50356001600160a01b0316611489565b34801561078b57600080fd5b5061023d6114a4565b3480156107a057600080fd5b5061045c6114aa565b3480156107b557600080fd5b506102646114b9565b3480156107ca57600080fd5b5061023d61151a565b3480156107df57600080fd5b50610327600480360360408110156107f657600080fd5b506001600160a01b038135169060200135611520565b34801561081857600080fd5b5061045c61158e565b34801561082d57600080fd5b506103276004803603604081101561084457600080fd5b506001600160a01b03813516906020013561159d565b34801561086657600080fd5b5061023d6115b1565b34801561087b57600080fd5b506103656004803603606081101561089257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156108bc57600080fd5b8201836020820111156108ce57600080fd5b803590602001918460208302840111600160201b831117156108ef57600080fd5b919390929091602081019035600160201b81111561090c57600080fd5b82018360208201111561091e57600080fd5b803590602001918460208302840111600160201b8311171561093f57600080fd5b5090925090506115b7565b34801561095657600080fd5b506103656004803603602081101561096d57600080fd5b5035611bd0565b34801561098057600080fd5b50610365611c48565b34801561099557600080fd5b50610365600480360360208110156109ac57600080fd5b50356001600160a01b0316612120565b3480156109c857600080fd5b50610365600480360360208110156109df57600080fd5b50356121e6565b3480156109f257600080fd5b5061023d60048036036040811015610a0957600080fd5b506001600160a01b038135811691602001351661225e565b348015610a2d57600080fd5b5061023d612289565b348015610a4257600080fd5b5061023d61228f565b348015610a5757600080fd5b5061036560048036036020811015610a6e57600080fd5b50356001600160a01b0316612295565b348015610a8a57600080fd5b5061036560048036036020811015610aa157600080fd5b50356001600160a01b0316612406565b348015610abd57600080fd5b5061036560048036036020811015610ad457600080fd5b50356001600160a01b0316612494565b348015610af057600080fd5b5061036560048036036020811015610b0757600080fd5b5035612640565b60125481565b60188054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba05780601f10610b7557610100808354040283529160200191610ba0565b820191906000526020600020905b815481529060010190602001808311610b8357829003601f168201915b5050505050905090565b60165481565b6000610bc4610bbd6127fc565b8484612800565b5060015b92915050565b6000546001600160a01b0316610be26127fc565b6001600160a01b031614610c275760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b633b9aca00811015610c6a5760405162461bcd60e51b8152600401808060200182810382526040815260200180613ac66040913960400191505060405180910390fd5b601655565b60095490565b6000838214610c8357600080fd5b60005b84811015610cce57610cc633878784818110610c9e57fe5b905060200201356001600160a01b0316868685818110610cba57fe5b905060200201356128ec565b600101610c86565b50600195945050505050565b600b546001600160a01b031681565b663328b944c4000090565b60175460ff1681565b600f5481565b600d546001600160a01b031681565b6000610d1f8484846128ec565b610d9584610d2b6127fc565b610d90856040518060600160405280602881526020016138d2602891396001600160a01b038a16600090815260056020526040812090610d696127fc565b6001600160a01b03168152602081019190915260400160002054919063ffffffff612b0e16565b612800565b5060019392505050565b601a5460ff1690565b6000546001600160a01b0316610dbc6127fc565b6001600160a01b031614610e015760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b600081118015610e12575060648111155b610e1b57600080fd5b601455565b6000546001600160a01b0316610e346127fc565b6001600160a01b031614610e795760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6017805482151560ff19909116811790915560408051918252517fa2d765feb8d25c71fbcc8eab6503383aeef31f75ccdc551ba8b5aa2dc3dd805c9181900360200190a150565b6000610bc4610ecd6127fc565b84610d908560056000610ede6127fc565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612ba516565b6000546001600160a01b0316610f286127fc565b6001600160a01b031614610f6d5760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b600081118015610f7e575060058111155b610fb95760405162461bcd60e51b815260040180806020018281038252603581526020018061380b6035913960400191505060405180910390fd5b601555565b600a546001600160a01b031681565b6000546001600160a01b0316610fe16127fc565b6001600160a01b0316146110265760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b60118190556040805182815242602082015281517fe4217cf0cfc25a1d29ec20c56f2b6d60df5401dc6c90a3fbf3076f8e10e78dbf929181900390910190a150565b60115481565b6000546001600160a01b03166110826127fc565b6001600160a01b0316146110c75760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6001600160a01b0381166110da57600080fd5b600d80546001600160a01b0319166001600160a01b0383169081179091556040805191825242602083015280517fad6d25a2177d1f08c150ff68ee949bf31b3dd1e16961f620c43b0de50c8ba1519281900390910190a150565b6001600160a01b03811660009081526006602052604081205460ff161561117457506001600160a01b038116600090815260046020526040902054611199565b6001600160a01b03821660009081526003602052604090205461119690612c04565b90505b919050565b60004382106111de5760405162461bcd60e51b815260040180806020018281038252602b815260200180613a06602b913960400191505060405180910390fd5b6001600160a01b03831660009081526002602052604090205480611206576000915050610bc8565b6001600160a01b0384166000908152600160209081526040808320600019850184529091529020548310611266576001600160a01b0384166000908152600160208181526040808420600019909501845293905291902001549050610bc8565b6001600160a01b038416600090815260016020908152604080832083805290915290205483101561129b576000915050610bc8565b600060001982015b8181111561132a5760028282030481036112bb6135d6565b506001600160a01b0387166000908152600160208181526040808420858552825292839020835180850190945280548085529201549083015287141561130b57602001519450610bc89350505050565b805187111561131c57819350611323565b6001820392505b50506112a3565b506001600160a01b0385166000908152600160208181526040808420948452939052919020015491505092915050565b6001600160a01b031660009081526006602052604090205460ff1690565b600066038d7ea4c6800061138b83611134565b1061139857506009611199565b6601c6bf526340006113a983611134565b106113b657506008611199565b66012309ce5400006113c783611134565b106113d457506007611199565b659184e72a00006113e483611134565b106113f157506006611199565b6548c27395000061140183611134565b1061140e57506005611199565b65246139ca800061141e83611134565b1061142b57506004611199565b6512309ce5400061143b83611134565b1061144857506003611199565b6509184e72a00061145883611134565b1061146557506002611199565b64e8d4a5100061147483611134565b1061148157506001611199565b506000611199565b6001600160a01b031660009081526002602052604090205490565b60155481565b6000546001600160a01b031681565b60198054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ba05780601f10610b7557610100808354040283529160200191610ba0565b60145481565b6000610bc461152d6127fc565b84610d9085604051806060016040528060258152602001613aa160259139600560006115576127fc565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff612b0e16565b600c546001600160a01b031681565b6000610bc46115aa6127fc565b84846128ec565b600e5481565b60175460ff166115f85760405162461bcd60e51b81526004018080602001828103825260458152602001806139236045913960600191505060405180910390fd5b600d546001600160a01b031661160c6127fc565b6001600160a01b0316148061163b57506000546001600160a01b03166116306127fc565b6001600160a01b0316145b6116765760405162461bcd60e51b815260040180806020018281038252603581526020018061362c6035913960400191505060405180910390fd5b6011546010540142116116ba5760405162461bcd60e51b815260040180806020018281038252603b8152602001806135f1603b913960400191505060405180910390fd5b600c546001600160a01b03166117015760405162461bcd60e51b815260040180806020018281038252603b815260200180613a31603b913960400191505060405180910390fd5b600b546001600160a01b03166117485760405162461bcd60e51b81526004018080602001828103825260358152602001806139886035913960400191505060405180910390fd5b600c54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561179357600080fd5b505afa1580156117a7573d6000803e3d6000fd5b505050506040513d60208110156117bd57600080fd5b5051116117fb5760405162461bcd60e51b81526004018080602001828103825260318152602001806138406031913960400191505060405180910390fd5b600e8054600101905542601055601354600c54604080516370a0823160e01b815230600482015290516000936118979390926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561185f57600080fd5b505afa158015611873573d6000803e3d6000fd5b505050506040513d602081101561188957600080fd5b50519063ffffffff61273b16565b600c54600b546040805163095ea7b360e01b81526001600160a01b03928316600482015260248101859052905193945091169163095ea7b3916044808201926020929091908290030181600087803b1580156118f257600080fd5b505af1158015611906573d6000803e3d6000fd5b505050506040513d602081101561191c57600080fd5b505161192757600080fd5b600b546040805163af2979eb60e01b815230600482015260248101849052600060448201819052606482018190526001600160a01b038a811660848401524260a484015292519093929092169163af2979eb9160c48082019260209290919082900301818787803b15801561199b57600080fd5b505af11580156119af573d6000803e3d6000fd5b505050506040513d60208110156119c557600080fd5b5051601254600f549192506119f2916119e39163ffffffff61273b16565b600f549063ffffffff612ba516565b811015611a305760405162461bcd60e51b815260040180806020018281038252603181526020018061379b6031913960400191505060405180910390fd5b600f81905560408051636a85435d60e01b815260048101918252604481018790526001600160a01b03891691636a85435d91899189918991899181906024810190606401876020880280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611add57600080fd5b505af1158015611af1573d6000803e3d6000fd5b505050506040513d6020811015611b0757600080fd5b5051611b1257600080fd5b7faac1d0c217ad2fed6b5e220c2d6c2db391702393500b5fe0fbea97876f60944987828888888860405180876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925060200280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600083820152604051601f909101601f19169092018290039a509098505050505050505050a150505050505050565b6000546001600160a01b0316611be46127fc565b6001600160a01b031614611c295760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b600081118015611c3a575060648111155b611c4357600080fd5b601355565b6000611c526127fc565b60175490915060ff16611c965760405162461bcd60e51b81526004018080602001828103825260458152602001806139236045913960600191505060405180910390fd5b601654611ca230611134565b1015611cdf5760405162461bcd60e51b815260040180806020018281038252603f8152602001806137cc603f913960400191505060405180910390fd5b633b9aca00611ced82611134565b1015611d2a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613738602e913960400191505060405180910390fd5b601554306000908152600360205260408120549091611d6291606491611d56919063ffffffff612c6316565b9063ffffffff61273b16565b3060009081526003602052604081205491925090611d86908363ffffffff61279f16565b90506000611d9b82600263ffffffff61273b16565b90506000611daf838363ffffffff61279f16565b6001600160a01b038616600090815260036020526040902054909150611ddb908563ffffffff612ba516565b6001600160a01b0386166000908152600360209081526040918290209290925580516002808252606080830184524794909390830190803683370190505090503081600081518110611e2957fe5b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e7d57600080fd5b505afa158015611e91573d6000803e3d6000fd5b505050506040513d6020811015611ea757600080fd5b5051815182906001908110611eb857fe5b6001600160a01b039283166020918202929092010152600b54611ede9130911686612800565b600b546001600160a01b031663791ac947611ef886612c04565b60008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611f76578181015183820152602001611f5e565b505050509050019650505050505050600060405180830381600087803b158015611f9f57600080fd5b505af1158015611fb3573d6000803e3d6000fd5b505050506000611fcc834761279f90919063ffffffff16565b600b54909150611fea9030906001600160a01b0316610d9087612c04565b600b546000906001600160a01b031663f305d719833061200989612c04565b604080516001600160e01b031960e087901b1681526001600160a01b039093166004840152602483019190915260006044830181905260648301523060848301524260a48301525160c480830192606092919082900301818588803b15801561207157600080fd5b505af1158015612085573d6000803e3d6000fd5b50505050506040513d606081101561209c57600080fd5b506040015190507ff07f8699eb5a7d3c6903aba7ffc0b932e8e123129924f6aa4e3e95b04ba251796120cc6127fc565b836120d688612c04565b6120df8c612c04565b604080516001600160a01b039095168552602085019390935283830191909152606083015260808201849052519081900360a00190a1505050505050505050565b6000546001600160a01b03166121346127fc565b6001600160a01b0316146121795760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6001600160a01b03811661218c57600080fd5b600b80546001600160a01b0319166001600160a01b0383169081179091556040805191825242602083015280517f8c2b40574d71276711571a29b29cbd41050fbe02fe8c6f8233614dc63fed71a39281900390910190a150565b6000546001600160a01b03166121fa6127fc565b6001600160a01b03161461223f5760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b600081118015612250575060198111155b61225957600080fd5b601255565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b60105481565b60135481565b6000546001600160a01b03166122a96127fc565b6001600160a01b0316146122ee5760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff16156123465760405162461bcd60e51b8152600401808060200182810382526035815260200180613a6c6035913960400191505060405180910390fd5b6001600160a01b038116600090815260036020526040902054156123a0576001600160a01b03811660009081526003602052604090205461238690612c04565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031661241a6127fc565b6001600160a01b03161461245f5760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6001600160a01b03811661247257600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03166124a86127fc565b6001600160a01b0316146124ed5760405162461bcd60e51b815260040180806020018281038252604a815260200180613684604a913960600191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff166125445760405162461bcd60e51b81526004018080602001828103825260358152602001806137666035913960400191505060405180910390fd5b60005b60075481101561263c57816001600160a01b03166007828154811061256857fe5b6000918252602090912001546001600160a01b031614156126345760078054600019810190811061259557fe5b600091825260209091200154600780546001600160a01b0390921691839081106125bb57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600690925220805460ff19169055600780548061260d57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561263c565b600101612547565b5050565b600061264a6127fc565b6001600160a01b03811660009081526006602052604090205490915060ff16156126a55760405162461bcd60e51b81526004018080602001828103825260488152602001806136f06048913960600191505060405180910390fd5b60006126b18284612cbc565b505050506001600160a01b0383166000908152600360205260409020549091506126db908261279f565b6001600160a01b038316600090815260036020526040902081905561270a90839061270590612c04565b612d0a565b60085461271d908263ffffffff61279f16565b600855600954612733908463ffffffff612ba516565b600955505050565b600080821161278e576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161279757fe5b049392505050565b6000828211156127f6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3390565b6001600160a01b0383166128455760405162461bcd60e51b81526004018080602001828103825260248152602001806139e26024913960400191505060405180910390fd5b6001600160a01b03821661288a5760405162461bcd60e51b81526004018080602001828103825260228152602001806136ce6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166129315760405162461bcd60e51b81526004018080602001828103825260258152602001806139bd6025913960400191505060405180910390fd5b6001600160a01b0382166129765760405162461bcd60e51b81526004018080602001828103825260238152602001806136616023913960400191505060405180910390fd5b600081116129b55760405162461bcd60e51b81526004018080602001828103825260298152602001806138fa6029913960400191505060405180910390fd5b6001600160a01b03831660009081526006602052604090205460ff1680156129f657506001600160a01b03821660009081526006602052604090205460ff16155b15612a0b57612a06838383612e30565b612b09565b6001600160a01b03831660009081526006602052604090205460ff16158015612a4c57506001600160a01b03821660009081526006602052604090205460ff165b15612a5c57612a06838383612f6b565b6001600160a01b03831660009081526006602052604090205460ff16158015612a9e57506001600160a01b03821660009081526006602052604090205460ff16155b15612aae57612a068383836130cd565b6001600160a01b03831660009081526006602052604090205460ff168015612aee57506001600160a01b03821660009081526006602052604090205460ff165b15612afe57612a06838383613115565b612b098383836130cd565b505050565b60008184841115612b9d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b62578181015183820152602001612b4a565b50505050905090810190601f168015612b8f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612bfd576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6000600854821115612c475760405162461bcd60e51b81526004018080602001828103825260408152602001806138716040913960400191505060405180910390fd5b6000612c516131bc565b9050612bfd838263ffffffff61273b16565b600082612c7257506000610bc8565b82820282848281612c7f57fe5b0414612bfd5760405162461bcd60e51b81526004018080602001828103825260218152602001806138b16021913960400191505060405180910390fd5b6000806000806000806000612cd189896131e5565b915091506000612cdf6131bc565b90506000806000612cf18c8686613214565b919f909e50909c50959a50939850939650505050505050565b6001600160a01b0382166000908152600260205260409020548015801590612d5857506001600160a01b03831660009081526001602090815260408083206000198501845290915290205443145b15612d8e576001600160a01b03831660009081526001602081815260408084206000198601855290915290912001829055612dde565b60408051808201825243815260208082018581526001600160a01b038716600081815260018085528682208883528552868220955186559251948301949094558352600290915291902090820190555b7f2bc33bae6beaa19fbab9b467c85d8cc49be5061957a8574b146e24e4cfe2a2dd83612e0984612c04565b604080516001600160a01b03909316835260208301919091528051918290030190a1505050565b6000612e3c8483612cbc565b505050506001600160a01b038516600090815260046020526040902054909150612e66908361279f565b6001600160a01b038516600090815260046020908152604080832093909355600390522054612e9b908263ffffffff61279f16565b6001600160a01b038086166000908152600360205260408082209390935590851681522054612ed0908263ffffffff612ba516565b6001600160a01b038085166000908152600360205260408082209390935590861681522054612f0490859061270590612c04565b6001600160a01b038316600090815260036020526040902054612f2c90849061270590612c04565b826001600160a01b0316846001600160a01b0316600080516020613968833981519152846040518082815260200191505060405180910390a350505050565b6000806000806000612f7d8887612cbc565b6001600160a01b038c1660009081526004602052604090205494995092975090955093509150612fb3908363ffffffff612ba516565b6001600160a01b03808916600090815260046020908152604080832094909455918b16815260039091522054612fef908663ffffffff61279f16565b6001600160a01b03808a166000908152600360205260408082209390935590891681522054613024908563ffffffff612ba516565b6001600160a01b0380891660009081526003602052604080822093909355908a168152205461305890899061270590612c04565b6001600160a01b03871660009081526003602052604090205461308090889061270590612c04565b61308a8382613262565b866001600160a01b0316886001600160a01b0316600080516020613968833981519152846040518082815260200191505060405180910390a35050505050505050565b60008060008060006130df8887612cbc565b6001600160a01b038d1660009081526003602052604090205494995092975090955093509150612fef908663ffffffff61279f16565b60006131218483612cbc565b505050506001600160a01b03851660009081526004602052604090205490915061314b908361279f565b6001600160a01b038086166000908152600460205260408082209390935590851681522054613180908363ffffffff612ba516565b6001600160a01b03808516600090815260046020908152604080832094909455918716815260039091522054612e9b908263ffffffff61279f16565b60008060006131c96132e4565b90925090506131de828263ffffffff61273b16565b9250505090565b60008060006131f4858561346d565b90506000613208858363ffffffff61279f16565b96919550909350505050565b6000808080613229878663ffffffff612c6316565b9050600061323d878763ffffffff612c6316565b90506000613251838363ffffffff61279f16565b929992985090965090945050505050565b60006132796014548461273b90919063ffffffff16565b3060009081526003602052604090205490915061329c908263ffffffff612ba516565b306000908152600360205260409020556132ce6132bf848363ffffffff61279f16565b6008549063ffffffff61279f16565b600855600954612733908363ffffffff612ba516565b6008546000908190663328b944c40000825b60075481101561342b5782600360006007848154811061331257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613377575081600460006007848154811061335057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561339357600854663328b944c4000094509450505050613469565b6133d960036000600784815481106133a757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849063ffffffff61279f16565b925061342160046000600784815481106133ef57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff61279f16565b91506001016132f6565b5060085461344690663328b944c4000063ffffffff61273b16565b82101561346357600854663328b944c40000935093505050613469565b90925090505b9091565b600066038d7ea4c6800061348084611134565b1061348d57506000610bc8565b6601c6bf5263400061349e84611134565b106134bb576134b482606463ffffffff61273b16565b9050610bc8565b66012309ce5400006134cc84611134565b106134e2576134b482605f63ffffffff61273b16565b659184e72a00006134f284611134565b10613508576134b482605a63ffffffff61273b16565b6548c27395000061351884611134565b1061352e576134b482605563ffffffff61273b16565b65246139ca800061353e84611134565b10613554576134b482605063ffffffff61273b16565b6512309ce5400061356484611134565b1061357a576134b482604b63ffffffff61273b16565b6509184e72a00061358a84611134565b106135a0576134b482604663ffffffff61273b16565b64e8d4a510006135af84611134565b106135c5576134b482604163ffffffff61273b16565b6134b482603c63ffffffff61273b16565b60405180604001604052806000815260200160008152509056fe415343454e53494f4e3a617363656e73696f6e4576656e743a20546f6f20736f6f6e20746f2063616c6c20417363656e73696f6e204576656e7421415343454e53494f4e3a617363656e73696f6e4576656e743a2053656e646572206d7573742062652044414f20616464726573732145524332303a207472616e7366657220746f20746865207a65726f2061646472657373415343454e53494f4e3a6f6e6c794f776e65723a546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520636f6e7472616374206f776e657245524332303a20617070726f766520746f20746865207a65726f2061646472657373415343454e53494f4e3a646973747269627574655368617265733a204578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e415343454e53494f4e3a6c6f636b4c69717569646974793a2043616c6c657220686173206e6f20415343454e4421415343454e53494f4e3a696e636c7564654163636f756e743a204163636f756e7420697320616c726561647920696e636c75646564415343454e53494f4e3a617363656e73696f6e4576656e743a20707269636520686173206e6f7420617363656e64656421415343454e53494f4e3a6c6f636b4c69717569646974793a2042616c616e6365206f6620636f6e747261637420697320746f6f206c6f7720746f206c6f636b415343454e53494f4e3a7365745265776172644665653a20526577617264206665652063616e206f6e6c7920626520696e20312d35415343454e53494f4e3a617363656e73696f6e4576656e743a204e6f206c697175696469747920746f2072656d6f766521415343454e53494f4e3a746f6b656e46726f6d5368617265733a20416d6f756e74206d757374206265206c657373207468616e20746f74616c20736861726573536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f415343454e53494f4e3a617363656e73696f6e4576656e743a20417363656e73696f6e2066756e6374696f6e73206172652063757272656e746c7920696e61637469766521ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef415343454e53494f4e3a617363656e73696f6e4576656e743a20526f757465722061646472657373206e6f7420796574207365742145524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373415343454e53494f4e3a6765745072696f7256616c75653a206e6f74207965742064657465726d696e6564415343454e53494f4e3a617363656e73696f6e4576656e743a204c6971756964697479207061697220746f6b656e206e6f74207965742073657421415343454e53494f4e3a6578636c7564654163636f756e743a204163636f756e7420697320616c7265616479206578636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f415343454e53494f4e3a7365744d696e4c6f636b416d6f756e743a616d6f756e74206d757374206275742067726561746572207468616e203120746f6b656e21a264697066735822122007fcf1c28b4060df7cbb3ddf6bcfbca34de820d4f8737ddbbd45f61be284e56064736f6c63430006080033415343454e53494f4e3a746f6b656e46726f6d5368617265733a20416d6f756e74206d757374206265206c657373207468616e20746f74616c2073686172657300000000000000000000000005ff2b0db69458a0750badebc4f9e13add608c7f0000000000000000000000000129f43bcc8116f6e55a499eac9b063fbd7b9318

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000005ff2b0db69458a0750badebc4f9e13add608c7f0000000000000000000000000129f43bcc8116f6e55a499eac9b063fbd7b9318

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000005ff2b0db69458a0750badebc4f9e13add608c7f
Arg [1] : 0000000000000000000000000129f43bcc8116f6e55a499eac9b063fbd7b9318


Deployed ByteCode Sourcemap

23852:26053:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;25577:31:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25577:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;28825:79;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28825:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28825:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26018:28;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26018:28:0;;;:::i;29689:153::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29689:153:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;29689:153:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44768:198;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44768:198:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44768:198:0;;:::i;:::-;;30967:91;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30967:91:0;;;:::i;34476:298::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34476:298:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34476:298:0;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34476:298:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34476:298:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34476:298:0;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34476:298:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34476:298:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;34476:298:0;;-1:-1:-1;34476:298:0;-1:-1:-1;34476:298:0;:::i;25101:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25101:30:0;;;:::i;:::-;;;;-1:-1:-1;;;;;25101:30:0;;;;;;;;;;;;;;29084:96;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29084:96:0;;;:::i;26137:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26137:27:0;;;:::i;25267:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25267:35:0;;;:::i;25167:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25167:25:0;;;:::i;29848:349::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29848:349:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;29848:349:0;;;;;;;;;;;;;;;;;:::i;28999:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28999:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44617:145;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44617:145:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44617:145:0;;:::i;44161:139::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44161:139:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44161:139:0;;;;:::i;30203:210::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30203:210:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30203:210:0;;;;;;;;:::i;44972:180::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44972:180:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44972:180:0;;:::i;25045:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25045:19:0;;;:::i;43981:174::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43981:174:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43981:174:0;;:::i;25459:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25459:32:0;;;:::i;43794:181::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43794:181:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43794:181:0;-1:-1:-1;;;;;43794:181:0;;:::i;29186:183::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29186:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29186:183:0;-1:-1:-1;;;;;29186:183:0;;:::i;31198:1124::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31198:1124:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;31198:1124:0;;;;;;;;:::i;30844:117::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30844:117:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30844:117:0;-1:-1:-1;;;;;30844:117:0;;:::i;32328:711::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32328:711:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32328:711:0;-1:-1:-1;;;;;32328:711:0;;:::i;31064:128::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31064:128:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31064:128:0;-1:-1:-1;;;;;31064:128:0;;:::i;25912:24::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25912:24:0;;;:::i;23972:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23972:20:0;;;:::i;28910:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28910:83:0;;;:::i;25795:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25795:26:0;;;:::i;30419:334::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30419:334:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30419:334:0;;;;;;;;:::i;25136:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25136:26:0;;;:::i;29375:159::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29375:159:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;29375:159:0;;;;;;;;:::i;25197:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25197:30:0;;;:::i;45158:2160::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45158:2160:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;45158:2160:0;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;45158:2160:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;45158:2160:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45158:2160:0;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;45158:2160:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;45158:2160:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;45158:2160:0;;-1:-1:-1;45158:2160:0;-1:-1:-1;45158:2160:0;:::i;44466:145::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44466:145:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44466:145:0;;:::i;47324:2454::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47324:2454:0;;;:::i;43596:192::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43596:192:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43596:192:0;-1:-1:-1;;;;;43596:192:0;;:::i;44306:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44306:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44306:154:0;;:::i;29540:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29540:143:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;29540:143:0;;;;;;;;;;:::i;25358:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25358:41:0;;;:::i;25687:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25687:26:0;;;:::i;34145:325::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34145:325:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34145:325:0;-1:-1:-1;;;;;34145:325:0;;:::i;28579:136::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28579:136:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28579:136:0;-1:-1:-1;;;;;28579:136:0;;:::i;33703:436::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33703:436:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33703:436:0;-1:-1:-1;;;;;33703:436:0;;:::i;33045:652::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33045:652:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33045:652:0;;:::i;25577:31::-;;;;:::o;28825:79::-;28893:5;28886:12;;;;;;;;-1:-1:-1;;28886:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28864:13;;28886:12;;28893:5;;28886:12;;28893:5;28886:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28825:79;:::o;26018:28::-;;;;:::o;29689:153::-;29766:4;29779:39;29788:12;:10;:12::i;:::-;29802:7;29811:6;29779:8;:39::i;:::-;-1:-1:-1;29832:4:0;29689:153;;;;;:::o;44768:198::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44858:3:::1;44847:7;:14;;44839:91;;;;-1:-1:-1::0;;;44839:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44937:13;:23:::0;44768:198::o;30967:91::-;31043:9;;30967:91;:::o;34476:298::-;34592:4;34616:28;;;34608:37;;12:1:-1;9;2:12;34608:37:0;34657:9;34652:99;34672:14;;;34652:99;;;34702:41;34712:10;34724:3;;34728:1;34724:6;;;;;;;;;;;;;-1:-1:-1;;;;;34724:6:0;34732:7;;34740:1;34732:10;;;;;;;;;;;;;34702:9;:41::i;:::-;34688:3;;34652:99;;;-1:-1:-1;34764:4:0;;34476:298;-1:-1:-1;;;;;34476:298:0:o;25101:30::-;;;-1:-1:-1;;;;;25101:30:0;;:::o;29084:96::-;24968:10;29084:96;:::o;26137:27::-;;;;;;:::o;25267:35::-;;;;:::o;25167:25::-;;;-1:-1:-1;;;;;25167:25:0;;:::o;29848:349::-;29968:4;29981:36;29991:6;29999:9;30010:6;29981:9;:36::i;:::-;30024:149;30041:6;30056:12;:10;:12::i;:::-;30077:89;30115:6;30077:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30077:19:0;;;;;;:11;:19;;;;;;30097:12;:10;:12::i;:::-;-1:-1:-1;;;;;30077:33:0;;;;;;;;;;;;-1:-1:-1;30077:33:0;;;:89;;:37;:89;:::i;:::-;30024:8;:149::i;:::-;-1:-1:-1;30187:4:0;29848:349;;;;;:::o;28999:79::-;29063:9;;;;28999:79;:::o;44617:145::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44706:1:::1;44695:8;:12;:31;;;;;44723:3;44711:8;:15;;44695:31;44687:40;;12:1:-1;9::::0;2:12:::1;44687:40:0;44734:11;:22:::0;44617:145::o;44161:139::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44231:15:::1;:25:::0;;;::::1;;-1:-1:-1::0;;44231:25:0;;::::1;::::0;::::1;::::0;;;44270:24:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;44161:139:::0;:::o;30203:210::-;30293:4;30306:83;30315:12;:10;:12::i;:::-;30329:7;30338:50;30377:10;30338:11;:25;30350:12;:10;:12::i;:::-;-1:-1:-1;;;;;30338:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30338:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;44972:180::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45051:1:::1;45044:4;:8;:21;;;;;45064:1;45056:4;:9;;45044:21;45036:87;;;;-1:-1:-1::0;;;45036:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45130:9;:16:::0;44972:180::o;25045:19::-;;;-1:-1:-1;;;;;25045:19:0;;:::o;43981:174::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44058:17:::1;:29:::0;;;44101:48:::1;::::0;;;;;44133:15:::1;44101:48;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;43981:174:::0;:::o;25459:32::-;;;;:::o;43794:181::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43864:22:0;::::1;43856:31;;12:1:-1;9::::0;2:12:::1;43856:31:0;43894:10;:21:::0;;-1:-1:-1;;;;;;43894:21:0::1;-1:-1:-1::0;;;;;43894:21:0;::::1;::::0;;::::1;::::0;;;43929:40:::1;::::0;;;;;43953:15:::1;43929:40;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;43794:181:::0;:::o;29186:183::-;-1:-1:-1;;;;;29272:19:0;;29252:7;29272:19;;;:10;:19;;;;;;;;29268:48;;;-1:-1:-1;;;;;;29300:16:0;;;;;;:7;:16;;;;;;29293:23;;29268:48;-1:-1:-1;;;;;29346:16:0;;;;;;:7;:16;;;;;;29330:33;;:15;:33::i;:::-;29323:40;;29186:183;;;;:::o;31198:1124::-;31311:7;31352:12;31338:11;:26;31330:82;;;;-1:-1:-1;;;31330:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31444:23:0;;31421:20;31444:23;;;:14;:23;;;;;;31478:17;31474:48;;31513:1;31506:8;;;;;31474:48;-1:-1:-1;;;;;31574:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;31595:16:0;;31574:38;;;;;;;:48;:63;-1:-1:-1;31570:137:0;;-1:-1:-1;;;;;31655:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;31676:16:0;;;31655:38;;;;;;;;:44;;;-1:-1:-1;31648:51:0;;31570:137;-1:-1:-1;;;;;31760:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:47;-1:-1:-1;31756:78:0;;;31825:1;31818:8;;;;;31756:78;31842:13;-1:-1:-1;;31882:16:0;;31905:365;31920:5;31912;:13;31905:365;;;31979:1;31962:13;;;31961:19;31953:27;;32016:20;;:::i;:::-;-1:-1:-1;;;;;;32039:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;32016:51;;;;;;;;;;;;;;;;;;;;32080:27;;32076:187;;;32127:8;;;;-1:-1:-1;32120:15:0;;-1:-1:-1;;;;32120:15:0;32076:187;32155:12;;:26;-1:-1:-1;32151:112:0;;;32202:6;32194:14;;32151:112;;;32252:1;32243:6;:10;32235:18;;32151:112;31905:365;;;;;-1:-1:-1;;;;;;32283:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;:33;;;-1:-1:-1;;31198:1124:0;;;;:::o;30844:117::-;-1:-1:-1;;;;;30936:19:0;30916:4;30936:19;;;:10;:19;;;;;;;;;30844:117::o;32328:711::-;32395:7;32437:9;32415:18;32425:7;32415:9;:18::i;:::-;:31;32411:623;;-1:-1:-1;32464:1:0;32457:8;;32411:623;32505:8;32483:18;32493:7;32483:9;:18::i;:::-;:30;32479:555;;-1:-1:-1;32531:1:0;32524:8;;32479:555;32572:8;32550:18;32560:7;32550:9;:18::i;:::-;:30;32546:488;;-1:-1:-1;32598:1:0;32591:8;;32546:488;32639:8;32617:18;32627:7;32617:9;:18::i;:::-;:30;32613:421;;-1:-1:-1;32665:1:0;32658:8;;32613:421;32706:7;32684:18;32694:7;32684:9;:18::i;:::-;:29;32680:354;;-1:-1:-1;32731:1:0;32724:8;;32680:354;32772:7;32750:18;32760:7;32750:9;:18::i;:::-;:29;32746:288;;-1:-1:-1;32797:1:0;32790:8;;32746:288;32838:7;32816:18;32826:7;32816:9;:18::i;:::-;:29;32812:222;;-1:-1:-1;32863:1:0;32856:8;;32812:222;32904:7;32882:18;32892:7;32882:9;:18::i;:::-;:29;32878:156;;-1:-1:-1;32929:1:0;32922:8;;32878:156;32970:6;32948:18;32958:7;32948:9;:18::i;:::-;:28;32944:90;;-1:-1:-1;32994:1:0;32987:8;;32944:90;-1:-1:-1;33025:1:0;33018:8;;31064:128;-1:-1:-1;;;;;31163:23:0;31140:7;31163:23;;;:14;:23;;;;;;;31064:128::o;25912:24::-;;;;:::o;23972:20::-;;;-1:-1:-1;;;;;23972:20:0;;:::o;28910:83::-;28980:7;28973:14;;;;;;;;-1:-1:-1;;28973:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28951:13;;28973:14;;28980:7;;28973:14;;28980:7;28973:14;;;;;;;;;;;;;;;;;;;;;;;;25795:26;;;;:::o;30419:334::-;30529:4;30545:184;30562:12;:10;:12::i;:::-;30583:7;30599:123;30648:15;30599:123;;;;;;;;;;;;;;;;;:11;:25;30611:12;:10;:12::i;:::-;-1:-1:-1;;;;;30599:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30599:25:0;;;:34;;;;;;;;;;;:123;;:38;:123;:::i;25136:26::-;;;-1:-1:-1;;;;;25136:26:0;;:::o;29375:159::-;29455:4;29468:42;29478:12;:10;:12::i;:::-;29492:9;29503:6;29468:9;:42::i;25197:30::-;;;;:::o;45158:2160::-;45327:15;;;;45311:118;;;;-1:-1:-1;;;45311:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45468:10;;-1:-1:-1;;;;;45468:10:0;45452:12;:10;:12::i;:::-;-1:-1:-1;;;;;45452:26:0;;:51;;;-1:-1:-1;45498:5:0;;-1:-1:-1;;;;;45498:5:0;45482:12;:10;:12::i;:::-;-1:-1:-1;;;;;45482:21:0;;45452:51;45436:138;;;;-1:-1:-1;;;45436:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45644:17;;45615:26;;:46;45597:15;:64;45581:157;;;;-1:-1:-1;;;45581:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45761:11;;-1:-1:-1;;;;;45761:11:0;45745:118;;;;-1:-1:-1;;;45745:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45878:15;;-1:-1:-1;;;;;45878:15:0;45870:95;;;;-1:-1:-1;;;45870:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45995:11;;45988:44;;;-1:-1:-1;;;45988:44:0;;46026:4;45988:44;;;;;;46035:1;;-1:-1:-1;;;;;45995:11:0;;45988:29;;:44;;;;;;;;;;;;;;45995:11;45988:44;;;2:2:-1;;;;27:1;24;17:12;2:2;45988:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45988:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45988:44:0;:48;45972:131;;;;-1:-1:-1;;;45972:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46145:15;:17;;;;;;46231:15;46202:26;:44;46366:11;;46324;;46317:44;;;-1:-1:-1;;;46317:44:0;;46355:4;46317:44;;;;;;46145:15;;46317:61;;46366:11;;-1:-1:-1;;;;;46324:11:0;;;;46317:29;;:44;;;;;;;;;;;;;;;46324:11;46317:44;;;2:2:-1;;;;27:1;24;17:12;2:2;46317:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46317:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46317:44:0;;:61;:48;:61;:::i;:::-;46432:11;;46453:15;;46425:56;;;-1:-1:-1;;;46425:56:0;;-1:-1:-1;;;;;46453:15:0;;;46425:56;;;;;;;;;;;;46296:82;;-1:-1:-1;46432:11:0;;;46425:27;;:56;;;;;;;;;;;;;;;46432:11;;46425:56;;;2:2:-1;;;;27:1;24;17:12;2:2;46425:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46425:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46425:56:0;46417:65;;12:1:-1;9;2:12;46417:65:0;46625:15;;46606:207;;;-1:-1:-1;;;46606:207:0;;46708:4;46606:207;;;;;;;;;;46579:17;46606:207;;;;;;;;;;;;-1:-1:-1;;;;;46606:207:0;;;;;;;46789:15;46606:207;;;;;;46579:17;;46625:15;;;;;46606:83;;:207;;;;;;;;;;;;;;;46579:17;46625:15;46606:207;;;2:2:-1;;;;27:1;24;17:12;2:2;46606:207:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46606:207:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;46606:207:0;46979:16;;46954:20;;46606:207;;-1:-1:-1;46929:68:0;;46954:42;;;:24;:42;:::i;:::-;46929:20;;;:68;:24;:68;:::i;:::-;46916:9;:81;;46900:164;;;;-1:-1:-1;;;46900:164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47105:20;:32;;;47178:64;;;-1:-1:-1;;;47178:64:0;;;;;;;;;;;;;;-1:-1:-1;;;;;47178:45:0;;;;;47224:8;;;;47234:7;;;;47178:64;;;;;;;;47224:8;47178:64;;;;47224:8;47178:64;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;47178:64:0;;;;;;;;;;;;;-1:-1:-1;47178:64:0;;;;;;;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;47178:64:0;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47178:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47178:64:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;47178:64:0;47170:73;;12:1:-1;9;2:12;47170:73:0;47257:55;47272:9;47283;47294:8;;47304:7;;47257:55;;;;-1:-1:-1;;;;;47257:55:0;-1:-1:-1;;;;;47257:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;47257:55:0;;;;;;;;;;;;;-1:-1:-1;47257:55:0;;;;;;;1:33:-1;99:1;81:16;;;74:27;47257:55:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;47257:55:0;;;;-1:-1:-1;47257:55:0;;-1:-1:-1;;;;;;;;;47257:55:0;45158:2160;;;;;;;:::o;44466:145::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44555:1:::1;44544:8;:12;:31;;;;;44572:3;44560:8;:15;;44544:31;44536:40;;12:1:-1;9::::0;2:12:::1;44536:40:0;44583:11;:22:::0;44466:145::o;47324:2454::-;47374:14;47391:12;:10;:12::i;:::-;47426:15;;47374:29;;-1:-1:-1;47426:15:0;;47410:118;;;;-1:-1:-1;;;47410:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47579:13;;47551:24;47569:4;47551:9;:24::i;:::-;:41;;47535:138;;;;-1:-1:-1;;;47535:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47709:3;47688:17;47698:6;47688:9;:17::i;:::-;:24;;47680:83;;;;-1:-1:-1;;;47680:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47854:9;;47843:4;47804:20;47827:22;;;:7;:22;;;;;;47804:20;;47827:46;;47869:3;;47827:37;;:22;:37;:26;:37;:::i;:::-;:41;:46;:41;:46;:::i;:::-;47917:4;47880:18;47901:22;;;:7;:22;;;;;;47804:69;;-1:-1:-1;47880:18:0;47901:40;;47804:69;47901:40;:26;:40;:::i;:::-;47880:61;-1:-1:-1;47950:12:0;47965:17;47880:61;47980:1;47965:17;:14;:17;:::i;:::-;47950:32;-1:-1:-1;47989:17:0;48009:20;:10;47950:32;48009:20;:14;:20;:::i;:::-;-1:-1:-1;;;;;48099:15:0;;;;;;:7;:15;;;;;;47989:40;;-1:-1:-1;48099:33:0;;48119:12;48099:33;:19;:33;:::i;:::-;-1:-1:-1;;;;;48081:15:0;;;;;;:7;:15;;;;;;;;;:51;;;;48553:16;;48567:1;48553:16;;;48529:21;48553:16;;;;;48415:21;;48529;;48553:16;;;;48081:15;109:14:-1;48553:16:0;88:42:-1;144:17;;-1:-1;48553:16:0;48529:40;;48594:4;48576;48581:1;48576:7;;;;;;;;-1:-1:-1;;;;;48576:23:0;;;:7;;;;;;;;;;:23;;;;48635:15;;48616:42;;;-1:-1:-1;;;48616:42:0;;;;48635:15;;;;;48616:40;;:42;;;;;48576:7;;48616:42;;;;;48635:15;48616:42;;;2:2:-1;;;;27:1;24;17:12;2:2;48616:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48616:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;48616:42:0;48606:7;;:4;;48611:1;;48606:7;;;;;;-1:-1:-1;;;;;48606:52:0;;;:7;;;;;;;;;:52;48699:15;;48667:55;;48684:4;;48699:15;48717:4;48667:8;:55::i;:::-;48772:15;;-1:-1:-1;;;;;48772:15:0;48753:86;48848:21;48864:4;48848:15;:21::i;:::-;48878:1;48916:4;48937;48951:15;48753:220;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48753:220:0;-1:-1:-1;;;;;48753:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;48753:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48753:220:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48753:220:0;;;;49026:17;49046:41;49072:14;49046:21;:25;;:41;;;;:::i;:::-;49224:15;;49026:61;;-1:-1:-1;49192:77:0;;49209:4;;-1:-1:-1;;;;;49224:15:0;49242:26;49258:9;49242:15;:26::i;49192:77::-;49356:15;;49309:17;;-1:-1:-1;;;;;49356:15:0;49337:51;49397:9;49427:4;49443:26;49459:9;49443:15;:26::i;:::-;49337:269;;;-1:-1:-1;;;;;;49337:269:0;;;;;;;-1:-1:-1;;;;;49337:269:0;;;;;;;;;;;;;;49480:1;49337:269;;;;;;;;;;49566:4;49337:269;;;;49582:15;49337:269;;;;;;;;;;;;;;;;;;;;;;;;2:2:-1;;;;27:1;24;17:12;2:2;49337:269:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49337:269:0;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;49337:269:0;;;;-1:-1:-1;49620:152:0;49644:12;:10;:12::i;:::-;49665:9;49683:26;49699:9;49683:15;:26::i;:::-;49718:29;49734:12;49718:15;:29::i;:::-;49620:152;;;-1:-1:-1;;;;;49620:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47324:2454;;;;;;;;;:::o;43596:192::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43676:22:0;::::1;43668:31;;12:1:-1;9::::0;2:12:::1;43668:31:0;43706:15;:26:::0;;-1:-1:-1;;;;;;43706:26:0::1;-1:-1:-1::0;;;;;43706:26:0;::::1;::::0;;::::1;::::0;;;43746:36:::1;::::0;;;;;43766:15:::1;43746:36;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;43596:192:::0;:::o;44306:154::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44400:1:::1;44389:8;:12;:30;;;;;44417:2;44405:8;:14;;44389:30;44381:39;;12:1:-1;9::::0;2:12:::1;44381:39:0;44427:16;:27:::0;44306:154::o;29540:143::-;-1:-1:-1;;;;;29648:20:0;;;29625:7;29648:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;29540:143::o;25358:41::-;;;;:::o;25687:26::-;;;;:::o;34145:325::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34223:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;34222:20;34214:86;;;;-1:-1:-1::0;;;34214:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;34311:16:0;::::1;34330:1;34311:16:::0;;;:7:::1;:16;::::0;;;;;:20;34307:95:::1;;-1:-1:-1::0;;;;;34377:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34361:33:::1;::::0;:15:::1;:33::i;:::-;-1:-1:-1::0;;;;;34342:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:52;34307:95:::1;-1:-1:-1::0;;;;;34408:19:0::1;;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;34408:26:0::1;34430:4;34408:26:::0;;::::1;::::0;;;34441:9:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;34441::0;;;;::::1;::::0;;-1:-1:-1;;;;;;34441:23:0::1;::::0;;::::1;::::0;;34145:325::o;28579:136::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28661:23:0;::::1;28653:32;;12:1:-1;9::::0;2:12:::1;28653:32:0;28692:5;:17:::0;;-1:-1:-1;;;;;;28692:17:0::1;-1:-1:-1::0;;;;;28692:17:0;;;::::1;::::0;;;::::1;::::0;;28579:136::o;33703:436::-;26493:5;;-1:-1:-1;;;;;26493:5:0;26477:12;:10;:12::i;:::-;-1:-1:-1;;;;;26477:21:0;;26461:129;;;;-1:-1:-1;;;26461:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33780:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;33772:85;;;;-1:-1:-1::0;;;33772:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33869:9;33864:270;33888:9;:16:::0;33884:20;::::1;33864:270;;;33940:7;-1:-1:-1::0;;;;;33924:23:0::1;:9;33934:1;33924:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33924:12:0::1;:23;33920:207;;;33975:9;33985:16:::0;;-1:-1:-1;;33985:20:0;;;33975:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33960:9:::1;:12:::0;;-1:-1:-1;;;;;33975:31:0;;::::1;::::0;33970:1;;33960:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33960:46:0::1;-1:-1:-1::0;;;;;33960:46:0;;::::1;;::::0;;34017:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34048:10:::1;:19:::0;;;;:27;;-1:-1:-1;;34048:27:0::1;::::0;;34086:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34086:15:0;;;;;-1:-1:-1;;;;;;34086:15:0::1;::::0;;;;;34112:5:::1;;33920:207;33906:3;;33864:270;;;;33703:436:::0;:::o;33045:652::-;33113:14;33130:12;:10;:12::i;:::-;-1:-1:-1;;;;;33166:18:0;;;;;;:10;:18;;;;;;33113:29;;-1:-1:-1;33166:18:0;;33165:19;33149:125;;;;-1:-1:-1;;;33149:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33282:15;33309:27;33320:6;33328:7;33309:10;:27::i;:::-;-1:-1:-1;;;;;;;;;33396:15:0;;;;;;:7;:15;;;;;;33281:55;;-1:-1:-1;33396:28:0;;33281:55;33396:19;:28::i;:::-;-1:-1:-1;;;;;33378:15:0;;;;;;:7;:15;;;;;:46;;;33456:58;;33386:6;;33481:32;;:15;:32::i;:::-;33456:16;:58::i;:::-;33583:11;;:24;;33599:7;33583:24;:15;:24;:::i;:::-;33569:11;:38;33669:9;;:22;;33683:7;33669:22;:13;:22;:::i;:::-;33657:9;:34;-1:-1:-1;;;33045:652:0:o;14024:143::-;14082:7;14110:1;14106;:5;14098:44;;;;;-1:-1:-1;;;14098:44:0;;;;;;;;;;;;-1:-1:-1;;;14098:44:0;;;;;;;;;;;;;;;14160:1;14156;:5;;;;;;;14024:143;-1:-1:-1;;;14024:143:0:o;12985:148::-;13043:7;13072:1;13067;:6;;13059:49;;;;;-1:-1:-1;;;13059:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13122:5:0;;;12985:148::o;652:100::-;736:10;652:100;:::o;35662:347::-;-1:-1:-1;;;;;35773:21:0;;35765:70;;;;-1:-1:-1;;;35765:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35850:21:0;;35842:68;;;;-1:-1:-1;;;35842:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35919:20:0;;;;;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;:38;;;35969:34;;;;;;;;;;;;;;;;;35662:347;;;:::o;36015:877::-;-1:-1:-1;;;;;36128:20:0;;36120:70;;;;-1:-1:-1;;;36120:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36205:23:0;;36197:71;;;;-1:-1:-1;;;36197:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36292:1;36283:6;:10;36275:64;;;;-1:-1:-1;;;36275:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36352:18:0;;;;;;:10;:18;;;;;;;;:44;;;;-1:-1:-1;;;;;;36375:21:0;;;;;;:10;:21;;;;;;;;36374:22;36352:44;36348:539;;;36407:48;36429:6;36437:9;36448:6;36407:21;:48::i;:::-;36348:539;;;-1:-1:-1;;;;;36474:18:0;;;;;;:10;:18;;;;;;;;36473:19;:44;;;;-1:-1:-1;;;;;;36496:21:0;;;;;;:10;:21;;;;;;;;36473:44;36469:418;;;36528:46;36548:6;36556:9;36567:6;36528:19;:46::i;36469:418::-;-1:-1:-1;;;;;36593:18:0;;;;;;:10;:18;;;;;;;;36592:19;:45;;;;-1:-1:-1;;;;;;36616:21:0;;;;;;:10;:21;;;;;;;;36615:22;36592:45;36588:299;;;36648:44;36666:6;36674:9;36685:6;36648:17;:44::i;36588:299::-;-1:-1:-1;;;;;36710:18:0;;;;;;:10;:18;;;;;;;;:43;;;;-1:-1:-1;;;;;;36732:21:0;;;;;;:10;:21;;;;;;;;36710:43;36706:181;;;36764:48;36786:6;36794:9;36805:6;36764:21;:48::i;36706:181::-;36835:44;36853:6;36861:9;36872:6;36835:17;:44::i;:::-;36015:877;;;:::o;15200:176::-;15306:7;15338:12;15330:6;;;;15322:29;;;;-1:-1:-1;;;15322:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15322:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15365:5:0;;;15200:176::o;12559:165::-;12617:7;12645:5;;;12665:6;;;;12657:46;;;;;-1:-1:-1;;;12657:46:0;;;;;;;;;;;;-1:-1:-1;;;12657:46:0;;;;;;;;;;;;;;;12717:1;12559:165;-1:-1:-1;;;12559:165:0:o;35372:284::-;35437:7;35480:11;;35469:7;:22;;35453:120;;;;-1:-1:-1;;;35453:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35580:19;35602:10;:8;:10::i;:::-;35580:32;-1:-1:-1;35626:24:0;:7;35580:32;35626:24;:11;:24;:::i;13370:202::-;13428:7;13448:6;13444:20;;-1:-1:-1;13463:1:0;13456:8;;13444:20;13483:5;;;13487:1;13483;:5;:1;13503:5;;;;;:10;13495:56;;;;-1:-1:-1;;;13495:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40788:483;40886:7;40902;40918;40934;40950;40976:23;41001:12;41017:28;41029:6;41037:7;41017:11;:28::i;:::-;40975:70;;;;41052:19;41074:10;:8;:10::i;:::-;41052:32;;41092:15;41109:23;41134:12;41157:39;41169:7;41178:4;41184:11;41157;:39::i;:::-;41091:105;;;;-1:-1:-1;41091:105:0;;-1:-1:-1;41243:15:0;;-1:-1:-1;41260:4:0;;-1:-1:-1;40788:483:0;;-1:-1:-1;;;;;;;40788:483:0:o;39815:516::-;-1:-1:-1;;;;;39915:23:0;;39892:20;39915:23;;;:14;:23;;;;;;39949:16;;;;;:84;;-1:-1:-1;;;;;;39969:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;39990:16:0;;39969:38;;;;;;;:48;40021:12;39969:64;39949:84;39945:307;;;-1:-1:-1;;;;;40044:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;40065:16:0;;40044:38;;;;;;;;:44;:55;;;39945:307;;;40159:34;;;;;;;;40170:12;40159:34;;;;;;;;;-1:-1:-1;;;;;40122:20:0;;-1:-1:-1;40122:20:0;;;:11;:20;;;;;;:34;;;;;;;;:71;;;;;;;;;;;;;40202:23;;:14;:23;;;;;;40228:16;;;40202:42;;39945:307;40265:60;40290:7;40299:25;40315:8;40299:15;:25::i;:::-;40265:60;;;-1:-1:-1;;;;;40265:60:0;;;;;;;;;;;;;;;;;;;;;39815:516;;;:::o;38473:634::-;38592:15;38619:27;38630:6;38638:7;38619:10;:27::i;:::-;-1:-1:-1;;;;;;;;;38720:15:0;;;;;;:7;:15;;;;;;38591:55;;-1:-1:-1;38720:28:0;;38740:7;38720:19;:28::i;:::-;-1:-1:-1;;;;;38702:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38802:7;:15;;;;:28;;38822:7;38802:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;38784:15:0;;;;;;;:7;:15;;;;;;:46;;;;38858:18;;;;;;;:31;;38881:7;38858:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;38837:18:0;;;;;;;:7;:18;;;;;;:52;;;;38963:15;;;;;;;38922:58;;38939:6;;38947:32;;:15;:32::i;38922:58::-;-1:-1:-1;;;;;39031:18:0;;;;;;:7;:18;;;;;;38987:64;;39004:9;;39015:35;;:15;:35::i;38987:64::-;39082:9;-1:-1:-1;;;;;39065:36:0;39074:6;-1:-1:-1;;;;;39065:36:0;-1:-1:-1;;;;;;;;;;;39093:7:0;39065:36;;;;;;;;;;;;;;;;;;38473:634;;;;:::o;37627:840::-;37752:15;37776:23;37808:12;37829:23;37861:12;37883:27;37894:6;37902:7;37883:10;:27::i;:::-;-1:-1:-1;;;;;37987:18:0;;;;;;:7;:18;;;;;;37743:167;;-1:-1:-1;37743:167:0;;-1:-1:-1;37743:167:0;;-1:-1:-1;37743:167:0;-1:-1:-1;37743:167:0;-1:-1:-1;37987:39:0;;37743:167;37987:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;37966:18:0;;;;;;;:7;:18;;;;;;;;:60;;;;38080:15;;;;;:7;:15;;;;;:28;;38100:7;38080:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;38062:15:0;;;;;;;:7;:15;;;;;;:46;;;;38136:18;;;;;;;:39;;38159:15;38136:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;38115:18:0;;;;;;;:7;:18;;;;;;:60;;;;38249:15;;;;;;;38208:58;;38225:6;;38233:32;;:15;:32::i;38208:58::-;-1:-1:-1;;;;;38317:18:0;;;;;;:7;:18;;;;;;38273:64;;38290:9;;38301:35;;:15;:35::i;38273:64::-;38379:26;38394:4;38400;38379:14;:26::i;:::-;38434:9;-1:-1:-1;;;;;38417:44:0;38426:6;-1:-1:-1;;;;;38417:44:0;-1:-1:-1;;;;;;;;;;;38445:15:0;38417:44;;;;;;;;;;;;;;;;;;37627:840;;;;;;;;:::o;36898:723::-;37021:15;37045:23;37077:12;37098:23;37130:12;37152:27;37163:6;37171:7;37152:10;:27::i;:::-;-1:-1:-1;;;;;37234:15:0;;;;;;:7;:15;;;;;;37012:167;;-1:-1:-1;37012:167:0;;-1:-1:-1;37012:167:0;;-1:-1:-1;37012:167:0;-1:-1:-1;37012:167:0;-1:-1:-1;37234:28:0;;37012:167;37234:28;:19;:28;:::i;39113:696::-;39232:15;39259:27;39270:6;39278:7;39259:10;:27::i;:::-;-1:-1:-1;;;;;;;;;39362:15:0;;;;;;:7;:15;;;;;;39231:55;;-1:-1:-1;39362:28:0;;39382:7;39362:19;:28::i;:::-;-1:-1:-1;;;;;39344:15:0;;;;;;;:7;:15;;;;;;:46;;;;39418:18;;;;;;;:31;;39441:7;39418:31;:22;:31;:::i;:::-;-1:-1:-1;;;;;39397:18:0;;;;;;;:7;:18;;;;;;;;:52;;;;39504:15;;;;;:7;:15;;;;;:28;;39524:7;39504:28;:19;:28;:::i;42754:154::-;42796:7;42813:15;42830;42849:19;:17;:19::i;:::-;42812:56;;-1:-1:-1;42812:56:0;-1:-1:-1;42882:20:0;42812:56;;42882:20;:11;:20;:::i;:::-;42875:27;;;;42754:154;:::o;41277:233::-;41353:7;41362;41378:12;41393:24;41401:6;41409:7;41393;:24::i;:::-;41378:39;-1:-1:-1;41424:23:0;41450:17;:7;41378:39;41450:17;:11;:17;:::i;:::-;41424:43;41499:4;;-1:-1:-1;41277:233:0;;-1:-1:-1;;;;41277:233:0:o;41516:382::-;41654:7;;;;41729:24;:7;41741:11;41729:24;:11;:24;:::i;:::-;41711:42;-1:-1:-1;41760:12:0;41775:21;:4;41784:11;41775:21;:8;:21;:::i;:::-;41760:36;-1:-1:-1;41803:23:0;41829:17;:7;41760:36;41829:17;:11;:17;:::i;:::-;41861:7;;;;-1:-1:-1;41887:4:0;;-1:-1:-1;41516:382:0;;-1:-1:-1;;;;;41516:382:0:o;40337:445::-;40497:15;40515:21;40524:11;;40515:4;:8;;:21;;;;:::i;:::-;40584:4;40568:22;;;;:7;:22;;;;;;40497:39;;-1:-1:-1;40568:35:0;;40497:39;40568:35;:26;:35;:::i;:::-;40559:4;40543:22;;;;:7;:22;;;;;:60;40669:34;40685:17;:4;40694:7;40685:17;:8;:17;:::i;:::-;40669:11;;;:34;:15;:34;:::i;:::-;40655:11;:48;40757:9;;:19;;40771:4;40757:19;:13;:19;:::i;42914:557::-;43008:11;;42965:7;;;;24968:10;42965:7;43063:285;43087:9;:16;43083:20;;43063:285;;;43147:7;43123;:21;43131:9;43141:1;43131:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43131:12:0;43123:21;;;;;;;;;;;;;:31;;:66;;;43182:7;43158;:21;43166:9;43176:1;43166:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43166:12:0;43158:21;;;;;;;;;;;;;:31;43123:66;43119:115;;;43208:11;;24968:10;43200:34;;;;;;;;;43119:115;43253:34;43265:7;:21;43273:9;43283:1;43273:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43273:12:0;43265:21;;;;;;;;;;;;;43253:7;;:34;:11;:34;:::i;:::-;43243:44;;43306:34;43318:7;:21;43326:9;43336:1;43326:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43326:12:0;43318:21;;;;;;;;;;;;;43306:7;;:34;:11;:34;:::i;:::-;43296:44;-1:-1:-1;43105:3:0;;43063:285;;;-1:-1:-1;43368:11:0;;:29;;24968:10;43368:29;:15;:29;:::i;:::-;43358:7;:39;43354:79;;;43407:11;;24968:10;43399:34;;;;;;;;43354:79;43448:7;;-1:-1:-1;43457:7:0;-1:-1:-1;42914:557:0;;;:::o;41904:844::-;41977:7;42019:9;41997:18;42007:7;41997:9;:18::i;:::-;:31;41993:750;;-1:-1:-1;42046:1:0;42039:8;;41993:750;42087:8;42065:18;42075:7;42065:9;:18::i;:::-;:30;42061:682;;42113:16;:7;42125:3;42113:16;:11;:16;:::i;:::-;42106:23;;;;42061:682;42169:8;42147:18;42157:7;42147:9;:18::i;:::-;:30;42143:600;;42195:15;:7;42207:2;42195:15;:11;:15;:::i;42143:600::-;42250:8;42228:18;42238:7;42228:9;:18::i;:::-;:30;42224:519;;42276:15;:7;42288:2;42276:15;:11;:15;:::i;42224:519::-;42331:7;42309:18;42319:7;42309:9;:18::i;:::-;:29;42305:438;;42356:15;:7;42368:2;42356:15;:11;:15;:::i;42305:438::-;42411:7;42389:18;42399:7;42389:9;:18::i;:::-;:29;42385:358;;42436:15;:7;42448:2;42436:15;:11;:15;:::i;42385:358::-;42491:7;42469:18;42479:7;42469:9;:18::i;:::-;:29;42465:278;;42516:15;:7;42528:2;42516:15;:11;:15;:::i;42465:278::-;42571:7;42549:18;42559:7;42549:9;:18::i;:::-;:29;42545:198;;42596:15;:7;42608:2;42596:15;:11;:15;:::i;42545:198::-;42651:6;42629:18;42639:7;42629:9;:18::i;:::-;:28;42625:118;;42675:15;:7;42687:2;42675:15;:11;:15;:::i;42625:118::-;42720:15;:7;42732:2;42720:15;:11;:15;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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