Contract 0xDaf4F11947E73f0eeBEf4a820f4Be9B854aa993B 2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1a1f6840b68a59188c4e16b50dd80c3127d876518c61d0815a296cdd7eacacdfTransfer110744442021-09-20 8:40:3156 mins ago0xf85d1943e284553215b4ed5eb2d97dcd86cc818f IN  Stellar Diamond: XLD Token0 BNB0.001046248
0x9a06bdcf2304952fdbd703f770e234ff3099b98c4e83f884dbe59ed4874caa9aTransfer110744322021-09-20 8:39:5556 mins ago0xf85d1943e284553215b4ed5eb2d97dcd86cc818f IN  Stellar Diamond: XLD Token0 BNB0.0005
0x85ac3b94398d2bc5991709e9638e4d0f635f68c0346234ba942b72e3d6e3624fApprove110730992021-09-20 7:33:142 hrs 3 mins ago0xd2f3e5b535de2108bd583d07b1b9c26c936d2a80 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x99e672f130f6e6cf493f41ed72e7b5cfe0c486d2f64519b5e0956c99e74efaf3Approve110697082021-09-20 4:43:394 hrs 53 mins ago0x5f68fcec0dec95e56e816cc3b8437fddcd024fc6 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x630866c3754af1298c3f7f696bc362bc02e27b35583b954097702b56ae7f4059Transfer110670152021-09-20 2:28:597 hrs 7 mins ago0x26cc6346c13b68310e5b97bb2a04da97d5785e80 IN  Stellar Diamond: XLD Token0 BNB0.000497805
0x799c5b18425d75c2ecc4db9b9bc4395763fa09352f61a3c61703a7b71a6ec328Transfer110662352021-09-20 1:49:597 hrs 46 mins ago0x80b922822af2406e319780ec0a94b601db8105c2 IN  Stellar Diamond: XLD Token0 BNB0.000360285
0x4193d7af278d94b1003acb87a4d2c3d34c8c2d69446e4823a44e9b249a768eb0Approve110632012021-09-19 23:18:1510 hrs 18 mins ago0xf85d1943e284553215b4ed5eb2d97dcd86cc818f IN  Stellar Diamond: XLD Token0 BNB0.000222745
0xdc5886a310899df993ab91a142e5c4853b688c0b51f4bb735d50afc9724d7a91Approve110619532021-09-19 22:15:5111 hrs 21 mins ago0xe00ed757207af1ed17b3596abc6bf8c2fa233ba2 IN  Stellar Diamond: XLD Token0 BNB0.000221245
0xc89b7e6c65e8288fbb940c28d51fa4414b3f522d2345f43be0550d2de882cc95Approve110617592021-09-19 22:06:0911 hrs 30 mins ago0xe00ed757207af1ed17b3596abc6bf8c2fa233ba2 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x53e71307a24a33a0364926e7812b48fbe3243001dc8a1c66afe6606bb0386e95Approve110617412021-09-19 22:05:1511 hrs 31 mins ago0xe00ed757207af1ed17b3596abc6bf8c2fa233ba2 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x3a3a3f08ef174cb7b4e44ae11cfa90a53b42902989694138ff1c59d74244a03eApprove110617292021-09-19 22:04:3911 hrs 32 mins ago0xe00ed757207af1ed17b3596abc6bf8c2fa233ba2 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0xb8958eb5edc31f4c4a5dedbfbe05f04978adc8dc384762836b6634ac0d2559e2Approve110617102021-09-19 22:03:4211 hrs 33 mins ago0xe00ed757207af1ed17b3596abc6bf8c2fa233ba2 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x23b026f22bf3e692ae5f0b51eea0dc6b01a30472f0e4fd4a0f83b70bc5e00560Set Claim Reward...110604622021-09-19 21:01:1812 hrs 35 mins ago0x456da1fb5f4e463c3c880a4d0cdf7b05262e8227 IN  Stellar Diamond: XLD Token0 BNB0.00020839
0xc66a2f5f20c1b822deb8286270a904996a8fbcc3ba6178d209bb249254ae4704Transfer110600642021-09-19 20:41:2412 hrs 55 mins ago0x72bc1d03e7659f8712ad049b02e223097d61af14 IN  Stellar Diamond: XLD Token0 BNB0.000597366
0x41228f14b2db2e2718d63b9a2fee6f1347f1f465d12b347527598525d0174e3fApprove110587372021-09-19 19:35:0214 hrs 1 min ago0x7026c1594a65d0fa4ab8ea8040fe6f6831b8a7c4 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0xa79e8ed1de3dd560666fcc4d17af12b2ff0a2fbd3c246abab412b4c4592625e1Approve110587192021-09-19 19:34:0814 hrs 2 mins ago0x7026c1594a65d0fa4ab8ea8040fe6f6831b8a7c4 IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x7cdfb11d022e9258648d2265d957273ce8d00df508ebfae2e5ca0fe3eb082723Approve110573432021-09-19 18:25:2015 hrs 11 mins ago0x0e9eeb4bc5e19a8f1b5f5900d061b43a2473afe3 IN  Stellar Diamond: XLD Token0 BNB0.000222745
0xec6cb08005625b68b0867a014af4414f295be5c226c0d8c25b9ba366657e7b63Approve110540732021-09-19 15:41:4717 hrs 55 mins ago0x466c00c3ec58db0af0642e9fa22638ac581a4004 IN  Stellar Diamond: XLD Token0 BNB0.000222745
0xbba230e99485717a578acf3569d323333cdcb036606bbf43e2590b3b6b3bb4f6Approve110512602021-09-19 13:21:0620 hrs 15 mins ago0xb55bda211482f6e64e05e854746158e962a8a257 IN  Stellar Diamond: XLD Token0 BNB0.000222745
0xba1c7953038c4017f5538134cbf4a4c31e843f44a123b9d84a9224d04b5094e0Approve110488592021-09-19 11:21:0222 hrs 15 mins ago0x5a704d79c6582c5290a8fa8ad8e7db0564904c28 IN  Stellar Diamond: XLD Token0 BNB0.000222745
0x72e47493455d2f15262f63771a02bcbcf46e3bb5cb284fc7cf664b3ef7403797Approve110478052021-09-19 10:19:2923 hrs 17 mins ago0xfff7c314e09057b09f698a29664a2b98307d884a IN  Stellar Diamond: XLD Token0 BNB0.000221605
0xcd0c9fd2f6abd0a5776340fd89c72b5fe4662cdd0827857f1978eaff403bcf49Approve110477422021-09-19 10:15:3723 hrs 21 mins ago0xfff7c314e09057b09f698a29664a2b98307d884a IN  Stellar Diamond: XLD Token0 BNB0.000221605
0x6e8534b894d1cb846aec263ecf7c7569fddf6692adc2ad108a6a074972295148Approve110452312021-09-19 8:06:021 day 1 hr ago0x3b6f44b669ff3bb21f1b0029098d0a166545422b IN  Stellar Diamond: XLD Token0 BNB0.000222745
0xefbef230745b5197edb0b22d3eb8c4c8adfeb327412a594974749b39fb19601aSet Claim Reward...110341012021-09-18 22:48:311 day 10 hrs ago0x4d377bafa37e899bb4174c5bd0fcdb8c2633234f IN  Stellar Diamond: XLD Token0 BNB0.00011233
0xe4f66d8ebd64116caf552599745753a99559aa8cf0047646dec4e1ad614a86afApprove110332542021-09-18 22:06:101 day 11 hrs ago0x43b9f43c0f98af79de48a589a59c0cffe96d00be IN  Stellar Diamond: XLD Token0 BNB0.000267294
[ Download CSV Export 

OVERVIEW

Stellar diamond is a BSC project with an hourly BNB rewarding process. Main features include auto-claim BNB, optional automatic re-invest gradual buybacks, and burns.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe4da36bc92122e9bbb213810504b36a82363d3525b9651f7bb5cf08c1dd238ed110753882021-09-20 9:27:439 mins ago Stellar Diamond: XLD Token 0x1d962fe30c7e35aff720e03e1af651f43dc8d2cc0.023867354546699619 BNB
0xa959257e69d262cf3aebcf2627bc000a74d05c2eddddf8d1800825ed354820b3110753832021-09-20 9:27:289 mins ago Stellar Diamond: XLD Token 0x100a1a319cdc9aa58d444f2368ddc8360aa824f30.006455053934511377 BNB
0xe704e2ae8eb5318cd9df86f7d14ab1667ee8d01c862c2198effdabbfb707426d110753762021-09-20 9:27:079 mins ago Stellar Diamond: XLD Token 0xe64f57db46026acb1f1412fb5085a539aa92d0650.015503909448405736 BNB
0xac69bbb4e2c774727fe73f2c402a3c04f82a7ca3ac97ed8f76776ea6f5314542110752472021-09-20 9:20:4016 mins ago Stellar Diamond: XLD Token PancakeSwap: Router v20.018806373177200873 BNB
0xac69bbb4e2c774727fe73f2c402a3c04f82a7ca3ac97ed8f76776ea6f5314542110752472021-09-20 9:20:4016 mins ago PancakeSwap: Router v2 Stellar Diamond: XLD Token0.094031865886004365 BNB
0x10c44f34b39db8294be818372a7e415980f9dbc9306426330acffecaae7ffa30110733032021-09-20 7:43:261 hr 53 mins ago Stellar Diamond: XLD Token 0x100a1a319cdc9aa58d444f2368ddc8360aa824f30.005497883925860737 BNB
0xdabb7ed5c089e1829440a57d77d2456fe1df878c6cd143af9ca12af3c7c4a3bb110731062021-09-20 7:33:352 hrs 3 mins ago Stellar Diamond: XLD Token 0xe64f57db46026acb1f1412fb5085a539aa92d0650.01320483174256536 BNB
0x596bd2ce3b5155f79f82533e570c50fecdffcb1afc3427a63a0ba725a3af81ad110730912021-09-20 7:32:502 hrs 4 mins ago Stellar Diamond: XLD Token 0xe89677ac2ff319181279fbc0ec5508501eb841040.019810055985011627 BNB
0xc5aef87a96ed40102c894e8f5313dd61c241182919541005e3e11b8d79b73daf110730072021-09-20 7:28:382 hrs 8 mins ago Stellar Diamond: XLD Token 0x1d962fe30c7e35aff720e03e1af651f43dc8d2cc0.024454426790051276 BNB
0x765498eb25bbcad0584c814605910c48b5c864fa5f53937d839488d2e1bf827b110698292021-09-20 4:49:424 hrs 47 mins ago Stellar Diamond: XLD Token 0x100a1a319cdc9aa58d444f2368ddc8360aa824f30.006627817280727157 BNB
0x9e5567a2915399fa903a75734df7888ceedc1ba9c93fd4494c74d38ec18d6824110697212021-09-20 4:44:184 hrs 52 mins ago Stellar Diamond: XLD Token 0xe64f57db46026acb1f1412fb5085a539aa92d0650.015918724087385593 BNB
0xb5ad59a57d83d25070bb6b75022a7df195cfb992d8df4b710fbfc3c12f93b26d110691622021-09-20 4:16:215 hrs 20 mins ago Stellar Diamond: XLD Token 0xe89677ac2ff319181279fbc0ec5508501eb841040.023832788679573873 BNB
0x137f49278bc9daf50c63374cdfc66b4fd7f213855f2c8c91b5ac424956f4a027110689072021-09-20 4:03:365 hrs 33 mins ago Stellar Diamond: XLD Token PancakeSwap: Router v20.018801952679183153 BNB
0x137f49278bc9daf50c63374cdfc66b4fd7f213855f2c8c91b5ac424956f4a027110689072021-09-20 4:03:365 hrs 33 mins ago PancakeSwap: Router v2 Stellar Diamond: XLD Token0.094009763395915767 BNB
0x9b05abd63c59de6a9d555b5e095e3998d58135be485aec5ba66e70129a1278f5110688412021-09-20 4:00:185 hrs 36 mins ago Stellar Diamond: XLD Token 0x1d962fe30c7e35aff720e03e1af651f43dc8d2cc0.024118719780655367 BNB
0xcead7c025d2228ee0b7cac66e2c0744e3dc75cd966b3bc244e747c71b7c3d694110680202021-09-20 3:19:156 hrs 17 mins ago Stellar Diamond: XLD Token PancakeSwap: Router v20.018807403929228773 BNB
0xcead7c025d2228ee0b7cac66e2c0744e3dc75cd966b3bc244e747c71b7c3d694110680202021-09-20 3:19:156 hrs 17 mins ago PancakeSwap: Router v2 Stellar Diamond: XLD Token0.094037019646143868 BNB
0x04be234d97867be6096c419ec8058ffbdaa0a7458545e758a972bb376886c4a3110679852021-09-20 3:17:306 hrs 19 mins ago Stellar Diamond: XLD Token 0x100a1a319cdc9aa58d444f2368ddc8360aa824f30.00519307478777756 BNB
0x5744edb1f0944584b31d7ef87364f862ce5cfb2bd47e4998114693f9c04e489c110679742021-09-20 3:16:576 hrs 19 mins ago Stellar Diamond: XLD Token 0xe64f57db46026acb1f1412fb5085a539aa92d0650.012479371823948899 BNB
0x6d9f03f00c992f320f57fb589764a1c2132e27e350a73048ff73091c504d35ac110679552021-09-20 3:16:006 hrs 20 mins ago Stellar Diamond: XLD Token 0xe89677ac2ff319181279fbc0ec5508501eb841040.018669415511098362 BNB
0x443fe3fdb1fee0cef0e71b26f6398720079b4c3996a5fd6a3892448955eb6fa1110676762021-09-20 3:02:026 hrs 34 mins ago Stellar Diamond: XLD Token PancakeSwap: Router v20.018817246319187755 BNB
0x443fe3fdb1fee0cef0e71b26f6398720079b4c3996a5fd6a3892448955eb6fa1110676762021-09-20 3:02:026 hrs 34 mins ago PancakeSwap: Router v2 Stellar Diamond: XLD Token0.094086231595938778 BNB
0x8fb5d9e93ad03922cd3918541cc8fbc6afb353a8228820870b9505a9fbce0a87110668932021-09-20 2:22:537 hrs 14 mins ago Stellar Diamond: XLD Token 0x1d962fe30c7e35aff720e03e1af651f43dc8d2cc0.017729768706487025 BNB
0x1361f5b89d149ed5ef92ee7ae44f60f52798f9ad7a8b6272f23fc83ac38e2fb3110667552021-09-20 2:15:597 hrs 20 mins ago Stellar Diamond: XLD Token 0x100a1a319cdc9aa58d444f2368ddc8360aa824f30.004828736953830473 BNB
0x81fb3eab8ac2da78cfbef055557ad1a04271db12079279fade4e5b058898d752110667432021-09-20 2:15:237 hrs 21 mins ago Stellar Diamond: XLD Token 0xe64f57db46026acb1f1412fb5085a539aa92d0650.011560951168482366 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StellarDiamond

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts\base\token\ERC20\IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.8.5;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: contracts\base\token\ERC20\extensions\IERC20Metadata.sol

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// File: contracts\base\utils\Context.sol


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: contracts\base\access\Ownable.sol

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

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

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

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

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

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

// File: contracts\base\token\ERC20\PancakeSwap\IPancakeRouter01.sol

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

// File: contracts\base\token\ERC20\PancakeSwap\IPancakeRouter02.sol


interface IPancakeRouter02 is IPancakeRouter01 {
    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\base\token\ERC20\PancakeSwap\IPancakeFactory.sol


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

// File: contracts\base\access\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 () {
        _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, "Humans only");
        _;
    }
}

// File: contracts\StellarDiamondBase.sol


