ERC-20
Overview
Max Total Supply
1,000,000,000 BOG
Holders
36
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2,658,333 BOGValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bog
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.10; import "./draft-ERC20Permit.sol"; import "./Owned.sol"; import "./IUniswapV2Router.sol"; import "./Strings.sol"; contract Bog is Owned, ERC20Permit { using Strings for uint256; address public WETH; mapping(address => bool) public isExcludedFromFee; bool public feesEnabled; bool public swapEnabled; address public uniswapPair; // combine recipient and fee into a single storage slot uint256 public beneficiary; uint256 public staking; event BeneficiaryRewardUpdated(address oldBeneficiary, address newBeneficiary, uint256 oldFee, uint256 newFee); event StakingRewardUpdated(address oldBeneficiary, address newBeneficiary, uint256 oldFee, uint256 newFee); event FeesEnabledUpdated(bool enabled); event SwapEnabledUpdated(bool enabled); event ExcludedFromFeeUpdated(address account, bool excluded); modifier ensureAddressSet(address _beneficiary, uint256 _fee) { if (_fee > 0) { require(_beneficiary != address(0), "address not set"); } else { require(_beneficiary == address(0), "set address to zero"); } _; } constructor( uint256 _totalSupply, address _beneficiary, string memory _name, string memory _symbol, uint256 _initial_fee ) ERC20(_name, _symbol) ERC20Permit(_name) { _mint(_msgSender(), _totalSupply); // calculate future Uniswap V2 pair address address uniswapFactory = router().factory(); address _WETH = router().WETH(); WETH = _WETH; // calculate future uniswap pair address (address token0, address token1) = (_WETH < address(this) ? (_WETH, address(this)) : (address(this), _WETH)); address pair = address( uint160( uint256( keccak256( abi.encodePacked( hex"ff", uniswapFactory, keccak256(abi.encodePacked(token0, token1)), hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f" ) ) ) ) ); uniswapPair = pair; beneficiary = packBeneficiary(_beneficiary, _initial_fee); isExcludedFromFee[address(this)] = true; isExcludedFromFee[_beneficiary] = true; isExcludedFromFee[_msgSender()] = true; } receive() external payable { // Do nothing } /** * @notice adds or removes an account that is exempt from fee collection * @dev only callable by owner * @param _account account to modify * @param _excluded new value */ function setExcludeFromFee(address _account, bool _excluded) public virtual onlyOwner { isExcludedFromFee[_account] = _excluded; emit ExcludedFromFeeUpdated(_account, _excluded); } /** * @dev helper function to pack address and fee into one storage slot */ function packBeneficiary(address _beneficiary, uint256 _fee) public pure virtual returns (uint256) { require(_fee <= 10000, "INVALID_FEE"); uint256 storedBeneficiary = uint256(uint160(_beneficiary)); storedBeneficiary |= _fee << 160; return storedBeneficiary; } /** * @dev helper function to unpack address and fee from single storage slot */ function unpackBeneficiary(uint256 _beneficiary) public pure virtual returns (address, uint256) { return (address(uint160(_beneficiary)), uint256(uint96(_beneficiary >> 160))); } /** * @notice sets recipient and fee amount of transfer fee * @dev excludes new beneficiary from fee * @dev only callable by owner * @param _newBeneficiary address of new beneficiary * @param _fee fee sent to new beneficiary in permyriad */ function setBeneficiary(address _newBeneficiary, uint256 _fee) external virtual ensureAddressSet(_newBeneficiary, _fee) onlyOwner { setExcludeFromFee(_newBeneficiary, true); (address currentBeneficiary, uint256 currentFee) = unpackBeneficiary(beneficiary); setExcludeFromFee(currentBeneficiary, false); uint256 newBeneficiary = packBeneficiary(_newBeneficiary, _fee); emit BeneficiaryRewardUpdated(currentBeneficiary, _newBeneficiary, currentFee, _fee); beneficiary = newBeneficiary; } /** * @notice sets recipient and fee amount of staking rewards * @dev excludes staking pool from fee * @dev only callable by owner * @param _contractAddress address of staking contract * @param _fee fee sent to staking contract in permyriad */ function setStaking(address _contractAddress, uint256 _fee) external virtual ensureAddressSet(_contractAddress, _fee) onlyOwner { setExcludeFromFee(_contractAddress, true); (address currentAddress, uint256 currentFee) = unpackBeneficiary(staking); setExcludeFromFee(currentAddress, false); uint256 newStaking = packBeneficiary(_contractAddress, _fee); emit StakingRewardUpdated(currentAddress, _contractAddress, currentFee, _fee); staking = newStaking; } /** * @notice sets whether account collects fees on token transfer * @dev only callable by owner * @param _enabled bool whether fees are enabled */ function setFeesEnabled(bool _enabled) external virtual onlyOwner { emit FeesEnabledUpdated(_enabled); feesEnabled = _enabled; } /** * @notice sets whether collected fees are autoswapped * @dev only callable by owner * @param _enabled bool whether swap is enabled */ function setSwapEnabled(bool _enabled) external virtual onlyOwner { emit SwapEnabledUpdated(_enabled); swapEnabled = _enabled; } function router() public pure virtual returns (IUniswapV2Router) { return IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } function _transfer( address sender, address recipient, uint256 amount ) internal override { // add liquidity // user => pair, msg.sender = router // remove liquidity // pair => router, msg.sender = pair // router => user, msg.sender = router // buy tokens for eth // pair => user, msg.sender = pair // sell tokens for eth // user => pair, msg.sender = router address pair = uniswapPair; // don't take a fee when // 1. fees are disabled // 2. the uniswap pair is neither sender nor recipient (non uniswap buy or sell) // 3. sender or recipient is excluded from fees // 4. sender is pair and recipient is router (2 transfers take place when liquidity is removed) if ( !feesEnabled || (sender != pair && recipient != pair) || isExcludedFromFee[sender] || isExcludedFromFee[recipient] || (sender == pair && recipient == address(router())) ) { ERC20._transfer(sender, recipient, amount); return; } // get fees and recipients from storage (address beneficiaryAddress, uint256 transferFee) = unpackBeneficiary(beneficiary); if (transferFee > 0) { transferFee = handleFeeTransfer(sender, amount, beneficiaryAddress, transferFee); // don't autoswap when uniswap pair or router are sending tokens if (swapEnabled && sender != pair && sender != address(router())) { _swapTokensForEth(address(this)); // if there are any ETH in the contract distribute rewards uint256 ethBalance = address(this).balance; (address stakingContract, uint256 stakingFee) = unpackBeneficiary(staking); uint256 stakingRewards = _calculateFee(ethBalance, stakingFee); if (stakingRewards > 0) { _safeTransfer(stakingContract, stakingRewards); } _safeTransfer(beneficiaryAddress, ethBalance - stakingRewards); } } ERC20._transfer(sender, recipient, amount - transferFee); } function _safeTransfer(address _to, uint256 _value) internal { (bool success, ) = _to.call{value: _value}(""); require(success, string(abi.encodePacked("ETH_TRANSFER_FAILED: ", uint256(uint160(_to)).toHexString(20)))); } function handleFeeTransfer( address _sender, uint256 _amount, address _beneficiaryAddress, uint256 transferFee ) internal virtual returns (uint256) { transferFee = _calculateFee(_amount, transferFee); address feeRecipient = swapEnabled ? address(this) : _beneficiaryAddress; ERC20._transfer(_sender, feeRecipient, transferFee); return transferFee; } function _swapTokensForEth(address _to) internal virtual { uint256 tokenAmount = balanceOf(address(this)); // only swap if more than 1e-5 tokens are in contract to avoid "UniswapV2: K" error if (tokenAmount > 10**13) { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; _approve(address(this), address(router()), tokenAmount); router().swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, _to, block.timestamp); } } function _calculateFee(uint256 _amount, uint256 _fee) internal pure virtual returns (uint256) { return (_amount * _fee) / 10000; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ECDSA.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./draft-IERC20Permit.sol"; import "./ERC20.sol"; import "./draft-EIP712.sol"; import "./ECDSA.sol"; import "./Counters.sol"; /** * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * _Available since v3.4._ */ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 { using Counters for Counters.Counter; mapping(address => Counters.Counter) private _nonces; // solhint-disable-next-line var-name-mixedcase bytes32 private immutable _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); /** * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`. * * It's a good idea to use the same `name` that is defined as the ERC20 token name. */ constructor(string memory name) EIP712(name, "1") {} /** * @dev See {IERC20Permit-permit}. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual override { require(block.timestamp <= deadline, "ERC20Permit: expired deadline"); bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)); bytes32 hash = _hashTypedDataV4(structHash); address signer = ECDSA.recover(hash, v, r, s); require(signer == owner, "ERC20Permit: invalid signature"); _approve(owner, spender, value); } /** * @dev See {IERC20Permit-nonces}. */ function nonces(address owner) public view virtual override returns (uint256) { return _nonces[owner].current(); } /** * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } /** * @dev "Consume a nonce": return the current value and increment. * * _Available since v4.1._ */ function _useNonce(address owner) internal virtual returns (uint256 current) { Counters.Counter storage nonce = _nonces[owner]; current = nonce.current(); nonce.increment(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return recover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return recover(hash, r, vs); } else { revert("ECDSA: invalid signature length"); } } /** * @dev Overload of {ECDSA-recover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require( uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value" ); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.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); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IUniswapV2Router { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; contract Owned { address public owner; address public proposedOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() virtual { require(msg.sender == owner, "Owned: not owner"); _; } /** * @dev propeses a new owner * Can only be called by the current owner. */ function proposeOwner(address payable _newOwner) external onlyOwner { proposedOwner = _newOwner; } /** * @dev claims ownership of the contract * Can only be called by the new proposed owner. */ function claimOwnership() external { require(msg.sender == proposedOwner); emit OwnershipTransferred(owner, proposedOwner); owner = proposedOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_initial_fee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldBeneficiary","type":"address"},{"indexed":false,"internalType":"address","name":"newBeneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"BeneficiaryRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"ExcludedFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeesEnabledUpdated","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":"oldBeneficiary","type":"address"},{"indexed":false,"internalType":"address","name":"newBeneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"StakingRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"packBeneficiary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"proposeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newBeneficiary","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_beneficiary","type":"uint256"}],"name":"unpackBeneficiary","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b5060405162002c9038038062002c908339810160408190526200005a9162000701565b60408051808201825260018152603160f81b6020820152600080546001600160a01b031916339081178255925186938493928492889291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38151620000cc90600590602085019062000571565b508051620000e290600690602084019062000571565b5050825160209384012082519284019290922060c083815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0181905281830198909852606081019590955260808086019390935230858301528051808603909201825293909201909252805194019390932090925261010052506200017c905033866200042d565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000792565b90506000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000274919062000792565b600880546001600160a01b0319166001600160a01b03831690811790915590915060009081903011620002a9573083620002ac565b82305b6040516001600160601b0319606084811b8216602084015283901b1660348201529193509150600090859060480160405160208183030381529060405280519060200120604051602001620003669291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051808303601f190181529190528051602090910120600a805462010000600160b01b031916620100006001600160a01b038416021790559050620003ae898762000516565b600b553060009081526009602081905260408083208054600160ff1991821681179092556001600160a01b038e1685529184208054909216811790915591620003f43390565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055506200081b98505050505050505050565b6001600160a01b038216620004895760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600460008282546200049d9190620007b7565b90915550506001600160a01b03821660009081526002602052604081208054839290620004cc908490620007b7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006127108211156200055a5760405162461bcd60e51b815260206004820152600b60248201526a494e56414c49445f46454560a81b604482015260640162000480565b5060a081901b6001600160a01b0383161792915050565b8280546200057f90620007de565b90600052602060002090601f016020900481019282620005a35760008555620005ee565b82601f10620005be57805160ff1916838001178555620005ee565b82800160010185558215620005ee579182015b82811115620005ee578251825591602001919060010190620005d1565b50620005fc92915062000600565b5090565b5b80821115620005fc576000815560010162000601565b80516001600160a01b03811681146200062f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200065c57600080fd5b81516001600160401b038082111562000679576200067962000634565b604051601f8301601f19908116603f01168101908282118183101715620006a457620006a462000634565b81604052838152602092508683858801011115620006c157600080fd5b600091505b83821015620006e55785820183015181830184015290820190620006c6565b83821115620006f75760008385830101525b9695505050505050565b600080600080600060a086880312156200071a57600080fd5b855194506200072c6020870162000617565b60408701519094506001600160401b03808211156200074a57600080fd5b6200075889838a016200064a565b945060608801519150808211156200076f57600080fd5b506200077e888289016200064a565b925050608086015190509295509295909350565b600060208284031215620007a557600080fd5b620007b08262000617565b9392505050565b60008219821115620007d957634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620007f357607f821691505b602082108114156200081557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051610120516124256200086b6000396000610e0101526000611574015260006115c30152600061159e015260006115220152600061154b01526124256000f3fe6080604052600436106102025760003560e01c80638da5cb5b1161011d578063b5ed298a116100b0578063d61e89561161007f578063e01af92c11610064578063e01af92c14610637578063f370988814610657578063f887ea401461067757600080fd5b8063d61e8956146105d1578063dd62ed3e146105f157600080fd5b8063b5ed298a1461054b578063c816841b1461056b578063d153b60c14610591578063d505accf146105b157600080fd5b8063a901dd92116100ec578063a901dd92146104cb578063a9059cbb146104eb578063ad5c46481461050b578063af9549e01461052b57600080fd5b80638da5cb5b1461044457806395d89b411461047c578063a457c2d714610491578063a64e4f8a146104b157600080fd5b80634cf088d9116101955780636ddd1713116101645780636ddd1713146103af5780636fd1f270146103ce57806370a08231146103ee5780637ecebe001461042457600080fd5b80634cf088d91461030f5780634e71e0c8146103255780635342acb41461033c57806356e8e08e1461036c57600080fd5b8063313ce567116101d1578063313ce567146102a85780633644e515146102c457806338af3eed146102d957806339509351146102ef57600080fd5b806306fdde031461020e578063095ea7b31461023957806318160ddd1461026957806323b872dd1461028857600080fd5b3661020957005b600080fd5b34801561021a57600080fd5b5061022361069e565b6040516102309190611f61565b60405180910390f35b34801561024557600080fd5b50610259610254366004611fca565b610730565b6040519015158152602001610230565b34801561027557600080fd5b506004545b604051908152602001610230565b34801561029457600080fd5b506102596102a3366004611ff6565b610746565b3480156102b457600080fd5b5060405160128152602001610230565b3480156102d057600080fd5b5061027a61080a565b3480156102e557600080fd5b5061027a600b5481565b3480156102fb57600080fd5b5061025961030a366004611fca565b610819565b34801561031b57600080fd5b5061027a600c5481565b34801561033157600080fd5b5061033a610855565b005b34801561034857600080fd5b50610259610357366004612037565b60096020526000908152604090205460ff1681565b34801561037857600080fd5b50610390610387366004612054565b9060a082901c90565b604080516001600160a01b039093168352602083019190915201610230565b3480156103bb57600080fd5b50600a5461025990610100900460ff1681565b3480156103da57600080fd5b5061033a6103e9366004611fca565b6108e5565b3480156103fa57600080fd5b5061027a610409366004612037565b6001600160a01b031660009081526002602052604090205490565b34801561043057600080fd5b5061027a61043f366004612037565b610a91565b34801561045057600080fd5b50600054610464906001600160a01b031681565b6040516001600160a01b039091168152602001610230565b34801561048857600080fd5b50610223610ab1565b34801561049d57600080fd5b506102596104ac366004611fca565b610ac0565b3480156104bd57600080fd5b50600a546102599060ff1681565b3480156104d757600080fd5b5061033a6104e6366004612082565b610b71565b3480156104f757600080fd5b50610259610506366004611fca565b610c31565b34801561051757600080fd5b50600854610464906001600160a01b031681565b34801561053757600080fd5b5061033a61054636600461209d565b610c3e565b34801561055757600080fd5b5061033a610566366004612037565b610d19565b34801561057757600080fd5b50600a54610464906201000090046001600160a01b031681565b34801561059d57600080fd5b50600154610464906001600160a01b031681565b3480156105bd57600080fd5b5061033a6105cc3660046120d2565b610dad565b3480156105dd57600080fd5b5061027a6105ec366004611fca565b610f11565b3480156105fd57600080fd5b5061027a61060c366004612149565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561064357600080fd5b5061033a610652366004612082565b610f7c565b34801561066357600080fd5b5061033a610672366004611fca565b611042565b34801561068357600080fd5b50737a250d5630b4cf539739df2c5dacb4c659f2488d610464565b6060600580546106ad90612182565b80601f01602080910402602001604051908101604052809291908181526020018280546106d990612182565b80156107265780601f106106fb57610100808354040283529160200191610726565b820191906000526020600020905b81548152906001019060200180831161070957829003601f168201915b5050505050905090565b600061073d3384846111ee565b50600192915050565b6000610753848484611346565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107f25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107ff85338584036111ee565b506001949350505050565b600061081461151e565b905090565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161073d9185906108509086906121ff565b6111ee565b6001546001600160a01b0316331461086c57600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b81818015610948576001600160a01b0382166109435760405162461bcd60e51b815260206004820152600f60248201527f61646472657373206e6f7420736574000000000000000000000000000000000060448201526064016107e9565b61099f565b6001600160a01b0382161561099f5760405162461bcd60e51b815260206004820152601360248201527f736574206164647265737320746f207a65726f0000000000000000000000000060448201526064016107e9565b6000546001600160a01b031633146109f95760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b610a04846001610c3e565b600080610a16600b549060a082901c90565b91509150610a25826000610c3e565b6000610a318787610f11565b604080516001600160a01b0380871682528a166020820152908101849052606081018890529091507f453873136650c88eb8b940e72829c86df6b8f7b66ebc69173766deb2b24808629060800160405180910390a1600b55505050505050565b6001600160a01b0381166000908152600760205260408120545b92915050565b6060600680546106ad90612182565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015610b5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107e9565b610b6733858584036111ee565b5060019392505050565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b60405181151581527fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c89060200160405180910390a1600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600061073d338484611346565b6000546001600160a01b03163314610c985760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b6001600160a01b03821660008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2910160405180910390a15050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b83421115610dfd5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016107e9565b60007f0000000000000000000000000000000000000000000000000000000000000000888888610e2c8c611611565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e8782611639565b90506000610e97828787876116a2565b9050896001600160a01b0316816001600160a01b031614610efa5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016107e9565b610f058a8a8a6111ee565b50505050505050505050565b6000612710821115610f655760405162461bcd60e51b815260206004820152600b60248201527f494e56414c49445f46454500000000000000000000000000000000000000000060448201526064016107e9565b5060a081901b6001600160a01b0383161792915050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b60405181151581527f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129060200160405180910390a1600a8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b818180156110a5576001600160a01b0382166110a05760405162461bcd60e51b815260206004820152600f60248201527f61646472657373206e6f7420736574000000000000000000000000000000000060448201526064016107e9565b6110fc565b6001600160a01b038216156110fc5760405162461bcd60e51b815260206004820152601360248201527f736574206164647265737320746f207a65726f0000000000000000000000000060448201526064016107e9565b6000546001600160a01b031633146111565760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b611161846001610c3e565b600080611173600c549060a082901c90565b91509150611182826000610c3e565b600061118e8787610f11565b604080516001600160a01b0380871682528a166020820152908101849052606081018890529091507f01882fab9b299e3573d2e9bf73d533bb8f9b5fd998713b63df51a02dcb57867b9060800160405180910390a1600c55505050505050565b6001600160a01b0383166112695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0382166112e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600a546001600160a01b03620100008204169060ff1615806113975750806001600160a01b0316846001600160a01b0316141580156113975750806001600160a01b0316836001600160a01b031614155b806113ba57506001600160a01b03841660009081526009602052604090205460ff165b806113dd57506001600160a01b03831660009081526009602052604090205460ff165b806114205750806001600160a01b0316846001600160a01b031614801561142057506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d145b156114365761143084848461189f565b50505050565b600080611448600b549060a082901c90565b909250905080156115025761145f86858484611ab6565b600a54909150610100900460ff16801561148b5750826001600160a01b0316866001600160a01b031614155b80156114b457506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611502576114c230611af6565b600c54479060a081901c60006114d88483611c42565b905080156114ea576114ea8382611c62565b6114fd866114f88387612217565b611c62565b505050505b61151686866115118488612217565b61189f565b505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561156d57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b6000610aab61164661151e565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561173a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b8360ff16601b148061174f57508360ff16601c145b6117c15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611815573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381166118965760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107e9565b95945050505050565b6001600160a01b03831661191b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0382166119975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b03831660009081526002602052604090205481811015611a265760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290611a5d9084906121ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611aa991815260200190565b60405180910390a3611430565b6000611ac28483611c42565b600a54909250600090610100900460ff16611add5783611adf565b305b9050611aec86828561189f565b5090949350505050565b306000908152600260205260409020546509184e72a000811115611c3e576040805160028082526060820183526000926020830190803683370190505090503081600081518110611b4957611b4961225d565b6001600160a01b039283166020918202929092010152600854825191169082906001908110611b7a57611b7a61225d565b6001600160a01b0390921660209283029190910190910152611bb130737a250d5630b4cf539739df2c5dacb4c659f2488d846111ee565b6040517f791ac947000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611c0a90859060009086908990429060040161228c565b600060405180830381600087803b158015611c2457600080fd5b505af1158015611c38573d6000803e3d6000fd5b50505050505b5050565b6000612710611c5183856122fd565b611c5b919061233a565b9392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611caf576040519150601f19603f3d011682016040523d82523d6000602084013e611cb4565b606091505b50909150819050611ccf6001600160a01b0385166014611d0c565b604051602001611cdf9190612375565b604051602081830303815290604052906114305760405162461bcd60e51b81526004016107e99190611f61565b60606000611d1b8360026122fd565b611d269060026121ff565b67ffffffffffffffff811115611d3e57611d3e61222e565b6040519080825280601f01601f191660200182016040528015611d68576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611d9f57611d9f61225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611e0257611e0261225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611e3e8460026122fd565b611e499060016121ff565b90505b6001811115611ee6577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611e8a57611e8a61225d565b1a60f81b828281518110611ea057611ea061225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611edf816123ba565b9050611e4c565b508315611c5b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e9565b60005b83811015611f50578181015183820152602001611f38565b838111156114305750506000910152565b6020815260008251806020840152611f80816040850160208701611f35565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114611fc757600080fd5b50565b60008060408385031215611fdd57600080fd5b8235611fe881611fb2565b946020939093013593505050565b60008060006060848603121561200b57600080fd5b833561201681611fb2565b9250602084013561202681611fb2565b929592945050506040919091013590565b60006020828403121561204957600080fd5b8135611c5b81611fb2565b60006020828403121561206657600080fd5b5035919050565b8035801515811461207d57600080fd5b919050565b60006020828403121561209457600080fd5b611c5b8261206d565b600080604083850312156120b057600080fd5b82356120bb81611fb2565b91506120c96020840161206d565b90509250929050565b600080600080600080600060e0888a0312156120ed57600080fd5b87356120f881611fb2565b9650602088013561210881611fb2565b95506040880135945060608801359350608088013560ff8116811461212c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561215c57600080fd5b823561216781611fb2565b9150602083013561217781611fb2565b809150509250929050565b600181811c9082168061219657607f821691505b60208210811415611633577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612212576122126121d0565b500190565b600082821015612229576122296121d0565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122dc5784516001600160a01b0316835293830193918301916001016122b7565b50506001600160a01b03969096166060850152505050608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612335576123356121d0565b500290565b600082612370577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4554485f5452414e534645525f4641494c45443a2000000000000000000000008152600082516123ad816015850160208701611f35565b9190910160150192915050565b6000816123c9576123c96121d0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122022dc32055b7077f0bf3ddb0b0e551ccc6f1819f3f14733ff5181e8db77d035e564736f6c634300080a00330000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000064a7b24bce6f7d374a6844f2dd70ebb26496bba200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000004b00000000000000000000000000000000000000000000000000000000000000003424f4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003424f470000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102025760003560e01c80638da5cb5b1161011d578063b5ed298a116100b0578063d61e89561161007f578063e01af92c11610064578063e01af92c14610637578063f370988814610657578063f887ea401461067757600080fd5b8063d61e8956146105d1578063dd62ed3e146105f157600080fd5b8063b5ed298a1461054b578063c816841b1461056b578063d153b60c14610591578063d505accf146105b157600080fd5b8063a901dd92116100ec578063a901dd92146104cb578063a9059cbb146104eb578063ad5c46481461050b578063af9549e01461052b57600080fd5b80638da5cb5b1461044457806395d89b411461047c578063a457c2d714610491578063a64e4f8a146104b157600080fd5b80634cf088d9116101955780636ddd1713116101645780636ddd1713146103af5780636fd1f270146103ce57806370a08231146103ee5780637ecebe001461042457600080fd5b80634cf088d91461030f5780634e71e0c8146103255780635342acb41461033c57806356e8e08e1461036c57600080fd5b8063313ce567116101d1578063313ce567146102a85780633644e515146102c457806338af3eed146102d957806339509351146102ef57600080fd5b806306fdde031461020e578063095ea7b31461023957806318160ddd1461026957806323b872dd1461028857600080fd5b3661020957005b600080fd5b34801561021a57600080fd5b5061022361069e565b6040516102309190611f61565b60405180910390f35b34801561024557600080fd5b50610259610254366004611fca565b610730565b6040519015158152602001610230565b34801561027557600080fd5b506004545b604051908152602001610230565b34801561029457600080fd5b506102596102a3366004611ff6565b610746565b3480156102b457600080fd5b5060405160128152602001610230565b3480156102d057600080fd5b5061027a61080a565b3480156102e557600080fd5b5061027a600b5481565b3480156102fb57600080fd5b5061025961030a366004611fca565b610819565b34801561031b57600080fd5b5061027a600c5481565b34801561033157600080fd5b5061033a610855565b005b34801561034857600080fd5b50610259610357366004612037565b60096020526000908152604090205460ff1681565b34801561037857600080fd5b50610390610387366004612054565b9060a082901c90565b604080516001600160a01b039093168352602083019190915201610230565b3480156103bb57600080fd5b50600a5461025990610100900460ff1681565b3480156103da57600080fd5b5061033a6103e9366004611fca565b6108e5565b3480156103fa57600080fd5b5061027a610409366004612037565b6001600160a01b031660009081526002602052604090205490565b34801561043057600080fd5b5061027a61043f366004612037565b610a91565b34801561045057600080fd5b50600054610464906001600160a01b031681565b6040516001600160a01b039091168152602001610230565b34801561048857600080fd5b50610223610ab1565b34801561049d57600080fd5b506102596104ac366004611fca565b610ac0565b3480156104bd57600080fd5b50600a546102599060ff1681565b3480156104d757600080fd5b5061033a6104e6366004612082565b610b71565b3480156104f757600080fd5b50610259610506366004611fca565b610c31565b34801561051757600080fd5b50600854610464906001600160a01b031681565b34801561053757600080fd5b5061033a61054636600461209d565b610c3e565b34801561055757600080fd5b5061033a610566366004612037565b610d19565b34801561057757600080fd5b50600a54610464906201000090046001600160a01b031681565b34801561059d57600080fd5b50600154610464906001600160a01b031681565b3480156105bd57600080fd5b5061033a6105cc3660046120d2565b610dad565b3480156105dd57600080fd5b5061027a6105ec366004611fca565b610f11565b3480156105fd57600080fd5b5061027a61060c366004612149565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561064357600080fd5b5061033a610652366004612082565b610f7c565b34801561066357600080fd5b5061033a610672366004611fca565b611042565b34801561068357600080fd5b50737a250d5630b4cf539739df2c5dacb4c659f2488d610464565b6060600580546106ad90612182565b80601f01602080910402602001604051908101604052809291908181526020018280546106d990612182565b80156107265780601f106106fb57610100808354040283529160200191610726565b820191906000526020600020905b81548152906001019060200180831161070957829003601f168201915b5050505050905090565b600061073d3384846111ee565b50600192915050565b6000610753848484611346565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156107f25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107ff85338584036111ee565b506001949350505050565b600061081461151e565b905090565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161073d9185906108509086906121ff565b6111ee565b6001546001600160a01b0316331461086c57600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216919091179055565b81818015610948576001600160a01b0382166109435760405162461bcd60e51b815260206004820152600f60248201527f61646472657373206e6f7420736574000000000000000000000000000000000060448201526064016107e9565b61099f565b6001600160a01b0382161561099f5760405162461bcd60e51b815260206004820152601360248201527f736574206164647265737320746f207a65726f0000000000000000000000000060448201526064016107e9565b6000546001600160a01b031633146109f95760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b610a04846001610c3e565b600080610a16600b549060a082901c90565b91509150610a25826000610c3e565b6000610a318787610f11565b604080516001600160a01b0380871682528a166020820152908101849052606081018890529091507f453873136650c88eb8b940e72829c86df6b8f7b66ebc69173766deb2b24808629060800160405180910390a1600b55505050505050565b6001600160a01b0381166000908152600760205260408120545b92915050565b6060600680546106ad90612182565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015610b5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107e9565b610b6733858584036111ee565b5060019392505050565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b60405181151581527fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c89060200160405180910390a1600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600061073d338484611346565b6000546001600160a01b03163314610c985760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b6001600160a01b03821660008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2910160405180910390a15050565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b83421115610dfd5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016107e9565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610e2c8c611611565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610e8782611639565b90506000610e97828787876116a2565b9050896001600160a01b0316816001600160a01b031614610efa5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016107e9565b610f058a8a8a6111ee565b50505050505050505050565b6000612710821115610f655760405162461bcd60e51b815260206004820152600b60248201527f494e56414c49445f46454500000000000000000000000000000000000000000060448201526064016107e9565b5060a081901b6001600160a01b0383161792915050565b6000546001600160a01b03163314610fd65760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b60405181151581527f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129060200160405180910390a1600a8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b818180156110a5576001600160a01b0382166110a05760405162461bcd60e51b815260206004820152600f60248201527f61646472657373206e6f7420736574000000000000000000000000000000000060448201526064016107e9565b6110fc565b6001600160a01b038216156110fc5760405162461bcd60e51b815260206004820152601360248201527f736574206164647265737320746f207a65726f0000000000000000000000000060448201526064016107e9565b6000546001600160a01b031633146111565760405162461bcd60e51b815260206004820152601060248201527f4f776e65643a206e6f74206f776e65720000000000000000000000000000000060448201526064016107e9565b611161846001610c3e565b600080611173600c549060a082901c90565b91509150611182826000610c3e565b600061118e8787610f11565b604080516001600160a01b0380871682528a166020820152908101849052606081018890529091507f01882fab9b299e3573d2e9bf73d533bb8f9b5fd998713b63df51a02dcb57867b9060800160405180910390a1600c55505050505050565b6001600160a01b0383166112695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0382166112e55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600a546001600160a01b03620100008204169060ff1615806113975750806001600160a01b0316846001600160a01b0316141580156113975750806001600160a01b0316836001600160a01b031614155b806113ba57506001600160a01b03841660009081526009602052604090205460ff165b806113dd57506001600160a01b03831660009081526009602052604090205460ff165b806114205750806001600160a01b0316846001600160a01b031614801561142057506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d145b156114365761143084848461189f565b50505050565b600080611448600b549060a082901c90565b909250905080156115025761145f86858484611ab6565b600a54909150610100900460ff16801561148b5750826001600160a01b0316866001600160a01b031614155b80156114b457506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611502576114c230611af6565b600c54479060a081901c60006114d88483611c42565b905080156114ea576114ea8382611c62565b6114fd866114f88387612217565b611c62565b505050505b61151686866115118488612217565b61189f565b505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000146141561156d57507f0003707ba7433151675593df6a3c03ed320c3cc04ffa34e3b929ba44d35c7c9f90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f480866da727e2ccfbdb2320250cf842c78d0a178cd6e7efc2c913cfe23b05ff9828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b6000610aab61164661151e565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561173a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b8360ff16601b148061174f57508360ff16601c145b6117c15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611815573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381166118965760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107e9565b95945050505050565b6001600160a01b03831661191b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b0382166119975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b03831660009081526002602052604090205481811015611a265760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107e9565b6001600160a01b03808516600090815260026020526040808220858503905591851681529081208054849290611a5d9084906121ff565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611aa991815260200190565b60405180910390a3611430565b6000611ac28483611c42565b600a54909250600090610100900460ff16611add5783611adf565b305b9050611aec86828561189f565b5090949350505050565b306000908152600260205260409020546509184e72a000811115611c3e576040805160028082526060820183526000926020830190803683370190505090503081600081518110611b4957611b4961225d565b6001600160a01b039283166020918202929092010152600854825191169082906001908110611b7a57611b7a61225d565b6001600160a01b0390921660209283029190910190910152611bb130737a250d5630b4cf539739df2c5dacb4c659f2488d846111ee565b6040517f791ac947000000000000000000000000000000000000000000000000000000008152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790611c0a90859060009086908990429060040161228c565b600060405180830381600087803b158015611c2457600080fd5b505af1158015611c38573d6000803e3d6000fd5b50505050505b5050565b6000612710611c5183856122fd565b611c5b919061233a565b9392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611caf576040519150601f19603f3d011682016040523d82523d6000602084013e611cb4565b606091505b50909150819050611ccf6001600160a01b0385166014611d0c565b604051602001611cdf9190612375565b604051602081830303815290604052906114305760405162461bcd60e51b81526004016107e99190611f61565b60606000611d1b8360026122fd565b611d269060026121ff565b67ffffffffffffffff811115611d3e57611d3e61222e565b6040519080825280601f01601f191660200182016040528015611d68576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611d9f57611d9f61225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611e0257611e0261225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611e3e8460026122fd565b611e499060016121ff565b90505b6001811115611ee6577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611e8a57611e8a61225d565b1a60f81b828281518110611ea057611ea061225d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611edf816123ba565b9050611e4c565b508315611c5b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e9565b60005b83811015611f50578181015183820152602001611f38565b838111156114305750506000910152565b6020815260008251806020840152611f80816040850160208701611f35565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6001600160a01b0381168114611fc757600080fd5b50565b60008060408385031215611fdd57600080fd5b8235611fe881611fb2565b946020939093013593505050565b60008060006060848603121561200b57600080fd5b833561201681611fb2565b9250602084013561202681611fb2565b929592945050506040919091013590565b60006020828403121561204957600080fd5b8135611c5b81611fb2565b60006020828403121561206657600080fd5b5035919050565b8035801515811461207d57600080fd5b919050565b60006020828403121561209457600080fd5b611c5b8261206d565b600080604083850312156120b057600080fd5b82356120bb81611fb2565b91506120c96020840161206d565b90509250929050565b600080600080600080600060e0888a0312156120ed57600080fd5b87356120f881611fb2565b9650602088013561210881611fb2565b95506040880135945060608801359350608088013560ff8116811461212c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561215c57600080fd5b823561216781611fb2565b9150602083013561217781611fb2565b809150509250929050565b600181811c9082168061219657607f821691505b60208210811415611633577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612212576122126121d0565b500190565b600082821015612229576122296121d0565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122dc5784516001600160a01b0316835293830193918301916001016122b7565b50506001600160a01b03969096166060850152505050608001529392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612335576123356121d0565b500290565b600082612370577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4554485f5452414e534645525f4641494c45443a2000000000000000000000008152600082516123ad816015850160208701611f35565b9190910160150192915050565b6000816123c9576123c96121d0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122022dc32055b7077f0bf3ddb0b0e551ccc6f1819f3f14733ff5181e8db77d035e564736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000064a7b24bce6f7d374a6844f2dd70ebb26496bba200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000004b00000000000000000000000000000000000000000000000000000000000000003424f4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003424f470000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _totalSupply (uint256): 1000000000000000000000000000
Arg [1] : _beneficiary (address): 0x64A7B24BcE6F7d374a6844f2dD70EBb26496BbA2
Arg [2] : _name (string): BOG
Arg [3] : _symbol (string): BOG
Arg [4] : _initial_fee (uint256): 1200
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [1] : 00000000000000000000000064a7b24bce6f7d374a6844f2dd70ebb26496bba2
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000004b0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 424f470000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 424f470000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
181:9646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4150:166;;;;;;;;;;-1:-1:-1;4150:166:4;;;;;:::i;:::-;;:::i;:::-;;;1368:14:13;;1361:22;1343:41;;1331:2;1316:18;4150:166:4;1203:187:13;3141:106:4;;;;;;;;;;-1:-1:-1;3228:12:4;;3141:106;;;1541:25:13;;;1529:2;1514:18;3141:106:4;1395:177:13;4783:478:4;;;;;;;;;;-1:-1:-1;4783:478:4;;;;;:::i;:::-;;:::i;2990:91::-;;;;;;;;;;-1:-1:-1;2990:91:4;;3072:2;2180:36:13;;2168:2;2153:18;2990:91:4;2038:184:13;2360:113:11;;;;;;;;;;;;;:::i;486:26:0:-;;;;;;;;;;;;;;;;5656:212:4;;;;;;;;;;-1:-1:-1;5656:212:4;;;;;:::i;:::-;;:::i;518:22:0:-;;;;;;;;;;;;;;;;959:176:8;;;;;;;;;;;;;:::i;:::-;;279:49:0;;;;;;;;;;-1:-1:-1;279:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3501:190;;;;;;;;;;-1:-1:-1;3501:190:0;;;;;:::i;:::-;3631:12;3678:3;3662:19;;;;3501:190;;;;;-1:-1:-1;;;;;3038:55:13;;;3020:74;;3125:2;3110:18;;3103:34;;;;2993:18;3501:190:0;2846:297:13;363:23:0;;;;;;;;;;-1:-1:-1;363:23:0;;;;;;;;;;;3983:573;;;;;;;;;;-1:-1:-1;3983:573:0;;;;;:::i;:::-;;:::i;3305:125:4:-;;;;;;;;;;-1:-1:-1;3305:125:4;;;;;:::i;:::-;-1:-1:-1;;;;;3405:18:4;3379:7;3405:18;;;:9;:18;;;;;;;3305:125;2110:126:11;;;;;;;;;;-1:-1:-1;2110:126:11;;;;;:::i;:::-;;:::i;78:20:8:-;;;;;;;;;;-1:-1:-1;78:20:8;;;;-1:-1:-1;;;;;78:20:8;;;;;;-1:-1:-1;;;;;3312:55:13;;;3294:74;;3282:2;3267:18;78:20:8;3148:226:13;2264:102:4;;;;;;;;;;;;;:::i;6355:405::-;;;;;;;;;;-1:-1:-1;6355:405:4;;;;;:::i;:::-;;:::i;334:23:0:-;;;;;;;;;;-1:-1:-1;334:23:0;;;;;;;;5572:148;;;;;;;;;;-1:-1:-1;5572:148:0;;;;;:::i;:::-;;:::i;3633:172:4:-;;;;;;;;;;-1:-1:-1;3633:172:4;;;;;:::i;:::-;;:::i;254:19:0:-;;;;;;;;;;-1:-1:-1;254:19:0;;;;-1:-1:-1;;;;;254:19:0;;;2807:200;;;;;;;;;;-1:-1:-1;2807:200:0;;;;;:::i;:::-;;:::i;729:110:8:-;;;;;;;;;;-1:-1:-1;729:110:8;;;;;:::i;:::-;;:::i;393:26:0:-;;;;;;;;;;-1:-1:-1;393:26:0;;;;;;;-1:-1:-1;;;;;393:26:0;;;104:28:8;;;;;;;;;;-1:-1:-1;104:28:8;;;;-1:-1:-1;;;;;104:28:8;;;1423:626:11;;;;;;;;;;-1:-1:-1;1423:626:11;;;;;:::i;:::-;;:::i;3103:297:0:-;;;;;;;;;;-1:-1:-1;3103:297:0;;;;;:::i;:::-;;:::i;3863:149:4:-;;;;;;;;;;-1:-1:-1;3863:149:4;;;;;:::i;:::-;-1:-1:-1;;;;;3978:18:4;;;3952:7;3978:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3863:149;5888:148:0;;;;;;;;;;-1:-1:-1;5888:148:0;;;;;:::i;:::-;;:::i;4852:542::-;;;;;;;;;;-1:-1:-1;4852:542:0;;;;;:::i;:::-;;:::i;6042:149::-;;;;;;;;;;-1:-1:-1;6141:42:0;6042:149;;2053:98:4;2107:13;2139:5;2132:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:98;:::o;4150:166::-;4233:4;4249:39;665:10:1;4272:7:4;4281:6;4249:8;:39::i;:::-;-1:-1:-1;4305:4:4;4150:166;;;;:::o;4783:478::-;4919:4;4935:36;4945:6;4953:9;4964:6;4935:9;:36::i;:::-;-1:-1:-1;;;;;5009:19:4;;4982:24;5009:19;;;:11;:19;;;;;;;;665:10:1;5009:33:4;;;;;;;;5060:26;;;;5052:79;;;;-1:-1:-1;;;5052:79:4;;6436:2:13;5052:79:4;;;6418:21:13;6475:2;6455:18;;;6448:30;6514:34;6494:18;;;6487:62;6585:10;6565:18;;;6558:38;6613:19;;5052:79:4;;;;;;;;;5165:57;5174:6;665:10:1;5215:6:4;5196:16;:25;5165:8;:57::i;:::-;-1:-1:-1;5250:4:4;;4783:478;-1:-1:-1;;;;4783:478:4:o;2360:113:11:-;2420:7;2446:20;:18;:20::i;:::-;2439:27;;2360:113;:::o;5656:212:4:-;665:10:1;5744:4:4;5792:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5792:34:4;;;;;;;;;;5744:4;;5760:80;;5783:7;;5792:47;;5829:10;;5792:47;:::i;:::-;5760:8;:80::i;959:176:8:-;1026:13;;-1:-1:-1;;;;;1026:13:8;1012:10;:27;1004:36;;;;;;1083:13;;;1076:5;;1055:42;;-1:-1:-1;;;;;1083:13:8;;;;1076:5;;;;1055:42;;;1115:13;;;1107:21;;;;-1:-1:-1;;;;;1115:13:8;;;1107:21;;;;;;959:176::o;3983:573:0:-;4104:15;4121:4;1006:8;;1002:182;;-1:-1:-1;;;;;1038:26:0;;1030:54;;;;-1:-1:-1;;;1030:54:0;;7167:2:13;1030:54:0;;;7149:21:13;7206:2;7186:18;;;7179:30;7245:17;7225:18;;;7218:45;7280:18;;1030:54:0;6965:339:13;1030:54:0;1002:182;;;-1:-1:-1;;;;;1123:26:0;;;1115:58;;;;-1:-1:-1;;;1115:58:0;;7511:2:13;1115:58:0;;;7493:21:13;7550:2;7530:18;;;7523:30;7589:21;7569:18;;;7562:49;7628:18;;1115:58:0;7309:343:13;1115:58:0;582:5:8::1;::::0;-1:-1:-1;;;;;582:5:8::1;568:10;:19;560:48;;;::::0;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8::1;::::0;::::1;7841:21:13::0;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8::1;7657:340:13::0;560:48:8::1;4159:40:0::2;4177:15;4194:4;4159:17;:40::i;:::-;4210:26;4238:18:::0;4260:30:::2;4278:11;;3631:12:::0;3678:3;3662:19;;;;3501:190;4260:30:::2;4209:81;;;;4300:44;4318:18;4338:5;4300:17;:44::i;:::-;4354:22;4379:38;4395:15;4412:4;4379:15;:38::i;:::-;4432:79;::::0;;-1:-1:-1;;;;;8312:15:13;;;8294:34;;8364:15;;8359:2;8344:18;;8337:43;8396:18;;;8389:34;;;8454:2;8439:18;;8432:34;;;4354:63:0;;-1:-1:-1;4432:79:0::2;::::0;8220:3:13;8205:19;4432:79:0::2;;;;;;;4521:11;:28:::0;-1:-1:-1;;;;;;3983:573:0:o;2110:126:11:-;-1:-1:-1;;;;;2205:14:11;;2179:7;2205:14;;;:7;:14;;;;;864::2;2205:24:11;2198:31;2110:126;-1:-1:-1;;2110:126:11:o;2264:102:4:-;2320:13;2352:7;2345:14;;;;;:::i;6355:405::-;665:10:1;6448:4:4;6491:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6491:34:4;;;;;;;;;;6543:35;;;;6535:85;;;;-1:-1:-1;;;6535:85:4;;8679:2:13;6535:85:4;;;8661:21:13;8718:2;8698:18;;;8691:30;8757:34;8737:18;;;8730:62;8828:7;8808:18;;;8801:35;8853:19;;6535:85:4;8477:401:13;6535:85:4;6654:67;665:10:1;6677:7:4;6705:15;6686:16;:34;6654:8;:67::i;:::-;-1:-1:-1;6749:4:4;;6355:405;-1:-1:-1;;;6355:405:4:o;5572:148:0:-;582:5:8;;-1:-1:-1;;;;;582:5:8;568:10;:19;560:48;;;;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8;;;7841:21:13;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8;7657:340:13;560:48:8;5653:28:0::1;::::0;1368:14:13;;1361:22;1343:41;;5653:28:0::1;::::0;1331:2:13;1316:18;5653:28:0::1;;;;;;;5691:11;:22:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;5572:148::o;3633:172:4:-;3719:4;3735:42;665:10:1;3759:9:4;3770:6;3735:9;:42::i;2807:200:0:-;582:5:8;;-1:-1:-1;;;;;582:5:8;568:10;:19;560:48;;;;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8;;;7841:21:13;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8;7657:340:13;560:48:8;-1:-1:-1;;;;;2903:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;2957:43;;9051:74:13;;;9141:18;;;9134:50;2957:43:0::1;::::0;9024:18:13;2957:43:0::1;;;;;;;2807:200:::0;;:::o;729:110:8:-;582:5;;-1:-1:-1;;;;;582:5:8;568:10;:19;560:48;;;;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8;;;7841:21:13;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8;7657:340:13;560:48:8;807:13:::1;:25:::0;;;::::1;-1:-1:-1::0;;;;;807:25:8;;;::::1;::::0;;;::::1;::::0;;729:110::o;1423:626:11:-;1658:8;1639:15;:27;;1631:69;;;;-1:-1:-1;;;1631:69:11;;9397:2:13;1631:69:11;;;9379:21:13;9436:2;9416:18;;;9409:30;9475:31;9455:18;;;9448:59;9524:18;;1631:69:11;9195:353:13;1631:69:11;1711:18;1753:16;1771:5;1778:7;1787:5;1794:16;1804:5;1794:9;:16::i;:::-;1742:79;;;;;;9840:25:13;;;;-1:-1:-1;;;;;9962:15:13;;;9942:18;;;9935:43;10014:15;;;;9994:18;;;9987:43;10046:18;;;10039:34;10089:19;;;10082:35;10133:19;;;10126:35;;;9812:19;;1742:79:11;;;;;;;;;;;;1732:90;;;;;;1711:111;;1833:12;1848:28;1865:10;1848:16;:28::i;:::-;1833:43;;1887:14;1904:28;1918:4;1924:1;1927;1930;1904:13;:28::i;:::-;1887:45;;1960:5;-1:-1:-1;;;;;1950:15:11;:6;-1:-1:-1;;;;;1950:15:11;;1942:58;;;;-1:-1:-1;;;1942:58:11;;10374:2:13;1942:58:11;;;10356:21:13;10413:2;10393:18;;;10386:30;10452:32;10432:18;;;10425:60;10502:18;;1942:58:11;10172:354:13;1942:58:11;2011:31;2020:5;2027:7;2036:5;2011:8;:31::i;:::-;1621:428;;;1423:626;;;;;;;:::o;3103:297:0:-;3193:7;3228:5;3220:4;:13;;3212:37;;;;-1:-1:-1;;;3212:37:0;;10733:2:13;3212:37:0;;;10715:21:13;10772:2;10752:18;;;10745:30;10811:13;10791:18;;;10784:41;10842:18;;3212:37:0;10531:335:13;3212:37:0;-1:-1:-1;3356:3:0;3348:11;;;-1:-1:-1;;;;;3287:30:0;;3327:32;3103:297;;;;:::o;5888:148::-;582:5:8;;-1:-1:-1;;;;;582:5:8;568:10;:19;560:48;;;;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8;;;7841:21:13;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8;7657:340:13;560:48:8;5969:28:0::1;::::0;1368:14:13;;1361:22;1343:41;;5969:28:0::1;::::0;1331:2:13;1316:18;5969:28:0::1;;;;;;;6007:11;:22:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;5888:148::o;4852:542::-;4970:16;4988:4;1006:8;;1002:182;;-1:-1:-1;;;;;1038:26:0;;1030:54;;;;-1:-1:-1;;;1030:54:0;;7167:2:13;1030:54:0;;;7149:21:13;7206:2;7186:18;;;7179:30;7245:17;7225:18;;;7218:45;7280:18;;1030:54:0;6965:339:13;1030:54:0;1002:182;;;-1:-1:-1;;;;;1123:26:0;;;1115:58;;;;-1:-1:-1;;;1115:58:0;;7511:2:13;1115:58:0;;;7493:21:13;7550:2;7530:18;;;7523:30;7589:21;7569:18;;;7562:49;7628:18;;1115:58:0;7309:343:13;1115:58:0;582:5:8::1;::::0;-1:-1:-1;;;;;582:5:8::1;568:10;:19;560:48;;;::::0;-1:-1:-1;;;560:48:8;;7859:2:13;560:48:8::1;::::0;::::1;7841:21:13::0;7898:2;7878:18;;;7871:30;7937:18;7917;;;7910:46;7973:18;;560:48:8::1;7657:340:13::0;560:48:8::1;5026:41:0::2;5044:16;5062:4;5026:17;:41::i;:::-;5078:22;5102:18:::0;5124:26:::2;5142:7;;3631:12:::0;3678:3;3662:19;;;;3501:190;5124:26:::2;5077:73;;;;5160:40;5178:14;5194:5;5160:17;:40::i;:::-;5210:18;5231:39;5247:16;5265:4;5231:15;:39::i;:::-;5285:72;::::0;;-1:-1:-1;;;;;8312:15:13;;;8294:34;;8364:15;;8359:2;8344:18;;8337:43;8396:18;;;8389:34;;;8454:2;8439:18;;8432:34;;;5210:60:0;;-1:-1:-1;5285:72:0::2;::::0;8220:3:13;8205:19;5285:72:0::2;;;;;;;5367:7;:20:::0;-1:-1:-1;;;;;;4852:542:0:o;9931:370:4:-;-1:-1:-1;;;;;10062:19:4;;10054:68;;;;-1:-1:-1;;;10054:68:4;;11073:2:13;10054:68:4;;;11055:21:13;11112:2;11092:18;;;11085:30;11151:34;11131:18;;;11124:62;11222:6;11202:18;;;11195:34;11246:19;;10054:68:4;10871:400:13;10054:68:4;-1:-1:-1;;;;;10140:21:4;;10132:68;;;;-1:-1:-1;;;10132:68:4;;11478:2:13;10132:68:4;;;11460:21:13;11517:2;11497:18;;;11490:30;11556:34;11536:18;;;11529:62;11627:4;11607:18;;;11600:32;11649:19;;10132:68:4;11276:398:13;10132:68:4;-1:-1:-1;;;;;10211:18:4;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10262:32;;1541:25:13;;;10262:32:4;;1514:18:13;10262:32:4;;;;;;;9931:370;;;:::o;6197:2237:0:-;6682:11;;-1:-1:-1;;;;;6682:11:0;;;;;7035;;7034:12;;:65;;;7073:4;-1:-1:-1;;;;;7063:14:0;:6;-1:-1:-1;;;;;7063:14:0;;;:35;;;;;7094:4;-1:-1:-1;;;;;7081:17:0;:9;-1:-1:-1;;;;;7081:17:0;;;7063:35;7034:106;;;-1:-1:-1;;;;;;7115:25:0;;;;;;:17;:25;;;;;;;;7034:106;:150;;;-1:-1:-1;;;;;;7156:28:0;;;;;;:17;:28;;;;;;;;7034:150;:216;;;;7211:4;-1:-1:-1;;;;;7201:14:0;:6;-1:-1:-1;;;;;7201:14:0;;:48;;;;-1:-1:-1;;;;;;7219:30:0;;6141:42;7219:30;7201:48;7017:331;;;7275:42;7291:6;7299:9;7310:6;7275:15;:42::i;:::-;7331:7;6197:2237;;;:::o;7017:331::-;7407:26;7435:19;7458:30;7476:11;;3631:12;3678:3;3662:19;;;;3501:190;7458:30;7406:82;;-1:-1:-1;7406:82:0;-1:-1:-1;7502:15:0;;7498:863;;7547:66;7565:6;7573;7581:18;7601:11;7547:17;:66::i;:::-;7709:11;;7533:80;;-1:-1:-1;7709:11:0;;;;;:29;;;;;7734:4;-1:-1:-1;;;;;7724:14:0;:6;-1:-1:-1;;;;;7724:14:0;;;7709:29;:60;;;;-1:-1:-1;;;;;;7742:27:0;;6141:42;7742:27;;7709:60;7705:646;;;7789:32;7815:4;7789:17;:32::i;:::-;8040:7;;7935:21;;3678:3;3662:19;;;7914:18;8091:37;7935:21;3662:19;8091:13;:37::i;:::-;8066:62;-1:-1:-1;8150:18:0;;8146:111;;8192:46;8206:15;8223:14;8192:13;:46::i;:::-;8274:62;8288:18;8308:27;8321:14;8308:10;:27;:::i;:::-;8274:13;:62::i;:::-;7771:580;;;;7705:646;8371:56;8387:6;8395:9;8406:20;8415:11;8406:6;:20;:::i;:::-;8371:15;:56::i;:::-;6315:2119;;;6197:2237;;;:::o;2990:275:10:-;3043:7;3083:16;3066:13;:33;3062:197;;;-1:-1:-1;3122:24:10;;2990:275::o;3062:197::-;-1:-1:-1;3447:73:10;;;3206:10;3447:73;;;;17423:25:13;;;;3218:12:10;17464:18:13;;;17457:34;3232:15:10;17507:18:13;;;17500:34;3491:13:10;17550:18:13;;;17543:34;3514:4:10;17593:19:13;;;;17586:84;;;;3447:73:10;;;;;;;;;;17395:19:13;;;;3447:73:10;;;3437:84;;;;;;2360:113:11:o;2604:203::-;-1:-1:-1;;;;;2724:14:11;;2664:15;2724:14;;;:7;:14;;;;;864::2;;996:1;978:19;;;;864:14;2783:17:11;2681:126;2604:203;;;:::o;4153:165:10:-;4230:7;4256:55;4278:20;:18;:20::i;:::-;4300:10;5774:57:3;;17951:66:13;5774:57:3;;;17939:79:13;18034:11;;;18027:27;;;18070:12;;;18063:28;;;5738:7:3;;18107:12:13;;5774:57:3;;;;;;;;;;;;5764:68;;;;;;5757:75;;5645:194;;;;;3265:1486;3388:7;4316:66;4302:80;;;4281:161;;;;-1:-1:-1;;;4281:161:3;;12011:2:13;4281:161:3;;;11993:21:13;12050:2;12030:18;;;12023:30;12089:34;12069:18;;;12062:62;12160:4;12140:18;;;12133:32;12182:19;;4281:161:3;11809:398:13;4281:161:3;4460:1;:7;;4465:2;4460:7;:18;;;;4471:1;:7;;4476:2;4471:7;4460:18;4452:65;;;;-1:-1:-1;;;4452:65:3;;12414:2:13;4452:65:3;;;12396:21:13;12453:2;12433:18;;;12426:30;12492:34;12472:18;;;12465:62;12563:4;12543:18;;;12536:32;12585:19;;4452:65:3;12212:398:13;4452:65:3;4629:24;;;4612:14;4629:24;;;;;;;;;12842:25:13;;;12915:4;12903:17;;12883:18;;;12876:45;;;;12937:18;;;12930:34;;;12980:18;;;12973:34;;;4629:24:3;;12814:19:13;;4629:24:3;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4629:24:3;;;;;;-1:-1:-1;;;;;;;4671:20:3;;4663:57;;;;-1:-1:-1;;;4663:57:3;;13220:2:13;4663:57:3;;;13202:21:13;13259:2;13239:18;;;13232:30;13298:26;13278:18;;;13271:54;13342:18;;4663:57:3;13018:348:13;4663:57:3;4738:6;3265:1486;-1:-1:-1;;;;;3265:1486:3:o;7234:713:4:-;-1:-1:-1;;;;;7369:20:4;;7361:70;;;;-1:-1:-1;;;7361:70:4;;13573:2:13;7361:70:4;;;13555:21:13;13612:2;13592:18;;;13585:30;13651:34;13631:18;;;13624:62;13722:7;13702:18;;;13695:35;13747:19;;7361:70:4;13371:401:13;7361:70:4;-1:-1:-1;;;;;7449:23:4;;7441:71;;;;-1:-1:-1;;;7441:71:4;;13979:2:13;7441:71:4;;;13961:21:13;14018:2;13998:18;;;13991:30;14057:34;14037:18;;;14030:62;14128:5;14108:18;;;14101:33;14151:19;;7441:71:4;13777:399:13;7441:71:4;-1:-1:-1;;;;;7605:17:4;;7581:21;7605:17;;;:9;:17;;;;;;7640:23;;;;7632:74;;;;-1:-1:-1;;;7632:74:4;;14383:2:13;7632:74:4;;;14365:21:13;14422:2;14402:18;;;14395:30;14461:34;14441:18;;;14434:62;14532:8;14512:18;;;14505:36;14558:19;;7632:74:4;14181:402:13;7632:74:4;-1:-1:-1;;;;;7740:17:4;;;;;;;:9;:17;;;;;;7760:22;;;7740:42;;7802:20;;;;;;;;:30;;7776:6;;7740:17;7802:30;;7776:6;;7802:30;:::i;:::-;;;;;;;;7865:9;-1:-1:-1;;;;;7848:35:4;7857:6;-1:-1:-1;;;;;7848:35:4;;7876:6;7848:35;;;;1541:25:13;;1529:2;1514:18;;1395:177;7848:35:4;;;;;;;;7894:46;10885:121;8686:421:0;8861:7;8894:35;8908:7;8917:11;8894:13;:35::i;:::-;8962:11;;8880:49;;-1:-1:-1;8939:20:0;;8962:11;;;;;:49;;8992:19;8962:49;;;8984:4;8962:49;8939:72;;9021:51;9037:7;9046:12;9060:11;9021:15;:51::i;:::-;-1:-1:-1;9089:11:0;;8686:421;-1:-1:-1;;;;8686:421:0:o;9113:564::-;9220:4;9180:19;3405:18:4;;;:9;:18;;;;;;9346:6:0;9332:20;;9328:343;;;9392:16;;;9406:1;9392:16;;;;;;;;9368:21;;9392:16;;;;;;;;;;-1:-1:-1;9392:16:0;9368:40;;9440:4;9422;9427:1;9422:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9422:23:0;;;:7;;;;;;;;;:23;9469:4;;9459:7;;9469:4;;;9459;;9469;;9459:7;;;;;;:::i;:::-;-1:-1:-1;;;;;9459:14:0;;;:7;;;;;;;;;;;:14;9488:55;9505:4;6141:42;9531:11;9488:8;:55::i;:::-;9557:103;;;;;6141:42;;9557:59;;:103;;9617:11;;9630:1;;9633:4;;9639:3;;9644:15;;9557:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9354:317;9328:343;9170:507;9113:564;:::o;9683:142::-;9768:7;9813:5;9795:14;9805:4;9795:7;:14;:::i;:::-;9794:24;;;;:::i;:::-;9787:31;9683:142;-1:-1:-1;;;9683:142:0:o;8440:240::-;8512:12;8530:3;-1:-1:-1;;;;;8530:8:0;8546:6;8530:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8511:46:0;;-1:-1:-1;8511:46:0;;-1:-1:-1;8633:37:0;-1:-1:-1;;;;;8633:21:0;;8667:2;8633:33;:37::i;:::-;8591:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;8567:106;;;;;-1:-1:-1;;;8567:106:0;;;;;;;;:::i;1535:441:9:-;1610:13;1635:19;1667:10;1671:6;1667:1;:10;:::i;:::-;:14;;1680:1;1667:14;:::i;:::-;1657:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1657:25:9;;1635:47;;1692:15;:6;1699:1;1692:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;1717;:6;1724:1;1717:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;1747:9:9;1759:10;1763:6;1759:1;:10;:::i;:::-;:14;;1772:1;1759:14;:::i;:::-;1747:26;;1742:132;1779:1;1775;:5;1742:132;;;1813:12;1826:5;1834:3;1826:11;1813:25;;;;;;;:::i;:::-;;;;1801:6;1808:1;1801:9;;;;;;;;:::i;:::-;;;;:37;;;;;;;;;;-1:-1:-1;1862:1:9;1852:11;;;;;1782:3;;;:::i;:::-;;;1742:132;;;-1:-1:-1;1891:10:9;;1883:55;;;;-1:-1:-1;;;1883:55:9;;18533:2:13;1883:55:9;;;18515:21:13;;;18552:18;;;18545:30;18611:34;18591:18;;;18584:62;18663:18;;1883:55:9;18331:356:13;14:258;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:13;244:16;;237:27;14:258::o;277:442::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;635:2;623:15;640:66;619:88;604:104;;;;710:2;600:113;;277:442;-1:-1:-1;;277:442:13:o;724:154::-;-1:-1:-1;;;;;803:5:13;799:54;792:5;789:65;779:93;;868:1;865;858:12;779:93;724:154;:::o;883:315::-;951:6;959;1012:2;1000:9;991:7;987:23;983:32;980:52;;;1028:1;1025;1018:12;980:52;1067:9;1054:23;1086:31;1111:5;1086:31;:::i;:::-;1136:5;1188:2;1173:18;;;;1160:32;;-1:-1:-1;;;883:315:13:o;1577:456::-;1654:6;1662;1670;1723:2;1711:9;1702:7;1698:23;1694:32;1691:52;;;1739:1;1736;1729:12;1691:52;1778:9;1765:23;1797:31;1822:5;1797:31;:::i;:::-;1847:5;-1:-1:-1;1904:2:13;1889:18;;1876:32;1917:33;1876:32;1917:33;:::i;:::-;1577:456;;1969:7;;-1:-1:-1;;;2023:2:13;2008:18;;;;1995:32;;1577:456::o;2409:247::-;2468:6;2521:2;2509:9;2500:7;2496:23;2492:32;2489:52;;;2537:1;2534;2527:12;2489:52;2576:9;2563:23;2595:31;2620:5;2595:31;:::i;2661:180::-;2720:6;2773:2;2761:9;2752:7;2748:23;2744:32;2741:52;;;2789:1;2786;2779:12;2741:52;-1:-1:-1;2812:23:13;;2661:180;-1:-1:-1;2661:180:13:o;3379:160::-;3444:20;;3500:13;;3493:21;3483:32;;3473:60;;3529:1;3526;3519:12;3473:60;3379:160;;;:::o;3544:180::-;3600:6;3653:2;3641:9;3632:7;3628:23;3624:32;3621:52;;;3669:1;3666;3659:12;3621:52;3692:26;3708:9;3692:26;:::i;3729:315::-;3794:6;3802;3855:2;3843:9;3834:7;3830:23;3826:32;3823:52;;;3871:1;3868;3861:12;3823:52;3910:9;3897:23;3929:31;3954:5;3929:31;:::i;:::-;3979:5;-1:-1:-1;4003:35:13;4034:2;4019:18;;4003:35;:::i;:::-;3993:45;;3729:315;;;;;:::o;4309:829::-;4420:6;4428;4436;4444;4452;4460;4468;4521:3;4509:9;4500:7;4496:23;4492:33;4489:53;;;4538:1;4535;4528:12;4489:53;4577:9;4564:23;4596:31;4621:5;4596:31;:::i;:::-;4646:5;-1:-1:-1;4703:2:13;4688:18;;4675:32;4716:33;4675:32;4716:33;:::i;:::-;4768:7;-1:-1:-1;4822:2:13;4807:18;;4794:32;;-1:-1:-1;4873:2:13;4858:18;;4845:32;;-1:-1:-1;4929:3:13;4914:19;;4901:33;4978:4;4965:18;;4953:31;;4943:59;;4998:1;4995;4988:12;4943:59;4309:829;;;;-1:-1:-1;4309:829:13;;;;5021:7;5075:3;5060:19;;5047:33;;-1:-1:-1;5127:3:13;5112:19;;;5099:33;;4309:829;-1:-1:-1;;4309:829:13:o;5143:388::-;5211:6;5219;5272:2;5260:9;5251:7;5247:23;5243:32;5240:52;;;5288:1;5285;5278:12;5240:52;5327:9;5314:23;5346:31;5371:5;5346:31;:::i;:::-;5396:5;-1:-1:-1;5453:2:13;5438:18;;5425:32;5466:33;5425:32;5466:33;:::i;:::-;5518:7;5508:17;;;5143:388;;;;;:::o;5792:437::-;5871:1;5867:12;;;;5914;;;5935:61;;5989:4;5981:6;5977:17;5967:27;;5935:61;6042:2;6034:6;6031:14;6011:18;6008:38;6005:218;;;6079:77;6076:1;6069:88;6180:4;6177:1;6170:15;6208:4;6205:1;6198:15;6643:184;6695:77;6692:1;6685:88;6792:4;6789:1;6782:15;6816:4;6813:1;6806:15;6832:128;6872:3;6903:1;6899:6;6896:1;6893:13;6890:39;;;6909:18;;:::i;:::-;-1:-1:-1;6945:9:13;;6832:128::o;11679:125::-;11719:4;11747:1;11744;11741:8;11738:34;;;11752:18;;:::i;:::-;-1:-1:-1;11789:9:13;;11679:125::o;14588:184::-;14640:77;14637:1;14630:88;14737:4;14734:1;14727:15;14761:4;14758:1;14751:15;14777:184;14829:77;14826:1;14819:88;14926:4;14923:1;14916:15;14950:4;14947:1;14940:15;14966:1026;15228:4;15276:3;15265:9;15261:19;15307:6;15296:9;15289:25;15333:2;15371:6;15366:2;15355:9;15351:18;15344:34;15414:3;15409:2;15398:9;15394:18;15387:31;15438:6;15473;15467:13;15504:6;15496;15489:22;15542:3;15531:9;15527:19;15520:26;;15581:2;15573:6;15569:15;15555:29;;15602:1;15612:218;15626:6;15623:1;15620:13;15612:218;;;15691:13;;-1:-1:-1;;;;;15687:62:13;15675:75;;15805:15;;;;15770:12;;;;15648:1;15641:9;15612:218;;;-1:-1:-1;;;;;;;15886:55:13;;;;15881:2;15866:18;;15859:83;-1:-1:-1;;;15973:3:13;15958:19;15951:35;15847:3;14966:1026;-1:-1:-1;;;14966:1026:13:o;15997:228::-;16037:7;16163:1;16095:66;16091:74;16088:1;16085:81;16080:1;16073:9;16066:17;16062:105;16059:131;;;16170:18;;:::i;:::-;-1:-1:-1;16210:9:13;;15997:228::o;16230:274::-;16270:1;16296;16286:189;;16331:77;16328:1;16321:88;16432:4;16429:1;16422:15;16460:4;16457:1;16450:15;16286:189;-1:-1:-1;16489:9:13;;16230:274::o;16719:440::-;16981:23;16976:3;16969:36;16951:3;17034:6;17028:13;17050:62;17105:6;17100:2;17095:3;17091:12;17084:4;17076:6;17072:17;17050:62;:::i;:::-;17132:16;;;;17150:2;17128:25;;16719:440;-1:-1:-1;;16719:440:13:o;18130:196::-;18169:3;18197:5;18187:39;;18206:18;;:::i;:::-;-1:-1:-1;18253:66:13;18242:78;;18130:196::o
Swarm Source
ipfs://22dc32055b7077f0bf3ddb0b0e551ccc6f1819f3f14733ff5181e8db77d035e5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.