Contract 0x4c9fa6297d3413fbbe7ba935e14022d0e5a39dc7

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x572b5b8f6297ed174c34804734e9b96eecf6dbca33ba09302297b7187cbe5e420x67b98bc8108995982021-07-25 12:46:1662 days 14 hrs ago0x5c31632bfd26b5fb4399c2fa947dd8cc3927a5d8 IN  Contract Creation0 BNB0.05592318
[ Download CSV Export 
Latest 3 internal transactions
Parent Txn Hash Block From To Value
0x572b5b8f6297ed174c34804734e9b96eecf6dbca33ba09302297b7187cbe5e42108995982021-07-25 12:46:1662 days 14 hrs ago 0x4c9fa6297d3413fbbe7ba935e14022d0e5a39dc7 0x2696f94f11dff0d77875e2652fcdb537274b9ce70 BNB
0x572b5b8f6297ed174c34804734e9b96eecf6dbca33ba09302297b7187cbe5e42108995982021-07-25 12:46:1662 days 14 hrs ago 0x4c9fa6297d3413fbbe7ba935e14022d0e5a39dc7 0xa78618818503902f369748a6fb3b379f6897aaab0 BNB
0x572b5b8f6297ed174c34804734e9b96eecf6dbca33ba09302297b7187cbe5e42108995982021-07-25 12:46:1662 days 14 hrs ago 0x4c9fa6297d3413fbbe7ba935e14022d0e5a39dc7 0xa78618818503902f369748a6fb3b379f6897aaab0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KUCINO

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: k.sol

// File: kucino.sol

//SPDX-License-Identifier:
/* (C) @Sam4x 2021, ftm.guru, kcc.guru & fmc.guru */
/* (C) ELITE FTM1337 | https://ftm.guru */

pragma solidity >=0.6.8;

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    //Locks the contract from owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}
interface IKucinoToken {

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


interface IEliteDEXFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

interface IEliteDEXRouter02 is IEliteDEXRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

// File: contracts/protocols/token/Utils.sol

pragma solidity >=0.6.8;


library Utils {
    using SafeMath for uint256;

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
                    block.number +
                    salty
                )
            )
        );
        return seed.mod(to - from) + from;
    }

    function isLotteryWon(uint256 salty, uint256 winningDoubleRewardPercentage) private view returns (bool) {
        uint256 luckyNumber = random(0, 100, salty);
        uint256 winPercentage = winningDoubleRewardPercentage;
        return luckyNumber <= winPercentage;
    }

    function calculateKCSReward(
        uint256 _tTotal,
        uint256 currentBalance,
        uint256 currentKCSPool,
        uint256 winningDoubleRewardPercentage,
        uint256 totalSupply,
        address ofAddress
    ) public view returns (uint256) {
        uint256 bnbPool = currentKCSPool;

        // calculate reward to send
        bool isLotteryWonOnClaim = isLotteryWon(currentBalance, winningDoubleRewardPercentage);
        uint256 multiplier = 100;

        if (isLotteryWonOnClaim) {
            multiplier = random(150, 200, currentBalance);
        }

        // now calculate reward
        uint256 reward = bnbPool.mul(multiplier).mul(currentBalance).div(100).div(totalSupply);

        return reward;
    }

    function calculateTopUpClaim(
        uint256 currentRecipientBalance,
        uint256 basedRewardCycleBlock,
        uint256 threshHoldTopUpRate,
        uint256 amount
    ) public returns (uint256) {
        if (currentRecipientBalance == 0) {
            return block.timestamp + basedRewardCycleBlock;
        }
        else {
            uint256 rate = amount.mul(100).div(currentRecipientBalance);

            if (uint256(rate) >= threshHoldTopUpRate) {
                uint256 incurCycleBlock = basedRewardCycleBlock.mul(uint256(rate)).div(100);

                if (incurCycleBlock >= basedRewardCycleBlock) {
                    incurCycleBlock = basedRewardCycleBlock;
                }

                return incurCycleBlock;
            }

            return 0;
        }
    }

    function swapTokensForEth(
        address routerAddress,
        uint256 tokenAmount
    ) public {
        IEliteDEXRouter02 eliteDEXRouter = IEliteDEXRouter02(routerAddress);

        // generate the eliteDEX pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = eliteDEXRouter.WETH();

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

    function swapETHForTokens(
        address routerAddress,
        address recipient,
        uint256 ethAmount
    ) public {
        IEliteDEXRouter02 eliteDEXRouter = IEliteDEXRouter02(routerAddress);

        // generate the eliteDEX pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = eliteDEXRouter.WETH();
        path[1] = address(this);

        // make the swap
        eliteDEXRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of KCS
            path,
            address(recipient),
            block.timestamp + 360
        );
    }

    function addLiquidity(
        address routerAddress,
        address owner,
        uint256 tokenAmount,
        uint256 ethAmount
    ) public {
        IEliteDEXRouter02 eliteDEXRouter = IEliteDEXRouter02(routerAddress);

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

// File: contracts/protocols/token/ReentrancyGuard.sol

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

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

    uint256 private _status;

    constructor () public {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

    modifier isHuman() {
        require(tx.origin == msg.sender, "sorry humans only");
        _;
    }
}


pragma experimental ABIEncoderV2;



contract KUCINO is Context, IKucinoToken, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isExcludedFromMaxTx;
    address[] private _excluded;

    mapping(address => uint256) public nextAvailableClaimDate;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 13370000000 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Kucino Casino";
    string private _symbol = "KUCINO";
    uint8 private _decimals = 9;

    IEliteDEXRouter02 public immutable eliteDEXRouter;
    address public immutable eliteDEXPair;

    uint256 public rewardCycleBlock = 73 hours; //general
    uint256 public easyRewardCycleBlock = 21 hours; //early-bird

    uint256 public threshHoldTopUpRate = 2; // 2 percent
    uint256 public _maxTxAmount = _tTotal; // 0.1% set at activateContract()

    uint256 public disruptiveTransferEnabledFrom = 0; //set after activation
    uint256 public disruptiveCoverageFee = 2 ether; // antiwhale
    bool public swapAndLiquifyEnabled = false; // should be true
    uint256 public disableEasyRewardFrom = 0; //set after activation

    ////Jackpot for Claimers
    uint256 public winningDoubleRewardPercentage = 5;

    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 8; // 50% will be added pool, 50% will be converted to KCS
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public rewardThreshold = 2 ether; //max claim without 20% tax

    uint256 minTokenNumberToSell = _tTotal.div(100000); // 0.001% trigger swap and add liquidity

    ////Reward Statistics, on-chain
    uint256 public totalReward = 0;
    mapping(address => uint256) public totalRewards;

    bool inSwapAndLiquify = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event ClaimKCSSuccessfully(
        address recipient,
        uint256 ethReceived,
        uint256 nextAvailableClaimDate
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor (
        address payable routerAddress
    ) public {
        _rOwned[_msgSender()] = _rTotal;

        IEliteDEXRouter02 _eliteDEXRouter = IEliteDEXRouter02(routerAddress);
        // Create a eliteDEX pair for this new token
        eliteDEXPair = IEliteDEXFactory(_eliteDEXRouter.factory())
        .createPair(address(this), _eliteDEXRouter.WETH());

        // set the rest of the contract variables
        eliteDEXRouter = _eliteDEXRouter;

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

        // exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    //routerAddress
    //97:0xA78618818503902f369748A6fb3B379f6897AaaB
    //321:0x6074e20633d2d8fbdf82119867a81581cabe06dd

    function name() public view returns (string memory) {
        return _name;
    }

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }


    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function calculateKCSReward(address ofAddress) public view returns (uint256) {
        uint256 totalSupply = uint256(_tTotal)
        .sub(balanceOf(address(0)))
        .sub(balanceOf(0x000000000000000000000000000000000000dEaD)) // exclude burned wallet
        .sub(balanceOf(address(eliteDEXPair)));
        // exclude liquidity wallet

        return Utils.calculateKCSReward(
            _tTotal,
            balanceOf(address(ofAddress)),
            address(this).balance,
            winningDoubleRewardPercentage,
            totalSupply,
            ofAddress
        );
    }

    function getRewardCycleBlock() public view returns (uint256) {
        if (block.timestamp >= disableEasyRewardFrom) return rewardCycleBlock;
        return easyRewardCycleBlock;
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != eliteDEXRouter, 'Omni fault: EliteDEX router.');
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }


    //E.L.I.T.E. D.A.O. Treasury Address
    address public LP = 0x167D87A906dA361A10061fe42bbe89451c2EE584;
	////Extensible LP TimeLock
    address public ADM = 0x167D87A906dA361A10061fe42bbe89451c2EE584;
	////A(irdrops)D(ev)M(arketring)
    address public KuPot = 0x167D87A906dA361A10061fe42bbe89451c2EE584;
    ////KuPOT Jackpot builds 1% each txn


    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setReapers(address _LP, address _ADM, address _KuPot) public onlyOwner {
    	if(!(LP==_LP)){LP=_LP;}
    	if(!(ADM ==_ADM)){ADM = _ADM;}
    	if(!(KuPot==_KuPot)){KuPot=_KuPot;}
    	////A(irdrops)D(ev)M(arketring) : To D.A.O.
    	////KuPot is KUCINO JackPot, ticket costs .1 KCS
    }

    //to receive KCS from eliteDEXRouter when swapping
    //to receive KCS from the Re-Roller Jackpot
    receive() external payable {}

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


    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10 ** 2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10 ** 2
        );
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

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

        ensureMaxTxAmount(from, to, amount, value);

        // swap and liquify
        swapAndLiquify(from, to);

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount.mul(197).div(200), takeFee);
        _tokenTransfer(from, KuPot, amount.sub(amount.mul(198).div(200)), false);
        _tokenTransfer(from, ADM, amount.sub(amount.mul(199).div(200)), false);
        ////A(irdrops)D(ev)M(arketring)
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee)
            removeAllFee();

        // top up claim cycle
        topUpClaimCycleAfterTransfer(recipient, amount);

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

        if (!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


    function setMaxTxPercent(uint256 maxTxPercent) public onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10000); //// 1_ === 0.01%
    }

    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner {
        _isExcludedFromMaxTx[_address] = value;
    }


    function claimKCSReward() isHuman nonReentrant public {
        require(nextAvailableClaimDate[msg.sender] <= block.timestamp, 'Error: next available not reached');
        require(balanceOf(msg.sender) >= 0, 'Error: must own KUCINO to claim reward');

        uint256 reward = calculateKCSReward(msg.sender);

        // reward thresholds
        if ((reward >= rewardThreshold)||(totalRewards[msg.sender] > 100 ether)) {
            Utils.swapETHForTokens(
                address(eliteDEXRouter),
                address(0x000000000000000000000000000000000000dEaD),
                reward.div(5)
            );
            reward = reward.sub(reward.div(5));
        }

        // update rewardCycleBlock
        nextAvailableClaimDate[msg.sender] = block.timestamp + getRewardCycleBlock();
        emit ClaimKCSSuccessfully(msg.sender, reward, nextAvailableClaimDate[msg.sender]);
        // update Statistics
        totalRewards[msg.sender]=totalRewards[msg.sender].add(reward);
        totalReward=totalReward.add(reward);

        (bool sent,) = address(msg.sender).call{value : reward}("");
        require(sent, 'Error: Cannot withdraw reward');
    }

    function topUpClaimCycleAfterTransfer(address recipient, uint256 amount) private {
        uint256 currentRecipientBalance = balanceOf(recipient);
        uint256 basedRewardCycleBlock = getRewardCycleBlock();

        nextAvailableClaimDate[recipient] = nextAvailableClaimDate[recipient] + Utils.calculateTopUpClaim(
            currentRecipientBalance,
            basedRewardCycleBlock,
            threshHoldTopUpRate,
            amount
        );
    }

    function ensureMaxTxAmount(
        address from,
        address to,
        uint256 amount,
        uint256 value
    ) private {
        if (
            _isExcludedFromMaxTx[from] == false && // default will be false
            _isExcludedFromMaxTx[to] == false // default will be false
        ) {
            if (value < disruptiveCoverageFee && block.timestamp >= disruptiveTransferEnabledFrom) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }
    }

    function disruptiveTransfer(address recipient, uint256 amount) public payable returns (bool) {
        _transfer(_msgSender(), recipient, amount, msg.value);
        return true;
    }

    function swapAndLiquify(address from, address to) private {
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is eliteDEX pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool shouldSell = contractTokenBalance >= minTokenNumberToSell;

        if (
            !inSwapAndLiquify &&
        shouldSell &&
        from != eliteDEXPair &&
        swapAndLiquifyEnabled &&
        !(from == address(this) && to == address(eliteDEXPair)) // swap 1 time
        ) {
            // only sell for minTokenNumberToSell, decouple from _maxTxAmount
            contractTokenBalance = minTokenNumberToSell;

            // add liquidity
            // split the contract balance into 3 pieces
            uint256 pooledKCS = contractTokenBalance.div(2);
            uint256 piece = contractTokenBalance.sub(pooledKCS).div(2);
            uint256 otherPiece = contractTokenBalance.sub(piece);

            uint256 tokenAmountToBeSwapped = pooledKCS.add(piece);

            uint256 initialBalance = address(this).balance;

            // now is to lock into staking pool
            Utils.swapTokensForEth(address(eliteDEXRouter), tokenAmountToBeSwapped);

            // how much KCS did we just swap into?

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

            uint256 bnbToBeAddedToLiquidity = deltaBalance.div(3);

            // add liquidity to eliteDEX
            Utils.addLiquidity(address(eliteDEXRouter), LP, otherPiece, bnbToBeAddedToLiquidity);

            emit SwapAndLiquify(piece, deltaBalance, otherPiece);
        }
    }

    function activateContract() public onlyOwner {
        // reward claim
        disableEasyRewardFrom = block.timestamp + 1 weeks;
        // whale trap
        disruptiveTransferEnabledFrom = block.timestamp;
        setMaxTxPercent(10);////0.1%
        setSwapAndLiquifyEnabled(true);
        // approve S&L
        _approve(address(this), address(eliteDEXRouter), 2 ** 256 - 1);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"ClaimKCSSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KuPot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateKCSReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimKCSReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEasyRewardFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disruptiveCoverageFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"disruptiveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"disruptiveTransferEnabledFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"easyRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eliteDEXPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eliteDEXRouter","outputs":[{"internalType":"contract IEliteDEXRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextAvailableClaimDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCycleBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_LP","type":"address"},{"internalType":"address","name":"_ADM","type":"address"},{"internalType":"address","name":"_KuPot","type":"address"}],"name":"setReapers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshHoldTopUpRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winningDoubleRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

67b98bc829a6f90000600c5567b7851d22190bffff19600d90815561010060405260c08190526c4b7563696e6f20436173696e6f60981b60e09081526200004a91600f9190620005e6565b50604080518082019091526006808252654b5543494e4f60d01b60209092019182526200007a91601091620005e6565b5060118054600960ff1991821617909155620402906012556201275060135560026014819055600c54601581905560006016819055671bc16d674ec800006017819055601880549095169094556019556005601a55601b829055601c919091556008601d819055601e55601f919091556200010590620186a06200053d602090811b62001c0617901c565b6020556000602155602380546001600160a81b03191674167d87a906da361a10061fe42bbe89451c2ee584001790556024805473167d87a906da361a10061fe42bbe89451c2ee5846001600160a01b031991821681179092556025805490911690911790553480156200017757600080fd5b5060405162003c6d38038062003c6d8339810160408190526200019a9162000688565b6000620001af6001600160e01b036200058e16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600355600d5460046000620002186001600160e01b036200058e16565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b6919062000688565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a919062000688565b6040518363ffffffff1660e01b815260040162000359929190620006a7565b602060405180830381600087803b1580156200037457600080fd5b505af115801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000688565b6001600160601b0319606091821b811660a0529082901b16608052600160076000620003e36001600160e01b036200059316565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260079092528120805490921660019081179092556009906200043c6001600160e01b036200059316565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600990925281208054831660019081179091557f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580548416821790559080527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054909216179055620004e66001600160e01b036200058e16565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200052d919062000717565b60405180910390a3505062000739565b60006200058783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005a260201b60201c565b9392505050565b335b90565b6000546001600160a01b031690565b60008183620005cf5760405162461bcd60e51b8152600401620005c69190620006c1565b60405180910390fd5b506000838581620005dc57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200062957805160ff191683800117855562000659565b8280016001018555821562000659579182015b82811115620006595782518255916020019190600101906200063c565b50620006679291506200066b565b5090565b6200059091905b8082111562000667576000815560010162000672565b6000602082840312156200069a578081fd5b8151620005878162000720565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620006ef57858101830151858201604001528201620006d1565b81811115620007015783604083870101525b50601f01601f1916929092016040019392505050565b90815260200190565b6001600160a01b03811681146200073657600080fd5b50565b60805160601c60a05160601c6134e762000786600039806119435280611b3a52806120a552806121045250806112955280611545528061163c52806121cc528061228552506134e76000f3fe6080604052600436106103845760003560e01c80637156bc69116101d1578063a69df4b511610102578063d543dbeb116100a0578063ea2f0b371161006f578063ea2f0b371461095b578063eccf8d081461097b578063f2fde38b14610990578063fda48a73146109b05761038b565b8063d543dbeb146108db578063dcd6fbc6146108fb578063dd4670641461091b578063dd62ed3e1461093b5761038b565b8063b47fd563116100dc578063b47fd56314610871578063b6c5232414610891578063b6fccf8a146108a6578063c49b9a80146108bb5761038b565b8063a69df4b51461081c578063a9059cbb14610831578063ab7573dd146108515761038b565b80638fda356d1161016f57806395d89b411161014957806395d89b41146107bd5780639bb4dc60146107d2578063a43dcef0146107e7578063a457c2d7146107fc5761038b565b80638fda356d1461077e5780638feed79a1461079357806395ba68d7146107a85761038b565b80637d1db4a5116101ab5780637d1db4a51461071457806388f82020146107295780638da5cb5b146107495780638ee88c531461075e5761038b565b80637156bc69146106d55780637217f4bc146106ea578063750142e6146106ff5761038b565b80633d87ea75116102b65780635b89029c116102545780636bc87c3a116102235780636bc87c3a146106765780636d33a4681461068b57806370a08231146106a0578063715018a6146106c05761038b565b80635b89029c146106175780635d758ea2146106375780635e4196ab1461064c5780635ea4d29c146106615761038b565b80634a74bb02116102905780634a74bb02146105a05780634bc2f371146105b557806352390c02146105d75780635342acb4146105f75761038b565b80633d87ea751461054d578063437823ec146105605780634549b039146105805761038b565b80632d8381191161032357806337ad7cf5116102fd57806337ad7cf5146104e357806339509351146104f85780633b124fe7146105185780633bd5d1731461052d5761038b565b80632d83811914610481578063313ce567146104a15780633685d419146104c35761038b565b8063095ea7b31161035f578063095ea7b3146103fd57806313114a9d1461042a57806318160ddd1461044c57806323b872dd146104615761038b565b806263a75a14610390578063061c82d0146103b257806306fdde03146103d25761038b565b3661038b57005b600080fd5b34801561039c57600080fd5b506103b06103ab366004612bff565b6109c5565b005b3480156103be57600080fd5b506103b06103cd366004612d05565b610aa5565b3480156103de57600080fd5b506103e7610adf565b6040516103f49190612dff565b60405180910390f35b34801561040957600080fd5b5061041d610418366004612cbf565b610b76565b6040516103f49190612df4565b34801561043657600080fd5b5061043f610b94565b6040516103f49190613399565b34801561045857600080fd5b5061043f610b9a565b34801561046d57600080fd5b5061041d61047c366004612c44565b610ba0565b34801561048d57600080fd5b5061043f61049c366004612d05565b610c2f565b3480156104ad57600080fd5b506104b6610c78565b6040516103f49190613404565b3480156104cf57600080fd5b506103b06104de366004612bb0565b610c81565b3480156104ef57600080fd5b5061043f610dea565b34801561050457600080fd5b5061041d610513366004612cbf565b610df0565b34801561052457600080fd5b5061043f610e44565b34801561053957600080fd5b506103b0610548366004612d05565b610e4a565b61041d61055b366004612cbf565b610f11565b34801561056c57600080fd5b506103b061057b366004612bb0565b610f26565b34801561058c57600080fd5b5061043f61059b366004612d35565b610f7f565b3480156105ac57600080fd5b5061041d610fdc565b3480156105c157600080fd5b506105ca610fe5565b6040516103f49190612d59565b3480156105e357600080fd5b506103b06105f2366004612bb0565b610ff4565b34801561060357600080fd5b5061041d610612366004612bb0565b611122565b34801561062357600080fd5b506103b0610632366004612c84565b611140565b34801561064357600080fd5b506103b06111a0565b34801561065857600080fd5b5061043f61145c565b34801561066d57600080fd5b5061043f611462565b34801561068257600080fd5b5061043f611468565b34801561069757600080fd5b5061043f61146e565b3480156106ac57600080fd5b5061043f6106bb366004612bb0565b611474565b3480156106cc57600080fd5b506103b06114d6565b3480156106e157600080fd5b506105ca611543565b3480156106f657600080fd5b5061043f611567565b34801561070b57600080fd5b5061043f61156d565b34801561072057600080fd5b5061043f611573565b34801561073557600080fd5b5061041d610744366004612bb0565b611579565b34801561075557600080fd5b506105ca611597565b34801561076a57600080fd5b506103b0610779366004612d05565b6115a6565b34801561078a57600080fd5b506103b06115e0565b34801561079f57600080fd5b5061043f611665565b3480156107b457600080fd5b5061043f61166b565b3480156107c957600080fd5b506103e7611671565b3480156107de57600080fd5b5061043f6116d2565b3480156107f357600080fd5b506105ca6116ed565b34801561080857600080fd5b5061041d610817366004612cbf565b6116fc565b34801561082857600080fd5b506103b061176a565b34801561083d57600080fd5b5061041d61084c366004612cbf565b611804565b34801561085d57600080fd5b5061043f61086c366004612bb0565b61181a565b34801561087d57600080fd5b5061043f61088c366004612bb0565b61182c565b34801561089d57600080fd5b5061043f61183e565b3480156108b257600080fd5b506105ca611844565b3480156108c757600080fd5b506103b06108d6366004612ce9565b611858565b3480156108e757600080fd5b506103b06108f6366004612d05565b6118d6565b34801561090757600080fd5b5061043f610916366004612bb0565b611938565b34801561092757600080fd5b506103b0610936366004612d05565b611a3c565b34801561094757600080fd5b5061043f610956366004612bcb565b611ab7565b34801561096757600080fd5b506103b0610976366004612bb0565b611ae2565b34801561098757600080fd5b506105ca611b38565b34801561099c57600080fd5b506103b06109ab366004612bb0565b611b5c565b3480156109bc57600080fd5b5061043f611c00565b6109cd611c4f565b6000546001600160a01b03908116911614610a035760405162461bcd60e51b81526004016109fa9061319f565b60405180910390fd5b6023546001600160a01b038481166101009092041614610a3e5760238054610100600160a81b0319166101006001600160a01b038616021790555b6024546001600160a01b03838116911614610a6f57602480546001600160a01b0319166001600160a01b0384161790555b6025546001600160a01b03828116911614610aa057602580546001600160a01b0319166001600160a01b0383161790555b505050565b610aad611c4f565b6000546001600160a01b03908116911614610ada5760405162461bcd60e51b81526004016109fa9061319f565b601b55565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b820191906000526020600020905b815481529060010190602001808311610b4e57829003601f168201915b505050505090505b90565b6000610b8a610b83611c4f565b8484611c53565b5060015b92915050565b600e5490565b600c5490565b6000610baf8484846000611d07565b610c2584610bbb611c4f565b610c20856040518060600160405280602e8152602001613464602e91396001600160a01b038a16600090815260066020526040812090610bf9611c4f565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611e6616565b611c53565b5060019392505050565b6000600d54821115610c535760405162461bcd60e51b81526004016109fa90612e93565b6000610c5d611e92565b9050610c6f838263ffffffff611c0616565b9150505b919050565b60115460ff1690565b610c89611c4f565b6000546001600160a01b03908116911614610cb65760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b03811660009081526008602052604090205460ff16610cee5760405162461bcd60e51b81526004016109fa90613034565b60005b600a54811015610de657816001600160a01b0316600a8281548110610d1257fe5b6000918252602090912001546001600160a01b03161415610dde57600a80546000198101908110610d3f57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610d6557fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600890925220805460ff19169055600a805480610db757fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610de6565b600101610cf1565b5050565b60135481565b6000610b8a610dfd611c4f565b84610c208560066000610e0e611c4f565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611ebb16565b601b5481565b6000610e54611c4f565b6001600160a01b03811660009081526008602052604090205490915060ff1615610e905760405162461bcd60e51b81526004016109fa9061330a565b6000610e9b83611ee0565b505050506001600160a01b038416600090815260046020526040902054919250610ec791905082611f2f565b6001600160a01b038316600090815260046020526040902055600d54610ef3908263ffffffff611f2f16565b600d55600e54610f09908463ffffffff611ebb16565b600e55505050565b6000610b8a610f1e611c4f565b848434611d07565b610f2e611c4f565b6000546001600160a01b03908116911614610f5b5760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600c54831115610fa35760405162461bcd60e51b81526004016109fa9061306b565b81610fc2576000610fb384611ee0565b50939550610b8e945050505050565b6000610fcd84611ee0565b50929550610b8e945050505050565b60185460ff1681565b6024546001600160a01b031681565b610ffc611c4f565b6000546001600160a01b039081169116146110295760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b03811660009081526008602052604090205460ff16156110625760405162461bcd60e51b81526004016109fa90613034565b6001600160a01b038116600090815260046020526040902054156110bc576001600160a01b0381166000908152600460205260409020546110a290610c2f565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6001600160a01b031660009081526007602052604090205460ff1690565b611148611c4f565b6000546001600160a01b039081169116146111755760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3233146111bf5760405162461bcd60e51b81526004016109fa906130ea565b600260035414156111e25760405162461bcd60e51b81526004016109fa906132d3565b6002600355336000908152600b60205260409020544210156112165760405162461bcd60e51b81526004016109fa90612e52565b600061122133611474565b101561123f5760405162461bcd60e51b81526004016109fa906131d4565b600061124a33611938565b9050601f548110158061127457503360009081526022602052604090205468056bc75e2d63100000105b1561133d57732239e3c4cc148548f74491c121329d78560d3ab563c549d3ae7f000000000000000000000000000000000000000000000000000000000000000061dead6112c885600563ffffffff611c0616565b6040518463ffffffff1660e01b81526004016112e693929190612d8e565b60006040518083038186803b1580156112fe57600080fd5b505af4158015611312573d6000803e3d6000fd5b5050505061133a61132d600583611c0690919063ffffffff16565b829063ffffffff611f2f16565b90505b6113456116d2565b336000818152600b602052604090819020429390930192839055517f6a76d540aea10d264717dae3c8a3d2c88f3537ab0ec5590e3563e838f3e112ee9261138f9291859190612d6d565b60405180910390a1336000908152602260205260409020546113b7908263ffffffff611ebb16565b336000908152602260205260409020556021546113da908263ffffffff611ebb16565b602155604051600090339083906113f090610b73565b60006040518083038185875af1925050503d806000811461142d576040519150601f19603f3d011682016040523d82523d6000602084013e611432565b606091505b50509050806114535760405162461bcd60e51b81526004016109fa90613265565b50506001600355565b60165481565b601f5481565b601d5481565b60175481565b6001600160a01b03811660009081526008602052604081205460ff16156114b457506001600160a01b038116600090815260056020526040902054610c73565b6001600160a01b038216600090815260046020526040902054610b8e90610c2f565b6114de611c4f565b6000546001600160a01b0390811691161461150b5760405162461bcd60e51b81526004016109fa9061319f565b600080546040516001600160a01b0390911690600080516020613492833981519152908390a3600080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b60215481565b60155481565b6001600160a01b031660009081526008602052604090205460ff1690565b6000546001600160a01b031690565b6115ae611c4f565b6000546001600160a01b039081169116146115db5760405162461bcd60e51b81526004016109fa9061319f565b601d55565b6115e8611c4f565b6000546001600160a01b039081169116146116155760405162461bcd60e51b81526004016109fa9061319f565b4262093a80810160195560165561162c600a6118d6565b6116366001611858565b611663307f0000000000000000000000000000000000000000000000000000000000000000600019611c53565b565b601a5481565b60195481565b60108054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b600060195442106116e65750601254610b73565b5060135490565b6025546001600160a01b031681565b6000610b8a611709611c4f565b84610c20856040518060600160405280602b8152602001613439602b913960066000611733611c4f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611e6616565b6001546001600160a01b031633146117945760405162461bcd60e51b81526004016109fa90613356565b60025442116117b55760405162461bcd60e51b81526004016109fa9061329c565b600154600080546040516001600160a01b03938416939091169160008051602061349283398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610b8a611811611c4f565b84846000611d07565b60226020526000908152604090205481565b600b6020526000908152604090205481565b60025490565b60235461010090046001600160a01b031681565b611860611c4f565b6000546001600160a01b0390811691161461188d5760405162461bcd60e51b81526004016109fa9061319f565b6018805460ff19168215151790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118cb908390612df4565b60405180910390a150565b6118de611c4f565b6000546001600160a01b0390811691161461190b5760405162461bcd60e51b81526004016109fa9061319f565b61193261271061192683600c54611f7190919063ffffffff16565b9063ffffffff611c0616565b60155550565b60008061199d6119677f0000000000000000000000000000000000000000000000000000000000000000611474565b61199161197561dead611474565b6119916119826000611474565b600c549063ffffffff611f2f16565b9063ffffffff611f2f16565b9050732239e3c4cc148548f74491c121329d78560d3ab563bc70eeff600c546119c586611474565b47601a5486896040518763ffffffff1660e01b81526004016119ec969594939291906133d3565b60206040518083038186803b158015611a0457600080fd5b505af4158015611a18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6f9190612d1d565b611a44611c4f565b6000546001600160a01b03908116911614611a715760405162461bcd60e51b81526004016109fa9061319f565b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613492833981519152908290a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b611aea611c4f565b6000546001600160a01b03908116911614611b175760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b03166000908152600760205260409020805460ff19169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b64611c4f565b6000546001600160a01b03908116911614611b915760405162461bcd60e51b81526004016109fa9061319f565b6001600160a01b038116611bb75760405162461bcd60e51b81526004016109fa90612edd565b600080546040516001600160a01b038085169392169160008051602061349283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60145481565b6000611c4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fab565b9392505050565b3390565b6001600160a01b038316611c795760405162461bcd60e51b81526004016109fa90612fea565b6001600160a01b038216611c9f5760405162461bcd60e51b81526004016109fa90612f23565b6001600160a01b0380841660008181526006602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611cfa908590613399565b60405180910390a3505050565b6001600160a01b038416611d2d5760405162461bcd60e51b81526004016109fa9061321a565b6001600160a01b038316611d535760405162461bcd60e51b81526004016109fa90613115565b60c88211611d735760405162461bcd60e51b81526004016109fa90612fa2565b611d7f84848484611fe2565b611d898484612069565b6001600160a01b03841660009081526007602052604090205460019060ff1680611dcb57506001600160a01b03841660009081526007602052604090205460ff165b15611dd4575060005b611df58585611def60c86119268860c563ffffffff611f7116565b84612338565b602554611e349086906001600160a01b0316611e2d611e2060c86119268960c663ffffffff611f7116565b879063ffffffff611f2f16565b6000612338565b602454611e5f9086906001600160a01b0316611e2d611e2060c86119268960c763ffffffff611f7116565b5050505050565b60008184841115611e8a5760405162461bcd60e51b81526004016109fa9190612dff565b505050900390565b6000806000611e9f6124b0565b9092509050611eb4828263ffffffff611c0616565b9250505090565b600082820183811015611c485760405162461bcd60e51b81526004016109fa90612f6b565b6000806000806000806000806000611ef78a612625565b9250925092506000806000611f158d8686611f10611e92565b612667565b919f909e50909c50959a5093985091965092945050505050565b6000611c4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e66565b600082611f8057506000610b8e565b82820282848281611f8d57fe5b0414611c485760405162461bcd60e51b81526004016109fa9061315e565b60008183611fcc5760405162461bcd60e51b81526004016109fa9190612dff565b506000838581611fd857fe5b0495945050505050565b6001600160a01b03841660009081526009602052604090205460ff1615801561202457506001600160a01b03831660009081526009602052604090205460ff16155b15612063576017548110801561203c57506016544210155b15612063576015548211156120635760405162461bcd60e51b81526004016109fa906130a2565b50505050565b600061207430611474565b9050601554811061208457506015545b602054602354908210159060ff1615801561209c5750805b80156120da57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b80156120e8575060185460ff165b801561213a57506001600160a01b0384163014801561213857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b155b15612063576020549150600061215783600263ffffffff611c0616565b905060006121706002611926868563ffffffff611f2f16565b90506000612184858363ffffffff611f2f16565b90506000612198848463ffffffff611ebb16565b6040516356feb11b60e01b81529091504790732239e3c4cc148548f74491c121329d78560d3ab5906356feb11b906121f6907f0000000000000000000000000000000000000000000000000000000000000000908690600401612ddb565b60006040518083038186803b15801561220e57600080fd5b505af4158015612222573d6000803e3d6000fd5b50505050600061223b8247611f2f90919063ffffffff16565b9050600061225082600363ffffffff611c0616565b6023546040516367b6317560e11b8152919250732239e3c4cc148548f74491c121329d78560d3ab59163cf6c62ea916122c0917f00000000000000000000000000000000000000000000000000000000000000009161010090046001600160a01b0316908a908790600401612db2565b60006040518083038186803b1580156122d857600080fd5b505af41580156122ec573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868387604051612323939291906133a2565b60405180910390a15050505050505050505050565b80612345576123456126cf565b61234f8383612700565b6001600160a01b03841660009081526008602052604090205460ff16801561239057506001600160a01b03831660009081526008602052604090205460ff16155b156123a5576123a08484846127cf565b6124a3565b6001600160a01b03841660009081526008602052604090205460ff161580156123e657506001600160a01b03831660009081526008602052604090205460ff165b156123f6576123a0848484612905565b6001600160a01b03841660009081526008602052604090205460ff1615801561243857506001600160a01b03831660009081526008602052604090205460ff16155b15612448576123a08484846129c0565b6001600160a01b03841660009081526008602052604090205460ff16801561248857506001600160a01b03831660009081526008602052604090205460ff165b15612498576123a0848484612a0a565b6124a38484846129c0565b8061206357612063612a89565b600d54600c546000918291825b600a548110156125ed578260046000600a84815481106124d957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061253e57508160056000600a848154811061251757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561255557600d54600c5494509450505050612621565b61259b60046000600a848154811061256957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849063ffffffff611f2f16565b92506125e360056000600a84815481106125b157fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839063ffffffff611f2f16565b91506001016124bd565b50600c54600d546126039163ffffffff611c0616565b82101561261b57600d54600c54935093505050612621565b90925090505b9091565b60008060008061263485612a97565b9050600061264186612ab3565b9050600061265982611991898663ffffffff611f2f16565b979296509094509092505050565b600080808061267c888663ffffffff611f7116565b90506000612690888763ffffffff611f7116565b905060006126a4888863ffffffff611f7116565b905060006126bc82611991868663ffffffff611f2f16565b939b939a50919850919650505050505050565b601b541580156126df5750601d54155b156126e957611663565b601b8054601c55601d8054601e5560009182905555565b600061270b83611474565b905060006127176116d2565b601454604051638958b5a960e01b8152919250732239e3c4cc148548f74491c121329d78560d3ab591638958b5a991612758918691869189906004016133b8565b60206040518083038186803b15801561277057600080fd5b505af4158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190612d1d565b6001600160a01b039094166000908152600b60205260409020805494909401909355505050565b6000806000806000806127e187611ee0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612819908863ffffffff611f2f16565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461284e908763ffffffff611f2f16565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612883908663ffffffff611ebb16565b6001600160a01b0389166000908152600460205260409020556128a581612acf565b6128af8483612b69565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128f29190613399565b60405180910390a3505050505050505050565b60008060008060008061291787611ee0565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061294f908763ffffffff611f2f16565b6001600160a01b03808b16600090815260046020908152604080832094909455918b1681526005909152205461298b908463ffffffff611ebb16565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612883908663ffffffff611ebb16565b6000806000806000806129d287611ee0565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061284e908763ffffffff611f2f16565b600080600080600080612a1c87611ee0565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612a54908863ffffffff611f2f16565b6001600160a01b038a1660009081526005602090815260408083209390935560049052205461294f908763ffffffff611f2f16565b601c54601b55601e54601d55565b6000610b8e6064611926601b5485611f7190919063ffffffff16565b6000610b8e6064611926601d5485611f7190919063ffffffff16565b6000612ad9611e92565b90506000612aed838363ffffffff611f7116565b30600090815260046020526040902054909150612b10908263ffffffff611ebb16565b3060009081526004602090815260408083209390935560089052205460ff1615610aa05730600090815260056020526040902054612b54908463ffffffff611ebb16565b30600090815260056020526040902055505050565b600d54612b7c908363ffffffff611f2f16565b600d55600e54612b92908263ffffffff611ebb16565b600e555050565b80356001600160a01b0381168114610b8e57600080fd5b600060208284031215612bc1578081fd5b611c488383612b99565b60008060408385031215612bdd578081fd5b612be78484612b99565b9150612bf68460208501612b99565b90509250929050565b600080600060608486031215612c13578081fd5b612c1d8585612b99565b9250612c2c8560208601612b99565b9150612c3b8560408601612b99565b90509250925092565b600080600060608486031215612c58578283fd5b8335612c6381613412565b92506020840135612c7381613412565b929592945050506040919091013590565b60008060408385031215612c96578182fd5b612ca08484612b99565b915060208301358015158114612cb4578182fd5b809150509250929050565b60008060408385031215612cd1578182fd5b612cdb8484612b99565b946020939093013593505050565b600060208284031215612cfa578081fd5b8135611c488161342a565b600060208284031215612d16578081fd5b5035919050565b600060208284031215612d2e578081fd5b5051919050565b60008060408385031215612d47578182fd5b823591506020830135612cb48161342a565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b81811015612e2b57858101830151858201604001528201612e0f565b81811115612e3c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f4572726f723a206e65787420617661696c61626c65206e6f74207265616368656040820152601960fa1b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526028908201527f4b7563696e6f546f6b656e3a20617070726f766520746f20746865207a65726f604082015267206164647265737360c01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060408201526707468616e203230360c41b606082015260800190565b6020808252602a908201527f4b7563696e6f546f6b656e3a20617070726f76652066726f6d20746865207a65604082015269726f206164647265737360b01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b602080825260119082015270736f7272792068756d616e73206f6e6c7960781b604082015260600190565b60208082526029908201527f4b7563696e6f546f6b656e3a207472616e7366657220746f20746865207a65726040820152686f206164647265737360b81b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f4572726f723a206d757374206f776e204b5543494e4f20746f20636c61696d206040820152651c995dd85c9960d21b606082015260800190565b6020808252602b908201527f4b7563696e6f546f6b656e3a207472616e736665722066726f6d20746865207a60408201526a65726f206164647265737360a81b606082015260800190565b6020808252601d908201527f4572726f723a2043616e6e6f7420776974686472617720726577617264000000604082015260600190565b6020808252601f908201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526023908201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6040820152626f636b60e81b606082015260800190565b90815260200190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b95865260208601949094526040850192909252606084015260808301526001600160a01b031660a082015260c00190565b60ff91909116815260200190565b6001600160a01b038116811461342757600080fd5b50565b801515811461342757600080fdfe4b7563696e6f546f6b656e3a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4b7563696e6f546f6b656e3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122041f0140076a8ee91fb2c92d3a72f8437fb28b50c50d05d8df6d2f51b13689ad764736f6c63430006080033000000000000000000000000a78618818503902f369748a6fb3b379f6897aaab

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

000000000000000000000000a78618818503902f369748a6fb3b379f6897aaab
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a78618818503902f369748a6fb3b379f6897aaab


Deployed ByteCode Sourcemap

32862:23663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;44540:302:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;44540:302:0;;;;;;;;:::i;:::-;;44125:98;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;44125:98:0;;;;;;;;:::i;36634:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36634:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;37549:161;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37549:161:0;;;;;;;;:::i;:::-;;;;;;;;38685:87;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38685:87:0;;;:::i;:::-;;;;;;;;36911:95;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36911:95:0;;;:::i;37718:322::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37718:322:0;;;;;;;;:::i;42354:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;42354:253:0;;;;;;;;:::i;36820:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36820:83:0;;;:::i;:::-;;;;;;;;43037:479;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;43037:479:0;;;;;;;;:::i;33926:46::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33926:46:0;;;:::i;38048:218::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38048:218:0;;;;;;;;:::i;34501:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34501:26:0;;;:::i;41524:377::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;41524:377:0;;;;;;;;:::i;53678:187::-;;;;;;;;;:::i;43888:111::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;43888:111:0;;;;;;;;:::i;41909:437::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;41909:437:0;;;;;;;;:::i;34276:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34276:41:0;;;:::i;43666:63::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43666:63:0;;;:::i;:::-;;;;;;;;42615:414;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;42615:414:0;;;;;;;;:::i;46228:124::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;46228:124:0;;;;;;;;:::i;51316:133::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;51316:133:0;;;;;;;;:::i;51459:1186::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51459:1186:0;;;:::i;34132:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34132:48:0;;;:::i;34741:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34741:40:0;;;:::i;34584:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34584:32:0;;;:::i;34210:46::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34210:46:0;;;:::i;37014:198::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37014:198:0;;;;;;;;:::i;13762:148::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13762:148:0;;;:::i;33765:49::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33765:49:0;;;:::i;33867:42::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33867:42:0;;;:::i;34955:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34955:30:0;;;:::i;34052:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34052:37:0;;;:::i;38557:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38557:120:0;;;;;;;;:::i;13126:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13126:79:0;;;:::i;44231:122::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;44231:122:0;;;;;;;;:::i;56127:395::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56127:395:0;;;:::i;34444:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34444:48:0;;;:::i;34342:40::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34342:40:0;;;:::i;36725:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36725:87:0;;;:::i;41329:187::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41329:187:0;;;:::i;43770:65::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43770:65:0;;;:::i;38274:275::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;38274:275:0;;;;;;;;:::i;14769:293::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14769:293:0;;;:::i;37220:170::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37220:170:0;;;;;;;;:::i;34992:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;34992:47:0;;;;;;;;:::i;33384:57::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;33384:57:0;;;;;;;;:::i;14317:89::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14317:89:0;;;:::i;43568:62::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43568:62:0;;;:::i;44361:171::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;44361:171:0;;;;;;;;:::i;51154:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;51154:154:0;;;;;;;;:::i;40720:601::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;40720:601:0;;;;;;;;:::i;14483:214::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;14483:214:0;;;;;;;;:::i;37398:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;37398:143:0;;;;;;;;:::i;44007:110::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;44007:110:0;;;;;;;;:::i;33821:37::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33821:37:0;;;:::i;14065:244::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;14065:244:0;;;;;;;;:::i;33994:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33994:38:0;;;:::i;44540:302::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;;;;;;;;;44633:2:::1;::::0;-1:-1:-1;;;;;44633:7:0;;::::1;:2;::::0;;::::1;;:7;44628:23;;44643:2;:6:::0;;-1:-1:-1;;;;;;44643:6:0::1;;-1:-1:-1::0;;;;;44643:6:0;::::1;;;::::0;;44628:23:::1;44663:3;::::0;-1:-1:-1;;;;;44663:10:0;;::::1;:3:::0;::::1;:10;44658:30;;44676:3;:10:::0;;-1:-1:-1;;;;;;44676:10:0::1;-1:-1:-1::0;;;;;44676:10:0;::::1;;::::0;;44658:30:::1;44700:5;::::0;-1:-1:-1;;;;;44700:13:0;;::::1;:5:::0;::::1;:13;44695:35;;44716:5;:12:::0;;-1:-1:-1;;;;;;44716:12:0::1;-1:-1:-1::0;;;;;44716:12:0;::::1;;::::0;;44695:35:::1;44540:302:::0;;;:::o;44125:98::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;44199:7:::1;:16:::0;44125:98::o;36634:83::-;36704:5;36697:12;;;;;;;;-1:-1:-1;;36697:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36671:13;;36697:12;;36704:5;;36697:12;;36704:5;36697:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36634:83;;:::o;37549:161::-;37624:4;37641:39;37650:12;:10;:12::i;:::-;37664:7;37673:6;37641:8;:39::i;:::-;-1:-1:-1;37698:4:0;37549:161;;;;;:::o;38685:87::-;38754:10;;38685:87;:::o;36911:95::-;36991:7;;36911:95;:::o;37718:322::-;37816:4;37833:39;37843:6;37851:9;37862:6;37870:1;37833:9;:39::i;:::-;37883:127;37892:6;37900:12;:10;:12::i;:::-;37914:95;37952:6;37914:95;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37914:19:0;;;;;;:11;:19;;;;;;37934:12;:10;:12::i;:::-;-1:-1:-1;;;;;37914:33:0;;;;;;;;;;;;-1:-1:-1;37914:33:0;;;:95;;:37;:95;:::i;:::-;37883:8;:127::i;:::-;-1:-1:-1;38028:4:0;37718:322;;;;;:::o;42354:253::-;42421:7;42460;;42449;:18;;42441:73;;;;-1:-1:-1;;;42441:73:0;;;;;;;;;42525:19;42547:10;:8;:10::i;:::-;42525:32;-1:-1:-1;42575:24:0;:7;42525:32;42575:24;:11;:24;:::i;:::-;42568:31;;;42354:253;;;;:::o;36820:83::-;36886:9;;;;36820:83;:::o;43037:479::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;43119:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;43111:60;;;;-1:-1:-1::0;;;43111:60:0::1;;;;;;;;;43187:9;43182:327;43206:9;:16:::0;43202:20;::::1;43182:327;;;43264:7;-1:-1:-1::0;;;;;43248:23:0::1;:9;43258:1;43248:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;43248:12:0::1;:23;43244:254;;;43307:9;43317:16:::0;;-1:-1:-1;;43317:20:0;;;43307:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;43292:9:::1;:12:::0;;-1:-1:-1;;;;;43307:31:0;;::::1;::::0;43302:1;;43292:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;43292:46:0::1;-1:-1:-1::0;;;;;43292:46:0;;::::1;;::::0;;43357:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;43396:11:::1;:20:::0;;;;:28;;-1:-1:-1;;43396:28:0::1;::::0;;43443:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;43443:15:0;;;;;-1:-1:-1;;;;;;43443:15:0::1;::::0;;;;;43477:5:::1;;43244:254;43224:3;;43182:327;;;;43037:479:::0;:::o;33926:46::-;;;;:::o;38048:218::-;38136:4;38153:83;38162:12;:10;:12::i;:::-;38176:7;38185:50;38224:10;38185:11;:25;38197:12;:10;:12::i;:::-;-1:-1:-1;;;;;38185:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;38185:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;34501:26::-;;;;:::o;41524:377::-;41576:14;41593:12;:10;:12::i;:::-;-1:-1:-1;;;;;41625:19:0;;;;;;:11;:19;;;;;;41576:29;;-1:-1:-1;41625:19:0;;41624:20;41616:77;;;;-1:-1:-1;;;41616:77:0;;;;;;;;;41705:15;41729:19;41740:7;41729:10;:19::i;:::-;-1:-1:-1;;;;;;;;;41777:15:0;;;;;;:7;:15;;;;;;41704:44;;-1:-1:-1;41777:28:0;;:15;-1:-1:-1;41704:44:0;41777:19;:28::i;:::-;-1:-1:-1;;;;;41759:15:0;;;;;;:7;:15;;;;;:46;41826:7;;:20;;41838:7;41826:20;:11;:20;:::i;:::-;41816:7;:30;41870:10;;:23;;41885:7;41870:23;:14;:23;:::i;:::-;41857:10;:36;-1:-1:-1;;;41524:377:0:o;53678:187::-;53765:4;53782:53;53792:12;:10;:12::i;:::-;53806:9;53817:6;53825:9;53782;:53::i;43888:111::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;43957:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;43957:34:0::1;43987:4;43957:34;::::0;;43888:111::o;41909:437::-;42000:7;42039;;42028;:18;;42020:62;;;;-1:-1:-1;;;42020:62:0;;;;;;;;;42098:17;42093:246;;42133:15;42157:19;42168:7;42157:10;:19::i;:::-;-1:-1:-1;42132:44:0;;-1:-1:-1;42191:14:0;;-1:-1:-1;;;;;42191:14:0;42093:246;42240:23;42271:19;42282:7;42271:10;:19::i;:::-;-1:-1:-1;42238:52:0;;-1:-1:-1;42305:22:0;;-1:-1:-1;;;;;42305:22:0;34276:41;;;;;;:::o;43666:63::-;;;-1:-1:-1;;;;;43666:63:0;;:::o;42615:414::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;42778:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;42777:21;42769:61;;;;-1:-1:-1::0;;;42769:61:0::1;;;;;;;;;-1:-1:-1::0;;;;;42845:16:0;::::1;42864:1;42845:16:::0;;;:7:::1;:16;::::0;;;;;:20;42841:109:::1;;-1:-1:-1::0;;;;;42921:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;42901:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;42882:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;42841:109:::1;-1:-1:-1::0;;;;;42960:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;42960:27:0::1;42983:4;42960:27:::0;;::::1;::::0;;;42998:9:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;42998::0;;;;::::1;::::0;;-1:-1:-1;;;;;;42998:23:0::1;::::0;;::::1;::::0;;42615:414::o;46228:124::-;-1:-1:-1;;;;;46317:27:0;46293:4;46317:27;;;:18;:27;;;;;;;;;46228:124::o;51316:133::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;51403:30:0;;;::::1;;::::0;;;:20:::1;:30;::::0;;;;:38;;-1:-1:-1;;51403:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51316:133::o;51459:1186::-;32747:9;32760:10;32747:23;32739:53;;;;-1:-1:-1;;;32739:53:0;;;;;;;;;31755:1:::1;32359:7;;:19;;32351:63;;;;-1:-1:-1::0;;;32351:63:0::1;;;;;;;;;31755:1;32492:7;:18:::0;51555:10:::2;51532:34;::::0;;;:22:::2;:34;::::0;;;;;51570:15:::2;-1:-1:-1::0;51532:53:0::2;51524:99;;;;-1:-1:-1::0;;;51524:99:0::2;;;;;;;;;51667:1;51642:21;51652:10;51642:9;:21::i;:::-;:26;;51634:77;;;;-1:-1:-1::0;;;51634:77:0::2;;;;;;;;;51724:14;51741:30;51760:10;51741:18;:30::i;:::-;51724:47;;51829:15;;51819:6;:25;;51818:67;;;-1:-1:-1::0;51861:10:0::2;51848:24;::::0;;;:12:::2;:24;::::0;;;;;51875:9:::2;-1:-1:-1::0;51818:67:0::2;51814:330;;;51902:5;:22;51951:14;51993:42;52055:13;:6:::0;52066:1:::2;52055:13;:10;:13;:::i;:::-;51902:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;51902:181:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;51902:181:0;;;;52107:25;52118:13;52129:1;52118:6;:10;;:13;;;;:::i;:::-;52107:6:::0;;:25:::2;:10;:25;:::i;:::-;52098:34;;51814:330;52247:21;:19;:21::i;:::-;52215:10;52192:34;::::0;;;:22:::2;:34;::::0;;;;;;52229:15:::2;:39:::0;;;::::2;52192:76:::0;;;;52284;::::2;::::0;::::2;::::0;52215:10;52317:6;;52229:39;52284:76:::2;;;;;;;;;;52439:10;52426:24;::::0;;;:12:::2;:24;::::0;;;;;:36:::2;::::0;52455:6;52426:36:::2;:28;:36;:::i;:::-;52414:10;52401:24;::::0;;;:12:::2;:24;::::0;;;;:61;52485:11:::2;::::0;:23:::2;::::0;52501:6;52485:23:::2;:15;:23;:::i;:::-;52473:11;:35:::0;52536:44:::2;::::0;52522:9:::2;::::0;52544:10:::2;::::0;52569:6;;52536:44:::2;::::0;::::2;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;52521:59:0;;;52599:4;52591:46;;;;-1:-1:-1::0;;;52591:46:0::2;;;;;;;;;-1:-1:-1::0;;31711:1:0::1;32671:7;:22:::0;51459:1186::o;34132:48::-;;;;:::o;34741:40::-;;;;:::o;34584:32::-;;;;:::o;34210:46::-;;;;:::o;37014:198::-;-1:-1:-1;;;;;37104:20:0;;37080:7;37104:20;;;:11;:20;;;;;;;;37100:49;;;-1:-1:-1;;;;;;37133:16:0;;;;;;:7;:16;;;;;;37126:23;;37100:49;-1:-1:-1;;;;;37187:16:0;;;;;;:7;:16;;;;;;37167:37;;:19;:37::i;13762:148::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;13869:1:::1;13853:6:::0;;13832:40:::1;::::0;-1:-1:-1;;;;;13853:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;13832:40:0;13869:1;;13832:40:::1;13900:1;13883:19:::0;;-1:-1:-1;;;;;;13883:19:0::1;::::0;;13762:148::o;33765:49::-;;;:::o;33867:42::-;;;;:::o;34955:30::-;;;;:::o;34052:37::-;;;;:::o;38557:120::-;-1:-1:-1;;;;;38649:20:0;38625:4;38649:20;;;:11;:20;;;;;;;;;38557:120::o;13126:79::-;13164:7;13191:6;-1:-1:-1;;;;;13191:6:0;13126:79;:::o;44231:122::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;44317:13:::1;:28:::0;44231:122::o;56127:395::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;56232:15:::1;56250:7;56232:25:::0;::::1;56208:21;:49:::0;56291:29:::1;:47:::0;56349:19:::1;56365:2;56349:15;:19::i;:::-;56387:30;56412:4;56387:24;:30::i;:::-;56452:62;56469:4;56484:14;-1:-1:-1::0;;56452:8:0::1;:62::i;:::-;56127:395::o:0;34444:48::-;;;;:::o;34342:40::-;;;;:::o;36725:87::-;36797:7;36790:14;;;;;;;;-1:-1:-1;;36790:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36764:13;;36790:14;;36797:7;;36790:14;;36797:7;36790:14;;;;;;;;;;;;;;;;;;;;;;;;41329:187;41381:7;41424:21;;41405:15;:40;41401:69;;-1:-1:-1;41454:16:0;;41447:23;;41401:69;-1:-1:-1;41488:20:0;;41329:187;:::o;43770:65::-;;;-1:-1:-1;;;;;43770:65:0;;:::o;38274:275::-;38367:4;38384:135;38393:12;:10;:12::i;:::-;38407:7;38416:102;38455:15;38416:102;;;;;;;;;;;;;;;;;:11;:25;38428:12;:10;:12::i;:::-;-1:-1:-1;;;;;38416:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;38416:25:0;;;:34;;;;;;;;;;;:102;;:38;:102;:::i;14769:293::-;14821:14;;-1:-1:-1;;;;;14821:14:0;14839:10;14821:28;14813:76;;;;-1:-1:-1;;;14813:76:0;;;;;;;;;14914:9;;14908:3;:15;14900:60;;;;-1:-1:-1;;;14900:60:0;;;;;;;;;15005:14;;;14997:6;;14976:44;;-1:-1:-1;;;;;15005:14:0;;;;14997:6;;;;-1:-1:-1;;;;;;;;;;;14976:44:0;;15040:14;;;15031:23;;-1:-1:-1;;;;;;15031:23:0;-1:-1:-1;;;;;15040:14:0;;;15031:23;;;;;;14769:293::o;37220:170::-;37298:4;37315:45;37325:12;:10;:12::i;:::-;37339:9;37350:6;37358:1;37315:9;:45::i;34992:47::-;;;;;;;;;;;;;:::o;33384:57::-;;;;;;;;;;;;;:::o;14317:89::-;14389:9;;14317:89;:::o;43568:62::-;;;;;;-1:-1:-1;;;;;43568:62:0;;:::o;44361:171::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;44438:21:::1;:32:::0;;-1:-1:-1;;44438:32:0::1;::::0;::::1;;;::::0;;44486:38:::1;::::0;::::1;::::0;::::1;::::0;44438:32;;44486:38:::1;;;;;;;;;;44361:171:::0;:::o;51154:154::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;51246:36:::1;51276:5;51246:25;51258:12;51246:7;;:11;;:25;;;;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;51231:12;:51:::0;-1:-1:-1;51154:154:0:o;40720:601::-;40788:7;40808:19;40830:195;40992:32;41010:12;40992:9;:32::i;:::-;40830:122;40898:53;40908:42;40898:9;:53::i;:::-;40830;40861:21;40879:1;40861:9;:21::i;:::-;40838:7;;;40830:53;:30;:53;:::i;:::-;:67;:122;:67;:122;:::i;:195::-;40808:217;;41082:5;:24;41121:7;;41143:29;41161:9;41143;:29::i;:::-;41187:21;41223:29;;41267:11;41293:9;41082:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41082:231:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41082:231:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;41082:231:0;;;;;;;;14483:214;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;14564:6:::1;::::0;;;14547:23;;-1:-1:-1;;;;;;14547:23:0;;::::1;-1:-1:-1::0;;;;;14564:6:0;::::1;14547:23;::::0;;;14581:19:::1;::::0;;14623:3:::1;:10:::0;::::1;14611:9;:22:::0;14649:40:::1;::::0;14564:6;;-1:-1:-1;;;;;;;;;;;14649:40:0;14564:6;;14649:40:::1;14483:214:::0;:::o;37398:143::-;-1:-1:-1;;;;;37506:18:0;;;37479:7;37506:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;37398:143::o;44007:110::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;44074:27:0::1;44104:5;44074:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;44074:35:0::1;::::0;;44007:110::o;33821:37::-;;;:::o;14065:244::-;13348:12;:10;:12::i;:::-;13338:6;;-1:-1:-1;;;;;13338:6:0;;;:22;;;13330:67;;;;-1:-1:-1;;;13330:67:0;;;;;;;;;-1:-1:-1;;;;;14154:22:0;::::1;14146:73;;;;-1:-1:-1::0;;;14146:73:0::1;;;;;;;;;14256:6;::::0;;14235:38:::1;::::0;-1:-1:-1;;;;;14235:38:0;;::::1;::::0;14256:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;14235:38:0;::::1;14284:6;:17:::0;;-1:-1:-1;;;;;;14284:17:0::1;-1:-1:-1::0;;;;;14284:17:0;;;::::1;::::0;;;::::1;::::0;;14065:244::o;33994:38::-;;;;:::o;3340:132::-;3398:7;3425:39;3429:1;3432;3425:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3418:46;3340:132;-1:-1:-1;;;3340:132:0:o;5532:106::-;5620:10;5532:106;:::o;46360:349::-;-1:-1:-1;;;;;46453:19:0;;46445:74;;;;-1:-1:-1;;;46445:74:0;;;;;;;;;-1:-1:-1;;;;;46538:21:0;;46530:74;;;;-1:-1:-1;;;46530:74:0;;;;;;;;;-1:-1:-1;;;;;46617:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;46669:32;;;;;46647:6;;46669:32;;;;;;;;;;46360:349;;;:::o;46717:1128::-;-1:-1:-1;;;;;46863:18:0;;46855:74;;;;-1:-1:-1;;;46855:74:0;;;;;;;;;-1:-1:-1;;;;;46948:16:0;;46940:70;;;;-1:-1:-1;;;46940:70:0;;;;;;;;;47038:3;47029:6;:12;47021:65;;;;-1:-1:-1;;;47021:65:0;;;;;;;;;47099:42;47117:4;47123:2;47127:6;47135:5;47099:17;:42::i;:::-;47183:24;47198:4;47204:2;47183:14;:24::i;:::-;-1:-1:-1;;;;;47401:24:0;;47281:12;47401:24;;;:18;:24;;;;;;47296:4;;47401:24;;;:50;;-1:-1:-1;;;;;;47429:22:0;;;;;;:18;:22;;;;;;;;47401:50;47397:98;;;-1:-1:-1;47478:5:0;47397:98;47573:59;47588:4;47594:2;47598:24;47618:3;47598:15;:6;47609:3;47598:15;:10;:15;:::i;:24::-;47624:7;47573:14;:59::i;:::-;47664:5;;47643:72;;47658:4;;-1:-1:-1;;;;;47664:5:0;47671:36;47682:24;47702:3;47682:15;:6;47693:3;47682:15;:10;:15;:::i;:24::-;47671:6;;:36;:10;:36;:::i;:::-;47709:5;47643:14;:72::i;:::-;47747:3;;47726:70;;47741:4;;-1:-1:-1;;;;;47747:3:0;47752:36;47763:24;47783:3;47763:15;:6;47774:3;47763:15;:10;:15;:::i;47726:70::-;46717:1128;;;;;:::o;1942:192::-;2028:7;2064:12;2056:6;;;;2048:29;;;;-1:-1:-1;;;2048:29:0;;;;;;;;;;-1:-1:-1;;;2100:5:0;;;1942:192::o;39984:164::-;40026:7;40047:15;40064;40083:19;:17;:19::i;:::-;40046:56;;-1:-1:-1;40046:56:0;-1:-1:-1;40120:20:0;40046:56;;40120:20;:11;:20;:::i;:::-;40113:27;;;;39984:164;:::o;1039:181::-;1097:7;1129:5;;;1153:6;;;;1145:46;;;;-1:-1:-1;;;1145:46:0;;;;;;;;38782:419;38841:7;38850;38859;38868;38877;38886;38907:23;38932:12;38946:18;38968:20;38980:7;38968:11;:20::i;:::-;38906:82;;;;;;39000:15;39017:23;39042:12;39058:50;39070:7;39079:4;39085:10;39097;:8;:10::i;:::-;39058:11;:50::i;:::-;38999:109;;;;-1:-1:-1;38999:109:0;;-1:-1:-1;39159:15:0;;-1:-1:-1;39176:4:0;;-1:-1:-1;39182:10:0;;-1:-1:-1;38782:419:0;;-1:-1:-1;;;;;38782:419:0:o;1503:136::-;1561:7;1588:43;1592:1;1595;1588:43;;;;;;;;;;;;;;;;;:3;:43::i;2393:471::-;2451:7;2696:6;2692:47;;-1:-1:-1;2726:1:0;2719:8;;2692:47;2763:5;;;2767:1;2763;:5;:1;2787:5;;;;;:10;2779:56;;;;-1:-1:-1;;;2779:56:0;;;;;;;;3968:278;4054:7;4089:12;4082:5;4074:28;;;;-1:-1:-1;;;4074:28:0;;;;;;;;;;;4113:9;4129:1;4125;:5;;;;;;;3968:278;-1:-1:-1;;;;;3968:278:0:o;53129:541::-;-1:-1:-1;;;;;53293:26:0;;;;;;:20;:26;;;;;;;;:35;;;:110;;-1:-1:-1;;;;;;53370:24:0;;;;;;:20;:24;;;;;;;;:33;53293:110;53275:388;;;53467:21;;53459:5;:29;:81;;;;;53511:29;;53492:15;:48;;53459:81;53455:197;;;53579:12;;53569:6;:22;;53561:75;;;;-1:-1:-1;;;53561:75:0;;;;;;;;;53129:541;;;;:::o;53873:2246::-;54225:28;54256:24;54274:4;54256:9;:24::i;:::-;54225:55;;54321:12;;54297:20;:36;54293:104;;-1:-1:-1;54373:12:0;;54293:104;54451:20;;54503:16;;54427:44;;;;;54503:16;;54502:17;:40;;;;;54532:10;54502:40;:73;;;;;54563:12;-1:-1:-1;;;;;54555:20:0;:4;-1:-1:-1;;;;;54555:20:0;;;54502:73;:107;;;;-1:-1:-1;54588:21:0;;;;54502:107;:175;;;;-1:-1:-1;;;;;;54624:21:0;;54640:4;54624:21;:52;;;;;54663:12;-1:-1:-1;;;;;54649:27:0;:2;-1:-1:-1;;;;;54649:27:0;;54624:52;54622:55;54502:175;54484:1628;;;54821:20;;;-1:-1:-1;54945:17:0;54965:27;54821:20;54990:1;54965:27;:24;:27;:::i;:::-;54945:47;-1:-1:-1;55007:13:0;55023:42;55063:1;55023:35;:20;54945:47;55023:35;:24;:35;:::i;:42::-;55007:58;-1:-1:-1;55080:18:0;55101:31;:20;55007:58;55101:31;:24;:31;:::i;:::-;55080:52;-1:-1:-1;55149:30:0;55182:20;:9;55196:5;55182:20;:13;:20;:::i;:::-;55331:71;;-1:-1:-1;;;55331:71:0;;55149:53;;-1:-1:-1;55244:21:0;;55331:5;;:22;;:71;;55362:14;;55149:53;;55331:71;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55331:71:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55331:71:0;;;;55754:20;55777:41;55803:14;55777:21;:25;;:41;;;;:::i;:::-;55754:64;-1:-1:-1;55835:31:0;55869:19;55754:64;55886:1;55869:19;:16;:19;:::i;:::-;55991:2;;55947:84;;-1:-1:-1;;;55947:84:0;;55835:53;;-1:-1:-1;55947:5:0;;:18;;:84;;55974:14;;55991:2;;;-1:-1:-1;;;;;55991:2:0;;55995:10;;55835:53;;55947:84;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;55947:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55947:84:0;;;;56053:47;56068:5;56075:12;56089:10;56053:47;;;;;;;;;;;;;;;;;54484:1628;;;;;;;53873:2246;;;;:::o;47926:912::-;48039:7;48034:41;;48061:14;:12;:14::i;:::-;48119:47;48148:9;48159:6;48119:28;:47::i;:::-;-1:-1:-1;;;;;48183:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;48207:22:0;;;;;;:11;:22;;;;;;;;48206:23;48183:46;48179:597;;;48246:48;48268:6;48276:9;48287:6;48246:21;:48::i;:::-;48179:597;;;-1:-1:-1;;;;;48317:19:0;;;;;;:11;:19;;;;;;;;48316:20;:46;;;;-1:-1:-1;;;;;;48340:22:0;;;;;;:11;:22;;;;;;;;48316:46;48312:464;;;48379:46;48399:6;48407:9;48418:6;48379:19;:46::i;48312:464::-;-1:-1:-1;;;;;48448:19:0;;;;;;:11;:19;;;;;;;;48447:20;:47;;;;-1:-1:-1;;;;;;48472:22:0;;;;;;:11;:22;;;;;;;;48471:23;48447:47;48443:333;;;48511:44;48529:6;48537:9;48548:6;48511:17;:44::i;48443:333::-;-1:-1:-1;;;;;48577:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;48600:22:0;;;;;;:11;:22;;;;;;;;48577:45;48573:203;;;48639:48;48661:6;48669:9;48680:6;48639:21;:48::i;48573:203::-;48720:44;48738:6;48746:9;48757:6;48720:17;:44::i;:::-;48793:7;48788:42;;48815:15;:13;:15::i;40156:556::-;40254:7;;40290;;40207;;;;;40308:289;40332:9;:16;40328:20;;40308:289;;;40398:7;40374;:21;40382:9;40392:1;40382:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40382:12:0;40374:21;;;;;;;;;;;;;:31;;:66;;;40433:7;40409;:21;40417:9;40427:1;40417:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40417:12:0;40409:21;;;;;;;;;;;;;:31;40374:66;40370:97;;;40450:7;;40459;;40442:25;;;;;;;;;40370:97;40492:34;40504:7;:21;40512:9;40522:1;40512:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40512:12:0;40504:21;;;;;;;;;;;;;40492:7;;:34;:11;:34;:::i;:::-;40482:44;;40551:34;40563:7;:21;40571:9;40581:1;40571:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40571:12:0;40563:21;;;;;;;;;;;;;40551:7;;:34;:11;:34;:::i;:::-;40541:44;-1:-1:-1;40350:3:0;;40308:289;;;-1:-1:-1;40633:7:0;;40621;;:20;;;:11;:20;:::i;:::-;40611:7;:30;40607:61;;;40651:7;;40660;;40643:25;;;;;;;;40607:61;40687:7;;-1:-1:-1;40696:7:0;-1:-1:-1;40156:556:0;;;:::o;39209:330::-;39269:7;39278;39287;39307:12;39322:24;39338:7;39322:15;:24::i;:::-;39307:39;;39357:18;39378:30;39400:7;39378:21;:30::i;:::-;39357:51;-1:-1:-1;39419:23:0;39445:33;39357:51;39445:17;:7;39457:4;39445:17;:11;:17;:::i;:33::-;39419:59;39514:4;;-1:-1:-1;39520:10:0;;-1:-1:-1;39209:330:0;;-1:-1:-1;;;39209:330:0:o;39547:429::-;39662:7;;;;39718:24;:7;39730:11;39718:24;:11;:24;:::i;:::-;39700:42;-1:-1:-1;39753:12:0;39768:21;:4;39777:11;39768:21;:8;:21;:::i;:::-;39753:36;-1:-1:-1;39800:18:0;39821:27;:10;39836:11;39821:27;:14;:27;:::i;:::-;39800:48;-1:-1:-1;39859:23:0;39885:33;39800:48;39885:17;:7;39897:4;39885:17;:11;:17;:::i;:33::-;39937:7;;;;-1:-1:-1;39963:4:0;;-1:-1:-1;39547:429:0;;-1:-1:-1;;;;;;;39547:429:0:o;45852:235::-;45899:7;;:12;:34;;;;-1:-1:-1;45915:13:0;;:18;45899:34;45895:47;;;45935:7;;45895:47;45972:7;;;45954:15;:25;46014:13;;;45990:21;:37;-1:-1:-1;46040:11:0;;;;46062:17;45852:235::o;52653:468::-;52745:31;52779:20;52789:9;52779;:20::i;:::-;52745:54;;52810:29;52842:21;:19;:21::i;:::-;53062:19;;52948:165;;-1:-1:-1;;;52948:165:0;;52810:53;;-1:-1:-1;52948:5:0;;:25;;:165;;52988:23;;52810:53;;53096:6;;52948:165;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52948:165:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52948:165:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;52948:165:0;;;;;;;;;-1:-1:-1;;;;;52912:33:0;;;;;;;:22;:33;;;;;;;:201;;;;52876:237;;;-1:-1:-1;;;52653:468:0:o;49939:563::-;50042:15;50059:23;50084:12;50098:23;50123:12;50137:18;50159:19;50170:7;50159:10;:19::i;:::-;-1:-1:-1;;;;;50207:15:0;;;;;;:7;:15;;;;;;50041:137;;-1:-1:-1;50041:137:0;;-1:-1:-1;50041:137:0;;-1:-1:-1;50041:137:0;-1:-1:-1;50041:137:0;-1:-1:-1;50041:137:0;-1:-1:-1;50207:28:0;;50227:7;50207:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;50189:15:0;;;;;;:7;:15;;;;;;;;:46;;;;50264:7;:15;;;;:28;;50284:7;50264:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;50246:15:0;;;;;;;:7;:15;;;;;;:46;;;;50324:18;;;;;;;:39;;50347:15;50324:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;50303:18:0;;;;;;:7;:18;;;;;:60;50374:26;50389:10;50374:14;:26::i;:::-;50411:23;50423:4;50429;50411:11;:23::i;:::-;50467:9;-1:-1:-1;;;;;50450:44:0;50459:6;-1:-1:-1;;;;;50450:44:0;;50478:15;50450:44;;;;;;;;;;;;;;;49939:563;;;;;;;;;:::o;49356:575::-;49457:15;49474:23;49499:12;49513:23;49538:12;49552:18;49574:19;49585:7;49574:10;:19::i;:::-;-1:-1:-1;;;;;49622:15:0;;;;;;:7;:15;;;;;;49456:137;;-1:-1:-1;49456:137:0;;-1:-1:-1;49456:137:0;;-1:-1:-1;49456:137:0;-1:-1:-1;49456:137:0;-1:-1:-1;49456:137:0;-1:-1:-1;49622:28:0;;49456:137;49622:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;49604:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;49682:18;;;;;:7;:18;;;;;:39;;49705:15;49682:39;:22;:39;:::i;:::-;-1:-1:-1;;;;;49661:18:0;;;;;;:7;:18;;;;;;;;:60;;;;49753:7;:18;;;;:39;;49776:15;49753:39;:22;:39;:::i;48846:502::-;48945:15;48962:23;48987:12;49001:23;49026:12;49040:18;49062:19;49073:7;49062:10;:19::i;:::-;-1:-1:-1;;;;;49110:15:0;;;;;;:7;:15;;;;;;48944:137;;-1:-1:-1;48944:137:0;;-1:-1:-1;48944:137:0;;-1:-1:-1;48944:137:0;-1:-1:-1;48944:137:0;-1:-1:-1;48944:137:0;-1:-1:-1;49110:28:0;;48944:137;49110:28;:19;:28;:::i;50510:634::-;50613:15;50630:23;50655:12;50669:23;50694:12;50708:18;50730:19;50741:7;50730:10;:19::i;:::-;-1:-1:-1;;;;;50778:15:0;;;;;;:7;:15;;;;;;50612:137;;-1:-1:-1;50612:137:0;;-1:-1:-1;50612:137:0;;-1:-1:-1;50612:137:0;-1:-1:-1;50612:137:0;-1:-1:-1;50612:137:0;-1:-1:-1;50778:28:0;;50798:7;50778:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;50760:15:0;;;;;;:7;:15;;;;;;;;:46;;;;50835:7;:15;;;;:28;;50855:7;50835:28;:19;:28;:::i;46095:125::-;46149:15;;46139:7;:25;46191:21;;46175:13;:37;46095:125::o;45512:156::-;45576:7;45603:57;45642:7;45603:20;45615:7;;45603;:11;;:20;;;;:::i;45676:168::-;45746:7;45773:63;45818:7;45773:26;45785:13;;45773:7;:11;;:26;;;;:::i;45149:355::-;45212:19;45234:10;:8;:10::i;:::-;45212:32;-1:-1:-1;45255:18:0;45276:27;:10;45212:32;45276:27;:14;:27;:::i;:::-;45355:4;45339:22;;;;:7;:22;;;;;;45255:48;;-1:-1:-1;45339:38:0;;45255:48;45339:38;:26;:38;:::i;:::-;45330:4;45314:22;;;;:7;:22;;;;;;;;:63;;;;45392:11;:26;;;;;;45388:108;;;45474:4;45458:22;;;;:7;:22;;;;;;:38;;45485:10;45458:38;:26;:38;:::i;:::-;45449:4;45433:22;;;;:7;:22;;;;;:63;45149:355;;;:::o;44992:147::-;45070:7;;:17;;45082:4;45070:17;:11;:17;:::i;:::-;45060:7;:27;45111:10;;:20;;45126:4;45111:20;:14;:20;:::i;:::-;45098:10;:33;-1:-1:-1;;44992:147:0:o;5:130:-1:-;72:20;;-1:-1;;;;;28736:54;;30110:35;;30100:2;;30159:1;;30149:12;551:241;;655:2;643:9;634:7;630:23;626:32;623:2;;;-1:-1;;661:12;623:2;723:53;768:7;744:22;723:53;;799:366;;;920:2;908:9;899:7;895:23;891:32;888:2;;;-1:-1;;926:12;888:2;988:53;1033:7;1009:22;988:53;;;978:63;;1096:53;1141:7;1078:2;1121:9;1117:22;1096:53;;;1086:63;;882:283;;;;;;1172:491;;;;1310:2;1298:9;1289:7;1285:23;1281:32;1278:2;;;-1:-1;;1316:12;1278:2;1378:53;1423:7;1399:22;1378:53;;;1368:63;;1486:53;1531:7;1468:2;1511:9;1507:22;1486:53;;;1476:63;;1594:53;1639:7;1576:2;1619:9;1615:22;1594:53;;;1584:63;;1272:391;;;;;;1670:491;;;;1808:2;1796:9;1787:7;1783:23;1779:32;1776:2;;;-1:-1;;1814:12;1776:2;85:6;72:20;97:33;124:5;97:33;;;1866:63;-1:-1;1966:2;2005:22;;72:20;97:33;72:20;97:33;;;1770:391;;1974:63;;-1:-1;;;2074:2;2113:22;;;;340:20;;1770:391;2168:360;;;2286:2;2274:9;2265:7;2261:23;2257:32;2254:2;;;-1:-1;;2292:12;2254:2;2354:53;2399:7;2375:22;2354:53;;;2344:63;;2444:2;2484:9;2480:22;206:20;30256:5;28648:13;28641:21;30234:5;30231:32;30221:2;;-1:-1;;30267:12;30221:2;2452:60;;;;2248:280;;;;;;2535:366;;;2656:2;2644:9;2635:7;2631:23;2627:32;2624:2;;;-1:-1;;2662:12;2624:2;2724:53;2769:7;2745:22;2724:53;;;2714:63;2814:2;2853:22;;;;340:20;;-1:-1;;;2618:283;2908:235;;3009:2;2997:9;2988:7;2984:23;2980:32;2977:2;;;-1:-1;;3015:12;2977:2;219:6;206:20;231:30;255:5;231:30;;3150:241;;3254:2;3242:9;3233:7;3229:23;3225:32;3222:2;;;-1:-1;;3260:12;3222:2;-1:-1;340:20;;3216:175;-1:-1;3216:175;3398:263;;3513:2;3501:9;3492:7;3488:23;3484:32;3481:2;;;-1:-1;;3519:12;3481:2;-1:-1;488:13;;3475:186;-1:-1;3475:186;3668:360;;;3786:2;3774:9;3765:7;3761:23;3757:32;3754:2;;;-1:-1;;3792:12;3754:2;353:6;340:20;3844:63;;3944:2;3984:9;3980:22;206:20;231:30;255:5;231:30;;13839:222;-1:-1;;;;;28736:54;;;;4255:37;;13966:2;13951:18;;13937:124;14068:460;-1:-1;;;;;28736:54;;;;4114:58;;14431:2;14416:18;;13162:37;;;;14514:2;14499:18;;13162:37;14259:2;14244:18;;14230:298;14535:476;-1:-1;;;;;28736:54;;;4255:37;;28736:54;;;;14906:2;14891:18;;4255:37;14997:2;14982:18;;13162:37;;;;14726:2;14711:18;;14697:314;15018:596;-1:-1;;;;;28736:54;;;4255:37;;28736:54;;;;15418:2;15403:18;;4255:37;15509:2;15494:18;;13162:37;15600:2;15585:18;;13162:37;;;;15237:3;15222:19;;15208:406;15621:357;-1:-1;;;;;28736:54;;;;4255:37;;15964:2;15949:18;;13162:37;15784:2;15769:18;;15755:223;15985:210;28648:13;;28641:21;4497:34;;16106:2;16091:18;;16077:118;16483:310;;16630:2;;16651:17;16644:47;4873:5;28118:12;28428:6;16630:2;16619:9;16615:18;28416:19;-1:-1;29742:101;29756:6;29753:1;29750:13;29742:101;;;29823:11;;;;;29817:18;29804:11;;;28456:14;29804:11;29797:39;29771:10;;29742:101;;;29858:6;29855:1;29852:13;29849:2;;;-1:-1;28456:14;29914:6;16619:9;29905:16;;29898:27;29849:2;-1:-1;30030:7;30014:14;-1:-1;;30010:28;5031:39;;;;28456:14;5031:39;;16601:192;-1:-1;;;16601:192;16800:416;17000:2;17014:47;;;5307:2;16985:18;;;28416:19;5343:34;28456:14;;;5323:55;-1:-1;;;5398:12;;;5391:25;5435:12;;;16971:245;17223:416;17423:2;17437:47;;;5686:2;17408:18;;;28416:19;5722:34;28456:14;;;5702:55;-1:-1;;;5777:12;;;5770:34;5823:12;;;17394:245;17646:416;17846:2;17860:47;;;6074:2;17831:18;;;28416:19;6110:34;28456:14;;;6090:55;-1:-1;;;6165:12;;;6158:30;6207:12;;;17817:245;18069:416;18269:2;18283:47;;;6458:2;18254:18;;;28416:19;6494:34;28456:14;;;6474:55;-1:-1;;;6549:12;;;6542:32;6593:12;;;18240:245;18492:416;18692:2;18706:47;;;6844:2;18677:18;;;28416:19;6880:29;28456:14;;;6860:50;6929:12;;;18663:245;18915:416;19115:2;19129:47;;;7180:2;19100:18;;;28416:19;7216:34;28456:14;;;7196:55;-1:-1;;;7271:12;;;7264:32;7315:12;;;19086:245;19338:416;19538:2;19552:47;;;7566:2;19523:18;;;28416:19;7602:34;28456:14;;;7582:55;-1:-1;;;7657:12;;;7650:34;7703:12;;;19509:245;19761:416;19961:2;19975:47;;;7954:2;19946:18;;;28416:19;7990:29;28456:14;;;7970:50;8039:12;;;19932:245;20184:416;20384:2;20398:47;;;8290:2;20369:18;;;28416:19;8326:33;28456:14;;;8306:54;8379:12;;;20355:245;20607:416;20807:2;20821:47;;;8630:2;20792:18;;;28416:19;8666:34;28456:14;;;8646:55;-1:-1;;;8721:12;;;8714:32;8765:12;;;20778:245;21030:416;21230:2;21244:47;;;9016:2;21215:18;;;28416:19;-1:-1;;;28456:14;;;9032:40;9091:12;;;21201:245;21453:416;21653:2;21667:47;;;9342:2;21638:18;;;28416:19;9378:34;28456:14;;;9358:55;-1:-1;;;9433:12;;;9426:33;9478:12;;;21624:245;21876:416;22076:2;22090:47;;;9729:2;22061:18;;;28416:19;9765:34;28456:14;;;9745:55;-1:-1;;;9820:12;;;9813:25;9857:12;;;22047:245;22299:416;22499:2;22513:47;;;22484:18;;;28416:19;10144:34;28456:14;;;10124:55;10198:12;;;22470:245;22722:416;22922:2;22936:47;;;10449:2;22907:18;;;28416:19;10485:34;28456:14;;;10465:55;-1:-1;;;10540:12;;;10533:30;10582:12;;;22893:245;23145:416;23345:2;23359:47;;;10833:2;23330:18;;;28416:19;10869:34;28456:14;;;10849:55;-1:-1;;;10924:12;;;10917:35;10971:12;;;23316:245;23568:416;23768:2;23782:47;;;11527:2;23753:18;;;28416:19;11563:31;28456:14;;;11543:52;11614:12;;;23739:245;23991:416;24191:2;24205:47;;;11865:2;24176:18;;;28416:19;11901:33;28456:14;;;11881:54;11954:12;;;24162:245;24414:416;24614:2;24628:47;;;12205:2;24599:18;;;28416:19;12241:33;28456:14;;;12221:54;12294:12;;;24585:245;24837:416;25037:2;25051:47;;;12545:2;25022:18;;;28416:19;12581:34;28456:14;;;12561:55;-1:-1;;;12636:12;;;12629:36;12684:12;;;25008:245;25260:416;25460:2;25474:47;;;12935:2;25445:18;;;28416:19;12971:34;28456:14;;;12951:55;-1:-1;;;13026:12;;;13019:27;13065:12;;;25431:245;25683:222;13162:37;;;25810:2;25795:18;;25781:124;25912:444;13162:37;;;26259:2;26244:18;;13162:37;;;;26342:2;26327:18;;13162:37;26095:2;26080:18;;26066:290;26363:596;13162:37;;;26763:2;26748:18;;13162:37;;;;26854:2;26839:18;;13162:37;26945:2;26930:18;;13162:37;26582:3;26567:19;;26553:406;26966:836;13162:37;;;27422:2;27407:18;;13162:37;;;;27513:2;27498:18;;13162:37;;;;27604:2;27589:18;;13162:37;27695:3;27680:19;;13162:37;-1:-1;;;;;28736:54;28747:42;27772:19;;4255:37;27241:3;27226:19;;27212:590;27809:214;28952:4;28941:16;;;;13406:35;;27932:2;27917:18;;27903:120;30051:117;-1:-1;;;;;28736:54;;30110:35;;30100:2;;30159:1;;30149:12;30100:2;30094:74;;30175:111;30256:5;28648:13;28641:21;30234:5;30231:32;30221:2;;30277:1;;30267:12

Swarm Source

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