// Base class that implements: BEP20 interface, fees & swaps
abstract contract StellarDiamondBase is Context, IERC20Metadata, Ownable, ReentrancyGuard {
	// MAIN TOKEN PROPERTIES
	string private constant NAME = "Stellar Diamond";
	string private constant SYMBOL = "XLD";
	uint8 private constant DECIMALS = 9;
	uint8 private _liquidityFee; //% of each transaction that will be added as liquidity
	uint8 private _rewardFee; //% of each transaction that will be used for BNB reward pool
	uint8 private _additionalSellFee; //Additional % fee to apply on sell transactions. Half of it will go to liquidity, other half to rewards
	uint8 private _poolFee; //The total fee to be taken and added to the pool, this includes both the liquidity fee and the reward fee

	uint256 private constant _totalTokens = 1000000000000 * 10**DECIMALS;	//1 trillion total supply
	mapping (address => uint256) private _balances; //The balance of each address.  This is before applying distribution rate.  To get the actual balance, see balanceOf() method
	mapping (address => mapping (address => uint256)) private _allowances;

	// FEES & REWARDS
	bool private _isSwapEnabled; // True if the contract should swap for liquidity & reward pool, false otherwise
	bool private _isFeeEnabled; // True if fees should be applied on transactions, false otherwise
	address public constant BURN_WALLET = 0x000000000000000000000000000000000000dEaD; //The address that keeps track of all tokens burned
	uint256 private _tokenSwapThreshold = _totalTokens / 100000; //There should be at least 0.0001% of the total supply in the contract before triggering a swap
	uint256 private _totalFeesPooled; // The total fees pooled (in number of tokens)
	uint256 private _totalBNBLiquidityAddedFromFees; // The total number of BNB added to the pool through fees
	mapping (address => bool) private _addressesExcludedFromFees; // The list of addresses that do not pay a fee for transactions

	// TRANSACTION LIMIT
	uint256 private _transactionLimit = _totalTokens; // The amount of tokens that can be sold at once
	bool private _isBuyingAllowed; // This is used to make sure that the contract is activated before anyone makes a purchase on PCS.  The contract will be activated once liquidity is added.


	// PANCAKESWAP INTERFACES (For swaps)
	address private _pancakeSwapRouterAddress;
	IPancakeRouter02 private _pancakeswapV2Router;
	address private _pancakeswapV2Pair;
	address private _autoLiquidityWallet;

	// EVENTS
	event Swapped(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity, uint256 bnbIntoLiquidity);


	constructor (address routerAddress) {
		_balances[_msgSender()] = totalSupply();
		
		// Exclude contract from fees
		_addressesExcludedFromFees[address(this)] = true;

		// Initialize PancakeSwap V2 router and XLD <-> BNB pair.  Router address will be: 0x10ed43c718714eb63d5aa57b78b54704e256024e or for testnet: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
		setPancakeSwapRouter(routerAddress);

		// 4% liquidity fee, 12% reward fee, 3% additional sell fee
		setFees(4, 12, 3);

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


	// This function is used to enable all functions of the contract, after the setup of the token sale (e.g. Liquidity) is completed
	function activate() public onlyOwner {
		setSwapEnabled(true);
		setFeeEnabled(true);
		setAutoLiquidityWallet(owner());
		setTransactionLimit(1000); // only 0.1% of the total supply can be sold at once
		activateBuying();
		onActivated();
	}


	function onActivated() internal virtual { }


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

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

	function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
		doTransfer(sender, recipient, amount);
		doApprove(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); // Will fail when there is not enough allowance
		return true;
	}
	

	function approve(address spender, uint256 amount) public override returns (bool) {
		doApprove(_msgSender(), spender, amount);
		return true;
	}
	
	
	function doTransfer(address sender, address recipient, uint256 amount) internal virtual {
		require(sender != address(0), "Transfer from the zero address is not allowed");
		require(recipient != address(0), "Transfer to the zero address is not allowed");
		require(amount > 0, "Transfer amount must be greater than zero");
		require(!isPancakeSwapPair(sender) || _isBuyingAllowed, "Buying is not allowed before contract activation");
		
		// Ensure that amount is within the limit in case we are selling
		if (isTransferLimited(sender, recipient)) {
			require(amount <= _transactionLimit, "Transfer amount exceeds the maximum allowed");
		}

		// Perform a swap if needed.  A swap in the context of this contract is the process of swapping the contract's token balance with BNBs in order to provide liquidity and increase the reward pool
		executeSwapIfNeeded(sender, recipient);

		onBeforeTransfer(sender, recipient, amount);

		// Calculate fee rate
		uint256 feeRate = calculateFeeRate(sender, recipient);
		
		uint256 feeAmount = amount * feeRate / 100;
		uint256 transferAmount = amount - feeAmount;

		// Update balances
		updateBalances(sender, recipient, amount, feeAmount);

		// Update total fees, this is just a counter provided for visibility
		_totalFeesPooled += feeAmount;

		emit Transfer(sender, recipient, transferAmount); 

		onTransfer(sender, recipient, amount);
	}

	function onBeforeTransfer(address sender, address recipient, uint256 amount) internal virtual { }

	function onTransfer(address sender, address recipient, uint256 amount) internal virtual { }


	function updateBalances(address sender, address recipient, uint256 sentAmount, uint256 feeAmount) private {
		// Calculate amount to be received by recipient
		uint256 receivedAmount = sentAmount - feeAmount;

		// Update balances
		_balances[sender] -= sentAmount;
		_balances[recipient] += receivedAmount;
		
		// Add fees to contract
		_balances[address(this)] += feeAmount;
	}


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

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


	function calculateFeeRate(address sender, address recipient) private view returns(uint256) {
		bool applyFees = _isFeeEnabled && !_addressesExcludedFromFees[sender] && !_addressesExcludedFromFees[recipient];
		if (applyFees) {
			if (isPancakeSwapPair(recipient)) {
				// Additional fee when selling
				return _poolFee + _additionalSellFee;
			}

			return _poolFee;
		}

		return 0;
	}

	
	function executeSwapIfNeeded(address sender, address recipient) private {
		if (!isMarketTransfer(sender, recipient)) {
			return;
		}

		// Check if it's time to swap for liquidity & reward pool
		uint256 tokensAvailableForSwap = balanceOf(address(this));
		if (tokensAvailableForSwap >= _tokenSwapThreshold) {

			// Limit to threshold
			tokensAvailableForSwap = _tokenSwapThreshold;

			// Make sure that we are not stuck in a loop (Swap only once)
			bool isSelling = isPancakeSwapPair(recipient);
			if (isSelling) {
				executeSwap(tokensAvailableForSwap);
			}
		}
	}


	function executeSwap(uint256 amount) private {
		// Allow pancakeSwap to spend the tokens of the address
		doApprove(address(this), _pancakeSwapRouterAddress, amount);

		// The amount parameter includes both the liquidity and the reward tokens, we need to find the correct portion for each one so that they are allocated accordingly
		uint256 tokensReservedForLiquidity = amount * _liquidityFee / _poolFee;
		uint256 tokensReservedForReward = amount - tokensReservedForLiquidity;

		// For the liquidity portion, half of it will be swapped for BNB and the other half will be used to add the BNB into the liquidity
		uint256 tokensToSwapForLiquidity = tokensReservedForLiquidity / 2;
		uint256 tokensToAddAsLiquidity = tokensToSwapForLiquidity;

		// Swap both reward tokens and liquidity tokens for BNB
		uint256 tokensToSwap = tokensReservedForReward + tokensToSwapForLiquidity;
		uint256 bnbSwapped = swapTokensForBNB(tokensToSwap);
		
		// Calculate what portion of the swapped BNB is for liquidity and supply it using the other half of the token liquidity portion.  The remaining BNBs in the contract represent the reward pool
		uint256 bnbToBeAddedToLiquidity = bnbSwapped * tokensToSwapForLiquidity / tokensToSwap;
		(,uint bnbAddedToLiquidity,) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this), tokensToAddAsLiquidity, 0, 0, _autoLiquidityWallet, block.timestamp + 360);

		// Keep track of how many BNB were added to liquidity this way
		_totalBNBLiquidityAddedFromFees += bnbAddedToLiquidity;
		
		emit Swapped(tokensToSwap, bnbSwapped, tokensToAddAsLiquidity, bnbToBeAddedToLiquidity);
	}


	// This function swaps a {tokenAmount} of XLD tokens for BNB and returns the total amount of BNB received
	function swapTokensForBNB(uint256 tokenAmount) internal returns(uint256) {
		uint256 initialBalance = address(this).balance;
		
		// Generate pair for XLD -> WBNB
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _pancakeswapV2Router.WETH();

		// Swap
		_pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp + 360);
		
		// Return the amount received
		return address(this).balance - initialBalance;
	}


	function swapBNBForTokens(uint256 bnbAmount, address to) internal returns(bool) { 
		// Generate pair for WBNB -> XLD
		address[] memory path = new address[](2);
		path[0] = _pancakeswapV2Router.WETH();
		path[1] = address(this);


		// Swap and send the tokens to the 'to' address
		try _pancakeswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: bnbAmount }(0, path, to, block.timestamp + 360) { 
			return true;
		} 
		catch { 
			return false;
		}
	}

	
	// Returns true if the transfer between the two given addresses should be limited by the transaction limit and false otherwise
	function isTransferLimited(address sender, address recipient) private view returns(bool) {
		bool isSelling = isPancakeSwapPair(recipient);
		return isSelling && isMarketTransfer(sender, recipient);
	}


	function isSwapTransfer(address sender, address recipient) private view returns(bool) {
		bool isContractSelling = sender == address(this) && isPancakeSwapPair(recipient);
		return isContractSelling;
	}


	// Function that is used to determine whether a transfer occurred due to a user buying/selling/transfering and not due to the contract swapping tokens
	function isMarketTransfer(address sender, address recipient) internal virtual view returns(bool) {
		return !isSwapTransfer(sender, recipient);
	}


	// Returns how many more $XLD tokens are needed in the contract before triggering a swap
	function amountUntilSwap() public view returns (uint256) {
		uint256 balance = balanceOf(address(this));
		if (balance > _tokenSwapThreshold) {
			// Swap on next relevant transaction
			return 0;
		}

		return _tokenSwapThreshold - balance;
	}


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


	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		doApprove(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
		return true;
	}


	function setPancakeSwapRouter(address routerAddress) public onlyOwner {
		require(routerAddress != address(0), "Cannot use the zero address as router address");

		_pancakeSwapRouterAddress = routerAddress; 
		_pancakeswapV2Router = IPancakeRouter02(_pancakeSwapRouterAddress);
		_pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this), _pancakeswapV2Router.WETH());

		onPancakeSwapRouterUpdated();
	}


	function onPancakeSwapRouterUpdated() internal virtual { }


	function isPancakeSwapPair(address addr) internal view returns(bool) {
		return _pancakeswapV2Pair == addr;
	}


	// This function can also be used in case the fees of the contract need to be adjusted later on as the volume grows
	function setFees(uint8 liquidityFee, uint8 rewardFee, uint8 additionalSellFee) public onlyOwner {
		require(liquidityFee >= 1 && liquidityFee <= 8, "Liquidity fee must be between 1% and 8%");
		require(rewardFee >= 1 && rewardFee <= 15, "Reward fee must be between 1% and 15%");
		require(additionalSellFee <= 5, "Additional sell fee cannot exceed 5%");
		require(liquidityFee + rewardFee + additionalSellFee <= 25, "Total fees cannot exceed 25%");
		
		_liquidityFee = liquidityFee;
		_rewardFee = rewardFee;
		_additionalSellFee = additionalSellFee;
		
		// Enforce invariant
		_poolFee = _rewardFee + _liquidityFee; 
	}


	// This function will be used to reduce the limit later on, according to the price of the token, 100 = 1%, 1000 = 0.1% ...
	function setTransactionLimit(uint256 limit) public onlyOwner {
		require(limit >= 1 && limit <= 10000, "Limit must be greater than 0.01%");
		_transactionLimit = _totalTokens / limit;
	}

		
	function transactionLimit() public view returns (uint256) {
		return _transactionLimit;
	}


	function setTokenSwapThreshold(uint256 threshold) public onlyOwner {
		require(threshold > 0, "Threshold must be greater than 0");
		_tokenSwapThreshold = threshold;
	}


	function tokenSwapThreshold() public view returns (uint256) {
		return _tokenSwapThreshold;
	}


	function name() public override pure returns (string memory) {
		return NAME;
	}


	function symbol() public override pure returns (string memory) {
		return SYMBOL;
	}


	function totalSupply() public override pure returns (uint256) {
		return _totalTokens;
	}
	

	function decimals() public override pure returns (uint8) {
		return DECIMALS;
	}
	

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


	function pancakeSwapRouterAddress() public view returns (address) {
		return _pancakeSwapRouterAddress;
	}


	function pancakeSwapPairAddress() public view returns (address) {
		return _pancakeswapV2Pair;
	}


	function autoLiquidityWallet() public view returns (address) {
		return _autoLiquidityWallet;
	}


	function setAutoLiquidityWallet(address liquidityWallet) public onlyOwner {
		_autoLiquidityWallet = liquidityWallet;
	}


	function totalFeesPooled() public view returns (uint256) {
		return _totalFeesPooled;
	}

	
	function totalBNBLiquidityAddedFromFees() public view returns (uint256) {
		return _totalBNBLiquidityAddedFromFees;
	}


	function isSwapEnabled() public view returns (bool) {
		return _isSwapEnabled;
	}


	function setSwapEnabled(bool isEnabled) public onlyOwner {
		_isSwapEnabled = isEnabled;
	}


	function isFeeEnabled() public view returns (bool) {
		return _isFeeEnabled;
	}


	function setFeeEnabled(bool isEnabled) public onlyOwner {
		_isFeeEnabled = isEnabled;
	}


	function isExcludedFromFees(address addr) public view returns(bool) {
		return _addressesExcludedFromFees[addr];
	}


	function setExcludedFromFees(address addr, bool value) public onlyOwner {
		_addressesExcludedFromFees[addr] = value;
	}


	function activateBuying() public onlyOwner {
		_isBuyingAllowed = true;
	}

	// Ensures that the contract is able to receive BNB
	receive() external payable {}
}

// File: contracts\StellarDiamond.sol

