Overview
FTM Balance
FTM Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
AmazingERC20
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2025-01-22 */ /** *Submitted for verification at ftmscan.com on 2024-03-02 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // 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); } /** * @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); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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 defaut 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"); _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"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(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: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 to 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 {} } /** * @title ERC20Decimals * @dev Implementation of the ERC20Decimals. Extension of {ERC20} that adds decimals storage slot. */ abstract contract ERC20Decimals is ERC20 { uint8 private immutable _decimals; /** * @dev Sets the value of the `decimals`. This value is immutable, it can only be * set once during construction. */ constructor(uint8 decimals_) { _decimals = decimals_; } function decimals() public view virtual override returns (uint8) { return _decimals; } } /** * @title ERC20Mintable * @dev Implementation of the ERC20Mintable. Extension of {ERC20} that adds a minting behaviour. */ abstract contract ERC20Mintable is ERC20 { // indicates if minting is finished bool private _mintingFinished = false; /** * @dev Emitted during finish minting */ event MintFinished(); /** * @dev Tokens can be minted only before minting finished. */ modifier canMint() { require(!_mintingFinished, "ERC20Mintable: Minting is finished"); _; } /** * @return if minting is finished or not. */ function mintingFinished() external view returns (bool) { return _mintingFinished; } /** * @dev Function to mint tokens. * * WARNING: it allows everyone to mint new tokens. Access controls MUST be defined in derived contracts. * * @param account The address that will receive the minted tokens * @param amount The amount of tokens to mint */ function mint(address account, uint256 amount) external canMint { _mint(account, amount); } /** * @dev Function to stop minting new tokens. * * WARNING: it allows everyone to finish minting. Access controls MUST be defined in derived contracts. */ function finishMinting() external canMint { _finishMinting(); } /** * @dev Function to stop minting new tokens. */ function _finishMinting() internal virtual { _mintingFinished = true; emit MintFinished(); } } interface IPayable { function pay(string memory serviceName) external payable; } /** * @title ServicePayer * @dev Implementation of the ServicePayer */ abstract contract ServicePayer { constructor(address payable receiver, string memory serviceName) payable { IPayable(receiver).pay{value: msg.value}(serviceName); } } /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @title IERC1363 Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for a Payable Token contract as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363 is IERC20, IERC165 { /** * @notice Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferAndCall(address recipient, uint256 amount) external returns (bool); /** * @notice Transfer tokens from `msg.sender` to another address and then call `onTransferReceived` on receiver * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `recipient` * @return true unless throwing */ function transferAndCall( address recipient, uint256 amount, bytes calldata data ) external returns (bool); /** * @notice Transfer tokens from one address to another and then call `onTransferReceived` on receiver * @param sender address The address which you want to send tokens from * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferFromAndCall( address sender, address recipient, uint256 amount ) external returns (bool); /** * @notice Transfer tokens from one address to another and then call `onTransferReceived` on receiver * @param sender address The address which you want to send tokens from * @param recipient address The address which you want to transfer to * @param amount uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `recipient` * @return true unless throwing */ function transferFromAndCall( address sender, address recipient, uint256 amount, bytes calldata data ) external returns (bool); /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender. * 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 * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent */ function approveAndCall(address spender, uint256 amount) external returns (bool); /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender. * 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 * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format, sent in call to `spender` */ function approveAndCall( address spender, uint256 amount, bytes calldata data ) external returns (bool); } /** * @title IERC1363Receiver Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for any contract that wants to support transferAndCall or transferFromAndCall * from ERC1363 token contracts as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363Receiver { /** * @notice Handle the receipt of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the * transfer. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function * @param sender address The address which are token transferred from * @param amount uint256 The amount of tokens transferred * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` unless throwing */ function onTransferReceived( address operator, address sender, uint256 amount, bytes calldata data ) external returns (bytes4); } /** * @title IERC1363Spender Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for any contract that wants to support approveAndCall * from ERC1363 token contracts as defined in * https://eips.ethereum.org/EIPS/eip-1363 */ interface IERC1363Spender { /** * @notice Handle the approval of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after an `approve`. This function MAY throw to revert and reject the * approval. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param sender address The address which called `approveAndCall` function * @param amount uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` unless throwing */ function onApprovalReceived( address sender, uint256 amount, bytes calldata data ) external returns (bytes4); } /** * @title ERC1363 * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Implementation of an ERC1363 interface */ abstract contract ERC1363 is ERC20, IERC1363, ERC165 { using Address for address; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1363).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Transfer tokens to a specified address and then execute a callback on recipient. * @param recipient The address to transfer to. * @param amount The amount to be transferred. * @return A boolean that indicates if the operation was successful. */ function transferAndCall(address recipient, uint256 amount) public virtual override returns (bool) { return transferAndCall(recipient, amount, ""); } /** * @dev Transfer tokens to a specified address and then execute a callback on recipient. * @param recipient The address to transfer to * @param amount The amount to be transferred * @param data Additional data with no specified format * @return A boolean that indicates if the operation was successful. */ function transferAndCall( address recipient, uint256 amount, bytes memory data ) public virtual override returns (bool) { transfer(recipient, amount); require(_checkAndCallTransfer(_msgSender(), recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts"); return true; } /** * @dev Transfer tokens from one address to another and then execute a callback on recipient. * @param sender The address which you want to send tokens from * @param recipient The address which you want to transfer to * @param amount The amount of tokens to be transferred * @return A boolean that indicates if the operation was successful. */ function transferFromAndCall( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { return transferFromAndCall(sender, recipient, amount, ""); } /** * @dev Transfer tokens from one address to another and then execute a callback on recipient. * @param sender The address which you want to send tokens from * @param recipient The address which you want to transfer to * @param amount The amount of tokens to be transferred * @param data Additional data with no specified format * @return A boolean that indicates if the operation was successful. */ function transferFromAndCall( address sender, address recipient, uint256 amount, bytes memory data ) public virtual override returns (bool) { transferFrom(sender, recipient, amount); require(_checkAndCallTransfer(sender, recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts"); return true; } /** * @dev Approve spender to transfer tokens and then execute a callback on recipient. * @param spender The address allowed to transfer to * @param amount The amount allowed to be transferred * @return A boolean that indicates if the operation was successful. */ function approveAndCall(address spender, uint256 amount) public virtual override returns (bool) { return approveAndCall(spender, amount, ""); } /** * @dev Approve spender to transfer tokens and then execute a callback on recipient. * @param spender The address allowed to transfer to. * @param amount The amount allowed to be transferred. * @param data Additional data with no specified format. * @return A boolean that indicates if the operation was successful. */ function approveAndCall( address spender, uint256 amount, bytes memory data ) public virtual override returns (bool) { approve(spender, amount); require(_checkAndCallApprove(spender, amount, data), "ERC1363: _checkAndCallApprove reverts"); return true; } /** * @dev Internal function to invoke `onTransferReceived` on a target address * The call is not executed if the target address is not a contract * @param sender address Representing the previous owner of the given token value * @param recipient address Target address that will receive the tokens * @param amount uint256 The amount mount of tokens to be transferred * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallTransfer( address sender, address recipient, uint256 amount, bytes memory data ) internal virtual returns (bool) { if (!recipient.isContract()) { return false; } bytes4 retval = IERC1363Receiver(recipient).onTransferReceived(_msgSender(), sender, amount, data); return (retval == IERC1363Receiver(recipient).onTransferReceived.selector); } /** * @dev Internal function to invoke `onApprovalReceived` on a target address * The call is not executed if the target address is not a contract * @param spender address The address which will spend the funds * @param amount uint256 The amount of tokens to be spent * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallApprove( address spender, uint256 amount, bytes memory data ) internal virtual returns (bool) { if (!spender.isContract()) { return false; } bytes4 retval = IERC1363Spender(spender).onApprovalReceived(_msgSender(), amount, data); return (retval == IERC1363Spender(spender).onApprovalReceived.selector); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @title TokenRecover * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Allows owner to recover any ERC20 sent into the contract */ contract TokenRecover is Ownable { /** * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20(address tokenAddress, uint256 tokenAmount) public virtual onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } } /** * @title AmazingERC20 * @author Veshi * @dev Implementation of the AmazingERC20 */ contract AmazingERC20 is ERC20Decimals, ERC20Mintable, ERC20Burnable, ERC1363, TokenRecover, ServicePayer { constructor( string memory name_, string memory symbol_, uint8 decimals_, uint256 initialBalance_, address payable feeReceiver_ ) payable ERC20(name_, symbol_) ERC20Decimals(decimals_) ServicePayer(feeReceiver_, "AmazingERC20") { _mint(_msgSender(), initialBalance_); } function decimals() public view virtual override(ERC20, ERC20Decimals) returns (uint8) { return super.decimals(); } /** * @dev Function to mint tokens. * * NOTE: restricting access to addresses with MINTER role. See {ERC20Mintable-mint}. * * @param account The address that will receive the minted tokens * @param amount The amount of tokens to mint */ function _mint(address account, uint256 amount) internal override onlyOwner { super._mint(account, amount); } /** * @dev Function to stop minting new tokens. * * NOTE: restricting access to owner only. See {ERC20Mintable-finishMinting}. */ function _finishMinting() internal override onlyOwner { super._finishMinting(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"initialBalance_","type":"uint256"},{"internalType":"address payable","name":"feeReceiver_","type":"address"}],"stateMutability":"payable","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":[],"name":"MintFinished","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"finishMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","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":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600560006101000a81548160ff02191690831515021790555060405162003a1c38038062003a1c8339818101604052810190620000449190620005c0565b806040518060400160405280600c81526020017f416d617a696e674552433230000000000000000000000000000000000000000081525084878781600390805190602001906200009692919062000459565b508060049080519060200190620000af92919062000459565b5050508060ff1660808160ff1660f81b81525050506000620000d66200021360201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508173ffffffffffffffffffffffffffffffffffffffff16632b66d72e34836040518363ffffffff1660e01b8152600401620001b1919062000714565b6000604051808303818588803b158015620001cb57600080fd5b505af1158015620001e0573d6000803e3d6000fd5b5050505050505062000208620001fb6200021360201b60201c565b836200021b60201b60201c565b505050505062000a9c565b600033905090565b6200022b6200021360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000251620002c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a19062000738565b60405180910390fd5b620002c18282620002ef60201b620012331760201c565b5050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000359906200075a565b60405180910390fd5b62000376600083836200045460201b60201c565b80600260008282546200038a919062000814565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003e1919062000814565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200044891906200077c565b60405180910390a35050565b505050565b8280546200046790620008f2565b90600052602060002090601f0160209004810192826200048b5760008555620004d7565b82601f10620004a657805160ff1916838001178555620004d7565b82800160010185558215620004d7579182015b82811115620004d6578251825591602001919060010190620004b9565b5b509050620004e69190620004ea565b5090565b5b8082111562000505576000816000905550600101620004eb565b5090565b6000620005206200051a84620007c2565b62000799565b9050828152602081018484840111156200053957600080fd5b62000546848285620008bc565b509392505050565b6000815190506200055f8162000a4e565b92915050565b600082601f8301126200057757600080fd5b81516200058984826020860162000509565b91505092915050565b600081519050620005a38162000a68565b92915050565b600081519050620005ba8162000a82565b92915050565b600080600080600060a08688031215620005d957600080fd5b600086015167ffffffffffffffff811115620005f457600080fd5b620006028882890162000565565b955050602086015167ffffffffffffffff8111156200062057600080fd5b6200062e8882890162000565565b94505060406200064188828901620005a9565b9350506060620006548882890162000592565b925050608062000667888289016200054e565b9150509295509295909350565b60006200068182620007f8565b6200068d818562000803565b93506200069f818560208601620008bc565b620006aa81620009eb565b840191505092915050565b6000620006c460208362000803565b9150620006d182620009fc565b602082019050919050565b6000620006eb601f8362000803565b9150620006f88262000a25565b602082019050919050565b6200070e81620008a5565b82525050565b6000602082019050818103600083015262000730818462000674565b905092915050565b600060208201905081810360008301526200075381620006b5565b9050919050565b600060208201905081810360008301526200077581620006dc565b9050919050565b600060208201905062000793600083018462000703565b92915050565b6000620007a5620007b8565b9050620007b3828262000928565b919050565b6000604051905090565b600067ffffffffffffffff821115620007e057620007df620009bc565b5b620007eb82620009eb565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006200082182620008a5565b91506200082e83620008a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200086657620008656200095e565b5b828201905092915050565b60006200087e8262000885565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620008dc578082015181840152602081019050620008bf565b83811115620008ec576000848401525b50505050565b600060028204905060018216806200090b57607f821691505b602082108114156200092257620009216200098d565b5b50919050565b6200093382620009eb565b810181811067ffffffffffffffff82111715620009555762000954620009bc565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000a598162000871565b811462000a6557600080fd5b50565b62000a7381620008a5565b811462000a7f57600080fd5b50565b62000a8d81620008af565b811462000a9957600080fd5b50565b60805160f81c612f6162000abb60003960006118470152612f616000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a457c2d711610097578063cae9ca5111610071578063cae9ca51146104f6578063d8fbe99414610526578063dd62ed3e14610556578063f2fde38b14610586576101a9565b8063a457c2d714610466578063a9059cbb14610496578063c1d34b89146104c6576101a9565b80637d64bcb4116100d35780637d64bcb4146104045780638980f11f1461040e5780638da5cb5b1461042a57806395d89b4114610448576101a9565b806370a08231146103ae578063715018a6146103de57806379cc6790146103e8576101a9565b806323b872dd11610166578063395093511161014057806339509351146103165780634000aea01461034657806340c10f191461037657806342966c6814610392576101a9565b806323b872dd14610298578063313ce567146102c85780633177029f146102e6576101a9565b806301ffc9a7146101ae57806305d2035b146101de57806306fdde03146101fc578063095ea7b31461021a5780631296ee621461024a57806318160ddd1461027a575b600080fd5b6101c860048036038101906101c391906120b5565b6105a2565b6040516101d591906124dc565b60405180910390f35b6101e661061c565b6040516101f391906124dc565b60405180910390f35b610204610633565b60405161021191906124f7565b60405180910390f35b610234600480360381019061022f9190611fe9565b6106c5565b60405161024191906124dc565b60405180910390f35b610264600480360381019061025f9190611fe9565b6106e3565b60405161027191906124dc565b60405180910390f35b610282610707565b60405161028f9190612719565b60405180910390f35b6102b260048036038101906102ad9190611f1f565b610711565b6040516102bf91906124dc565b60405180910390f35b6102d0610812565b6040516102dd9190612734565b60405180910390f35b61030060048036038101906102fb9190611fe9565b610821565b60405161030d91906124dc565b60405180910390f35b610330600480360381019061032b9190611fe9565b610845565b60405161033d91906124dc565b60405180910390f35b610360600480360381019061035b9190612025565b6108f1565b60405161036d91906124dc565b60405180910390f35b610390600480360381019061038b9190611fe9565b61095b565b005b6103ac60048036038101906103a79190612107565b6109b9565b005b6103c860048036038101906103c39190611eba565b6109cd565b6040516103d59190612719565b60405180910390f35b6103e6610a15565b005b61040260048036038101906103fd9190611fe9565b610b52565b005b61040c610bd6565b005b61042860048036038101906104239190611fe9565b610c30565b005b610432610d45565b60405161043f919061240e565b60405180910390f35b610450610d6f565b60405161045d91906124f7565b60405180910390f35b610480600480360381019061047b9190611fe9565b610e01565b60405161048d91906124dc565b60405180910390f35b6104b060048036038101906104ab9190611fe9565b610ef5565b6040516104bd91906124dc565b60405180910390f35b6104e060048036038101906104db9190611f6e565b610f13565b6040516104ed91906124dc565b60405180910390f35b610510600480360381019061050b9190612025565b610f78565b60405161051d91906124dc565b60405180910390f35b610540600480360381019061053b9190611f1f565b610fda565b60405161054d91906124dc565b60405180910390f35b610570600480360381019061056b9190611ee3565b611000565b60405161057d9190612719565b60405180910390f35b6105a0600480360381019061059b9190611eba565b611087565b005b60007fb0202a11000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610615575061061482611387565b5b9050919050565b6000600560009054906101000a900460ff16905090565b6060600380546106429061292a565b80601f016020809104026020016040519081016040528092919081815260200182805461066e9061292a565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050905090565b60006106d96106d26113f1565b84846113f9565b6001905092915050565b60006106ff8383604051806020016040528060008152506108f1565b905092915050565b6000600254905090565b600061071e8484846115c4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107696113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612619565b60405180910390fd5b610806856107f56113f1565b85846108019190612833565b6113f9565b60019150509392505050565b600061081c611843565b905090565b600061083d838360405180602001604052806000815250610f78565b905092915050565b60006108e76108526113f1565b8484600160006108606113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108e291906127dd565b6113f9565b6001905092915050565b60006108fd8484610ef5565b506109116109096113f1565b85858561186b565b610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906125f9565b60405180910390fd5b600190509392505050565b600560009054906101000a900460ff16156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a2906125d9565b60405180910390fd5b6109b58282611989565b5050565b6109ca6109c46113f1565b82611a13565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a1d6113f1565b73ffffffffffffffffffffffffffffffffffffffff16610a3b610d45565b73ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610b6583610b606113f1565b611000565b905081811015610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612659565b60405180910390fd5b610bc783610bb66113f1565b8484610bc29190612833565b6113f9565b610bd18383611a13565b505050565b600560009054906101000a900460ff1615610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906125d9565b60405180910390fd5b610c2e611be7565b565b610c386113f1565b73ffffffffffffffffffffffffffffffffffffffff16610c56610d45565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390612639565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610cd0610d45565b836040518363ffffffff1660e01b8152600401610cee929190612475565b602060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d40919061208c565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d7e9061292a565b80601f0160208091040260200160405190810160405280929190818152602001828054610daa9061292a565b8015610df75780601f10610dcc57610100808354040283529160200191610df7565b820191906000526020600020905b815481529060010190602001808311610dda57829003601f168201915b5050505050905090565b60008060016000610e106113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906126d9565b60405180910390fd5b610eea610ed86113f1565b858584610ee59190612833565b6113f9565b600191505092915050565b6000610f09610f026113f1565b84846115c4565b6001905092915050565b6000610f20858585610711565b50610f2d8585858561186b565b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f63906125f9565b60405180910390fd5b60019050949350505050565b6000610f8484846106c5565b50610f90848484611c6d565b610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612599565b60405180910390fd5b600190509392505050565b6000610ff784848460405180602001604052806000815250610f13565b90509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61108f6113f1565b73ffffffffffffffffffffffffffffffffffffffff166110ad610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90612639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90612559565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a906126f9565b60405180910390fd5b6112af60008383611d88565b80600260008282546112c191906127dd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131691906127dd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161137b9190612719565b60405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611460906126b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090612579565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115b79190612719565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90612519565b60405180910390fd5b6116af838383611d88565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906125b9565b60405180910390fd5b81816117419190612833565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d191906127dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118359190612719565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600061188c8473ffffffffffffffffffffffffffffffffffffffff16611d8d565b6118995760009050611981565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c6118bf6113f1565b8887876040518563ffffffff1660e01b81526004016118e19493929190612429565b602060405180830381600087803b1580156118fb57600080fd5b505af115801561190f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193391906120de565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6119916113f1565b73ffffffffffffffffffffffffffffffffffffffff166119af610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90612639565b60405180910390fd5b611a0f8282611233565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90612679565b60405180910390fd5b611a8f82600083611d88565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90612539565b60405180910390fd5b8181611b219190612833565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611b759190612833565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bda9190612719565b60405180910390a3505050565b611bef6113f1565b73ffffffffffffffffffffffffffffffffffffffff16611c0d610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90612639565b60405180910390fd5b611c6b611da0565b565b6000611c8e8473ffffffffffffffffffffffffffffffffffffffff16611d8d565b611c9b5760009050611d81565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d0611cc16113f1565b86866040518463ffffffff1660e01b8152600401611ce19392919061249e565b602060405180830381600087803b158015611cfb57600080fd5b505af1158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3391906120de565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b505050565b600080823b905060008111915050919050565b6001600560006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b6000611dfc611df784612774565b61274f565b905082815260208101848484011115611e1457600080fd5b611e1f8482856128e8565b509392505050565b600081359050611e3681612ecf565b92915050565b600081519050611e4b81612ee6565b92915050565b600081359050611e6081612efd565b92915050565b600081519050611e7581612efd565b92915050565b600082601f830112611e8c57600080fd5b8135611e9c848260208601611de9565b91505092915050565b600081359050611eb481612f14565b92915050565b600060208284031215611ecc57600080fd5b6000611eda84828501611e27565b91505092915050565b60008060408385031215611ef657600080fd5b6000611f0485828601611e27565b9250506020611f1585828601611e27565b9150509250929050565b600080600060608486031215611f3457600080fd5b6000611f4286828701611e27565b9350506020611f5386828701611e27565b9250506040611f6486828701611ea5565b9150509250925092565b60008060008060808587031215611f8457600080fd5b6000611f9287828801611e27565b9450506020611fa387828801611e27565b9350506040611fb487828801611ea5565b925050606085013567ffffffffffffffff811115611fd157600080fd5b611fdd87828801611e7b565b91505092959194509250565b60008060408385031215611ffc57600080fd5b600061200a85828601611e27565b925050602061201b85828601611ea5565b9150509250929050565b60008060006060848603121561203a57600080fd5b600061204886828701611e27565b935050602061205986828701611ea5565b925050604084013567ffffffffffffffff81111561207657600080fd5b61208286828701611e7b565b9150509250925092565b60006020828403121561209e57600080fd5b60006120ac84828501611e3c565b91505092915050565b6000602082840312156120c757600080fd5b60006120d584828501611e51565b91505092915050565b6000602082840312156120f057600080fd5b60006120fe84828501611e66565b91505092915050565b60006020828403121561211957600080fd5b600061212784828501611ea5565b91505092915050565b61213981612867565b82525050565b61214881612879565b82525050565b6000612159826127a5565b61216381856127bb565b93506121738185602086016128f7565b61217c81612a1a565b840191505092915050565b6000612192826127b0565b61219c81856127cc565b93506121ac8185602086016128f7565b6121b581612a1a565b840191505092915050565b60006121cd6023836127cc565b91506121d882612a2b565b604082019050919050565b60006121f06022836127cc565b91506121fb82612a7a565b604082019050919050565b60006122136026836127cc565b915061221e82612ac9565b604082019050919050565b60006122366022836127cc565b915061224182612b18565b604082019050919050565b60006122596025836127cc565b915061226482612b67565b604082019050919050565b600061227c6026836127cc565b915061228782612bb6565b604082019050919050565b600061229f6022836127cc565b91506122aa82612c05565b604082019050919050565b60006122c26026836127cc565b91506122cd82612c54565b604082019050919050565b60006122e56028836127cc565b91506122f082612ca3565b604082019050919050565b60006123086020836127cc565b915061231382612cf2565b602082019050919050565b600061232b6024836127cc565b915061233682612d1b565b604082019050919050565b600061234e6021836127cc565b915061235982612d6a565b604082019050919050565b60006123716025836127cc565b915061237c82612db9565b604082019050919050565b60006123946024836127cc565b915061239f82612e08565b604082019050919050565b60006123b76025836127cc565b91506123c282612e57565b604082019050919050565b60006123da601f836127cc565b91506123e582612ea6565b602082019050919050565b6123f9816128d1565b82525050565b612408816128db565b82525050565b60006020820190506124236000830184612130565b92915050565b600060808201905061243e6000830187612130565b61244b6020830186612130565b61245860408301856123f0565b818103606083015261246a818461214e565b905095945050505050565b600060408201905061248a6000830185612130565b61249760208301846123f0565b9392505050565b60006060820190506124b36000830186612130565b6124c060208301856123f0565b81810360408301526124d2818461214e565b9050949350505050565b60006020820190506124f1600083018461213f565b92915050565b600060208201905081810360008301526125118184612187565b905092915050565b60006020820190508181036000830152612532816121c0565b9050919050565b60006020820190508181036000830152612552816121e3565b9050919050565b6000602082019050818103600083015261257281612206565b9050919050565b6000602082019050818103600083015261259281612229565b9050919050565b600060208201905081810360008301526125b28161224c565b9050919050565b600060208201905081810360008301526125d28161226f565b9050919050565b600060208201905081810360008301526125f281612292565b9050919050565b60006020820190508181036000830152612612816122b5565b9050919050565b60006020820190508181036000830152612632816122d8565b9050919050565b60006020820190508181036000830152612652816122fb565b9050919050565b600060208201905081810360008301526126728161231e565b9050919050565b6000602082019050818103600083015261269281612341565b9050919050565b600060208201905081810360008301526126b281612364565b9050919050565b600060208201905081810360008301526126d281612387565b9050919050565b600060208201905081810360008301526126f2816123aa565b9050919050565b60006020820190508181036000830152612712816123cd565b9050919050565b600060208201905061272e60008301846123f0565b92915050565b600060208201905061274960008301846123ff565b92915050565b600061275961276a565b9050612765828261295c565b919050565b6000604051905090565b600067ffffffffffffffff82111561278f5761278e6129eb565b5b61279882612a1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006127e8826128d1565b91506127f3836128d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128285761282761298d565b5b828201905092915050565b600061283e826128d1565b9150612849836128d1565b92508282101561285c5761285b61298d565b5b828203905092915050565b6000612872826128b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156129155780820151818401526020810190506128fa565b83811115612924576000848401525b50505050565b6000600282049050600182168061294257607f821691505b60208210811415612956576129556129bc565b5b50919050565b61296582612a1a565b810181811067ffffffffffffffff82111715612984576129836129eb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332304d696e7461626c653a204d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612ed881612867565b8114612ee357600080fd5b50565b612eef81612879565b8114612efa57600080fd5b50565b612f0681612885565b8114612f1157600080fd5b50565b612f1d816128d1565b8114612f2857600080fd5b5056fea2646970667358221220b4a9b3d45745558c74f4605c47ceea35be03b3cb22bd07f17438e6228bf7c59f64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000102bd291db7e8d00000000000000000000000000930e15f678b9ded1bc1a2cd98ba5861e34de3b0f000000000000000000000000000000000000000000000000000000000000000d546f6b656e20426974636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045742544300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a457c2d711610097578063cae9ca5111610071578063cae9ca51146104f6578063d8fbe99414610526578063dd62ed3e14610556578063f2fde38b14610586576101a9565b8063a457c2d714610466578063a9059cbb14610496578063c1d34b89146104c6576101a9565b80637d64bcb4116100d35780637d64bcb4146104045780638980f11f1461040e5780638da5cb5b1461042a57806395d89b4114610448576101a9565b806370a08231146103ae578063715018a6146103de57806379cc6790146103e8576101a9565b806323b872dd11610166578063395093511161014057806339509351146103165780634000aea01461034657806340c10f191461037657806342966c6814610392576101a9565b806323b872dd14610298578063313ce567146102c85780633177029f146102e6576101a9565b806301ffc9a7146101ae57806305d2035b146101de57806306fdde03146101fc578063095ea7b31461021a5780631296ee621461024a57806318160ddd1461027a575b600080fd5b6101c860048036038101906101c391906120b5565b6105a2565b6040516101d591906124dc565b60405180910390f35b6101e661061c565b6040516101f391906124dc565b60405180910390f35b610204610633565b60405161021191906124f7565b60405180910390f35b610234600480360381019061022f9190611fe9565b6106c5565b60405161024191906124dc565b60405180910390f35b610264600480360381019061025f9190611fe9565b6106e3565b60405161027191906124dc565b60405180910390f35b610282610707565b60405161028f9190612719565b60405180910390f35b6102b260048036038101906102ad9190611f1f565b610711565b6040516102bf91906124dc565b60405180910390f35b6102d0610812565b6040516102dd9190612734565b60405180910390f35b61030060048036038101906102fb9190611fe9565b610821565b60405161030d91906124dc565b60405180910390f35b610330600480360381019061032b9190611fe9565b610845565b60405161033d91906124dc565b60405180910390f35b610360600480360381019061035b9190612025565b6108f1565b60405161036d91906124dc565b60405180910390f35b610390600480360381019061038b9190611fe9565b61095b565b005b6103ac60048036038101906103a79190612107565b6109b9565b005b6103c860048036038101906103c39190611eba565b6109cd565b6040516103d59190612719565b60405180910390f35b6103e6610a15565b005b61040260048036038101906103fd9190611fe9565b610b52565b005b61040c610bd6565b005b61042860048036038101906104239190611fe9565b610c30565b005b610432610d45565b60405161043f919061240e565b60405180910390f35b610450610d6f565b60405161045d91906124f7565b60405180910390f35b610480600480360381019061047b9190611fe9565b610e01565b60405161048d91906124dc565b60405180910390f35b6104b060048036038101906104ab9190611fe9565b610ef5565b6040516104bd91906124dc565b60405180910390f35b6104e060048036038101906104db9190611f6e565b610f13565b6040516104ed91906124dc565b60405180910390f35b610510600480360381019061050b9190612025565b610f78565b60405161051d91906124dc565b60405180910390f35b610540600480360381019061053b9190611f1f565b610fda565b60405161054d91906124dc565b60405180910390f35b610570600480360381019061056b9190611ee3565b611000565b60405161057d9190612719565b60405180910390f35b6105a0600480360381019061059b9190611eba565b611087565b005b60007fb0202a11000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610615575061061482611387565b5b9050919050565b6000600560009054906101000a900460ff16905090565b6060600380546106429061292a565b80601f016020809104026020016040519081016040528092919081815260200182805461066e9061292a565b80156106bb5780601f10610690576101008083540402835291602001916106bb565b820191906000526020600020905b81548152906001019060200180831161069e57829003601f168201915b5050505050905090565b60006106d96106d26113f1565b84846113f9565b6001905092915050565b60006106ff8383604051806020016040528060008152506108f1565b905092915050565b6000600254905090565b600061071e8484846115c4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107696113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612619565b60405180910390fd5b610806856107f56113f1565b85846108019190612833565b6113f9565b60019150509392505050565b600061081c611843565b905090565b600061083d838360405180602001604052806000815250610f78565b905092915050565b60006108e76108526113f1565b8484600160006108606113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108e291906127dd565b6113f9565b6001905092915050565b60006108fd8484610ef5565b506109116109096113f1565b85858561186b565b610950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610947906125f9565b60405180910390fd5b600190509392505050565b600560009054906101000a900460ff16156109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a2906125d9565b60405180910390fd5b6109b58282611989565b5050565b6109ca6109c46113f1565b82611a13565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a1d6113f1565b73ffffffffffffffffffffffffffffffffffffffff16610a3b610d45565b73ffffffffffffffffffffffffffffffffffffffff1614610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890612639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610b6583610b606113f1565b611000565b905081811015610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612659565b60405180910390fd5b610bc783610bb66113f1565b8484610bc29190612833565b6113f9565b610bd18383611a13565b505050565b600560009054906101000a900460ff1615610c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1d906125d9565b60405180910390fd5b610c2e611be7565b565b610c386113f1565b73ffffffffffffffffffffffffffffffffffffffff16610c56610d45565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390612639565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610cd0610d45565b836040518363ffffffff1660e01b8152600401610cee929190612475565b602060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d40919061208c565b505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610d7e9061292a565b80601f0160208091040260200160405190810160405280929190818152602001828054610daa9061292a565b8015610df75780601f10610dcc57610100808354040283529160200191610df7565b820191906000526020600020905b815481529060010190602001808311610dda57829003601f168201915b5050505050905090565b60008060016000610e106113f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec4906126d9565b60405180910390fd5b610eea610ed86113f1565b858584610ee59190612833565b6113f9565b600191505092915050565b6000610f09610f026113f1565b84846115c4565b6001905092915050565b6000610f20858585610711565b50610f2d8585858561186b565b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f63906125f9565b60405180910390fd5b60019050949350505050565b6000610f8484846106c5565b50610f90848484611c6d565b610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690612599565b60405180910390fd5b600190509392505050565b6000610ff784848460405180602001604052806000815250610f13565b90509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61108f6113f1565b73ffffffffffffffffffffffffffffffffffffffff166110ad610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90612639565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90612559565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a906126f9565b60405180910390fd5b6112af60008383611d88565b80600260008282546112c191906127dd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131691906127dd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161137b9190612719565b60405180910390a35050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611460906126b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090612579565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115b79190612719565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162b90612699565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90612519565b60405180910390fd5b6116af838383611d88565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906125b9565b60405180910390fd5b81816117419190612833565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d191906127dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118359190612719565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000008905090565b600061188c8473ffffffffffffffffffffffffffffffffffffffff16611d8d565b6118995760009050611981565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c6118bf6113f1565b8887876040518563ffffffff1660e01b81526004016118e19493929190612429565b602060405180830381600087803b1580156118fb57600080fd5b505af115801561190f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193391906120de565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b6119916113f1565b73ffffffffffffffffffffffffffffffffffffffff166119af610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90612639565b60405180910390fd5b611a0f8282611233565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90612679565b60405180910390fd5b611a8f82600083611d88565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c90612539565b60405180910390fd5b8181611b219190612833565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611b759190612833565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bda9190612719565b60405180910390a3505050565b611bef6113f1565b73ffffffffffffffffffffffffffffffffffffffff16611c0d610d45565b73ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90612639565b60405180910390fd5b611c6b611da0565b565b6000611c8e8473ffffffffffffffffffffffffffffffffffffffff16611d8d565b611c9b5760009050611d81565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d0611cc16113f1565b86866040518463ffffffff1660e01b8152600401611ce19392919061249e565b602060405180830381600087803b158015611cfb57600080fd5b505af1158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3391906120de565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b505050565b600080823b905060008111915050919050565b6001600560006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b6000611dfc611df784612774565b61274f565b905082815260208101848484011115611e1457600080fd5b611e1f8482856128e8565b509392505050565b600081359050611e3681612ecf565b92915050565b600081519050611e4b81612ee6565b92915050565b600081359050611e6081612efd565b92915050565b600081519050611e7581612efd565b92915050565b600082601f830112611e8c57600080fd5b8135611e9c848260208601611de9565b91505092915050565b600081359050611eb481612f14565b92915050565b600060208284031215611ecc57600080fd5b6000611eda84828501611e27565b91505092915050565b60008060408385031215611ef657600080fd5b6000611f0485828601611e27565b9250506020611f1585828601611e27565b9150509250929050565b600080600060608486031215611f3457600080fd5b6000611f4286828701611e27565b9350506020611f5386828701611e27565b9250506040611f6486828701611ea5565b9150509250925092565b60008060008060808587031215611f8457600080fd5b6000611f9287828801611e27565b9450506020611fa387828801611e27565b9350506040611fb487828801611ea5565b925050606085013567ffffffffffffffff811115611fd157600080fd5b611fdd87828801611e7b565b91505092959194509250565b60008060408385031215611ffc57600080fd5b600061200a85828601611e27565b925050602061201b85828601611ea5565b9150509250929050565b60008060006060848603121561203a57600080fd5b600061204886828701611e27565b935050602061205986828701611ea5565b925050604084013567ffffffffffffffff81111561207657600080fd5b61208286828701611e7b565b9150509250925092565b60006020828403121561209e57600080fd5b60006120ac84828501611e3c565b91505092915050565b6000602082840312156120c757600080fd5b60006120d584828501611e51565b91505092915050565b6000602082840312156120f057600080fd5b60006120fe84828501611e66565b91505092915050565b60006020828403121561211957600080fd5b600061212784828501611ea5565b91505092915050565b61213981612867565b82525050565b61214881612879565b82525050565b6000612159826127a5565b61216381856127bb565b93506121738185602086016128f7565b61217c81612a1a565b840191505092915050565b6000612192826127b0565b61219c81856127cc565b93506121ac8185602086016128f7565b6121b581612a1a565b840191505092915050565b60006121cd6023836127cc565b91506121d882612a2b565b604082019050919050565b60006121f06022836127cc565b91506121fb82612a7a565b604082019050919050565b60006122136026836127cc565b915061221e82612ac9565b604082019050919050565b60006122366022836127cc565b915061224182612b18565b604082019050919050565b60006122596025836127cc565b915061226482612b67565b604082019050919050565b600061227c6026836127cc565b915061228782612bb6565b604082019050919050565b600061229f6022836127cc565b91506122aa82612c05565b604082019050919050565b60006122c26026836127cc565b91506122cd82612c54565b604082019050919050565b60006122e56028836127cc565b91506122f082612ca3565b604082019050919050565b60006123086020836127cc565b915061231382612cf2565b602082019050919050565b600061232b6024836127cc565b915061233682612d1b565b604082019050919050565b600061234e6021836127cc565b915061235982612d6a565b604082019050919050565b60006123716025836127cc565b915061237c82612db9565b604082019050919050565b60006123946024836127cc565b915061239f82612e08565b604082019050919050565b60006123b76025836127cc565b91506123c282612e57565b604082019050919050565b60006123da601f836127cc565b91506123e582612ea6565b602082019050919050565b6123f9816128d1565b82525050565b612408816128db565b82525050565b60006020820190506124236000830184612130565b92915050565b600060808201905061243e6000830187612130565b61244b6020830186612130565b61245860408301856123f0565b818103606083015261246a818461214e565b905095945050505050565b600060408201905061248a6000830185612130565b61249760208301846123f0565b9392505050565b60006060820190506124b36000830186612130565b6124c060208301856123f0565b81810360408301526124d2818461214e565b9050949350505050565b60006020820190506124f1600083018461213f565b92915050565b600060208201905081810360008301526125118184612187565b905092915050565b60006020820190508181036000830152612532816121c0565b9050919050565b60006020820190508181036000830152612552816121e3565b9050919050565b6000602082019050818103600083015261257281612206565b9050919050565b6000602082019050818103600083015261259281612229565b9050919050565b600060208201905081810360008301526125b28161224c565b9050919050565b600060208201905081810360008301526125d28161226f565b9050919050565b600060208201905081810360008301526125f281612292565b9050919050565b60006020820190508181036000830152612612816122b5565b9050919050565b60006020820190508181036000830152612632816122d8565b9050919050565b60006020820190508181036000830152612652816122fb565b9050919050565b600060208201905081810360008301526126728161231e565b9050919050565b6000602082019050818103600083015261269281612341565b9050919050565b600060208201905081810360008301526126b281612364565b9050919050565b600060208201905081810360008301526126d281612387565b9050919050565b600060208201905081810360008301526126f2816123aa565b9050919050565b60006020820190508181036000830152612712816123cd565b9050919050565b600060208201905061272e60008301846123f0565b92915050565b600060208201905061274960008301846123ff565b92915050565b600061275961276a565b9050612765828261295c565b919050565b6000604051905090565b600067ffffffffffffffff82111561278f5761278e6129eb565b5b61279882612a1a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006127e8826128d1565b91506127f3836128d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128285761282761298d565b5b828201905092915050565b600061283e826128d1565b9150612849836128d1565b92508282101561285c5761285b61298d565b5b828203905092915050565b6000612872826128b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156129155780820151818401526020810190506128fa565b83811115612924576000848401525b50505050565b6000600282049050600182168061294257607f821691505b60208210811415612956576129556129bc565b5b50919050565b61296582612a1a565b810181811067ffffffffffffffff82111715612984576129836129eb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332304d696e7461626c653a204d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612ed881612867565b8114612ee357600080fd5b50565b612eef81612879565b8114612efa57600080fd5b50565b612f0681612885565b8114612f1157600080fd5b50565b612f1d816128d1565b8114612f2857600080fd5b5056fea2646970667358221220b4a9b3d45745558c74f4605c47ceea35be03b3cb22bd07f17438e6228bf7c59f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000102bd291db7e8d00000000000000000000000000930e15f678b9ded1bc1a2cd98ba5861e34de3b0f000000000000000000000000000000000000000000000000000000000000000d546f6b656e20426974636f696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045742544300000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Token Bitcoin
Arg [1] : symbol_ (string): WBTC
Arg [2] : decimals_ (uint8): 8
Arg [3] : initialBalance_ (uint256): 1165256452500000000
Arg [4] : feeReceiver_ (address): 0x930E15F678b9dEd1bC1a2cd98ba5861E34DE3B0f
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 000000000000000000000000000000000000000000000000102bd291db7e8d00
Arg [4] : 000000000000000000000000930e15f678b9ded1bc1a2cd98ba5861e34de3b0f
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [6] : 546f6b656e20426974636f696e00000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5742544300000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44477:1263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35664:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16422:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6337:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8504:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36178:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7457:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9155:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44931:129;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38807:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10020:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36699:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16832:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18144:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7628:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43212:148;;;:::i;:::-;;18554:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17130:77;;;:::i;:::-;;44214:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42561:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6556:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10738:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7968:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38123:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39335:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37437:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8206:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43515:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35664:215;35766:4;35805:26;35790:41;;;:11;:41;;;;:81;;;;35835:36;35859:11;35835:23;:36::i;:::-;35790:81;35783:88;;35664:215;;;:::o;16422:98::-;16472:4;16496:16;;;;;;;;;;;16489:23;;16422:98;:::o;6337:100::-;6391:13;6424:5;6417:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6337:100;:::o;8504:169::-;8587:4;8604:39;8613:12;:10;:12::i;:::-;8627:7;8636:6;8604:8;:39::i;:::-;8661:4;8654:11;;8504:169;;;;:::o;36178:163::-;36271:4;36295:38;36311:9;36322:6;36295:38;;;;;;;;;;;;:15;:38::i;:::-;36288:45;;36178:163;;;;:::o;7457:108::-;7518:7;7545:12;;7538:19;;7457:108;:::o;9155:456::-;9295:4;9312:36;9322:6;9330:9;9341:6;9312:9;:36::i;:::-;9361:24;9388:11;:19;9400:6;9388:19;;;;;;;;;;;;;;;:33;9408:12;:10;:12::i;:::-;9388:33;;;;;;;;;;;;;;;;9361:60;;9460:6;9440:16;:26;;9432:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9522:57;9531:6;9539:12;:10;:12::i;:::-;9572:6;9553:16;:25;;;;:::i;:::-;9522:8;:57::i;:::-;9599:4;9592:11;;;9155:456;;;;;:::o;44931:129::-;45011:5;45036:16;:14;:16::i;:::-;45029:23;;44931:129;:::o;38807:157::-;38897:4;38921:35;38936:7;38945:6;38921:35;;;;;;;;;;;;:14;:35::i;:::-;38914:42;;38807:157;;;;:::o;10020:215::-;10108:4;10125:80;10134:12;:10;:12::i;:::-;10148:7;10194:10;10157:11;:25;10169:12;:10;:12::i;:::-;10157:25;;;;;;;;;;;;;;;:34;10183:7;10157:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10125:8;:80::i;:::-;10223:4;10216:11;;10020:215;;;;:::o;36699:342::-;36845:4;36862:27;36871:9;36882:6;36862:8;:27::i;:::-;;36908:60;36930:12;:10;:12::i;:::-;36944:9;36955:6;36963:4;36908:21;:60::i;:::-;36900:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37029:4;37022:11;;36699:342;;;;;:::o;16832:105::-;16274:16;;;;;;;;;;;16273:17;16265:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16907:22:::1;16913:7;16922:6;16907:5;:22::i;:::-;16832:105:::0;;:::o;18144:91::-;18200:27;18206:12;:10;:12::i;:::-;18220:6;18200:5;:27::i;:::-;18144:91;:::o;7628:127::-;7702:7;7729:9;:18;7739:7;7729:18;;;;;;;;;;;;;;;;7722:25;;7628:127;;;:::o;43212:148::-;42792:12;:10;:12::i;:::-;42781:23;;:7;:5;:7::i;:::-;:23;;;42773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43319:1:::1;43282:40;;43303:6;;;;;;;;;;;43282:40;;;;;;;;;;;;43350:1;43333:6;;:19;;;;;;;;;;;;;;;;;;43212:148::o:0;18554:332::-;18631:24;18658:32;18668:7;18677:12;:10;:12::i;:::-;18658:9;:32::i;:::-;18631:59;;18729:6;18709:16;:26;;18701:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;18787:58;18796:7;18805:12;:10;:12::i;:::-;18838:6;18819:16;:25;;;;:::i;:::-;18787:8;:58::i;:::-;18856:22;18862:7;18871:6;18856:5;:22::i;:::-;18554:332;;;:::o;17130:77::-;16274:16;;;;;;;;;;;16273:17;16265:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17183:16:::1;:14;:16::i;:::-;17130:77::o:0;44214:160::-;42792:12;:10;:12::i;:::-;42781:23;;:7;:5;:7::i;:::-;:23;;;42773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44322:12:::1;44315:29;;;44345:7;:5;:7::i;:::-;44354:11;44315:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44214:160:::0;;:::o;42561:87::-;42607:7;42634:6;;;;;;;;;;;42627:13;;42561:87;:::o;6556:104::-;6612:13;6645:7;6638:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6556:104;:::o;10738:377::-;10831:4;10848:24;10875:11;:25;10887:12;:10;:12::i;:::-;10875:25;;;;;;;;;;;;;;;:34;10901:7;10875:34;;;;;;;;;;;;;;;;10848:61;;10948:15;10928:16;:35;;10920:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11016:67;11025:12;:10;:12::i;:::-;11039:7;11067:15;11048:16;:34;;;;:::i;:::-;11016:8;:67::i;:::-;11103:4;11096:11;;;10738:377;;;;:::o;7968:175::-;8054:4;8071:42;8081:12;:10;:12::i;:::-;8095:9;8106:6;8071:9;:42::i;:::-;8131:4;8124:11;;7968:175;;;;:::o;38123:377::-;38298:4;38315:39;38328:6;38336:9;38347:6;38315:12;:39::i;:::-;;38373:54;38395:6;38403:9;38414:6;38422:4;38373:21;:54::i;:::-;38365:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38488:4;38481:11;;38123:377;;;;;;:::o;39335:318::-;39478:4;39495:24;39503:7;39512:6;39495:7;:24::i;:::-;;39538:43;39559:7;39568:6;39576:4;39538:20;:43::i;:::-;39530:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;39641:4;39634:11;;39335:318;;;;;:::o;37437:229::-;37584:4;37608:50;37628:6;37636:9;37647:6;37608:50;;;;;;;;;;;;:19;:50::i;:::-;37601:57;;37437:229;;;;;:::o;8206:151::-;8295:7;8322:11;:18;8334:5;8322:18;;;;;;;;;;;;;;;:27;8341:7;8322:27;;;;;;;;;;;;;;;;8315:34;;8206:151;;;;:::o;43515:244::-;42792:12;:10;:12::i;:::-;42781:23;;:7;:5;:7::i;:::-;:23;;;42773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43624:1:::1;43604:22;;:8;:22;;;;43596:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43714:8;43685:38;;43706:6;;;;;;;;;;;43685:38;;;;;;;;;;;;43743:8;43734:6;;:17;;;;;;;;;;;;;;;;;;43515:244:::0;:::o;12525:338::-;12628:1;12609:21;;:7;:21;;;;12601:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12679:49;12708:1;12712:7;12721:6;12679:20;:49::i;:::-;12757:6;12741:12;;:22;;;;;;;:::i;:::-;;;;;;;;12796:6;12774:9;:18;12784:7;12774:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12839:7;12818:37;;12835:1;12818:37;;;12848:6;12818:37;;;;;;:::i;:::-;;;;;;;;12525:338;;:::o;28515:157::-;28600:4;28639:25;28624:40;;;:11;:40;;;;28617:47;;28515:157;;;:::o;4023:98::-;4076:7;4103:10;4096:17;;4023:98;:::o;14128:380::-;14281:1;14264:19;;:5;:19;;;;14256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14362:1;14343:21;;:7;:21;;;;14335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14446:6;14416:11;:18;14428:5;14416:18;;;;;;;;;;;;;;;:27;14435:7;14416:27;;;;;;;;;;;;;;;:36;;;;14484:7;14468:32;;14477:5;14468:32;;;14493:6;14468:32;;;;;;:::i;:::-;;;;;;;;14128:380;;;:::o;11605:638::-;11763:1;11745:20;;:6;:20;;;;11737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11847:1;11826:23;;:9;:23;;;;11818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11902:47;11923:6;11931:9;11942:6;11902:20;:47::i;:::-;11962:21;11986:9;:17;11996:6;11986:17;;;;;;;;;;;;;;;;11962:41;;12039:6;12022:13;:23;;12014:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12135:6;12119:13;:22;;;;:::i;:::-;12099:9;:17;12109:6;12099:17;;;;;;;;;;;;;;;:42;;;;12176:6;12152:9;:20;12162:9;12152:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12217:9;12200:35;;12209:6;12200:35;;;12228:6;12200:35;;;;;;:::i;:::-;;;;;;;;11605:638;;;;:::o;15688:100::-;15746:5;15771:9;15764:16;;15688:100;:::o;40219:456::-;40389:4;40411:22;:9;:20;;;:22::i;:::-;40406:68;;40457:5;40450:12;;;;40406:68;40484:13;40517:9;40500:46;;;40547:12;:10;:12::i;:::-;40561:6;40569;40577:4;40500:82;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40484:98;;40611:55;;;40601:65;;;:6;:65;;;;40593:74;;;40219:456;;;;;;;:::o;45352:123::-;42792:12;:10;:12::i;:::-;42781:23;;:7;:5;:7::i;:::-;:23;;;42773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45439:28:::1;45451:7;45460:6;45439:11;:28::i;:::-;45352:123:::0;;:::o;13196:494::-;13299:1;13280:21;;:7;:21;;;;13272:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13352:49;13373:7;13390:1;13394:6;13352:20;:49::i;:::-;13414:22;13439:9;:18;13449:7;13439:18;;;;;;;;;;;;;;;;13414:43;;13494:6;13476:14;:24;;13468:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13588:6;13571:14;:23;;;;:::i;:::-;13550:9;:18;13560:7;13550:18;;;;;;;;;;;;;;;:44;;;;13621:6;13605:12;;:22;;;;;;;:::i;:::-;;;;;;;;13671:1;13645:37;;13654:7;13645:37;;;13675:6;13645:37;;;;;;:::i;:::-;;;;;;;;13196:494;;;:::o;45642:95::-;42792:12;:10;:12::i;:::-;42781:23;;:7;:5;:7::i;:::-;:23;;;42773:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45707:22:::1;:20;:22::i;:::-;45642:95::o:0;41135:412::-;41277:4;41299:20;:7;:18;;;:20::i;:::-;41294:66;;41343:5;41336:12;;;;41294:66;41370:13;41402:7;41386:43;;;41430:12;:10;:12::i;:::-;41444:6;41452:4;41386:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41370:87;;41486:52;;;41476:62;;;:6;:62;;;;41468:71;;;41135:412;;;;;;:::o;15111:125::-;;;;:::o;19574:444::-;19634:4;19842:12;19966:7;19954:20;19946:28;;20009:1;20002:4;:8;19995:15;;;19574:444;;;:::o;17283:117::-;17356:4;17337:16;;:23;;;;;;;;;;;;;;;;;;17378:14;;;;;;;;;;17283:117::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:137::-;555:5;586:6;580:13;571:22;;602:30;626:5;602:30;:::i;:::-;561:77;;;;:::o;644:137::-;689:5;727:6;714:20;705:29;;743:32;769:5;743:32;:::i;:::-;695:86;;;;:::o;787:141::-;843:5;874:6;868:13;859:22;;890:32;916:5;890:32;:::i;:::-;849:79;;;;:::o;947:271::-;1002:5;1051:3;1044:4;1036:6;1032:17;1028:27;1018:2;;1069:1;1066;1059:12;1018:2;1109:6;1096:20;1134:78;1208:3;1200:6;1193:4;1185:6;1181:17;1134:78;:::i;:::-;1125:87;;1008:210;;;;;:::o;1224:139::-;1270:5;1308:6;1295:20;1286:29;;1324:33;1351:5;1324:33;:::i;:::-;1276:87;;;;:::o;1369:262::-;1428:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:2;;;1493:1;1490;1483:12;1445:2;1536:1;1561:53;1606:7;1597:6;1586:9;1582:22;1561:53;:::i;:::-;1551:63;;1507:117;1435:196;;;;:::o;1637:407::-;1705:6;1713;1762:2;1750:9;1741:7;1737:23;1733:32;1730:2;;;1778:1;1775;1768:12;1730:2;1821:1;1846:53;1891:7;1882:6;1871:9;1867:22;1846:53;:::i;:::-;1836:63;;1792:117;1948:2;1974:53;2019:7;2010:6;1999:9;1995:22;1974:53;:::i;:::-;1964:63;;1919:118;1720:324;;;;;:::o;2050:552::-;2127:6;2135;2143;2192:2;2180:9;2171:7;2167:23;2163:32;2160:2;;;2208:1;2205;2198:12;2160:2;2251:1;2276:53;2321:7;2312:6;2301:9;2297:22;2276:53;:::i;:::-;2266:63;;2222:117;2378:2;2404:53;2449:7;2440:6;2429:9;2425:22;2404:53;:::i;:::-;2394:63;;2349:118;2506:2;2532:53;2577:7;2568:6;2557:9;2553:22;2532:53;:::i;:::-;2522:63;;2477:118;2150:452;;;;;:::o;2608:809::-;2703:6;2711;2719;2727;2776:3;2764:9;2755:7;2751:23;2747:33;2744:2;;;2793:1;2790;2783:12;2744:2;2836:1;2861:53;2906:7;2897:6;2886:9;2882:22;2861:53;:::i;:::-;2851:63;;2807:117;2963:2;2989:53;3034:7;3025:6;3014:9;3010:22;2989:53;:::i;:::-;2979:63;;2934:118;3091:2;3117:53;3162:7;3153:6;3142:9;3138:22;3117:53;:::i;:::-;3107:63;;3062:118;3247:2;3236:9;3232:18;3219:32;3278:18;3270:6;3267:30;3264:2;;;3310:1;3307;3300:12;3264:2;3338:62;3392:7;3383:6;3372:9;3368:22;3338:62;:::i;:::-;3328:72;;3190:220;2734:683;;;;;;;:::o;3423:407::-;3491:6;3499;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3564:1;3561;3554:12;3516:2;3607:1;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3578:117;3734:2;3760:53;3805:7;3796:6;3785:9;3781:22;3760:53;:::i;:::-;3750:63;;3705:118;3506:324;;;;;:::o;3836:663::-;3922:6;3930;3938;3987:2;3975:9;3966:7;3962:23;3958:32;3955:2;;;4003:1;4000;3993:12;3955:2;4046:1;4071:53;4116:7;4107:6;4096:9;4092:22;4071:53;:::i;:::-;4061:63;;4017:117;4173:2;4199:53;4244:7;4235:6;4224:9;4220:22;4199:53;:::i;:::-;4189:63;;4144:118;4329:2;4318:9;4314:18;4301:32;4360:18;4352:6;4349:30;4346:2;;;4392:1;4389;4382:12;4346:2;4420:62;4474:7;4465:6;4454:9;4450:22;4420:62;:::i;:::-;4410:72;;4272:220;3945:554;;;;;:::o;4505:278::-;4572:6;4621:2;4609:9;4600:7;4596:23;4592:32;4589:2;;;4637:1;4634;4627:12;4589:2;4680:1;4705:61;4758:7;4749:6;4738:9;4734:22;4705:61;:::i;:::-;4695:71;;4651:125;4579:204;;;;:::o;4789:260::-;4847:6;4896:2;4884:9;4875:7;4871:23;4867:32;4864:2;;;4912:1;4909;4902:12;4864:2;4955:1;4980:52;5024:7;5015:6;5004:9;5000:22;4980:52;:::i;:::-;4970:62;;4926:116;4854:195;;;;:::o;5055:282::-;5124:6;5173:2;5161:9;5152:7;5148:23;5144:32;5141:2;;;5189:1;5186;5179:12;5141:2;5232:1;5257:63;5312:7;5303:6;5292:9;5288:22;5257:63;:::i;:::-;5247:73;;5203:127;5131:206;;;;:::o;5343:262::-;5402:6;5451:2;5439:9;5430:7;5426:23;5422:32;5419:2;;;5467:1;5464;5457:12;5419:2;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5409:196;;;;:::o;5611:118::-;5698:24;5716:5;5698:24;:::i;:::-;5693:3;5686:37;5676:53;;:::o;5735:109::-;5816:21;5831:5;5816:21;:::i;:::-;5811:3;5804:34;5794:50;;:::o;5850:360::-;5936:3;5964:38;5996:5;5964:38;:::i;:::-;6018:70;6081:6;6076:3;6018:70;:::i;:::-;6011:77;;6097:52;6142:6;6137:3;6130:4;6123:5;6119:16;6097:52;:::i;:::-;6174:29;6196:6;6174:29;:::i;:::-;6169:3;6165:39;6158:46;;5940:270;;;;;:::o;6216:364::-;6304:3;6332:39;6365:5;6332:39;:::i;:::-;6387:71;6451:6;6446:3;6387:71;:::i;:::-;6380:78;;6467:52;6512:6;6507:3;6500:4;6493:5;6489:16;6467:52;:::i;:::-;6544:29;6566:6;6544:29;:::i;:::-;6539:3;6535:39;6528:46;;6308:272;;;;;:::o;6586:366::-;6728:3;6749:67;6813:2;6808:3;6749:67;:::i;:::-;6742:74;;6825:93;6914:3;6825:93;:::i;:::-;6943:2;6938:3;6934:12;6927:19;;6732:220;;;:::o;6958:366::-;7100:3;7121:67;7185:2;7180:3;7121:67;:::i;:::-;7114:74;;7197:93;7286:3;7197:93;:::i;:::-;7315:2;7310:3;7306:12;7299:19;;7104:220;;;:::o;7330:366::-;7472:3;7493:67;7557:2;7552:3;7493:67;:::i;:::-;7486:74;;7569:93;7658:3;7569:93;:::i;:::-;7687:2;7682:3;7678:12;7671:19;;7476:220;;;:::o;7702:366::-;7844:3;7865:67;7929:2;7924:3;7865:67;:::i;:::-;7858:74;;7941:93;8030:3;7941:93;:::i;:::-;8059:2;8054:3;8050:12;8043:19;;7848:220;;;:::o;8074:366::-;8216:3;8237:67;8301:2;8296:3;8237:67;:::i;:::-;8230:74;;8313:93;8402:3;8313:93;:::i;:::-;8431:2;8426:3;8422:12;8415:19;;8220:220;;;:::o;8446:366::-;8588:3;8609:67;8673:2;8668:3;8609:67;:::i;:::-;8602:74;;8685:93;8774:3;8685:93;:::i;:::-;8803:2;8798:3;8794:12;8787:19;;8592:220;;;:::o;8818:366::-;8960:3;8981:67;9045:2;9040:3;8981:67;:::i;:::-;8974:74;;9057:93;9146:3;9057:93;:::i;:::-;9175:2;9170:3;9166:12;9159:19;;8964:220;;;:::o;9190:366::-;9332:3;9353:67;9417:2;9412:3;9353:67;:::i;:::-;9346:74;;9429:93;9518:3;9429:93;:::i;:::-;9547:2;9542:3;9538:12;9531:19;;9336:220;;;:::o;9562:366::-;9704:3;9725:67;9789:2;9784:3;9725:67;:::i;:::-;9718:74;;9801:93;9890:3;9801:93;:::i;:::-;9919:2;9914:3;9910:12;9903:19;;9708:220;;;:::o;9934:366::-;10076:3;10097:67;10161:2;10156:3;10097:67;:::i;:::-;10090:74;;10173:93;10262:3;10173:93;:::i;:::-;10291:2;10286:3;10282:12;10275:19;;10080:220;;;:::o;10306:366::-;10448:3;10469:67;10533:2;10528:3;10469:67;:::i;:::-;10462:74;;10545:93;10634:3;10545:93;:::i;:::-;10663:2;10658:3;10654:12;10647:19;;10452:220;;;:::o;10678:366::-;10820:3;10841:67;10905:2;10900:3;10841:67;:::i;:::-;10834:74;;10917:93;11006:3;10917:93;:::i;:::-;11035:2;11030:3;11026:12;11019:19;;10824:220;;;:::o;11050:366::-;11192:3;11213:67;11277:2;11272:3;11213:67;:::i;:::-;11206:74;;11289:93;11378:3;11289:93;:::i;:::-;11407:2;11402:3;11398:12;11391:19;;11196:220;;;:::o;11422:366::-;11564:3;11585:67;11649:2;11644:3;11585:67;:::i;:::-;11578:74;;11661:93;11750:3;11661:93;:::i;:::-;11779:2;11774:3;11770:12;11763:19;;11568:220;;;:::o;11794:366::-;11936:3;11957:67;12021:2;12016:3;11957:67;:::i;:::-;11950:74;;12033:93;12122:3;12033:93;:::i;:::-;12151:2;12146:3;12142:12;12135:19;;11940:220;;;:::o;12166:366::-;12308:3;12329:67;12393:2;12388:3;12329:67;:::i;:::-;12322:74;;12405:93;12494:3;12405:93;:::i;:::-;12523:2;12518:3;12514:12;12507:19;;12312:220;;;:::o;12538:118::-;12625:24;12643:5;12625:24;:::i;:::-;12620:3;12613:37;12603:53;;:::o;12662:112::-;12745:22;12761:5;12745:22;:::i;:::-;12740:3;12733:35;12723:51;;:::o;12780:222::-;12873:4;12911:2;12900:9;12896:18;12888:26;;12924:71;12992:1;12981:9;12977:17;12968:6;12924:71;:::i;:::-;12878:124;;;;:::o;13008:640::-;13203:4;13241:3;13230:9;13226:19;13218:27;;13255:71;13323:1;13312:9;13308:17;13299:6;13255:71;:::i;:::-;13336:72;13404:2;13393:9;13389:18;13380:6;13336:72;:::i;:::-;13418;13486:2;13475:9;13471:18;13462:6;13418:72;:::i;:::-;13537:9;13531:4;13527:20;13522:2;13511:9;13507:18;13500:48;13565:76;13636:4;13627:6;13565:76;:::i;:::-;13557:84;;13208:440;;;;;;;:::o;13654:332::-;13775:4;13813:2;13802:9;13798:18;13790:26;;13826:71;13894:1;13883:9;13879:17;13870:6;13826:71;:::i;:::-;13907:72;13975:2;13964:9;13960:18;13951:6;13907:72;:::i;:::-;13780:206;;;;;:::o;13992:529::-;14159:4;14197:2;14186:9;14182:18;14174:26;;14210:71;14278:1;14267:9;14263:17;14254:6;14210:71;:::i;:::-;14291:72;14359:2;14348:9;14344:18;14335:6;14291:72;:::i;:::-;14410:9;14404:4;14400:20;14395:2;14384:9;14380:18;14373:48;14438:76;14509:4;14500:6;14438:76;:::i;:::-;14430:84;;14164:357;;;;;;:::o;14527:210::-;14614:4;14652:2;14641:9;14637:18;14629:26;;14665:65;14727:1;14716:9;14712:17;14703:6;14665:65;:::i;:::-;14619:118;;;;:::o;14743:313::-;14856:4;14894:2;14883:9;14879:18;14871:26;;14943:9;14937:4;14933:20;14929:1;14918:9;14914:17;14907:47;14971:78;15044:4;15035:6;14971:78;:::i;:::-;14963:86;;14861:195;;;;:::o;15062:419::-;15228:4;15266:2;15255:9;15251:18;15243:26;;15315:9;15309:4;15305:20;15301:1;15290:9;15286:17;15279:47;15343:131;15469:4;15343:131;:::i;:::-;15335:139;;15233:248;;;:::o;15487:419::-;15653:4;15691:2;15680:9;15676:18;15668:26;;15740:9;15734:4;15730:20;15726:1;15715:9;15711:17;15704:47;15768:131;15894:4;15768:131;:::i;:::-;15760:139;;15658:248;;;:::o;15912:419::-;16078:4;16116:2;16105:9;16101:18;16093:26;;16165:9;16159:4;16155:20;16151:1;16140:9;16136:17;16129:47;16193:131;16319:4;16193:131;:::i;:::-;16185:139;;16083:248;;;:::o;16337:419::-;16503:4;16541:2;16530:9;16526:18;16518:26;;16590:9;16584:4;16580:20;16576:1;16565:9;16561:17;16554:47;16618:131;16744:4;16618:131;:::i;:::-;16610:139;;16508:248;;;:::o;16762:419::-;16928:4;16966:2;16955:9;16951:18;16943:26;;17015:9;17009:4;17005:20;17001:1;16990:9;16986:17;16979:47;17043:131;17169:4;17043:131;:::i;:::-;17035:139;;16933:248;;;:::o;17187:419::-;17353:4;17391:2;17380:9;17376:18;17368:26;;17440:9;17434:4;17430:20;17426:1;17415:9;17411:17;17404:47;17468:131;17594:4;17468:131;:::i;:::-;17460:139;;17358:248;;;:::o;17612:419::-;17778:4;17816:2;17805:9;17801:18;17793:26;;17865:9;17859:4;17855:20;17851:1;17840:9;17836:17;17829:47;17893:131;18019:4;17893:131;:::i;:::-;17885:139;;17783:248;;;:::o;18037:419::-;18203:4;18241:2;18230:9;18226:18;18218:26;;18290:9;18284:4;18280:20;18276:1;18265:9;18261:17;18254:47;18318:131;18444:4;18318:131;:::i;:::-;18310:139;;18208:248;;;:::o;18462:419::-;18628:4;18666:2;18655:9;18651:18;18643:26;;18715:9;18709:4;18705:20;18701:1;18690:9;18686:17;18679:47;18743:131;18869:4;18743:131;:::i;:::-;18735:139;;18633:248;;;:::o;18887:419::-;19053:4;19091:2;19080:9;19076:18;19068:26;;19140:9;19134:4;19130:20;19126:1;19115:9;19111:17;19104:47;19168:131;19294:4;19168:131;:::i;:::-;19160:139;;19058:248;;;:::o;19312:419::-;19478:4;19516:2;19505:9;19501:18;19493:26;;19565:9;19559:4;19555:20;19551:1;19540:9;19536:17;19529:47;19593:131;19719:4;19593:131;:::i;:::-;19585:139;;19483:248;;;:::o;19737:419::-;19903:4;19941:2;19930:9;19926:18;19918:26;;19990:9;19984:4;19980:20;19976:1;19965:9;19961:17;19954:47;20018:131;20144:4;20018:131;:::i;:::-;20010:139;;19908:248;;;:::o;20162:419::-;20328:4;20366:2;20355:9;20351:18;20343:26;;20415:9;20409:4;20405:20;20401:1;20390:9;20386:17;20379:47;20443:131;20569:4;20443:131;:::i;:::-;20435:139;;20333:248;;;:::o;20587:419::-;20753:4;20791:2;20780:9;20776:18;20768:26;;20840:9;20834:4;20830:20;20826:1;20815:9;20811:17;20804:47;20868:131;20994:4;20868:131;:::i;:::-;20860:139;;20758:248;;;:::o;21012:419::-;21178:4;21216:2;21205:9;21201:18;21193:26;;21265:9;21259:4;21255:20;21251:1;21240:9;21236:17;21229:47;21293:131;21419:4;21293:131;:::i;:::-;21285:139;;21183:248;;;:::o;21437:419::-;21603:4;21641:2;21630:9;21626:18;21618:26;;21690:9;21684:4;21680:20;21676:1;21665:9;21661:17;21654:47;21718:131;21844:4;21718:131;:::i;:::-;21710:139;;21608:248;;;:::o;21862:222::-;21955:4;21993:2;21982:9;21978:18;21970:26;;22006:71;22074:1;22063:9;22059:17;22050:6;22006:71;:::i;:::-;21960:124;;;;:::o;22090:214::-;22179:4;22217:2;22206:9;22202:18;22194:26;;22230:67;22294:1;22283:9;22279:17;22270:6;22230:67;:::i;:::-;22184:120;;;;:::o;22310:129::-;22344:6;22371:20;;:::i;:::-;22361:30;;22400:33;22428:4;22420:6;22400:33;:::i;:::-;22351:88;;;:::o;22445:75::-;22478:6;22511:2;22505:9;22495:19;;22485:35;:::o;22526:307::-;22587:4;22677:18;22669:6;22666:30;22663:2;;;22699:18;;:::i;:::-;22663:2;22737:29;22759:6;22737:29;:::i;:::-;22729:37;;22821:4;22815;22811:15;22803:23;;22592:241;;;:::o;22839:98::-;22890:6;22924:5;22918:12;22908:22;;22897:40;;;:::o;22943:99::-;22995:6;23029:5;23023:12;23013:22;;23002:40;;;:::o;23048:168::-;23131:11;23165:6;23160:3;23153:19;23205:4;23200:3;23196:14;23181:29;;23143:73;;;;:::o;23222:169::-;23306:11;23340:6;23335:3;23328:19;23380:4;23375:3;23371:14;23356:29;;23318:73;;;;:::o;23397:305::-;23437:3;23456:20;23474:1;23456:20;:::i;:::-;23451:25;;23490:20;23508:1;23490:20;:::i;:::-;23485:25;;23644:1;23576:66;23572:74;23569:1;23566:81;23563:2;;;23650:18;;:::i;:::-;23563:2;23694:1;23691;23687:9;23680:16;;23441:261;;;;:::o;23708:191::-;23748:4;23768:20;23786:1;23768:20;:::i;:::-;23763:25;;23802:20;23820:1;23802:20;:::i;:::-;23797:25;;23841:1;23838;23835:8;23832:2;;;23846:18;;:::i;:::-;23832:2;23891:1;23888;23884:9;23876:17;;23753:146;;;;:::o;23905:96::-;23942:7;23971:24;23989:5;23971:24;:::i;:::-;23960:35;;23950:51;;;:::o;24007:90::-;24041:7;24084:5;24077:13;24070:21;24059:32;;24049:48;;;:::o;24103:149::-;24139:7;24179:66;24172:5;24168:78;24157:89;;24147:105;;;:::o;24258:126::-;24295:7;24335:42;24328:5;24324:54;24313:65;;24303:81;;;:::o;24390:77::-;24427:7;24456:5;24445:16;;24435:32;;;:::o;24473:86::-;24508:7;24548:4;24541:5;24537:16;24526:27;;24516:43;;;:::o;24565:154::-;24649:6;24644:3;24639;24626:30;24711:1;24702:6;24697:3;24693:16;24686:27;24616:103;;;:::o;24725:307::-;24793:1;24803:113;24817:6;24814:1;24811:13;24803:113;;;24902:1;24897:3;24893:11;24887:18;24883:1;24878:3;24874:11;24867:39;24839:2;24836:1;24832:10;24827:15;;24803:113;;;24934:6;24931:1;24928:13;24925:2;;;25014:1;25005:6;25000:3;24996:16;24989:27;24925:2;24774:258;;;;:::o;25038:320::-;25082:6;25119:1;25113:4;25109:12;25099:22;;25166:1;25160:4;25156:12;25187:18;25177:2;;25243:4;25235:6;25231:17;25221:27;;25177:2;25305;25297:6;25294:14;25274:18;25271:38;25268:2;;;25324:18;;:::i;:::-;25268:2;25089:269;;;;:::o;25364:281::-;25447:27;25469:4;25447:27;:::i;:::-;25439:6;25435:40;25577:6;25565:10;25562:22;25541:18;25529:10;25526:34;25523:62;25520:2;;;25588:18;;:::i;:::-;25520:2;25628:10;25624:2;25617:22;25407:238;;;:::o;25651:180::-;25699:77;25696:1;25689:88;25796:4;25793:1;25786:15;25820:4;25817:1;25810:15;25837:180;25885:77;25882:1;25875:88;25982:4;25979:1;25972:15;26006:4;26003:1;25996:15;26023:180;26071:77;26068:1;26061:88;26168:4;26165:1;26158:15;26192:4;26189:1;26182:15;26209:102;26250:6;26301:2;26297:7;26292:2;26285:5;26281:14;26277:28;26267:38;;26257:54;;;:::o;26317:222::-;26457:34;26453:1;26445:6;26441:14;26434:58;26526:5;26521:2;26513:6;26509:15;26502:30;26423:116;:::o;26545:221::-;26685:34;26681:1;26673:6;26669:14;26662:58;26754:4;26749:2;26741:6;26737:15;26730:29;26651:115;:::o;26772:225::-;26912:34;26908:1;26900:6;26896:14;26889:58;26981:8;26976:2;26968:6;26964:15;26957:33;26878:119;:::o;27003:221::-;27143:34;27139:1;27131:6;27127:14;27120:58;27212:4;27207:2;27199:6;27195:15;27188:29;27109:115;:::o;27230:224::-;27370:34;27366:1;27358:6;27354:14;27347:58;27439:7;27434:2;27426:6;27422:15;27415:32;27336:118;:::o;27460:225::-;27600:34;27596:1;27588:6;27584:14;27577:58;27669:8;27664:2;27656:6;27652:15;27645:33;27566:119;:::o;27691:221::-;27831:34;27827:1;27819:6;27815:14;27808:58;27900:4;27895:2;27887:6;27883:15;27876:29;27797:115;:::o;27918:225::-;28058:34;28054:1;28046:6;28042:14;28035:58;28127:8;28122:2;28114:6;28110:15;28103:33;28024:119;:::o;28149:227::-;28289:34;28285:1;28277:6;28273:14;28266:58;28358:10;28353:2;28345:6;28341:15;28334:35;28255:121;:::o;28382:182::-;28522:34;28518:1;28510:6;28506:14;28499:58;28488:76;:::o;28570:223::-;28710:34;28706:1;28698:6;28694:14;28687:58;28779:6;28774:2;28766:6;28762:15;28755:31;28676:117;:::o;28799:220::-;28939:34;28935:1;28927:6;28923:14;28916:58;29008:3;29003:2;28995:6;28991:15;28984:28;28905:114;:::o;29025:224::-;29165:34;29161:1;29153:6;29149:14;29142:58;29234:7;29229:2;29221:6;29217:15;29210:32;29131:118;:::o;29255:223::-;29395:34;29391:1;29383:6;29379:14;29372:58;29464:6;29459:2;29451:6;29447:15;29440:31;29361:117;:::o;29484:224::-;29624:34;29620:1;29612:6;29608:14;29601:58;29693:7;29688:2;29680:6;29676:15;29669:32;29590:118;:::o;29714:181::-;29854:33;29850:1;29842:6;29838:14;29831:57;29820:75;:::o;29901:122::-;29974:24;29992:5;29974:24;:::i;:::-;29967:5;29964:35;29954:2;;30013:1;30010;30003:12;29954:2;29944:79;:::o;30029:116::-;30099:21;30114:5;30099:21;:::i;:::-;30092:5;30089:32;30079:2;;30135:1;30132;30125:12;30079:2;30069:76;:::o;30151:120::-;30223:23;30240:5;30223:23;:::i;:::-;30216:5;30213:34;30203:2;;30261:1;30258;30251:12;30203:2;30193:78;:::o;30277:122::-;30350:24;30368:5;30350:24;:::i;:::-;30343:5;30340:35;30330:2;;30389:1;30386;30379:12;30330:2;30320:79;:::o
Swarm Source
ipfs://b4a9b3d45745558c74f4605c47ceea35be03b3cb22bd07f17438e6228bf7c59f
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.