// Implements rewards & burns
contract StellarDiamond is StellarDiamondBase {

	// REWARD CYCLE
	uint256 private _rewardCyclePeriod = 1 days; // The duration of the reward cycle (e.g. can claim rewards once a day)
	uint256 private _rewardCycleExtensionThreshold; // If someone sends or receives more than a % of their balance in a transaction, their reward cycle date will increase accordingly
	mapping(address => uint256) private _nextAvailableClaimDate; // The next available reward claim date for each address

	uint256 private _totalBNBLiquidityAddedFromFees; // The total number of BNB added to the pool through fees
	uint256 private _totalBNBClaimed; // The total number of BNB claimed by all addresses
	uint256 private _totalBNBAsXLDClaimed; // The total number of BNB that was converted to XLD and claimed by all addresses
	mapping(address => uint256) private _bnbRewardClaimed; // The amount of BNB claimed by each address
	mapping(address => uint256) private _bnbAsXLDClaimed; // The amount of BNB converted to XLD and claimed by each address
	mapping(address => bool) private _addressesExcludedFromRewards; // The list of addresses excluded from rewards
	mapping(address => mapping(address => bool)) private _rewardClaimApprovals; //Used to allow an address to claim rewards on behalf of someone else
	mapping(address => uint256) private _claimRewardAsTokensPercentage; //Allows users to optionally use a % of the reward pool to buy XLD automatically
	uint256 private _minRewardBalance; //The minimum balance required to be eligible for rewards
	uint256 private _maxClaimAllowed = 100 ether; // Can only claim up to 100 bnb at a time.
	uint256 private _globalRewardDampeningPercentage = 3; // Rewards are reduced by 3% at the start to fill the main BNB pool faster and ensure consistency in rewards
	uint256 private _mainBnbPoolSize = 10000 ether; // Any excess BNB after the main pool will be used as reserves to ensure consistency in rewards
	bool private _rewardAsTokensEnabled; //If enabled, the contract will give out tokens instead of BNB according to the preference of each user
	uint256 private _gradualBurnMagnitude; // The contract can optionally burn tokens (By buying them from reward pool).  This is the magnitude of the burn (1 = 0.01%).
	uint256 private _gradualBurnTimespan = 1 days; //Burn every 1 day by default
	uint256 private _lastBurnDate; //The last burn date
	uint256 private _minBnbPoolSizeBeforeBurn = 10 ether; //The minimum amount of BNB that need to be in the pool before initiating gradual burns

	// AUTO-CLAIM
	bool private _autoClaimEnabled;
	uint256 private _maxGasForAutoClaim = 600000; // The maximum gas to consume for processing the auto-claim queue
	address[] _rewardClaimQueue;
	mapping(address => uint) _rewardClaimQueueIndices;
	uint256 private _rewardClaimQueueIndex;
	mapping(address => bool) _addressesInRewardClaimQueue; // Mapping between addresses and false/true depending on whether they are queued up for auto-claim or not
	bool private _reimburseAfterXLDClaimFailure; // If true, and XLD reward claim portion fails, the portion will be given as BNB instead
	bool private _processingQueue; //Flag that indicates whether the queue is currently being processed and sending out rewards
	mapping(address => bool) private _whitelistedExternalProcessors; //Contains a list of addresses that are whitelisted for low-gas queue processing 
	uint256 private _sendWeiGasLimit;
	bool private _excludeNonHumansFromRewards = true;

	event RewardClaimed(address recipient, uint256 amountBnb, uint256 amountTokens, uint256 nextAvailableClaimDate); 
	event Burned(uint256 bnbAmount);

	constructor (address routerAddress) StellarDiamondBase(routerAddress) {
		// Exclude addresses from rewards
		_addressesExcludedFromRewards[BURN_WALLET] = true;
		_addressesExcludedFromRewards[owner()] = true;
		_addressesExcludedFromRewards[address(this)] = true;
		_addressesExcludedFromRewards[address(0)] = true;

		// If someone sends or receives more than 15% of their balance in a transaction, their reward cycle date will increase accordingly
		setRewardCycleExtensionThreshold(15);
	}


	// This function is used to enable all functions of the contract, after the setup of the token sale (e.g. Liquidity) is completed
	function onActivated() internal override {
		super.onActivated();

		setRewardAsTokensEnabled(true);
		setAutoClaimEnabled(true);
		setReimburseAfterXLDClaimFailure(true);
		setMinRewardBalance(5000 * 10**decimals());  //At least 5000 tokens are required to be eligible for rewards
		setGradualBurnMagnitude(1); //Buy tokens using 0.01% of reward pool and burn them
		_lastBurnDate = block.timestamp;
	}

	function onBeforeTransfer(address sender, address recipient, uint256 amount) internal override {
        super.onBeforeTransfer(sender, recipient, amount);

		if (!isMarketTransfer(sender, recipient)) {
			return;
		}

        // Extend the reward cycle according to the amount transferred.  This is done so that users do not abuse the cycle (buy before it ends & sell after they claim the reward)
		_nextAvailableClaimDate[recipient] += calculateRewardCycleExtension(balanceOf(recipient), amount);
		_nextAvailableClaimDate[sender] += calculateRewardCycleExtension(balanceOf(sender), amount);
		
		bool isSelling = isPancakeSwapPair(recipient);
		if (!isSelling) {
			// Wait for a dip, stellar diamond hands
			return;
		}

		// Process gradual burns
		bool burnTriggered = processGradualBurn();

		// Do not burn & process queue in the same transaction
		if (!burnTriggered && isAutoClaimEnabled()) {
			// Trigger auto-claim
			try this.processRewardClaimQueue(_maxGasForAutoClaim) { } catch { }
		}
    }


	function onTransfer(address sender, address recipient, uint256 amount) internal override {
        super.onTransfer(sender, recipient, amount);

		if (!isMarketTransfer(sender, recipient)) {
			return;
		}

		// Update auto-claim queue after balances have been updated
		updateAutoClaimQueue(sender);
		updateAutoClaimQueue(recipient);
    }
	
	
	function processGradualBurn() private returns(bool) {
		if (!shouldBurn()) {
			return false;
		}

		uint256 burnAmount = address(this).balance * _gradualBurnMagnitude / 10000;
		doBuyAndBurn(burnAmount);
		return true;
	}


	function updateAutoClaimQueue(address user) private {
		bool isQueued = _addressesInRewardClaimQueue[user];

		if (!isIncludedInRewards(user)) {
			if (isQueued) {
				// Need to dequeue
				uint index = _rewardClaimQueueIndices[user];
				address lastUser = _rewardClaimQueue[_rewardClaimQueue.length - 1];

				// Move the last one to this index, and pop it
				_rewardClaimQueueIndices[lastUser] = index;
				_rewardClaimQueue[index] = lastUser;
				_rewardClaimQueue.pop();

				// Clean-up
				delete _rewardClaimQueueIndices[user];
				delete _addressesInRewardClaimQueue[user];
			}
		} else {
			if (!isQueued) {
				// Need to enqueue
				_rewardClaimQueue.push(user);
				_rewardClaimQueueIndices[user] = _rewardClaimQueue.length - 1;
				_addressesInRewardClaimQueue[user] = true;
			}
		}
	}


    function claimReward() isHuman nonReentrant external {
		claimReward(msg.sender);
	}


	function claimReward(address user) public {
		require(msg.sender == user || isClaimApproved(user, msg.sender), "You are not allowed to claim rewards on behalf of this user");
		require(isRewardReady(user), "Claim date for this address has not passed yet");
		require(isIncludedInRewards(user), "Address is excluded from rewards, make sure there is enough XLD balance");

		bool success = doClaimReward(user);
		require(success, "Reward claim failed");
	}


	function doClaimReward(address user) private returns (bool) {
		// Update the next claim date & the total amount claimed
		_nextAvailableClaimDate[user] = block.timestamp + rewardCyclePeriod();

		(uint256 claimBnb, uint256 claimBnbAsTokens) = calculateClaimRewards(user);

		bool tokenClaimSuccess = true;
        // Claim XLD tokens
		if (!claimXLD(user, claimBnbAsTokens)) {
			// If token claim fails for any reason, award whole portion as BNB
			if (_reimburseAfterXLDClaimFailure) {
				claimBnb += claimBnbAsTokens;
			} else {
				tokenClaimSuccess = false;
			}

			claimBnbAsTokens = 0;
		}

		// Claim BNB
		bool bnbClaimSuccess = claimBNB(user, claimBnb);

		// Fire the event in case something was claimed
		if (tokenClaimSuccess || bnbClaimSuccess) {
			emit RewardClaimed(user, claimBnb, claimBnbAsTokens, _nextAvailableClaimDate[user]);
		}
		
		return bnbClaimSuccess && tokenClaimSuccess;
	}


	function claimBNB(address user, uint256 bnbAmount) private returns (bool) {
		if (bnbAmount == 0) {
			return true;
		}

		// Send the reward to the caller
		if (_sendWeiGasLimit > 0) {
			(bool sent,) = user.call{value : bnbAmount, gas: _sendWeiGasLimit}("");
			if (!sent) {
				return false;
			}
		} else {
			(bool sent,) = user.call{value : bnbAmount}("");
			if (!sent) {
				return false;
			}
		}

	
		_bnbRewardClaimed[user] += bnbAmount;
		_totalBNBClaimed += bnbAmount;
		return true;
	}


	function claimXLD(address user, uint256 bnbAmount) private returns (bool) {
		if (bnbAmount == 0) {
			return true;
		}

		bool success = swapBNBForTokens(bnbAmount, user);
		if (!success) {
			return false;
		}

		_bnbAsXLDClaimed[user] += bnbAmount;
		_totalBNBAsXLDClaimed += bnbAmount;
		return true;
	}


	// Processes users in the claim queue and sends out rewards when applicable. The amount of users processed depends on the gas provided, up to 1 cycle through the whole queue. 
	// Note: Any external processor can process the claim queue (e.g. even if auto claim is disabled from the contract, an external contract/user/service can process the queue for it 
	// and pay the gas cost). "gas" parameter is the maximum amount of gas allowed to be consumed
	function processRewardClaimQueue(uint256 gas) public {
		require(gas > 0, "Gas limit is required");

		uint256 queueLength = _rewardClaimQueue.length;

		if (queueLength == 0) {
			return;
		}

		uint256 gasUsed = 0;
		uint256 gasLeft = gasleft();
		uint256 iteration = 0;
		_processingQueue = true;

		// Keep claiming rewards from the list until we either consume all available gas or we finish one cycle
		while (gasUsed < gas && iteration < queueLength) {
			if (_rewardClaimQueueIndex >= queueLength) {
				_rewardClaimQueueIndex = 0;
			}

			address user = _rewardClaimQueue[_rewardClaimQueueIndex];
			if (isRewardReady(user) && isIncludedInRewards(user)) {
				doClaimReward(user);
			}

			uint256 newGasLeft = gasleft();
			
			if (gasLeft > newGasLeft) {
				uint256 consumedGas = gasLeft - newGasLeft;
				gasUsed += consumedGas;
				gasLeft = newGasLeft;
			}

			iteration++;
			_rewardClaimQueueIndex++;
		}

		_processingQueue = false;
	}

	// Allows a whitelisted external contract/user/service to process the queue and have a portion of the gas costs refunded.
	// This can be used to help with transaction fees and payout response time when/if the queue grows too big for the contract.
	// "gas" parameter is the maximum amount of gas allowed to be used.
	function processRewardClaimQueueAndRefundGas(uint256 gas) external {
		require(_whitelistedExternalProcessors[msg.sender], "Not whitelisted - use processRewardClaimQueue instead");

		uint256 startGas = gasleft();
		processRewardClaimQueue(gas);
		uint256 gasUsed = startGas - gasleft();

		payable(msg.sender).transfer(gasUsed);
	}


	function isRewardReady(address user) public view returns(bool) {
		return _nextAvailableClaimDate[user] <= block.timestamp;
	}


	function isIncludedInRewards(address user) public view returns(bool) {
		if (_excludeNonHumansFromRewards) {
			if (isContract(user)) {
				return false;
			}
		}

		return balanceOf(user) >= _minRewardBalance && !_addressesExcludedFromRewards[user];
	}


	// This function calculates how much (and if) the reward cycle of an address should increase based on its current balance and the amount transferred in a transaction
	function calculateRewardCycleExtension(uint256 balance, uint256 amount) public view returns (uint256) {
		uint256 basePeriod = rewardCyclePeriod();

		if (balance == 0) {
			// Receiving $XLD on a zero balance address:
			// This means that either the address has never received tokens before (So its current reward date is 0) in which case we need to set its initial value
			// Or the address has transferred all of its tokens in the past and has now received some again, in which case we will set the reward date to a date very far in the future
			return block.timestamp + basePeriod;
		}

		uint256 rate = amount * 100 / balance;

		// Depending on the % of $XLD tokens transferred, relative to the balance, we might need to extend the period
		if (rate >= _rewardCycleExtensionThreshold) {

			// If new balance is X percent higher, then we will extend the reward date by X percent
			uint256 extension = basePeriod * rate / 100;

			// Cap to the base period
			if (extension >= basePeriod) {
				extension = basePeriod;
			}

			return extension;
		}

		return 0;
	}


	function calculateClaimRewards(address ofAddress) public view returns (uint256, uint256) {
		uint256 reward = calculateBNBReward(ofAddress);

		uint256 claimBnbAsTokens = 0;
		if (_rewardAsTokensEnabled) {
			uint256 percentage = _claimRewardAsTokensPercentage[ofAddress];
			claimBnbAsTokens = reward * percentage / 100;
		} 

		uint256 claimBnb = reward - claimBnbAsTokens;

		return (claimBnb, claimBnbAsTokens);
	}


	function calculateBNBReward(address ofAddress) public view returns (uint256) {
		uint256 holdersAmount = totalAmountOfTokensHeld();

		uint256 balance = balanceOf(ofAddress);
		uint256 bnbPool =  address(this).balance * (100 - _globalRewardDampeningPercentage) / 100;

		// Limit to main pool size.  The rest of the pool is used as a reserve to improve consistency
		if (bnbPool > _mainBnbPoolSize) {
			bnbPool = _mainBnbPoolSize;
		}

		// If an address is holding X percent of the supply, then it can claim up to X percent of the reward pool
		uint256 reward = bnbPool * balance / holdersAmount;

		if (reward > _maxClaimAllowed) {
			reward = _maxClaimAllowed;
		}

		return reward;
	}


	function onPancakeSwapRouterUpdated() internal override { 
		_addressesExcludedFromRewards[pancakeSwapRouterAddress()] = true;
		_addressesExcludedFromRewards[pancakeSwapPairAddress()] = true;
	}


	function isMarketTransfer(address sender, address recipient) internal override view returns(bool) {
		// Not a market transfer when we are burning or sending out rewards
		return super.isMarketTransfer(sender, recipient) && !isBurnTransfer(sender, recipient) && !_processingQueue;
	}


	function isBurnTransfer(address sender, address recipient) private view returns (bool) {
		return isPancakeSwapPair(sender) && recipient == BURN_WALLET;
	}


	function shouldBurn() public view returns(bool) {
		return _gradualBurnMagnitude > 0 && address(this).balance >= _minBnbPoolSizeBeforeBurn && block.timestamp - _lastBurnDate > _gradualBurnTimespan;
	}


	// Up to 1% manual buyback & burn
	function buyAndBurn(uint256 bnbAmount) external onlyOwner {
		require(bnbAmount <= address(this).balance / 100, "Manual burn amount is too high!");
		require(bnbAmount > 0, "Amount must be greater than zero");

		doBuyAndBurn(bnbAmount);
	}


	function doBuyAndBurn(uint256 bnbAmount) private {
		if (bnbAmount > address(this).balance) {
			bnbAmount = address(this).balance;
		}

		if (bnbAmount == 0) {
			return;
		}

		if (swapBNBForTokens(bnbAmount, BURN_WALLET)) {
			emit Burned(bnbAmount);
		}

		_lastBurnDate = block.timestamp;
	}


	function isContract(address account) public view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
	}


	function totalAmountOfTokensHeld() public view returns (uint256) {
		return totalSupply() - balanceOf(address(0)) - balanceOf(BURN_WALLET) - balanceOf(pancakeSwapPairAddress());
	}


    function bnbRewardClaimed(address byAddress) public view returns (uint256) {
		return _bnbRewardClaimed[byAddress];
	}


    function bnbRewardClaimedAsXLD(address byAddress) public view returns (uint256) {
		return _bnbAsXLDClaimed[byAddress];
	}


    function totalBNBClaimed() public view returns (uint256) {
		return _totalBNBClaimed;
	}


    function totalBNBClaimedAsXLD() public view returns (uint256) {
		return _totalBNBAsXLDClaimed;
	}


    function rewardCyclePeriod() public view returns (uint256) {
		return _rewardCyclePeriod;
	}


	function setRewardCyclePeriod(uint256 period) public onlyOwner {
		require(period > 0 && period <= 7 days, "Value out of range");
		_rewardCyclePeriod = period;
	}


	function setRewardCycleExtensionThreshold(uint256 threshold) public onlyOwner {
		_rewardCycleExtensionThreshold = threshold;
	}


	function nextAvailableClaimDate(address ofAddress) public view returns (uint256) {
		return _nextAvailableClaimDate[ofAddress];
	}


	function maxClaimAllowed() public view returns (uint256) {
		return _maxClaimAllowed;
	}


	function setMaxClaimAllowed(uint256 value) public onlyOwner {
		require(value > 0, "Value must be greater than zero");
		_maxClaimAllowed = value;
	}


	function minRewardBalance() public view returns (uint256) {
		return _minRewardBalance;
	}


	function setMinRewardBalance(uint256 balance) public onlyOwner {
		_minRewardBalance = balance;
	}


	function maxGasForAutoClaim() public view returns (uint256) {
		return _maxGasForAutoClaim;
	}


	function setMaxGasForAutoClaim(uint256 gas) public onlyOwner {
		_maxGasForAutoClaim = gas;
	}


	function isAutoClaimEnabled() public view returns (bool) {
		return _autoClaimEnabled;
	}


	function setAutoClaimEnabled(bool isEnabled) public onlyOwner {
		_autoClaimEnabled = isEnabled;
	}


	function isExcludedFromRewards(address addr) public view returns (bool) {
		return _addressesExcludedFromRewards[addr];
	}


	// Will be used to exclude unicrypt fees/token vesting addresses from rewards
	function setExcludedFromRewards(address addr, bool isExcluded) public onlyOwner {
		_addressesExcludedFromRewards[addr] = isExcluded;
		updateAutoClaimQueue(addr);
	}


	function globalRewardDampeningPercentage() public view returns(uint256) {
		return _globalRewardDampeningPercentage;
	}


	function setGlobalRewardDampeningPercentage(uint256 value) public onlyOwner {
		require(value <= 90, "Cannot be greater than 90%");
		_globalRewardDampeningPercentage = value;
	}


	function approveClaim(address byAddress, bool isApproved) public {
		require(byAddress != address(0), "Invalid address");
		_rewardClaimApprovals[msg.sender][byAddress] = isApproved;
	}


	function isClaimApproved(address ofAddress, address byAddress) public view returns(bool) {
		return _rewardClaimApprovals[ofAddress][byAddress];
	}


	function isRewardAsTokensEnabled() public view returns(bool) {
		return _rewardAsTokensEnabled;
	}


	function setRewardAsTokensEnabled(bool isEnabled) public onlyOwner {
		_rewardAsTokensEnabled = isEnabled;
	}


	function gradualBurnMagnitude() public view returns (uint256) {
		return _gradualBurnMagnitude;
	}


	function setGradualBurnMagnitude(uint256 magnitude) public onlyOwner {
		require(magnitude <= 100, "Must be equal or less to 100");
		_gradualBurnMagnitude = magnitude;
	}


	function gradualBurnTimespan() public view returns (uint256) {
		return _gradualBurnTimespan;
	}


	function setGradualBurnTimespan(uint256 timespan) public onlyOwner {
		require(timespan >= 5 minutes, "Cannot be less than 5 minutes");
		_gradualBurnTimespan = timespan;
	}


	function minBnbPoolSizeBeforeBurn() public view returns(uint256) {
		return _minBnbPoolSizeBeforeBurn;
	}


	function setMinBnbPoolSizeBeforeBurn(uint256 amount) public onlyOwner {
		require(amount > 0, "Amount must be greater than zero");
		_minBnbPoolSizeBeforeBurn = amount;
	}


	function claimRewardAsTokensPercentage(address ofAddress) public view returns(uint256) {
		return _claimRewardAsTokensPercentage[ofAddress];
	}


	function setClaimRewardAsTokensPercentage(uint256 percentage) public {
		require(percentage <= 100, "Cannot exceed 100%");
		_claimRewardAsTokensPercentage[msg.sender] = percentage;
	}


	function mainBnbPoolSize() public view returns (uint256) {
		return _mainBnbPoolSize;
	}


	function setMainBnbPoolSize(uint256 size) public onlyOwner {
		require(size >= 10 ether, "Size is too small");
		_mainBnbPoolSize = size;
	}


	function isInRewardClaimQueue(address addr) public view returns(bool) {
		return _addressesInRewardClaimQueue[addr];
	}

	
	function reimburseAfterXLDClaimFailure() public view returns(bool) {
		return _reimburseAfterXLDClaimFailure;
	}


	function setReimburseAfterXLDClaimFailure(bool value) public onlyOwner {
		_reimburseAfterXLDClaimFailure = value;
	}


	function lastBurnDate() public view returns(uint256) {
		return _lastBurnDate;
	}


	function rewardClaimQueueLength() public view returns(uint256) {
		return _rewardClaimQueue.length;
	}


	function rewardClaimQueueIndex() public view returns(uint256) {
		return _rewardClaimQueueIndex;
	}


	function isWhitelistedExternalProcessor(address addr) public view returns(bool) {
		return _whitelistedExternalProcessors[addr];
	}


	function setWhitelistedExternalProcessor(address addr, bool isWhitelisted) public onlyOwner {
		 require(addr != address(0), "Invalid address");
		_whitelistedExternalProcessors[addr] = isWhitelisted;
	}

	function setSendWeiGasLimit(uint256 amount) public onlyOwner {
		_sendWeiGasLimit = amount;
	}

	function setExcludeNonHumansFromRewards(bool exclude) public onlyOwner {
		_excludeNonHumansFromRewards = exclude;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","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":"uint256","name":"bnbAmount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountBnb","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbIntoLiquidity","type":"uint256"}],"name":"Swapped","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":"BURN_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountUntilSwap","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":"byAddress","type":"address"},{"internalType":"bool","name":"isApproved","type":"bool"}],"name":"approveClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"byAddress","type":"address"}],"name":"bnbRewardClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"byAddress","type":"address"}],"name":"bnbRewardClaimedAsXLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bnbAmount","type":"uint256"}],"name":"buyAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateBNBReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateClaimRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRewardCycleExtension","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"claimRewardAsTokensPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"globalRewardDampeningPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gradualBurnMagnitude","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gradualBurnTimespan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAutoClaimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"},{"internalType":"address","name":"byAddress","type":"address"}],"name":"isClaimApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isInRewardClaimQueue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isIncludedInRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardAsTokensEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isRewardReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelistedExternalProcessor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainBnbPoolSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxClaimAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGasForAutoClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBnbPoolSizeBeforeBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","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":[],"name":"pancakeSwapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSwapRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processRewardClaimQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processRewardClaimQueueAndRefundGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reimburseAfterXLDClaimFailure","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardClaimQueueIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardClaimQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardCyclePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setAutoClaimEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityWallet","type":"address"}],"name":"setAutoLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setClaimRewardAsTokensPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeNonHumansFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setExcludedFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"internalType":"uint8","name":"rewardFee","type":"uint8"},{"internalType":"uint8","name":"additionalSellFee","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setGlobalRewardDampeningPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"magnitude","type":"uint256"}],"name":"setGradualBurnMagnitude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timespan","type":"uint256"}],"name":"setGradualBurnTimespan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"setMainBnbPoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxClaimAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setMaxGasForAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinBnbPoolSizeBeforeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"setMinRewardBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setPancakeSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReimburseAfterXLDClaimFailure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setRewardAsTokensEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setRewardCycleExtensionThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"period","type":"uint256"}],"name":"setRewardCyclePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSendWeiGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setTokenSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"setWhitelistedExternalProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAmountOfTokensHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBClaimedAsXLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBLiquidityAddedFromFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesPooled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"transactionLimit","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"},{"stateMutability":"payable","type":"receive"}]

6080604052620186a0620000166009600a6200096e565b620000279064e8d4a5100062000a2f565b62000033919062000902565b600655620000446009600a6200096e565b620000559064e8d4a5100062000a2f565b600a5562015180600f81905568056bc75e2d63100000601b556003601c5569021e19e0c9bab2400000601d55602055678ac7230489e80000602255620927c0602455602c805460ff19166001179055348015620000b157600080fd5b5060405162004c1338038062004c13833981016040819052620000d491620008a8565b600080546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055620001236200027a565b336000908152600360209081526040808320939093553082526009905220805460ff191660011790556200015781620002a0565b620001676004600c60036200055c565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001956200027a565b60405190815260200160405180910390a35061dead6000908152601760208190527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303805460ff1916600190811790915591620001f96000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601790925281208054831660019081179091559080527fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b805490921617905562000273600f620007cc565b5062000a67565b60006200028a6009600a6200096e565b6200029b9064e8d4a5100062000a2f565b905090565b6000546001600160a01b03163314620002ef5760405162461bcd60e51b8152602060048201819052602482015260008051602062004bf383398151915260448201526064015b60405180910390fd5b6001600160a01b0381166200035d5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742075736520746865207a65726f2061646472657373206173207260448201526c6f75746572206164647265737360981b6064820152608401620002e6565b600b80546001600160a01b03808416610100908102610100600160a81b03199093169290921792839055600c80546001600160a01b03191692909304169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620003d757600080fd5b505afa158015620003ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004129190620008a8565b6001600160a01b031663c9c6539630600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047057600080fd5b505afa15801562000485573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ab9190620008a8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004f457600080fd5b505af115801562000509573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052f9190620008a8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055620005596200081c565b50565b6000546001600160a01b03163314620005a75760405162461bcd60e51b8152602060048201819052602482015260008051602062004bf38339815191526044820152606401620002e6565b60018360ff1610158015620005c0575060088360ff1611155b6200061e5760405162461bcd60e51b815260206004820152602760248201527f4c697175696469747920666565206d757374206265206265747765656e20312560448201526620616e6420382560c81b6064820152608401620002e6565b60018260ff1610158015620006375750600f8260ff1611155b620006935760405162461bcd60e51b815260206004820152602560248201527f52657761726420666565206d757374206265206265747765656e20312520616e604482015264642031352560d81b6064820152608401620002e6565b60058160ff161115620006f55760405162461bcd60e51b8152602060048201526024808201527f4164646974696f6e616c2073656c6c206665652063616e6e6f742065786365656044820152636420352560e01b6064820152608401620002e6565b601981620007048486620008da565b620007109190620008da565b60ff161115620007635760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20666565732063616e6e6f742065786365656420323525000000006044820152606401620002e6565b6002805460ff838116620100000262ff00001986831661010090810261ffff19909516848a161794909417908116821794859055620007ad949183169083161792900416620008da565b600260036101000a81548160ff021916908360ff160217905550505050565b6000546001600160a01b03163314620008175760405162461bcd60e51b8152602060048201819052602482015260008051602062004bf38339815191526044820152606401620002e6565b601055565b6001601760006200083a600b5461010090046001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556001906017906200087e600d546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055565b600060208284031215620008bb57600080fd5b81516001600160a01b0381168114620008d357600080fd5b9392505050565b600060ff821660ff84168060ff03821115620008fa57620008fa62000a51565b019392505050565b6000826200092057634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620009665781600019048211156200094a576200094a62000a51565b808516156200095857918102915b93841c93908002906200092a565b509250929050565b6000620008d360ff8416836000826200098a5750600162000a29565b81620009995750600062000a29565b8160018114620009b25760028114620009bd57620009dd565b600191505062000a29565b60ff841115620009d157620009d162000a51565b50506001821b62000a29565b5060208310610133831016604e8410600b841016171562000a02575081810a62000a29565b62000a0e838362000925565b806000190482111562000a255762000a2562000a51565b0290505b92915050565b600081600019048311821515161562000a4c5762000a4c62000a51565b500290565b634e487b7160e01b600052601160045260246000fd5b61417c8062000a776000396000f3fe6080604052600436106104fb5760003560e01c806364bfa5461161028c578063b47fd5631161015a578063daacfbe9116100cc578063e3e5c29611610085578063e3e5c29614611041578063ef00d22414611056578063f19605d61461106b578063f6794fdb14611080578063f9c7e38a146110a0578063fec5facd146110b557600080fd5b8063daacfbe914610f71578063dd62ed3e14610f86578063df90edad14610fcc578063e01af92c14610fec578063e19b92ec1461100c578063e2fe8dac1461102157600080fd5b8063c6f5def71161011e578063c6f5def714610ec7578063cd07642d14610ee7578063ce22e2fd14610f07578063d279c19114610f1c578063d76ab2f014610f3c578063d9afe47a14610f5157600080fd5b8063b47fd56314610e27578063b88a802f14610e5d578063c07412b214610e72578063c3b6edc014610e92578063c45ce24414610ea757600080fd5b806388ae7314116101fe5780639850a8ea116101b75780639850a8ea14610d51578063a336278a14610d71578063a40b605b14610da7578063a457c2d714610dc7578063a9059cbb14610de7578063af4d9ab614610e0757600080fd5b806388ae731414610c875780638d7018fe14610ca75780638da5cb5b14610cc757806390ff212414610ce55780639594dcde14610d0557806395d89b4114610d2557600080fd5b806374fefae61161025057806374fefae614610be55780637a1fab6114610c055780637a46dc8b14610c1a5780637d85368414610c2f57806382dd252d14610c4f578063878f2ca314610c6457600080fd5b806364bfa54614610b2f5780636c455e3014610b4f5780636df8c4cc14610b9857806370a0823114610bb0578063715018a614610bd057600080fd5b80633094375d116103c95780634dd9584a1161033b5780635aff68a3116102f45780635aff68a314610a745780635e36a3a114610a945780635f8c1e2714610aa95780635fc4184a14610ac1578063613396d914610afa57806363a204da14610b0f57600080fd5b80634dd9584a146109905780634fbee193146109b057806352bffe98146109e957806353358dd3146109fe578063590ffdce14610a3457806359ecf39e14610a5457600080fd5b8063374061ba1161038d578063374061ba146108cf57806339509351146108ed57806339e557221461090d5780633c5f3f76146109225780634a3dd27b146109425780634bb9d61d1461095757600080fd5b80633094375d14610851578063313ce5671461086657806331b480551461088257806334e6436c14610897578063351a964d146108b757600080fd5b806311f406c21161046d57806323b872dd1161042657806323b872dd1461079857806327060b2b146107b8578063279c5158146107ce5780632842e365146108045780632e52396a146108245780633062d88a1461083c57600080fd5b806311f406c2146106ed57806316279055146107025780631633dbee1461072357806318160ddd146107435780632060995e1461075857806320c4d0351461077857600080fd5b80630db474fa116104bf5780630db474fa1461060a5780630e3000991461062a5780630e66dc69146106495780630e832273146106665780630eab62da1461069f5780630f15f4c0146106d857600080fd5b806306fdde031461050757806308babaeb14610551578063095ea7b3146105735780630b760ace146105a35780630c439f93146105d857600080fd5b3661050257005b600080fd5b34801561051357600080fd5b5060408051808201909152600f81526e14dd195b1b185c88111a585b5bdb99608a1b60208201525b6040516105489190613e95565b60405180910390f35b34801561055d57600080fd5b5061057161056c366004613cf4565b6110d5565b005b34801561057f57600080fd5b5061059361058e366004613d29565b61115a565b6040519015158152602001610548565b3480156105af57600080fd5b506105c36105be366004613c40565b611171565b60408051928352602083019190915201610548565b3480156105e457600080fd5b50600e546001600160a01b03165b6040516001600160a01b039091168152602001610548565b34801561061657600080fd5b50610571610625366004613d55565b6111db565b34801561063657600080fd5b506006545b604051908152602001610548565b34801561065557600080fd5b50600554610100900460ff16610593565b34801561067257600080fd5b50610593610681366004613c40565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156106ab57600080fd5b506105936106ba366004613c40565b6001600160a01b03166000908152602a602052604090205460ff1690565b3480156106e457600080fd5b5061057161121f565b3480156106f957600080fd5b50601c5461063b565b34801561070e57600080fd5b5061059361071d366004613c40565b3b151590565b34801561072f57600080fd5b5061057161073e366004613d70565b61128f565b34801561074f57600080fd5b5061063b6112be565b34801561076457600080fd5b5061063b610773366004613c40565b6112e0565b34801561078457600080fd5b50610571610793366004613d70565b611363565b3480156107a457600080fd5b506105936107b3366004613cb3565b6113e2565b3480156107c457600080fd5b506105f261dead81565b3480156107da57600080fd5b5061063b6107e9366004613c40565b6001600160a01b031660009081526019602052604090205490565b34801561081057600080fd5b5061057161081f366004613d70565b611434565b34801561083057600080fd5b50601e5460ff16610593565b34801561084857600080fd5b50601b5461063b565b34801561085d57600080fd5b5061063b6114b4565b34801561087257600080fd5b5060405160098152602001610548565b34801561088e57600080fd5b506105936114e8565b3480156108a357600080fd5b506105716108b2366004613d70565b61151a565b3480156108c357600080fd5b5060055460ff16610593565b3480156108db57600080fd5b50600d546001600160a01b03166105f2565b3480156108f957600080fd5b50610593610908366004613d29565b6115fa565b34801561091957600080fd5b5061063b611631565b34801561092e57600080fd5b5061057161093d366004613d55565b611683565b34801561094e57600080fd5b5060135461063b565b34801561096357600080fd5b50610593610972366004613c40565b6001600160a01b031660009081526028602052604090205460ff1690565b34801561099c57600080fd5b506105716109ab366004613c40565b6116c0565b3480156109bc57600080fd5b506105936109cb366004613c40565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109f557600080fd5b5060075461063b565b348015610a0a57600080fd5b5061063b610a19366004613c40565b6001600160a01b031660009081526016602052604090205490565b348015610a4057600080fd5b50610571610a4f366004613cf4565b611944565b348015610a6057600080fd5b50610571610a6f366004613d70565b611999565b348015610a8057600080fd5b50610571610a8f366004613d55565b611a18565b348015610aa057600080fd5b50601f5461063b565b348015610ab557600080fd5b5060295460ff16610593565b348015610acd57600080fd5b50610593610adc366004613c40565b6001600160a01b031660009081526011602052604090205442101590565b348015610b0657600080fd5b5060275461063b565b348015610b1b57600080fd5b50610571610b2a366004613d70565b611a55565b348015610b3b57600080fd5b50610571610b4a366004613d70565b611ad5565b348015610b5b57600080fd5b50610593610b6a366004613c7a565b6001600160a01b03918216600090815260186020908152604080832093909416825291909152205460ff1690565b348015610ba457600080fd5b5060235460ff16610593565b348015610bbc57600080fd5b5061063b610bcb366004613c40565b611b8a565b348015610bdc57600080fd5b50610571611ba5565b348015610bf157600080fd5b50610571610c00366004613d70565b611c19565b348015610c1157600080fd5b50601d5461063b565b348015610c2657600080fd5b5060085461063b565b348015610c3b57600080fd5b50610571610c4a366004613d55565b611d80565b348015610c5b57600080fd5b50601a5461063b565b348015610c7057600080fd5b50600b5461010090046001600160a01b03166105f2565b348015610c9357600080fd5b50610571610ca2366004613d70565b611dbd565b348015610cb357600080fd5b50610571610cc2366004613d70565b611e40565b348015610cd357600080fd5b506000546001600160a01b03166105f2565b348015610cf157600080fd5b5061063b610d00366004613d89565b611ebf565b348015610d1157600080fd5b50610571610d20366004613d70565b611f40565b348015610d3157600080fd5b5060408051808201909152600381526216131160ea1b602082015261053b565b348015610d5d57600080fd5b50610571610d6c366004613c40565b61200e565b348015610d7d57600080fd5b5061063b610d8c366004613c40565b6001600160a01b031660009081526015602052604090205490565b348015610db357600080fd5b50610593610dc2366004613c40565b61205a565b348015610dd357600080fd5b50610593610de2366004613d29565b6120ac565b348015610df357600080fd5b50610593610e02366004613d29565b6120e3565b348015610e1357600080fd5b50610571610e22366004613d70565b6120f0565b348015610e3357600080fd5b5061063b610e42366004613c40565b6001600160a01b031660009081526011602052604090205490565b348015610e6957600080fd5b5061057161211f565b348015610e7e57600080fd5b50610571610e8d366004613d55565b6121c3565b348015610e9e57600080fd5b5060145461063b565b348015610eb357600080fd5b50610571610ec2366004613d70565b612200565b348015610ed357600080fd5b50610571610ee2366004613cf4565b612258565b348015610ef357600080fd5b50610571610f02366004613cf4565b6122b3565b348015610f1357600080fd5b5060225461063b565b348015610f2857600080fd5b50610571610f37366004613c40565b612350565b348015610f4857600080fd5b5060205461063b565b348015610f5d57600080fd5b50610571610f6c366004613d70565b612556565b348015610f7d57600080fd5b5060245461063b565b348015610f9257600080fd5b5061063b610fa1366004613c7a565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610fd857600080fd5b50610571610fe7366004613d70565b612585565b348015610ff857600080fd5b50610571611007366004613d55565b6125b4565b34801561101857600080fd5b50600f5461063b565b34801561102d57600080fd5b5061057161103c366004613d70565b6125f1565b34801561104d57600080fd5b5060255461063b565b34801561106257600080fd5b5060215461063b565b34801561107757600080fd5b50600a5461063b565b34801561108c57600080fd5b5061057161109b366004613dd9565b61266c565b3480156110ac57600080fd5b506105716128ab565b3480156110c157600080fd5b506105716110d0366004613d70565b6128e4565b6001600160a01b0382166111225760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064015b60405180910390fd5b3360009081526018602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b6000611167338484612965565b5060015b92915050565b600080600061117f846112e0565b601e5490915060009060ff16156111c3576001600160a01b03851660009081526019602052604090205460646111b5828561409e565b6111bf9190613f98565b9150505b60006111cf82846140bd565b96919550909350505050565b6000546001600160a01b031633146112055760405162461bcd60e51b815260040161111990613eea565b600580549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146112495760405162461bcd60e51b815260040161111990613eea565b61125360016125b4565b61125d60016111db565b611272610d6c6000546001600160a01b031690565b61127d6103e8611ad5565b6112856128ab565b61128d612a89565b565b6000546001600160a01b031633146112b95760405162461bcd60e51b815260040161111990613eea565b601a55565b60006112cc6009600a613ffd565b6112db9064e8d4a5100061409e565b905090565b6000806112eb611631565b905060006112f884611b8a565b905060006064601c54606461130d91906140bd565b611317904761409e565b6113219190613f98565b9050601d548111156113325750601d545b60008361133f848461409e565b6113499190613f98565b9050601b5481111561135a5750601b545b95945050505050565b6000546001600160a01b0316331461138d5760405162461bcd60e51b815260040161111990613eea565b600081116113dd5760405162461bcd60e51b815260206004820152601f60248201527f56616c7565206d7573742062652067726561746572207468616e207a65726f006044820152606401611119565b601b55565b60006113ef848484612ad2565b6001600160a01b03841660009081526004602090815260408083203380855292529091205461142a9186916114259086906140bd565b612965565b5060019392505050565b6000546001600160a01b0316331461145e5760405162461bcd60e51b815260040161111990613eea565b605a8111156114af5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742062652067726561746572207468616e203930250000000000006044820152606401611119565b601c55565b6000806114c030611b8a565b90506006548111156114d457600091505090565b806006546114e291906140bd565b91505090565b600080601f541180156114fd57506022544710155b80156112db575060205460215461151490426140bd565b11905090565b6000546001600160a01b031633146115445760405162461bcd60e51b815260040161111990613eea565b61154f606447613f98565b81111561159e5760405162461bcd60e51b815260206004820152601f60248201527f4d616e75616c206275726e20616d6f756e7420697320746f6f206869676821006044820152606401611119565b600081116115ee5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401611119565b6115f781612dd3565b50565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091611167918590611425908690613f5b565b6000611648610bcb600d546001600160a01b031690565b61165361dead611b8a565b61165d6000611b8a565b6116656112be565b61166f91906140bd565b61167991906140bd565b6112db91906140bd565b6000546001600160a01b031633146116ad5760405162461bcd60e51b815260040161111990613eea565b6029805460ff1916911515919091179055565b6000546001600160a01b031633146116ea5760405162461bcd60e51b815260040161111990613eea565b6001600160a01b0381166117565760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742075736520746865207a65726f2061646472657373206173207260448201526c6f75746572206164647265737360981b6064820152608401611119565b600b80546001600160a01b03808416610100908102610100600160a81b03199093169290921792839055600c80546001600160a01b03191692909304169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156117cf57600080fd5b505afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118079190613c5d565b6001600160a01b031663c9c6539630600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561186457600080fd5b505afa158015611878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189c9190613c5d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156118e457600080fd5b505af11580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c9190613c5d565b600d80546001600160a01b0319166001600160a01b03929092169190911790556115f7612e32565b6000546001600160a01b0316331461196e5760405162461bcd60e51b815260040161111990613eea565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119c35760405162461bcd60e51b815260040161111990613eea565b60008111611a135760405162461bcd60e51b815260206004820181905260248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152606401611119565b600655565b6000546001600160a01b03163314611a425760405162461bcd60e51b815260040161111990613eea565b601e805460ff1916911515919091179055565b6000546001600160a01b03163314611a7f5760405162461bcd60e51b815260040161111990613eea565b6064811115611ad05760405162461bcd60e51b815260206004820152601c60248201527f4d75737420626520657175616c206f72206c65737320746f20313030000000006044820152606401611119565b601f55565b6000546001600160a01b03163314611aff5760405162461bcd60e51b815260040161111990613eea565b60018110158015611b1257506127108111155b611b5e5760405162461bcd60e51b815260206004820181905260248201527f4c696d6974206d7573742062652067726561746572207468616e20302e3031256044820152606401611119565b80611b6b6009600a613ffd565b611b7a9064e8d4a5100061409e565b611b849190613f98565b600a5550565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03163314611bcf5760405162461bcd60e51b815260040161111990613eea565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008111611c615760405162461bcd60e51b815260206004820152601560248201527411d85cc81b1a5b5a5d081a5cc81c995c5d5a5c9959605a1b6044820152606401611119565b60255480611c6d575050565b6000805a6029805461ff001916610100179055905060005b8483108015611c9357508381105b15611d6e578360275410611ca75760006027555b6000602560275481548110611cbe57611cbe61411b565b6000918252602090912001546001600160a01b03169050611cf7816001600160a01b031660009081526011602052604090205442101590565b8015611d075750611d078161205a565b15611d1757611d1581612ec9565b505b60005a905080841115611d43576000611d3082866140bd565b9050611d3c8187613f5b565b9550819450505b82611d4d816140d4565b602780549195509091506000611d62836140d4565b91905055505050611c85565b50506029805461ff0019169055505050565b6000546001600160a01b03163314611daa5760405162461bcd60e51b815260040161111990613eea565b602c805460ff1916911515919091179055565b6000546001600160a01b03163314611de75760405162461bcd60e51b815260040161111990613eea565b600081118015611dfa575062093a808111155b611e3b5760405162461bcd60e51b815260206004820152601260248201527156616c7565206f7574206f662072616e676560701b6044820152606401611119565b600f55565b6000546001600160a01b03163314611e6a5760405162461bcd60e51b815260040161111990613eea565b60008111611eba5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401611119565b602255565b600080611ecb600f5490565b905083611ee457611edc8142613f5b565b91505061116b565b600084611ef285606461409e565b611efc9190613f98565b90506010548110611f355760006064611f15838561409e565b611f1f9190613f98565b9050828110611f2b5750815b925061116b915050565b506000949350505050565b336000908152602a602052604090205460ff16611fbd5760405162461bcd60e51b815260206004820152603560248201527f4e6f742077686974656c6973746564202d207573652070726f63657373526577604482015274185c9910db185a5b545d595d59481a5b9cdd195859605a1b6064820152608401611119565b60005a9050611fcb82611c19565b60005a611fd890836140bd565b604051909150339082156108fc029083906000818181858888f19350505050158015612008573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146120385760405162461bcd60e51b815260040161111990613eea565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b602c5460009060ff161561207757813b1561207757506000919050565b601a5461208383611b8a565b1015801561116b5750506001600160a01b031660009081526017602052604090205460ff161590565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916111679185906114259086906140bd565b6000611167338484612ad2565b6000546001600160a01b0316331461211a5760405162461bcd60e51b815260040161111990613eea565b602455565b32331461215c5760405162461bcd60e51b815260206004820152600b60248201526a48756d616e73206f6e6c7960a81b6044820152606401611119565b600260015414156121af5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611119565b60026001556121bd33612350565b60018055565b6000546001600160a01b031633146121ed5760405162461bcd60e51b815260040161111990613eea565b6023805460ff1916911515919091179055565b60648111156122465760405162461bcd60e51b815260206004820152601260248201527143616e6e6f7420657863656564203130302560701b6044820152606401611119565b33600090815260196020526040902055565b6000546001600160a01b031633146122825760405162461bcd60e51b815260040161111990613eea565b6001600160a01b0382166000908152601760205260409020805460ff19168215151790556122af82612fcd565b5050565b6000546001600160a01b031633146122dd5760405162461bcd60e51b815260040161111990613eea565b6001600160a01b0382166123255760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401611119565b6001600160a01b03919091166000908152602a60205260409020805460ff1916911515919091179055565b336001600160a01b038216148061238a57506001600160a01b038116600090815260186020908152604080832033845290915290205460ff165b6123fc5760405162461bcd60e51b815260206004820152603b60248201527f596f7520617265206e6f7420616c6c6f77656420746f20636c61696d2072657760448201527f61726473206f6e20626568616c66206f662074686973207573657200000000006064820152608401611119565b6001600160a01b03811660009081526011602052604090205442101561247b5760405162461bcd60e51b815260206004820152602e60248201527f436c61696d206461746520666f7220746869732061646472657373206861732060448201526d1b9bdd081c185cdcd959081e595d60921b6064820152608401611119565b6124848161205a565b6125065760405162461bcd60e51b815260206004820152604760248201527f41646472657373206973206578636c756465642066726f6d207265776172647360448201527f2c206d616b65207375726520746865726520697320656e6f75676820584c442060648201526662616c616e636560c81b608482015260a401611119565b600061251182612ec9565b9050806122af5760405162461bcd60e51b815260206004820152601360248201527214995dd85c990818db185a5b4819985a5b1959606a1b6044820152606401611119565b6000546001600160a01b031633146125805760405162461bcd60e51b815260040161111990613eea565b602b55565b6000546001600160a01b031633146125af5760405162461bcd60e51b815260040161111990613eea565b601055565b6000546001600160a01b031633146125de5760405162461bcd60e51b815260040161111990613eea565b6005805460ff1916911515919091179055565b6000546001600160a01b0316331461261b5760405162461bcd60e51b815260040161111990613eea565b678ac7230489e800008110156126675760405162461bcd60e51b815260206004820152601160248201527014da5e99481a5cc81d1bdbc81cdb585b1b607a1b6044820152606401611119565b601d55565b6000546001600160a01b031633146126965760405162461bcd60e51b815260040161111990613eea565b60018360ff16101580156126ae575060088360ff1611155b61270a5760405162461bcd60e51b815260206004820152602760248201527f4c697175696469747920666565206d757374206265206265747765656e20312560448201526620616e6420382560c81b6064820152608401611119565b60018260ff16101580156127225750600f8260ff1611155b61277c5760405162461bcd60e51b815260206004820152602560248201527f52657761726420666565206d757374206265206265747765656e20312520616e604482015264642031352560d81b6064820152608401611119565b60058160ff1611156127dc5760405162461bcd60e51b8152602060048201526024808201527f4164646974696f6e616c2073656c6c206665652063616e6e6f742065786365656044820152636420352560e01b6064820152608401611119565b6019816127e98486613f73565b6127f39190613f73565b60ff1611156128445760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20666565732063616e6e6f742065786365656420323525000000006044820152606401611119565b6002805460ff838116620100000262ff00001986831661010090810261ffff19909516848a16179490941790811682179485905561288c949183169083161792900416613f73565b600260036101000a81548160ff021916908360ff160217905550505050565b6000546001600160a01b031633146128d55760405162461bcd60e51b815260040161111990613eea565b600b805460ff19166001179055565b6000546001600160a01b0316331461290e5760405162461bcd60e51b815260040161111990613eea565b61012c8110156129605760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206265206c657373207468616e2035206d696e757465730000006044820152606401611119565b602055565b6001600160a01b0383166129c75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611119565b6001600160a01b038216612a285760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611119565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b612a936001611a18565b612a9d60016121c3565b612aa76001611683565b612ac2612ab66009600a613ffd565b61073e9061138861409e565b612acc6001611a55565b42602155565b6001600160a01b038316612b3e5760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722066726f6d20746865207a65726f2061646472657373206960448201526c1cc81b9bdd08185b1b1bddd959609a1b6064820152608401611119565b6001600160a01b038216612ba85760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220746f20746865207a65726f20616464726573732069732060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401611119565b60008111612c0a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401611119565b600d546001600160a01b038085169116141580612c295750600b5460ff165b612c8e5760405162461bcd60e51b815260206004820152603060248201527f427579696e67206973206e6f7420616c6c6f776564206265666f726520636f6e60448201526f3a3930b1ba1030b1ba34bb30ba34b7b760811b6064820152608401611119565b612c98838361319b565b15612d0357600a54811115612d035760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61786960448201526a1b5d5b48185b1b1bddd95960aa1b6064820152608401611119565b612d0d83836131d2565b612d18838383613223565b6000612d24848461333e565b905060006064612d34838561409e565b612d3e9190613f98565b90506000612d4c82856140bd565b9050612d5a868686856133fe565b8160076000828254612d6c9190613f5b565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612db891815260200190565b60405180910390a3612dcb868686613494565b505050505050565b47811115612dde5750475b80612de65750565b612df28161dead6134b9565b15612e2b576040518181527fd83c63197e8e676d80ab0122beba9a9d20f3828839e9a1d6fe81d242e9cd7e6e9060200160405180910390a15b5042602155565b600160176000612e50600b546001600160a01b036101009091041690565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000612e9f600d546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055565b6000612ed4600f5490565b612ede9042613f5b565b6001600160a01b03831660009081526011602052604081209190915580612f0484611171565b90925090506001612f158583613633565b612f3e5760295460ff1615612f3557612f2e8284613f5b565b9250612f39565b5060005b600091505b6000612f4a86856136af565b90508180612f555750805b15612fb9576001600160a01b0386166000818152601160209081526040918290205482519384529083018790528282018690526060830152517f812be816db82c66cd18ca8457005cd84689642d8ac4d38599cc6af444a2dc72a9181900360800190a15b808015612fc35750815b9695505050505050565b6001600160a01b03811660009081526028602052604090205460ff16612ff28261205a565b61310a5780156122af576001600160a01b03821660009081526026602052604081205460258054919291613028906001906140bd565b815481106130385761303861411b565b60009182526020808320909101546001600160a01b031680835260269091526040909120839055602580549192508291849081106130785761307861411b565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060258054806130b7576130b7614105565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038616825260268152604080832083905560289091529020805460ff1916905550505050565b806122af57602580546001808201835560008390527f401968ff42a154441da5f6c4c935ac46b8671f0e062baaa62a7545ba53bb6e4c90910180546001600160a01b0319166001600160a01b038616179055905461316891906140bd565b6001600160a01b0383166000908152602660209081526040808320939093556028905220805460ff191660011790555050565b6000806131b683600d546001600160a01b0390811691161490565b90508080156131ca57506131ca84846137e9565b949350505050565b6131dc82826137e9565b6131e4575050565b60006131ef30611b8a565b9050600654811061321e5750600654600d546001600160a01b0383811691161480156120085761200882613823565b505050565b61322d83836137e9565b61323657505050565b61324861324283611b8a565b82611ebf565b6001600160a01b03831660009081526011602052604081208054909190613270908490613f5b565b90915550613282905061324284611b8a565b6001600160a01b038416600090815260116020526040812080549091906132aa908490613f5b565b9091555050600d546001600160a01b03838116911614806132cb5750505050565b60006132d56139fd565b9050801580156132e7575060235460ff165b156133375760248054604051633a7f7d7360e11b8152600481019190915230916374fefae69101600060405180830381600087803b15801561332857600080fd5b505af1925050508015612dcb57505b5050505050565b6005546000908190610100900460ff16801561337357506001600160a01b03841660009081526009602052604090205460ff16155b801561339857506001600160a01b03831660009081526009602052604090205460ff16155b905080156133f457600d546001600160a01b03808516911614156133e0576002546133d59060ff6201000082048116916301000000900416613f73565b60ff1691505061116b565b50506002546301000000900460ff1661116b565b5060009392505050565b600061340a82846140bd565b6001600160a01b0386166000908152600360205260408120805492935085929091906134379084906140bd565b90915550506001600160a01b03841660009081526003602052604081208054839290613464908490613f5b565b90915550503060009081526003602052604081208054849290613488908490613f5b565b90915550505050505050565b61349e83836137e9565b6134a757505050565b6134b083612fcd565b61321e82612fcd565b604080516002808252606082018352600092839291906020830190803683375050600c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561352257600080fd5b505afa158015613536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355a9190613c5d565b8160008151811061356d5761356d61411b565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106135a1576135a161411b565b6001600160a01b039283166020918202929092010152600c541663b6f9de9585600084876135d142610168613f5b565b6040518663ffffffff1660e01b81526004016135f09493929190613e60565b6000604051808303818588803b15801561360957600080fd5b505af19350505050801561361b575060015b61362957600091505061116b565b600191505061116b565b6000816136425750600161116b565b600061364e83856134b9565b90508061365f57600091505061116b565b6001600160a01b03841660009081526016602052604081208054859290613687908490613f5b565b9250508190555082601460008282546136a09190613f5b565b90915550600195945050505050565b6000816136be5750600161116b565b602b541561373357602b546040516000916001600160a01b03861691859084818181858888f193505050503d8060008114613715576040519150601f19603f3d011682016040523d82523d6000602084013e61371a565b606091505b505090508061372d57600091505061116b565b5061379a565b6000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114613780576040519150601f19603f3d011682016040523d82523d6000602084013e613785565b606091505b505090508061379857600091505061116b565b505b6001600160a01b038316600090815260156020526040812080548492906137c2908490613f5b565b9250508190555081601360008282546137db9190613f5b565b909155506001949350505050565b60006137f58383613a41565b801561380857506138068383613a55565b155b801561381c5750602954610100900460ff16155b9392505050565b600b5461384090309061010090046001600160a01b031683612965565b60025460009060ff6301000000820481169161385d91168461409e565b6138679190613f98565b9050600061387582846140bd565b90506000613884600284613f98565b90508060006138938285613f5b565b905060006138a082613a86565b90506000826138af868461409e565b6138b99190613f98565b600c54600e549192506000916001600160a01b039182169163f305d71991859130918a9187918291166138ee42610168613f5b565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b15801561395657600080fd5b505af115801561396a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061398f9190613dab565b5091505080600860008282546139a59190613f5b565b90915550506040805185815260208101859052908101869052606081018390527f1073c37866404dc5ccf364f61b6850f80619085a9a66bb67b4a9681c2ac614589060800160405180910390a1505050505050505050565b6000613a076114e8565b613a115750600090565b6000612710601f5447613a24919061409e565b613a2e9190613f98565b9050613a3981612dd3565b600191505090565b6000613a4d8383613bee565b159392505050565b600d546000906001600160a01b03808516911614801561381c57506001600160a01b03821661dead14905092915050565b6040805160028082526060820183526000924792849290916020830190803683370190505090503081600081518110613ac157613ac161411b565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613b1557600080fd5b505afa158015613b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4d9190613c5d565b81600181518110613b6057613b6061411b565b6001600160a01b039283166020918202929092010152600c541663791ac9478560008430613b9042610168613f5b565b6040518663ffffffff1660e01b8152600401613bb0959493929190613f1f565b600060405180830381600087803b158015613bca57600080fd5b505af1158015613bde573d6000803e3d6000fd5b5050505081476131ca91906140bd565b6000806001600160a01b038416301480156131ca5750600d546001600160a01b038085169116146131ca565b80358015158114613c2a57600080fd5b919050565b803560ff81168114613c2a57600080fd5b600060208284031215613c5257600080fd5b813561381c81614131565b600060208284031215613c6f57600080fd5b815161381c81614131565b60008060408385031215613c8d57600080fd5b8235613c9881614131565b91506020830135613ca881614131565b809150509250929050565b600080600060608486031215613cc857600080fd5b8335613cd381614131565b92506020840135613ce381614131565b929592945050506040919091013590565b60008060408385031215613d0757600080fd5b8235613d1281614131565b9150613d2060208401613c1a565b90509250929050565b60008060408385031215613d3c57600080fd5b8235613d4781614131565b946020939093013593505050565b600060208284031215613d6757600080fd5b61381c82613c1a565b600060208284031215613d8257600080fd5b5035919050565b60008060408385031215613d9c57600080fd5b50508035926020909101359150565b600080600060608486031215613dc057600080fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215613dee57600080fd5b613df784613c2f565b9250613e0560208501613c2f565b9150613e1360408501613c2f565b90509250925092565b600081518084526020808501945080840160005b83811015613e555781516001600160a01b031687529582019590820190600101613e30565b509495945050505050565b848152608060208201526000613e796080830186613e1c565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b81811015613ec257858101830151858201604001528201613ea6565b81811115613ed4576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b85815284602082015260a060408201526000613f3e60a0830186613e1c565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613f6e57613f6e6140ef565b500190565b600060ff821660ff84168060ff03821115613f9057613f906140ef565b019392505050565b600082613fb557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613ff5578160001904821115613fdb57613fdb6140ef565b80851615613fe857918102915b93841c9390800290613fbf565b509250929050565b600061381c60ff8416836000826140165750600161116b565b816140235750600061116b565b8160018114613629576002811461403957614055565b60ff84111561404a5761404a6140ef565b50506001821b61116b565b5060208310610133831016604e8410600b8410161715614078575081810a61116b565b6140828383613fba565b8060001904821115614096576140966140ef565b029392505050565b60008160001904831182151516156140b8576140b86140ef565b500290565b6000828210156140cf576140cf6140ef565b500390565b60006000198214156140e8576140e86140ef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146115f757600080fdfea2646970667358221220e6f806690cbaaa7d29db34a53a07ca5850fbe5bb6779a1c2fce354e2994e164064736f6c634300080500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

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

00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e


Deployed ByteCode Sourcemap

31029:22290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28967:82;;;;;;;;;;-1:-1:-1;29040:4:0;;;;;;;;;;;;-1:-1:-1;;;29040:4:0;;;;28967:82;;;;;;;:::i;:::-;;;;;;;;50020:188;;;;;;;;;;-1:-1:-1;50020:188:0;;;;;:::i;:::-;;:::i;:::-;;18926:147;;;;;;;;;;-1:-1:-1;18926:147:0;;;;;:::i;:::-;;:::i;:::-;;;5995:14:1;;5988:22;5970:41;;5958:2;5943:18;18926:147:0;5925:92:1;44366:430:0;;;;;;;;;;-1:-1:-1;44366:430:0;;;;;:::i;:::-;;:::i;:::-;;;;20706:25:1;;;20762:2;20747:18;;20740:34;;;;20679:18;44366:430:0;20661:119:1;29698:98:0;;;;;;;;;;-1:-1:-1;29771:20:0;;-1:-1:-1;;;;;29771:20:0;29698:98;;;-1:-1:-1;;;;;4443:32:1;;;4425:51;;4413:2;4398:18;29698:98:0;4380:102:1;30435:91:0;;;;;;;;;;-1:-1:-1;30435:91:0;;;;;:::i;:::-;;:::i;28864:96::-;;;;;;;;;;-1:-1:-1;28936:19:0;;28864:96;;;19909:25:1;;;19897:2;19882:18;28864:96:0;19864:76:1;30347:81:0;;;;;;;;;;-1:-1:-1;30410:13:0;;;;;;;30347:81;;49317:124;;;;;;;;;;-1:-1:-1;49317:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;49401:35:0;49383:4;49401:35;;;:29;:35;;;;;;;;;49317:124;52745:133;;;;;;;;;;-1:-1:-1;52745:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;52837:36:0;52819:4;52837:36;;;:30;:36;;;;;;;;;52745:133;18038:249;;;;;;;;;;;;;:::i;49704:121::-;;;;;;;;;;-1:-1:-1;49788:32:0;;49704:121;;46994:226;;;;;;;;;;-1:-1:-1;46994:226:0;;;;;:::i;:::-;47168:20;47207:8;;;46994:226;48798:100;;;;;;;;;;-1:-1:-1;48798:100:0;;;;;:::i;:::-;;:::i;29149:91::-;;;;;;;;;;;;;:::i;44803:708::-;;;;;;;;;;-1:-1:-1;44803:708:0;;;;;:::i;:::-;;:::i;48540:152::-;;;;;;;;;;-1:-1:-1;48540:152:0;;;;;:::i;:::-;;:::i;18623:295::-;;;;;;;;;;-1:-1:-1;18623:295:0;;;;;:::i;:::-;;:::i;16067:80::-;;;;;;;;;;;;16105:42;16067:80;;51467:145;;;;;;;;;;-1:-1:-1;51467:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;51566:41:0;51545:7;51566:41;;;:30;:41;;;;;;;51467:145;49832:181;;;;;;;;;;-1:-1:-1;49832:181:0;;;;;:::i;:::-;;:::i;50371:100::-;;;;;;;;;;-1:-1:-1;50444:22:0;;;;50371:100;;48443:90;;;;;;;;;;-1:-1:-1;48512:16:0;;48443:90;;26181:252;;;;;;;;;;;;;:::i;29248:82::-;;;;;;;;;;-1:-1:-1;29248:82:0;;15031:1;21323:36:1;;21311:2;21296:18;29248:82:0;21278:87:1;46180:202:0;;;;;;;;;;;;;:::i;46425:245::-;;;;;;;;;;-1:-1:-1;46425:245:0;;;;;:::i;:::-;;:::i;30157:83::-;;;;;;;;;;-1:-1:-1;30221:14:0;;;;30157:83;;29592:99;;;;;;;;;;-1:-1:-1;29668:18:0;;-1:-1:-1;;;;;29668:18:0;29592:99;;26440:201;;;;;;;;;;-1:-1:-1;26440:201:0;;;;;:::i;:::-;;:::i;47227:182::-;;;;;;;;;;;;;:::i;52310:119::-;;;;;;;;;;-1:-1:-1;52310:119:0;;;;;:::i;:::-;;:::i;47683:90::-;;;;;;;;;;-1:-1:-1;47752:16:0;;47683:90;;52060:121;;;;;;;;;;-1:-1:-1;52060:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;52142:34:0;52124:4;52142:34;;;:28;:34;;;;;;;;;52060:121;26866:448;;;;;;;;;;-1:-1:-1;26866:448:0;;;;;:::i;:::-;;:::i;30533:117::-;;;;;;;;;;-1:-1:-1;30533:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;30613:32:0;30595:4;30613:32;;;:26;:32;;;;;;;;;30533:117;29932:90;;;;;;;;;;-1:-1:-1;30001:16:0;;29932:90;;47549:124;;;;;;;;;;-1:-1:-1;47549:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;47641:27:0;47620:7;47641:27;;;:16;:27;;;;;;;47549:124;30657:122;;;;;;;;;;-1:-1:-1;30657:122:0;;;;;:::i;:::-;;:::i;28686:171::-;;;;;;;;;;-1:-1:-1;28686:171:0;;;;;:::i;:::-;;:::i;50478:111::-;;;;;;;;;;-1:-1:-1;50478:111:0;;;;;:::i;:::-;;:::i;50596:100::-;;;;;;;;;;-1:-1:-1;50670:21:0;;50596:100;;52189:114;;;;;;;;;;-1:-1:-1;52268:30:0;;;;52189:114;;42687:128;;;;;;;;;;-1:-1:-1;42687:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;42762:29:0;42744:4;42762:29;;;:23;:29;;;;;;42795:15;-1:-1:-1;42762:48:0;;42687:128;52637:101;;;;;;;;;;-1:-1:-1;52711:22:0;;52637:101;;50703:174;;;;;;;;;;-1:-1:-1;50703:174:0;;;;;:::i;:::-;;:::i;28389:189::-;;;;;;;;;;-1:-1:-1;28389:189:0;;;;;:::i;:::-;;:::i;50215:149::-;;;;;;;;;;-1:-1:-1;50215:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;50316:32:0;;;50298:4;50316:32;;;:21;:32;;;;;;;;:43;;;;;;;;;;;;;;;50215:149;49111:91;;;;;;;;;;-1:-1:-1;49180:17:0;;;;49111:91;;18344:110;;;;;;;;;;-1:-1:-1;18344:110:0;;;;;:::i;:::-;;:::i;6078:148::-;;;;;;;;;;;;;:::i;41021:993::-;;;;;;;;;;-1:-1:-1;41021:993:0;;;;;:::i;:::-;;:::i;51813:90::-;;;;;;;;;;-1:-1:-1;51882:16:0;;51813:90;;30030:120;;;;;;;;;;-1:-1:-1;30114:31:0;;30030:120;;53197:119;;;;;;;;;;-1:-1:-1;53197:119:0;;;;;:::i;:::-;;:::i;48699:92::-;;;;;;;;;;-1:-1:-1;48769:17:0;;48699:92;;29477:108;;;;;;;;;;-1:-1:-1;29555:25:0;;;;;-1:-1:-1;;;;;29555:25:0;29477:108;;47994:166;;;;;;;;;;-1:-1:-1;47994:166:0;;;;;:::i;:::-;;:::i;51286:174::-;;;;;;;;;;-1:-1:-1;51286:174:0;;;;;:::i;:::-;;:::i;5427:87::-;;;;;;;;;;-1:-1:-1;5473:7:0;5500:6;-1:-1:-1;;;;;5500:6:0;5427:87;;43258:1101;;;;;;;;;;-1:-1:-1;43258:1101:0;;;;;:::i;:::-;;:::i;42340:340::-;;;;;;;;;;-1:-1:-1;42340:340:0;;;;;:::i;:::-;;:::i;29056:86::-;;;;;;;;;;-1:-1:-1;29131:6:0;;;;;;;;;;;;-1:-1:-1;;;29131:6:0;;;;29056:86;;29803:122;;;;;;;;;;-1:-1:-1;29803:122:0;;;;;:::i;:::-;;:::i;47419:120::-;;;;;;;;;;-1:-1:-1;47419:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;47506:28:0;47485:7;47506:28;;;:17;:28;;;;;;;47419:120;42822:261;;;;;;;;;;-1:-1:-1;42822:261:0;;;;;:::i;:::-;;:::i;26648:211::-;;;;;;;;;;-1:-1:-1;26648:211:0;;;;;:::i;:::-;;:::i;18462:153::-;;;;;;;;;;-1:-1:-1;18462:153:0;;;;;:::i;:::-;;:::i;49008:96::-;;;;;;;;;;-1:-1:-1;49008:96:0;;;;;:::i;:::-;;:::i;48304:132::-;;;;;;;;;;-1:-1:-1;48304:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;48397:34:0;48376:7;48397:34;;;:23;:34;;;;;;;48304:132;38205:86;;;;;;;;;;;;;:::i;49209:101::-;;;;;;;;;;-1:-1:-1;49209:101:0;;;;;:::i;:::-;;:::i;47783:100::-;;;;;;;;;;-1:-1:-1;47857:21:0;;47783:100;;51619:187;;;;;;;;;;-1:-1:-1;51619:187:0;;;;;:::i;:::-;;:::i;49528:169::-;;;;;;;;;;-1:-1:-1;49528:169:0;;;;;:::i;:::-;;:::i;52885:206::-;;;;;;;;;;-1:-1:-1;52885:206:0;;;;;:::i;:::-;;:::i;51172:107::-;;;;;;;;;;-1:-1:-1;51249:25:0;;51172:107;;38298:461;;;;;;;;;;-1:-1:-1;38298:461:0;;;;;:::i;:::-;;:::i;50884:98::-;;;;;;;;;;-1:-1:-1;50957:20:0;;50884:98;;53096:96;;;;;;;;;;-1:-1:-1;53096:96:0;;;;;:::i;:::-;;:::i;48905:::-;;;;;;;;;;-1:-1:-1;48977:19:0;;48905:96;;29338:132;;;;;;;;;;-1:-1:-1;29338:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;29439:17:0;;;29418:7;29439:17;;;:11;:17;;;;;;;;:26;;;;;;;;;;;;;29338:132;48167:130;;;;;;;;;;-1:-1:-1;48167:130:0;;;;;:::i;:::-;;:::i;30247:93::-;;;;;;;;;;-1:-1:-1;30247:93:0;;;;;:::i;:::-;;:::i;47893:94::-;;;;;;;;;;-1:-1:-1;47964:18:0;;47893:94;;51910:143;;;;;;;;;;-1:-1:-1;51910:143:0;;;;;:::i;:::-;;:::i;52526:104::-;;;;;;;;;;-1:-1:-1;52601:17:0;:24;52526:104;;52436:83;;;;;;;;;;-1:-1:-1;52501:13:0;;52436:83;;28587:92;;;;;;;;;;-1:-1:-1;28657:17:0;;28587:92;;27623:634;;;;;;;;;;-1:-1:-1;27623:634:0;;;;;:::i;:::-;;:::i;30786:76::-;;;;;;;;;;;;;:::i;50989:176::-;;;;;;;;;;-1:-1:-1;50989:176:0;;;;;:::i;:::-;;:::i;50020:188::-;-1:-1:-1;;;;;50098:23:0;;50090:51;;;;-1:-1:-1;;;50090:51:0;;7744:2:1;50090:51:0;;;7726:21:1;7783:2;7763:18;;;7756:30;-1:-1:-1;;;7802:18:1;;;7795:45;7857:18;;50090:51:0;;;;;;;;;50168:10;50146:33;;;;:21;:33;;;;;;;;-1:-1:-1;;;;;50146:44:0;;;;;;;;;;;;;:57;;-1:-1:-1;;50146:57:0;;;;;;;;;;50020:188::o;18926:147::-;19001:4;19012:40;4105:10;19036:7;19045:6;19012:9;:40::i;:::-;-1:-1:-1;19064:4:0;18926:147;;;;;:::o;44366:430::-;44437:7;44446;44460:14;44477:29;44496:9;44477:18;:29::i;:::-;44550:22;;44460:46;;-1:-1:-1;44513:24:0;;44550:22;;44546:152;;;-1:-1:-1;;;;;44601:41:0;;44580:18;44601:41;;;:30;:41;;;;;;44689:3;44667:19;44601:41;44667:6;:19;:::i;:::-;:25;;;;:::i;:::-;44648:44;;44574:124;44546:152;44705:16;44724:25;44733:16;44724:6;:25;:::i;:::-;44705:44;44774:16;;-1:-1:-1;44366:430:0;;-1:-1:-1;;;;44366:430:0:o;30435:91::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;30496:13:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;30496:25:0;;::::1;::::0;;;::::1;::::0;;30435:91::o;18038:249::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;18080:20:::1;18095:4;18080:14;:20::i;:::-;18105:19;18119:4;18105:13;:19::i;:::-;18129:31;18152:7;5473::::0;5500:6;-1:-1:-1;;;;;5500:6:0;;5427:87;18129:31:::1;18165:25;18185:4;18165:19;:25::i;:::-;18248:16;:14;:16::i;:::-;18269:13;:11;:13::i;:::-;18038:249::o:0;48798:100::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;48866:17:::1;:27:::0;48798:100::o;29149:91::-;29202:7;15545:12;15031:1;15545:2;:12;:::i;:::-;15529:28;;:13;:28;:::i;:::-;29216:19;;29149:91;:::o;44803:708::-;44871:7;44885:21;44909:25;:23;:25::i;:::-;44885:49;;44941:15;44959:20;44969:9;44959;:20::i;:::-;44941:38;;44984:15;45070:3;45034:32;;45028:3;:38;;;;:::i;:::-;45003:64;;:21;:64;:::i;:::-;:70;;;;:::i;:::-;44984:89;;45191:16;;45181:7;:26;45177:70;;;-1:-1:-1;45225:16:0;;45177:70;45362:14;45399:13;45379:17;45389:7;45379;:17;:::i;:::-;:33;;;;:::i;:::-;45362:50;;45432:16;;45423:6;:25;45419:68;;;-1:-1:-1;45465:16:0;;45419:68;45500:6;44803:708;-1:-1:-1;;;;;44803:708:0:o;48540:152::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;48621:1:::1;48613:5;:9;48605:53;;;::::0;-1:-1:-1;;;48605:53:0;;8088:2:1;48605:53:0::1;::::0;::::1;8070:21:1::0;8127:2;8107:18;;;8100:30;8166:33;8146:18;;;8139:61;8217:18;;48605:53:0::1;8060:181:1::0;48605:53:0::1;48663:16;:24:::0;48540:152::o;18623:295::-;18721:4;18732:37;18743:6;18751:9;18762:6;18732:10;:37::i;:::-;-1:-1:-1;;;;;18806:19:0;;;;;;:11;:19;;;;;;;;4105:10;18806:33;;;;;;;;;18774:75;;18784:6;;18806:42;;18842:6;;18806:42;:::i;:::-;18774:9;:75::i;:::-;-1:-1:-1;18909:4:0;18623:295;;;;;:::o;49832:181::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;49930:2:::1;49921:5;:11;;49913:50;;;::::0;-1:-1:-1;;;49913:50:0;;13525:2:1;49913:50:0::1;::::0;::::1;13507:21:1::0;13564:2;13544:18;;;13537:30;13603:28;13583:18;;;13576:56;13649:18;;49913:50:0::1;13497:176:1::0;49913:50:0::1;49968:32;:40:::0;49832:181::o;26181:252::-;26229:7;26243:15;26261:24;26279:4;26261:9;:24::i;:::-;26243:42;;26304:19;;26294:7;:29;26290:96;;;26379:1;26372:8;;;26181:252;:::o;26290:96::-;26421:7;26399:19;;:29;;;;:::i;:::-;26392:36;;;26181:252;:::o;46180:202::-;46222:4;46264:1;46240:21;;:25;:79;;;;;46294:25;;46269:21;:50;;46240:79;:137;;;;-1:-1:-1;46357:20:0;;46341:13;;46323:31;;:15;:31;:::i;:::-;:54;46233:144;;46180:202;:::o;46425:245::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;46509:27:::1;46533:3;46509:21;:27;:::i;:::-;46496:9;:40;;46488:84;;;::::0;-1:-1:-1;;;46488:84:0;;11575:2:1;46488:84:0::1;::::0;::::1;11557:21:1::0;11614:2;11594:18;;;11587:30;11653:33;11633:18;;;11626:61;11704:18;;46488:84:0::1;11547:181:1::0;46488:84:0::1;46597:1;46585:9;:13;46577:58;;;::::0;-1:-1:-1;;;46577:58:0;;10035:2:1;46577:58:0::1;::::0;::::1;10017:21:1::0;;;10054:18;;;10047:30;10113:34;10093:18;;;10086:62;10165:18;;46577:58:0::1;10007:182:1::0;46577:58:0::1;46642:23;46655:9;46642:12;:23::i;:::-;46425:245:::0;:::o;26440:201::-;4105:10;26528:4;26572:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26572:34:0;;;;;;;;;;26528:4;;26539:81;;26563:7;;26572:47;;26609:10;;26572:47;:::i;47227:182::-;47283:7;47369:35;47379:24;29668:18;;-1:-1:-1;;;;;29668:18:0;;29592:99;47369:35;47344:22;16105:42;47344:9;:22::i;:::-;47320:21;47338:1;47320:9;:21::i;:::-;47304:13;:11;:13::i;:::-;:37;;;;:::i;:::-;:62;;;;:::i;:::-;:100;;;;:::i;52310:119::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;52386:30:::1;:38:::0;;-1:-1:-1;;52386:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52310:119::o;26866:448::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26949:27:0;::::1;26941:85;;;::::0;-1:-1:-1;;;26941:85:0;;9209:2:1;26941:85:0::1;::::0;::::1;9191:21:1::0;9248:2;9228:18;;;9221:30;9287:34;9267:18;;;9260:62;-1:-1:-1;;;9338:18:1;;;9331:43;9391:19;;26941:85:0::1;9181:235:1::0;26941:85:0::1;27033:25;:41:::0;;-1:-1:-1;;;;;27033:41:0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;;;;27033:41:0;;::::1;::::0;;;::::1;::::0;;;;27080:20:::1;:66:::0;;-1:-1:-1;;;;;;27080:66:0::1;27120:25:::0;;;::::1;;27080:66:::0;;::::1;::::0;;;27188:30:::1;::::0;;-1:-1:-1;;;27188:30:0;;;;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;27120:25;27188:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27172:58:0::1;;27239:4;27246:20;;;;;;;;;-1:-1:-1::0;;;;;27246:20:0::1;-1:-1:-1::0;;;;;27246:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27172:102;::::0;-1:-1:-1;;;;;;27172:102:0::1;::::0;;;;;;-1:-1:-1;;;;;4717:15:1;;;27172:102:0::1;::::0;::::1;4699:34:1::0;4769:15;;4749:18;;;4742:43;4634:18;;27172:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27151:18;:123:::0;;-1:-1:-1;;;;;;27151:123:0::1;-1:-1:-1::0;;;;;27151:123:0;;;::::1;::::0;;;::::1;::::0;;27281:28:::1;:26;:28::i;30657:122::-:0;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30734:32:0;;;::::1;;::::0;;;:26:::1;:32;::::0;;;;:40;;-1:-1:-1;;30734:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30657:122::o;28686:171::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;28778:1:::1;28766:9;:13;28758:58;;;::::0;-1:-1:-1;;;28758:58:0;;15397:2:1;28758:58:0::1;::::0;::::1;15379:21:1::0;;;15416:18;;;15409:30;15475:34;15455:18;;;15448:62;15527:18;;28758:58:0::1;15369:182:1::0;28758:58:0::1;28821:19;:31:::0;28686:171::o;50478:111::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;50550:22:::1;:34:::0;;-1:-1:-1;;50550:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50478:111::o;50703:174::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;50798:3:::1;50785:9;:16;;50777:57;;;::::0;-1:-1:-1;;;50777:57:0;;11218:2:1;50777:57:0::1;::::0;::::1;11200:21:1::0;11257:2;11237:18;;;11230:30;11296;11276:18;;;11269:58;11344:18;;50777:57:0::1;11190:178:1::0;50777:57:0::1;50839:21;:33:::0;50703:174::o;28389:189::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;28472:1:::1;28463:5;:10;;:28;;;;;28486:5;28477;:14;;28463:28;28455:73;;;::::0;-1:-1:-1;;;28455:73:0;;16513:2:1;28455:73:0::1;::::0;::::1;16495:21:1::0;;;16532:18;;;16525:30;16591:34;16571:18;;;16564:62;16643:18;;28455:73:0::1;16485:182:1::0;28455:73:0::1;28568:5:::0;15545:12:::1;15031:1;15545:2;:12;:::i;:::-;15529:28;::::0;:13:::1;:28;:::i;:::-;28553:20;;;;:::i;:::-;28533:17;:40:::0;-1:-1:-1;28389:189:0:o;18344:110::-;-1:-1:-1;;;;;18431:18:0;18410:7;18431:18;;;:9;:18;;;;;;;18344:110::o;6078:148::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;6185:1:::1;6169:6:::0;;6148:40:::1;::::0;-1:-1:-1;;;;;6169:6:0;;::::1;::::0;6148:40:::1;::::0;6185:1;;6148:40:::1;6216:1;6199:19:::0;;-1:-1:-1;;;;;;6199:19:0::1;::::0;;6078:148::o;41021:993::-;41093:1;41087:3;:7;41079:41;;;;-1:-1:-1;;;41079:41:0;;16874:2:1;41079:41:0;;;16856:21:1;16913:2;16893:18;;;16886:30;-1:-1:-1;;;16932:18:1;;;16925:51;16993:18;;41079:41:0;16846:171:1;41079:41:0;41149:17;:24;41184:16;41180:40;;41208:7;41021:993;:::o;41180:40::-;41226:15;41250;41268:9;41308:16;:23;;-1:-1:-1;;41308:23:0;;;;;41250:27;-1:-1:-1;41282:17:0;41445:534;41462:3;41452:7;:13;:40;;;;;41481:11;41469:9;:23;41452:40;41445:534;;;41530:11;41504:22;;:37;41500:83;;41575:1;41550:22;:26;41500:83;41590:12;41605:17;41623:22;;41605:41;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;41605:41:0;;-1:-1:-1;41656:19:0;41605:41;-1:-1:-1;;;;;42762:29:0;42744:4;42762:29;;;:23;:29;;;;;;42795:15;-1:-1:-1;42762:48:0;;42687:128;41656:19;:48;;;;;41679:25;41699:4;41679:19;:25::i;:::-;41652:87;;;41713:19;41727:4;41713:13;:19::i;:::-;;41652:87;41746:18;41767:9;41746:30;;41801:10;41791:7;:20;41787:138;;;41820:19;41842:20;41852:10;41842:7;:20;:::i;:::-;41820:42;-1:-1:-1;41869:22:0;41820:42;41869:22;;:::i;:::-;;;41908:10;41898:20;;41813:112;41787:138;41932:11;;;;:::i;:::-;41949:22;:24;;41932:11;;-1:-1:-1;41949:24:0;;-1:-1:-1;41949:22:0;:24;;;:::i;:::-;;;;;;41494:485;;41445:534;;;-1:-1:-1;;41985:16:0;:24;;-1:-1:-1;;41985:24:0;;;-1:-1:-1;;;41021:993:0:o;53197:119::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;53273:28:::1;:38:::0;;-1:-1:-1;;53273:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53197:119::o;47994:166::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;48079:1:::1;48070:6;:10;:30;;;;;48094:6;48084;:16;;48070:30;48062:61;;;::::0;-1:-1:-1;;;48062:61:0;;16166:2:1;48062:61:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;-1:-1:-1;;;16224:18:1;;;16217:48;16282:18;;48062:61:0::1;16138:168:1::0;48062:61:0::1;48128:18;:27:::0;47994:166::o;51286:174::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;51378:1:::1;51369:6;:10;51361:55;;;::::0;-1:-1:-1;;;51361:55:0;;10035:2:1;51361:55:0::1;::::0;::::1;10017:21:1::0;;;10054:18;;;10047:30;10113:34;10093:18;;;10086:62;10165:18;;51361:55:0::1;10007:182:1::0;51361:55:0::1;51421:25;:34:::0;51286:174::o;43258:1101::-;43351:7;43365:18;43386:19;47964:18;;;47893:94;43386:19;43365:40;-1:-1:-1;43416:12:0;43412:446;;43824:28;43842:10;43824:15;:28;:::i;:::-;43817:35;;;;;43412:446;43864:12;43894:7;43879:12;:6;43888:3;43879:12;:::i;:::-;:22;;;;:::i;:::-;43864:37;;44033:30;;44025:4;:38;44021:319;;44165:17;44205:3;44185:17;44198:4;44185:10;:17;:::i;:::-;:23;;;;:::i;:::-;44165:43;;44263:10;44250:9;:23;44246:65;;-1:-1:-1;44294:10:0;44246:65;44325:9;-1:-1:-1;44318:16:0;;-1:-1:-1;;44318:16:0;44021:319;-1:-1:-1;44353:1:0;;43258:1101;-1:-1:-1;;;;43258:1101:0:o;42340:340::-;42451:10;42420:42;;;;:30;:42;;;;;;;;42412:108;;;;-1:-1:-1;;;42412:108:0;;18826:2:1;42412:108:0;;;18808:21:1;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:1;;;18948:51;19016:19;;42412:108:0;18798:243:1;42412:108:0;42527:16;42546:9;42527:28;;42560;42584:3;42560:23;:28::i;:::-;42593:15;42622:9;42611:20;;:8;:20;:::i;:::-;42638:37;;42593:38;;-1:-1:-1;42646:10:0;;42638:37;;;;;42593:38;;42638:37;;;;42593:38;42646:10;42638:37;;;;;;;;;;;;;;;;;;;;;42407:273;;42340:340;:::o;29803:122::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;29882:20:::1;:38:::0;;-1:-1:-1;;;;;;29882:38:0::1;-1:-1:-1::0;;;;;29882:38:0;;;::::1;::::0;;;::::1;::::0;;29803:122::o;42822:261::-;42900:28;;42885:4;;42900:28;;42896:93;;;47168:20;;47207:8;42936:48;;-1:-1:-1;42972:5:0;;42822:261;-1:-1:-1;42822:261:0:o;42936:48::-;43021:17;;43002:15;43012:4;43002:9;:15::i;:::-;:36;;:76;;;;-1:-1:-1;;;;;;;43043:35:0;;;;;:29;:35;;;;;;;;43042:36;;42822:261::o;26648:211::-;4105:10;26741:4;26785:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26785:34:0;;;;;;;;;;26741:4;;26752:86;;26776:7;;26785:52;;26822:15;;26785:52;:::i;18462:153::-;18540:4;18551:43;4105:10;18576:9;18587:6;18551:10;:43::i;49008:96::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;49074:19:::1;:25:::0;49008:96::o;38205:86::-;14607:9;14620:10;14607:23;14599:47;;;;-1:-1:-1;;;14599:47:0;;15057:2:1;14599:47:0;;;15039:21:1;15096:2;15076:18;;;15069:30;-1:-1:-1;;;15115:18:1;;;15108:41;15166:18;;14599:47:0;15029:161:1;14599:47:0;13622:1:::1;14219:7;;:19;;14211:63;;;::::0;-1:-1:-1;;;14211:63:0;;19248:2:1;14211:63:0::1;::::0;::::1;19230:21:1::0;19287:2;19267:18;;;19260:30;19326:33;19306:18;;;19299:61;19377:18;;14211:63:0::1;19220:181:1::0;14211:63:0::1;13622:1;14352:7;:18:::0;38263:23:::2;38275:10;38263:11;:23::i;:::-;13578:1:::1;14531:22:::0;;38205:86::o;49209:101::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;49276:17:::1;:29:::0;;-1:-1:-1;;49276:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49209:101::o;51619:187::-;51715:3;51701:10;:17;;51693:48;;;;-1:-1:-1;;;51693:48:0;;13178:2:1;51693:48:0;;;13160:21:1;13217:2;13197:18;;;13190:30;-1:-1:-1;;;13236:18:1;;;13229:48;13294:18;;51693:48:0;13150:168:1;51693:48:0;51777:10;51746:42;;;;:30;:42;;;;;:55;51619:187::o;49528:169::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49613:35:0;::::1;;::::0;;;:29:::1;:35;::::0;;;;:48;;-1:-1:-1;;49613:48:0::1;::::0;::::1;;;::::0;;49666:26:::1;49613:35:::0;49666:20:::1;:26::i;:::-;49528:169:::0;;:::o;52885:206::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52991:18:0;::::1;52983:46;;;::::0;-1:-1:-1;;;52983:46:0;;7744:2:1;52983:46:0::1;::::0;::::1;7726:21:1::0;7783:2;7763:18;;;7756:30;-1:-1:-1;;;7802:18:1;;;7795:45;7857:18;;52983:46:0::1;7716:165:1::0;52983:46:0::1;-1:-1:-1::0;;;;;53034:36:0;;;::::1;;::::0;;;:30:::1;:36;::::0;;;;:52;;-1:-1:-1;;53034:52:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52885:206::o;38298:461::-;38353:10;-1:-1:-1;;;;;38353:18:0;;;;:55;;-1:-1:-1;;;;;;50316:32:0;;50298:4;50316:32;;;:21;:32;;;;;;;;38397:10;50316:43;;;;;;;;;;38375:33;38345:127;;;;-1:-1:-1;;;38345:127:0;;17224:2:1;38345:127:0;;;17206:21:1;17263:2;17243:18;;;17236:30;17302:34;17282:18;;;17275:62;17373:29;17353:18;;;17346:57;17420:19;;38345:127:0;17196:249:1;38345:127:0;-1:-1:-1;;;;;42762:29:0;;42744:4;42762:29;;;:23;:29;;;;;;42795:15;-1:-1:-1;42762:48:0;38477:78;;;;-1:-1:-1;;;38477:78:0;;8794:2:1;38477:78:0;;;8776:21:1;8833:2;8813:18;;;8806:30;8872:34;8852:18;;;8845:62;-1:-1:-1;;;8923:18:1;;;8916:44;8977:19;;38477:78:0;8766:236:1;38477:78:0;38568:25;38588:4;38568:19;:25::i;:::-;38560:109;;;;-1:-1:-1;;;38560:109:0;;11935:2:1;38560:109:0;;;11917:21:1;11974:2;11954:18;;;11947:30;12013:34;11993:18;;;11986:62;12084:34;12064:18;;;12057:62;-1:-1:-1;;;12135:19:1;;;12128:38;12183:19;;38560:109:0;11907:301:1;38560:109:0;38676:12;38691:19;38705:4;38691:13;:19::i;:::-;38676:34;;38723:7;38715:39;;;;-1:-1:-1;;;38715:39:0;;18064:2:1;38715:39:0;;;18046:21:1;18103:2;18083:18;;;18076:30;-1:-1:-1;;;18122:18:1;;;18115:49;18181:18;;38715:39:0;18036:169:1;53096:96:0;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;53162:16:::1;:25:::0;53096:96::o;48167:130::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;48250:30:::1;:42:::0;48167:130::o;30247:93::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;30309:14:::1;:26:::0;;-1:-1:-1;;30309:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30247:93::o;51910:143::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;51990:8:::1;51982:4;:16;;51974:46;;;::::0;-1:-1:-1;;;51974:46:0;;8448:2:1;51974:46:0::1;::::0;::::1;8430:21:1::0;8487:2;8467:18;;;8460:30;-1:-1:-1;;;8506:18:1;;;8499:47;8563:18;;51974:46:0::1;8420:167:1::0;51974:46:0::1;52025:16;:23:::0;51910:143::o;27623:634::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;27748:1:::1;27732:12;:17;;;;:38;;;;;27769:1;27753:12;:17;;;;27732:38;27724:90;;;::::0;-1:-1:-1;;;27724:90:0;;15758:2:1;27724:90:0::1;::::0;::::1;15740:21:1::0;15797:2;15777:18;;;15770:30;15836:34;15816:18;;;15809:62;-1:-1:-1;;;15887:18:1;;;15880:37;15934:19;;27724:90:0::1;15730:229:1::0;27724:90:0::1;27840:1;27827:9;:14;;;;:33;;;;;27858:2;27845:9;:15;;;;27827:33;27819:83;;;::::0;-1:-1:-1;;;27819:83:0;;14651:2:1;27819:83:0::1;::::0;::::1;14633:21:1::0;14690:2;14670:18;;;14663:30;14729:34;14709:18;;;14702:62;-1:-1:-1;;;14780:18:1;;;14773:35;14825:19;;27819:83:0::1;14623:227:1::0;27819:83:0::1;27936:1;27915:17;:22;;;;27907:71;;;::::0;-1:-1:-1;;;27907:71:0;;12773:2:1;27907:71:0::1;::::0;::::1;12755:21:1::0;12812:2;12792:18;;;12785:30;12851:34;12831:18;;;12824:62;-1:-1:-1;;;12902:18:1;;;12895:34;12946:19;;27907:71:0::1;12745:226:1::0;27907:71:0::1;28039:2;28018:17:::0;27991:24:::1;28006:9:::0;27991:12;:24:::1;:::i;:::-;:44;;;;:::i;:::-;:50;;;;27983:91;;;::::0;-1:-1:-1;;;27983:91:0;;19608:2:1;27983:91:0::1;::::0;::::1;19590:21:1::0;19647:2;19627:18;;;19620:30;19686;19666:18;;;19659:58;19734:18;;27983:91:0::1;19580:178:1::0;27983:91:0::1;28083:13;:28:::0;;::::1;28143:38:::0;;::::1;::::0;::::1;-1:-1:-1::0;;28116:22:0;;::::1;28083:28;28116:22:::0;;::::1;-1:-1:-1::0;;28116:22:0;;;28083:28;;::::1;28116:22:::0;;;;::::1;28143:38:::0;;::::1;::::0;::::1;::::0;;;;28225:26:::1;::::0;28238:13;;;;;;;;28225:10;::::1;;:26;:::i;:::-;28214:8;;:37;;;;;;;;;;;;;;;;;;27623:634:::0;;;:::o;30786:76::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;30834:16:::1;:23:::0;;-1:-1:-1;;30834:23:0::1;30853:4;30834:23;::::0;;30786:76::o;50989:176::-;5473:7;5500:6;-1:-1:-1;;;;;5500:6:0;4105:10;5647:23;5639:68;;;;-1:-1:-1;;;5639:68:0;;;;;;;:::i;:::-;51081:9:::1;51069:8;:21;;51061:63;;;::::0;-1:-1:-1;;;51061:63:0;;12415:2:1;51061:63:0::1;::::0;::::1;12397:21:1::0;12454:2;12434:18;;;12427:30;12493:31;12473:18;;;12466:59;12542:18;;51061:63:0::1;12387:179:1::0;51061:63:0::1;51129:20;:31:::0;50989:176::o;21103:315::-;-1:-1:-1;;;;;21191:19:0;;21183:68;;;;-1:-1:-1;;;21183:68:0;;10396:2:1;21183:68:0;;;10378:21:1;10435:2;10415:18;;;10408:30;10474:34;10454:18;;;10447:62;-1:-1:-1;;;10525:18:1;;;10518:34;10569:19;;21183:68:0;10368:226:1;21183:68:0;-1:-1:-1;;;;;21264:21:0;;21256:68;;;;-1:-1:-1;;;21256:68:0;;7341:2:1;21256:68:0;;;7323:21:1;7380:2;7360:18;;;7353:30;7419:34;7399:18;;;7392:62;-1:-1:-1;;;7470:18:1;;;7463:32;7512:19;;21256:68:0;7313:224:1;21256:68:0;-1:-1:-1;;;;;21331:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21381:32;;19909:25:1;;;21381:32:0;;19882:18:1;21381:32:0;;;;;;;21103:315;;;:::o;35311:412::-;35383:30;35408:4;35383:24;:30::i;:::-;35418:25;35438:4;35418:19;:25::i;:::-;35448:38;35481:4;35448:32;:38::i;:::-;35491:42;35518:14;15031:1;35518:2;:14;:::i;:::-;35511:21;;:4;:21;:::i;35491:42::-;35602:26;35626:1;35602:23;:26::i;:::-;35703:15;35687:13;:31;35311:412::o;19082:1419::-;-1:-1:-1;;;;;19183:20:0;;19175:78;;;;-1:-1:-1;;;19175:78:0;;18412:2:1;19175:78:0;;;18394:21:1;18451:2;18431:18;;;18424:30;18490:34;18470:18;;;18463:62;-1:-1:-1;;;18541:18:1;;;18534:43;18594:19;;19175:78:0;18384:235:1;19175:78:0;-1:-1:-1;;;;;19266:23:0;;19258:79;;;;-1:-1:-1;;;19258:79:0;;9623:2:1;19258:79:0;;;9605:21:1;9662:2;9642:18;;;9635:30;9701:34;9681:18;;;9674:62;-1:-1:-1;;;9752:18:1;;;9745:41;9803:19;;19258:79:0;9595:233:1;19258:79:0;19359:1;19350:6;:10;19342:64;;;;-1:-1:-1;;;19342:64:0;;14241:2:1;19342:64:0;;;14223:21:1;14280:2;14260:18;;;14253:30;14319:34;14299:18;;;14292:62;-1:-1:-1;;;14370:18:1;;;14363:39;14419:19;;19342:64:0;14213:231:1;19342:64:0;27467:18;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;19419;:46;;;-1:-1:-1;19449:16:0;;;;19419:46;19411:107;;;;-1:-1:-1;;;19411:107:0;;10801:2:1;19411:107:0;;;10783:21:1;10840:2;10820:18;;;10813:30;10879:34;10859:18;;;10852:62;-1:-1:-1;;;10930:18:1;;;10923:46;10986:19;;19411:107:0;10773:238:1;19411:107:0;19599:36;19617:6;19625:9;19599:17;:36::i;:::-;19595:137;;;19661:17;;19651:6;:27;;19643:83;;;;-1:-1:-1;;;19643:83:0;;17652:2:1;19643:83:0;;;17634:21:1;17691:2;17671:18;;;17664:30;17730:34;17710:18;;;17703:62;-1:-1:-1;;;17781:18:1;;;17774:41;17832:19;;19643:83:0;17624:233:1;19643:83:0;19935:38;19955:6;19963:9;19935:19;:38::i;:::-;19980:43;19997:6;20005:9;20016:6;19980:16;:43::i;:::-;20055:15;20073:35;20090:6;20098:9;20073:16;:35::i;:::-;20055:53;-1:-1:-1;20117:17:0;20156:3;20137:16;20055:53;20137:6;:16;:::i;:::-;:22;;;;:::i;:::-;20117:42;-1:-1:-1;20164:22:0;20189:18;20117:42;20189:6;:18;:::i;:::-;20164:43;;20236:52;20251:6;20259:9;20270:6;20278:9;20236:14;:52::i;:::-;20387:9;20367:16;;:29;;;;;;;:::i;:::-;;;;;;;;20425:9;-1:-1:-1;;;;;20408:43:0;20417:6;-1:-1:-1;;;;;20408:43:0;;20436:14;20408:43;;;;19909:25:1;;19897:2;19882:18;;19864:76;20408:43:0;;;;;;;;20459:37;20470:6;20478:9;20489:6;20459:10;:37::i;:::-;19170:1331;;;19082:1419;;;:::o;46677:310::-;46747:21;46735:9;:33;46731:84;;;-1:-1:-1;46788:21:0;46731:84;46825:14;46821:38;;46677:310;:::o;46821:38::-;46869:40;46886:9;16105:42;46869:16;:40::i;:::-;46865:80;;;46922:17;;19909:25:1;;;46922:17:0;;19897:2:1;19882:18;46922:17:0;;;;;;;46865:80;-1:-1:-1;46967:15:0;46951:13;:31;46677:310::o;45518:198::-;45640:4;45580:29;:57;45610:26;29555:25;;-1:-1:-1;;;;;29555:25:0;;;;;;29477:108;45610:26;-1:-1:-1;;;;;45580:57:0;-1:-1:-1;;;;;45580:57:0;;;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;45707:4;45649:29;:55;45679:24;29668:18;;-1:-1:-1;;;;;29668:18:0;;29592:99;45679:24;-1:-1:-1;;;;;45649:55:0;;;;;;;;;;;;-1:-1:-1;45649:55:0;:62;;-1:-1:-1;;45649:62:0;;;;;;;;;;45518:198::o;38766:937::-;38820:4;38941:19;47964:18;;;47893:94;38941:19;38923:37;;:15;:37;:::i;:::-;-1:-1:-1;;;;;38891:29:0;;;;;;:23;:29;;;;;:69;;;;:29;39014:27;38915:4;39014:21;:27::i;:::-;38967:74;;-1:-1:-1;38967:74:0;-1:-1:-1;39073:4:0;39116:32;39125:4;38967:74;39116:8;:32::i;:::-;39111:272;;39231:30;;;;39227:123;;;39270:28;39282:16;39270:28;;:::i;:::-;;;39227:123;;;-1:-1:-1;39338:5:0;39227:123;39376:1;39357:20;;39111:272;39405:20;39428:24;39437:4;39443:8;39428;:24::i;:::-;39405:47;;39514:17;:36;;;;39535:15;39514:36;39510:137;;;-1:-1:-1;;;;;39611:29:0;;;;;;:23;:29;;;;;;;;;;39563:78;;5639:51:1;;;5706:18;;;5699:34;;;5749:18;;;5742:34;;;5807:2;5792:18;;5785:34;39563:78:0;;;;;;5626:3:1;39563:78:0;;;39510:137;39662:15;:36;;;;;39681:17;39662:36;39655:43;38766:937;-1:-1:-1;;;;;;38766:937:0:o;37366:829::-;-1:-1:-1;;;;;37439:34:0;;37423:13;37439:34;;;:28;:34;;;;;;;;37485:25;37468:4;37485:19;:25::i;:::-;37480:711;;37522:8;37518:454;;;-1:-1:-1;;;;;37576:30:0;;37563:10;37576:30;;;:24;:30;;;;;;37632:17;37650:24;;37576:30;;37563:10;37650:28;;37677:1;;37650:28;:::i;:::-;37632:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37632:47:0;37740:34;;;:24;:34;;;;;;;:42;;;37789:17;:24;;37632:47;;-1:-1:-1;37632:47:0;;37777:5;;37789:24;;;;;;:::i;:::-;;;;;;;;;:35;;;;;-1:-1:-1;;;;;37789:35:0;;;;;-1:-1:-1;;;;;37789:35:0;;;;;;37831:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;37831:23:0;;;;;-1:-1:-1;;;;;;37831:23:0;;;;;;;;;-1:-1:-1;;;;;37887:30:0;;;;:24;:30;;;;;;37880:37;;;37931:28;:34;;;;;37924:41;;-1:-1:-1;;37924:41:0;;;-1:-1:-1;;49528:169:0;;:::o;37480:711::-;37994:8;37989:197;;38035:17;:28;;;;;;;;-1:-1:-1;38035:28:0;;;;;;;;;-1:-1:-1;;;;;;38035:28:0;-1:-1:-1;;;;;38035:28:0;;;;;38103:24;;:28;;38035;38103;:::i;:::-;-1:-1:-1;;;;;38070:30:0;;;;;;:24;:30;;;;;;;;:61;;;;38138:28;:34;;;:41;;-1:-1:-1;;38138:41:0;38175:4;38138:41;;;37418:777;37366:829;:::o;25359:204::-;25442:4;25453:14;25470:28;25488:9;27467:18;;-1:-1:-1;;;;;27467:18:0;;;:26;;;;27386:112;25470:28;25453:45;;25510:9;:48;;;;;25523:35;25540:6;25548:9;25523:16;:35::i;:::-;25503:55;25359:204;-1:-1:-1;;;;25359:204:0:o;21833:593::-;21915:35;21932:6;21940:9;21915:16;:35::i;:::-;21910:60;;21833:593;;:::o;21910:60::-;22037:30;22070:24;22088:4;22070:9;:24::i;:::-;22037:57;;22129:19;;22103:22;:45;22099:323;;-1:-1:-1;22209:19:0;;27467:18;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;22353:64;;;;22375:35;22387:22;22375:11;:35::i;22099:323::-;21905:521;21833:593;;:::o;35728:1034::-;35895:35;35912:6;35920:9;35895:16;:35::i;:::-;35890:60;;35728:1034;;;:::o;35890:60::-;36174:59;36204:20;36214:9;36204;:20::i;:::-;36226:6;36174:29;:59::i;:::-;-1:-1:-1;;;;;36136:34:0;;;;;;:23;:34;;;;;:97;;:34;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;36273:56:0;;-1:-1:-1;36303:17:0;36313:6;36303:9;:17::i;36273:56::-;-1:-1:-1;;;;;36238:31:0;;;;;;:23;:31;;;;;:91;;:31;;;:91;;;;;:::i;:::-;;;;-1:-1:-1;;27467:18:0;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;;36388:79;;36455:7;35728:1034;;;:::o;36388:79::-;36501:18;36522:20;:18;:20::i;:::-;36501:41;;36612:13;36611:14;:38;;;;-1:-1:-1;49180:17:0;;;;36629:20;36607:148;;;36716:19;;;36687:49;;-1:-1:-1;;;36687:49:0;;;;;19909:25:1;;;;36687:4:0;;:28;;19882:18:1;36687:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36683:67;35823:939;;35728:1034;;;:::o;21425:400::-;21538:13;;21507:7;;;;21538:13;;;;;:52;;;;-1:-1:-1;;;;;;21556:34:0;;;;;;:26;:34;;;;;;;;21555:35;21538:52;:94;;;;-1:-1:-1;;;;;;21595:37:0;;;;;;:26;:37;;;;;;;;21594:38;21538:94;21521:111;;21641:9;21637:169;;;27467:18;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;21658:120;;;21753:18;;21742:29;;21753:18;;;;;;;21742:8;;;;:29;:::i;:::-;21735:36;;;;;;;21658:120;-1:-1:-1;;21792:8:0;;;;;;;21785:15;;21637:169;-1:-1:-1;21819:1:0;;21425:400;-1:-1:-1;;;21425:400:0:o;20706:390::-;20868:22;20893;20906:9;20893:10;:22;:::i;:::-;-1:-1:-1;;;;;20944:17:0;;;;;;:9;:17;;;;;:31;;20868:47;;-1:-1:-1;20965:10:0;;20944:17;;;:31;;20965:10;;20944:31;:::i;:::-;;;;-1:-1:-1;;;;;;;20980:20:0;;;;;;:9;:20;;;;;:38;;21004:14;;20980:20;:38;;21004:14;;20980:38;:::i;:::-;;;;-1:-1:-1;;21072:4:0;21054:24;;;;:9;:24;;;;;:37;;21082:9;;21054:24;:37;;21082:9;;21054:37;:::i;:::-;;;;-1:-1:-1;;;;;;;20706:390:0:o;36769:351::-;36924:35;36941:6;36949:9;36924:16;:35::i;:::-;36919:60;;36769:351;;;:::o;36919:60::-;37048:28;37069:6;37048:20;:28::i;:::-;37081:31;37102:9;37081:20;:31::i;24734:488::-;24880:16;;;24894:1;24880:16;;;;;;;;24808:4;;;;24880:16;24894:1;24880:16;;;;;;;;-1:-1:-1;;24911:20:0;;:27;;;-1:-1:-1;;;24911:27:0;;;;24856:40;;-1:-1:-1;;;;;;24911:20:0;;;;:25;;-1:-1:-1;24911:27:0;;;;;;;;;;;;;;:20;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24901:4;24906:1;24901:7;;;;;;;;:::i;:::-;;;;;;:37;-1:-1:-1;;;;;24901:37:0;;;-1:-1:-1;;;;;24901:37:0;;;;;24961:4;24943;24948:1;24943:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24943:23:0;;;:7;;;;;;;;;:23;25030:20;;;:71;25110:9;25030:20;25125:4;25131:2;25135:21;:15;25153:3;25135:21;:::i;:::-;25030:127;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25026:192;;25207:5;25200:12;;;;;25026:192;25172:4;25165:11;;;;;40238:320;40306:4;40321:14;40317:43;;-1:-1:-1;40350:4:0;40343:11;;40317:43;40366:12;40381:33;40398:9;40409:4;40381:16;:33::i;:::-;40366:48;;40424:7;40419:38;;40446:5;40439:12;;;;;40419:38;-1:-1:-1;;;;;40463:22:0;;;;;;:16;:22;;;;;:35;;40489:9;;40463:22;:35;;40489:9;;40463:35;:::i;:::-;;;;;;;;40528:9;40503:21;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40549:4:0;;40238:320;-1:-1:-1;;;;;40238:320:0:o;39710:521::-;39778:4;39793:14;39789:43;;-1:-1:-1;39822:4:0;39815:11;;39789:43;39878:16;;:20;39874:257;;39955:16;;39921:55;;39907:9;;-1:-1:-1;;;;;39921:9:0;;;39939;;39907;39921:55;39907:9;39921:55;39939:9;39921;39955:16;39921:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39906:70;;;39987:4;39982:37;;40007:5;40000:12;;;;;39982:37;39900:124;39874:257;;;40037:9;40051:4;-1:-1:-1;;;;;40051:9:0;40069;40051:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40036:47;;;40094:4;40089:37;;40114:5;40107:12;;;;;40089:37;40030:101;39874:257;-1:-1:-1;;;;;40140:23:0;;;;;;:17;:23;;;;;:36;;40167:9;;40140:23;:36;;40167:9;;40140:36;:::i;:::-;;;;;;;;40201:9;40181:16;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;40222:4:0;;39710:521;-1:-1:-1;;;;39710:521:0:o;45723:286::-;45815:4;45904:41;45927:6;45935:9;45904:22;:41::i;:::-;:79;;;;;45950:33;45965:6;45973:9;45950:14;:33::i;:::-;45949:34;45904:79;:100;;;;-1:-1:-1;45988:16:0;;;;;;;45987:17;45904:100;45897:107;45723:286;-1:-1:-1;;;45723:286:0:o;22433:1659::-;22567:25;;22542:59;;22560:4;;22567:25;;;-1:-1:-1;;;;;22567:25:0;22594:6;22542:9;:59::i;:::-;22836:8;;22774:34;;22836:8;;;;;;;22811:22;;22820:13;22811:6;:22;:::i;:::-;:33;;;;:::i;:::-;22774:70;-1:-1:-1;22849:31:0;22883:35;22774:70;22883:6;:35;:::i;:::-;22849:69;-1:-1:-1;23059:32:0;23094:30;23123:1;23094:26;:30;:::i;:::-;23059:65;-1:-1:-1;23059:65:0;23129:30;23275:50;23059:65;23275:23;:50;:::i;:::-;23252:73;;23330:18;23351:30;23368:12;23351:16;:30::i;:::-;23330:51;-1:-1:-1;23584:31:0;23658:12;23618:37;23631:24;23330:51;23618:37;:::i;:::-;:52;;;;:::i;:::-;23706:20;;23820;;23584:86;;-1:-1:-1;23677:24:0;;-1:-1:-1;;;;;23706:20:0;;;;:36;;23584:86;;23783:4;;23790:22;;23677:24;;;;23820:20;23842:21;:15;23860:3;23842:21;:::i;:::-;23706:158;;;;;;-1:-1:-1;;;;;;23706:158:0;;;-1:-1:-1;;;;;5155:15:1;;;23706:158:0;;;5137:34:1;5187:18;;;5180:34;;;;5230:18;;;5223:34;;;;5273:18;;;5266:34;;;;5337:15;;;5316:19;;;5309:44;5369:19;;;5362:35;;;;5071:19;;23706:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23675:189;;;;23972:19;23937:31;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;24005:82:0;;;21016:25:1;;;21072:2;21057:18;;21050:34;;;21100:18;;;21093:34;;;21158:2;21143:18;;21136:34;;;24005:82:0;;21003:3:1;20988:19;24005:82:0;;;;;;;22478:1614;;;;;;;;22433:1659;:::o;37129:230::-;37175:4;37191:12;:10;:12::i;:::-;37186:43;;-1:-1:-1;37218:5:0;;37129:230::o;37186:43::-;37235:18;37304:5;37280:21;;37256;:45;;;;:::i;:::-;:53;;;;:::i;:::-;37235:74;;37314:24;37327:10;37314:12;:24::i;:::-;37350:4;37343:11;;;37129:230;:::o;25935:148::-;26026:4;26045:33;26060:6;26068:9;26045:14;:33::i;:::-;26044:34;;25935:148;-1:-1:-1;;;25935:148:0:o;46016:157::-;27467:18;;46097:4;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;46115:53;;;;-1:-1:-1;;;;;;46144:24:0;;16105:42;46144:24;46108:60;;46016:157;;;;:::o;24207:520::-;24400:16;;;24414:1;24400:16;;;;;;;;24271:7;;24310:21;;24271:7;;24400:16;;;;;;;;;;;;-1:-1:-1;24400:16:0;24376:40;;24439:4;24421;24426:1;24421:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24421:23:0;;;:7;;;;;;;;;;:23;;;;24459:20;;:27;;;-1:-1:-1;;;24459:27:0;;;;:20;;;;;:25;;:27;;;;;24421:7;;24459:27;;;;;:20;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24449:4;24454:1;24449:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24449:37:0;;;:7;;;;;;;;;:37;24504:20;;;:71;24576:11;24504:20;24592:4;24606;24613:21;:15;24631:3;24613:21;:::i;:::-;24504:131;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24708:14;24684:21;:38;;;;:::i;25570:205::-;25650:4;;-1:-1:-1;;;;;25686:23:0;;25704:4;25686:23;:55;;;;-1:-1:-1;27467:18:0;;-1:-1:-1;;;;;27467:26:0;;;:18;;:26;25713:28;27386:112;14:160:1;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:156::-;245:20;;305:4;294:16;;284:27;;274:2;;325:1;322;315:12;340:247;399:6;452:2;440:9;431:7;427:23;423:32;420:2;;;468:1;465;458:12;420:2;507:9;494:23;526:31;551:5;526:31;:::i;592:251::-;662:6;715:2;703:9;694:7;690:23;686:32;683:2;;;731:1;728;721:12;683:2;763:9;757:16;782:31;807:5;782:31;:::i;848:388::-;916:6;924;977:2;965:9;956:7;952:23;948:32;945:2;;;993:1;990;983:12;945:2;1032:9;1019:23;1051:31;1076:5;1051:31;:::i;:::-;1101:5;-1:-1:-1;1158:2:1;1143:18;;1130:32;1171:33;1130:32;1171:33;:::i;:::-;1223:7;1213:17;;;935:301;;;;;:::o;1241:456::-;1318:6;1326;1334;1387:2;1375:9;1366:7;1362:23;1358:32;1355:2;;;1403:1;1400;1393:12;1355:2;1442:9;1429:23;1461:31;1486:5;1461:31;:::i;:::-;1511:5;-1:-1:-1;1568:2:1;1553:18;;1540:32;1581:33;1540:32;1581:33;:::i;:::-;1345:352;;1633:7;;-1:-1:-1;;;1687:2:1;1672:18;;;;1659:32;;1345:352::o;1702:315::-;1767:6;1775;1828:2;1816:9;1807:7;1803:23;1799:32;1796:2;;;1844:1;1841;1834:12;1796:2;1883:9;1870:23;1902:31;1927:5;1902:31;:::i;:::-;1952:5;-1:-1:-1;1976:35:1;2007:2;1992:18;;1976:35;:::i;:::-;1966:45;;1786:231;;;;;:::o;2022:315::-;2090:6;2098;2151:2;2139:9;2130:7;2126:23;2122:32;2119:2;;;2167:1;2164;2157:12;2119:2;2206:9;2193:23;2225:31;2250:5;2225:31;:::i;:::-;2275:5;2327:2;2312:18;;;;2299:32;;-1:-1:-1;;;2109:228:1:o;2342:180::-;2398:6;2451:2;2439:9;2430:7;2426:23;2422:32;2419:2;;;2467:1;2464;2457:12;2419:2;2490:26;2506:9;2490:26;:::i;2527:180::-;2586:6;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2655:1;2652;2645:12;2607:2;-1:-1:-1;2678:23:1;;2597:110;-1:-1:-1;2597:110:1:o;2712:248::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:2;;;2857:1;2854;2847:12;2809:2;-1:-1:-1;;2880:23:1;;;2950:2;2935:18;;;2922:32;;-1:-1:-1;2799:161:1:o;2965:306::-;3053:6;3061;3069;3122:2;3110:9;3101:7;3097:23;3093:32;3090:2;;;3138:1;3135;3128:12;3090:2;3167:9;3161:16;3151:26;;3217:2;3206:9;3202:18;3196:25;3186:35;;3261:2;3250:9;3246:18;3240:25;3230:35;;3080:191;;;;;:::o;3276:322::-;3347:6;3355;3363;3416:2;3404:9;3395:7;3391:23;3387:32;3384:2;;;3432:1;3429;3422:12;3384:2;3455:27;3472:9;3455:27;:::i;:::-;3445:37;;3501:36;3533:2;3522:9;3518:18;3501:36;:::i;:::-;3491:46;;3556:36;3588:2;3577:9;3573:18;3556:36;:::i;:::-;3546:46;;3374:224;;;;;:::o;3603:461::-;3656:3;3694:5;3688:12;3721:6;3716:3;3709:19;3747:4;3776:2;3771:3;3767:12;3760:19;;3813:2;3806:5;3802:14;3834:1;3844:195;3858:6;3855:1;3852:13;3844:195;;;3923:13;;-1:-1:-1;;;;;3919:39:1;3907:52;;3979:12;;;;4014:15;;;;3955:1;3873:9;3844:195;;;-1:-1:-1;4055:3:1;;3664:400;-1:-1:-1;;;;;3664:400:1:o;6022:510::-;6293:6;6282:9;6275:25;6336:3;6331:2;6320:9;6316:18;6309:31;6256:4;6357:57;6409:3;6398:9;6394:19;6386:6;6357:57;:::i;:::-;-1:-1:-1;;;;;6450:32:1;;;;6445:2;6430:18;;6423:60;-1:-1:-1;6514:2:1;6499:18;6492:34;6349:65;6265:267;-1:-1:-1;;6265:267:1:o;6537:597::-;6649:4;6678:2;6707;6696:9;6689:21;6739:6;6733:13;6782:6;6777:2;6766:9;6762:18;6755:34;6807:1;6817:140;6831:6;6828:1;6825:13;6817:140;;;6926:14;;;6922:23;;6916:30;6892:17;;;6911:2;6888:26;6881:66;6846:10;;6817:140;;;6975:6;6972:1;6969:13;6966:2;;;7045:1;7040:2;7031:6;7020:9;7016:22;7012:31;7005:42;6966:2;-1:-1:-1;7118:2:1;7097:15;-1:-1:-1;;7093:29:1;7078:45;;;;7125:2;7074:54;;6658:476;-1:-1:-1;;;6658:476:1:o;13678:356::-;13880:2;13862:21;;;13899:18;;;13892:30;13958:34;13953:2;13938:18;;13931:62;14025:2;14010:18;;13852:182::o;19945:582::-;20244:6;20233:9;20226:25;20287:6;20282:2;20271:9;20267:18;20260:34;20330:3;20325:2;20314:9;20310:18;20303:31;20207:4;20351:57;20403:3;20392:9;20388:19;20380:6;20351:57;:::i;:::-;-1:-1:-1;;;;;20444:32:1;;;;20439:2;20424:18;;20417:60;-1:-1:-1;20508:3:1;20493:19;20486:35;20343:65;20216:311;-1:-1:-1;;;20216:311:1:o;21370:128::-;21410:3;21441:1;21437:6;21434:1;21431:13;21428:2;;;21447:18;;:::i;:::-;-1:-1:-1;21483:9:1;;21418:80::o;21503:204::-;21541:3;21577:4;21574:1;21570:12;21609:4;21606:1;21602:12;21644:3;21638:4;21634:14;21629:3;21626:23;21623:2;;;21652:18;;:::i;:::-;21688:13;;21549:158;-1:-1:-1;;;21549:158:1:o;21712:217::-;21752:1;21778;21768:2;;21822:10;21817:3;21813:20;21810:1;21803:31;21857:4;21854:1;21847:15;21885:4;21882:1;21875:15;21768:2;-1:-1:-1;21914:9:1;;21758:171::o;21934:422::-;22023:1;22066:5;22023:1;22080:270;22101:7;22091:8;22088:21;22080:270;;;22160:4;22156:1;22152:6;22148:17;22142:4;22139:27;22136:2;;;22169:18;;:::i;:::-;22219:7;22209:8;22205:22;22202:2;;;22239:16;;;;22202:2;22318:22;;;;22278:15;;;;22080:270;;;22084:3;21998:358;;;;;:::o;22361:140::-;22419:5;22448:47;22489:4;22479:8;22475:19;22469:4;22555:5;22585:8;22575:2;;-1:-1:-1;22626:1:1;22640:5;;22575:2;22674:4;22664:2;;-1:-1:-1;22711:1:1;22725:5;;22664:2;22756:4;22774:1;22769:59;;;;22842:1;22837:130;;;;22749:218;;22837:130;22874:3;22864:8;22861:17;22858:2;;;22881:18;;:::i;:::-;-1:-1:-1;;22937:1:1;22923:16;;22952:5;;22749:218;;23051:2;23041:8;23038:16;23032:3;23026:4;23023:13;23019:36;23013:2;23003:8;23000:16;22995:2;22989:4;22986:12;22982:35;22979:77;22976:2;;;-1:-1:-1;23088:19:1;;;23120:5;;22976:2;23167:34;23192:8;23186:4;23167:34;:::i;:::-;23237:6;23233:1;23229:6;23225:19;23216:7;23213:32;23210:2;;;23248:18;;:::i;:::-;23286:20;;22565:747;-1:-1:-1;;;22565:747:1:o;23317:168::-;23357:7;23423:1;23419;23415:6;23411:14;23408:1;23405:21;23400:1;23393:9;23386:17;23382:45;23379:2;;;23430:18;;:::i;:::-;-1:-1:-1;23470:9:1;;23369:116::o;23490:125::-;23530:4;23558:1;23555;23552:8;23549:2;;;23563:18;;:::i;:::-;-1:-1:-1;23600:9:1;;23539:76::o;23620:135::-;23659:3;-1:-1:-1;;23680:17:1;;23677:2;;;23700:18;;:::i;:::-;-1:-1:-1;23747:1:1;23736:13;;23667:88::o;23760:127::-;23821:10;23816:3;23812:20;23809:1;23802:31;23852:4;23849:1;23842:15;23876:4;23873:1;23866:15;23892:127;23953:10;23948:3;23944:20;23941:1;23934:31;23984:4;23981:1;23974:15;24008:4;24005:1;23998:15;24024:127;24085:10;24080:3;24076:20;24073:1;24066:31;24116:4;24113:1;24106:15;24140:4;24137:1;24130:15;24288:131;-1:-1:-1;;;;;24363:31:1;;24353:42;;24343:2;;24409:1;24406;24399:12

Swarm Source

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