ERC-20
Overview
Max Total Supply
1,000,000,000 AURUM
Holders
5,409
Total Transfers
-
Market
Price
$0.00 @ 0.000000 POL
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RaiderAurumToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20PresetMinterPauser.sol"; contract RaiderAurumToken is ERC20PresetMinterPauser { // initate the Aurum token and create 1,000,000,000 of it constructor () ERC20PresetMinterPauser("RaiderAurum", "AURUM") { _mint(msg.sender, 1000000000 * (10 ** uint256(decimals()))); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControlEnumerable.sol"; import "./AccessControl.sol"; import "./EnumerableSet.sol"; /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl { using EnumerableSet for EnumerableSet.AddressSet; mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) { return _roleMembers[role].at(index); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view override returns (uint256) { return _roleMembers[role].length(); } /** * @dev Overload {grantRole} to track enumerable memberships */ function grantRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override(AccessControl, IAccessControl) { super.renounceRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {_setupRole} to track enumerable memberships */ function _setupRole(bytes32 role, address account) internal virtual override { super._setupRole(role, account); _roleMembers[role].add(account); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Context.sol"; /** * @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"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./Pausable.sol"; /** * @dev ERC20 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./ERC20Burnable.sol"; import "./ERC20Pausable.sol"; import "./AccessControlEnumerable.sol"; import "./Context.sol"; /** * @dev {ERC20} token, including: * * - ability for holders to burn (destroy) their tokens * - a minter role that allows for token minting (creation) * - a pauser role that allows to stop all token transfers * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. * * The account that deploys the contract will be granted the minter and pauser * roles, as well as the default admin role, which will let it grant both minter * and pauser roles to other accounts. */ contract ERC20PresetMinterPauser is Context, AccessControlEnumerable, ERC20Burnable, ERC20Pausable { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); /** * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the * account that deploys the contract. * * See {ERC20-constructor}. */ constructor(string memory name, string memory symbol) ERC20(name, symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); _setupRole(PAUSER_ROLE, _msgSender()); } /** * @dev Creates `amount` new tokens for `to`. * * See {ERC20-_mint}. * * Requirements: * * - the caller must have the `MINTER_ROLE`. */ function mint(address to, uint256 amount) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have minter role to mint"); _mint(to, amount); } /** * @dev Pauses all token transfers. * * See {ERC20Pausable} and {Pausable-_pause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function pause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to pause"); _pause(); } /** * @dev Unpauses all token transfers. * * See {ERC20Pausable} and {Pausable-_unpause}. * * Requirements: * * - the caller must have the `PAUSER_ROLE`. */ function unpause() public virtual { require(hasRole(PAUSER_ROLE, _msgSender()), "ERC20PresetMinterPauser: must have pauser role to unpause"); _unpause(); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override(ERC20, ERC20Pausable) { super._beforeTokenTransfer(from, to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerable is IAccessControl { /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) external view returns (address); /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f526169646572417572756d0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f415552554d000000000000000000000000000000000000000000000000000000815250818181600590805190602001906200009892919062000687565b508060069080519060200190620000b192919062000687565b5050506000600760006101000a81548160ff021916908315150217905550620000f36000801b620000e7620001c060201b60201c565b620001c860201b60201c565b620001347f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a662000128620001c060201b60201c565b620001c860201b60201c565b620001757f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a62000169620001c060201b60201c565b620001c860201b60201c565b5050620001ba336200018c6200021060201b60201c565b60ff16600a6200019d9190620008c0565b633b9aca00620001ae9190620009fd565b6200021960201b60201c565b62000b81565b600033905090565b620001df82826200039360201b62000ee01760201c565b6200020b8160016000858152602001908152602001600020620003a960201b62000eee1790919060201c565b505050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200028c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002839062000796565b60405180910390fd5b620002a060008383620003e160201b60201c565b8060046000828254620002b4919062000808565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200030c919062000808565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003739190620007da565b60405180910390a36200038f60008383620003fe60201b60201c565b5050565b620003a582826200040360201b60201c565b5050565b6000620003d9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620004f460201b60201c565b905092915050565b620003f98383836200056e60201b62000f1e1760201c565b505050565b505050565b620004158282620005de60201b60201c565b620004f057600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000495620001c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200050883836200064860201b60201c565b6200056357826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000568565b600090505b92915050565b620005868383836200066b60201b62000f761760201c565b620005966200067060201b60201c565b15620005d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d090620007b8565b60405180910390fd5b505050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b6000600760009054906101000a900460ff16905090565b828054620006959062000a68565b90600052602060002090601f016020900481019282620006b9576000855562000705565b82601f10620006d457805160ff191683800117855562000705565b8280016001018555821562000705579182015b8281111562000704578251825591602001919060010190620006e7565b5b50905062000714919062000718565b5090565b5b808211156200073357600081600090555060010162000719565b5090565b600062000746601f83620007f7565b9150620007538262000b09565b602082019050919050565b60006200076d602a83620007f7565b91506200077a8262000b32565b604082019050919050565b620007908162000a5e565b82525050565b60006020820190508181036000830152620007b18162000737565b9050919050565b60006020820190508181036000830152620007d3816200075e565b9050919050565b6000602082019050620007f1600083018462000785565b92915050565b600082825260208201905092915050565b6000620008158262000a5e565b9150620008228362000a5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200085a576200085962000a9e565b5b828201905092915050565b6000808291508390505b6001851115620008b7578086048111156200088f576200088e62000a9e565b5b60018516156200089f5780820291505b8081029050620008af8562000afc565b94506200086f565b94509492505050565b6000620008cd8262000a5e565b9150620008da8362000a5e565b9250620009097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000911565b905092915050565b600082620009235760019050620009f6565b81620009335760009050620009f6565b81600181146200094c576002811462000957576200098d565b6001915050620009f6565b60ff8411156200096c576200096b62000a9e565b5b8360020a91508482111562000986576200098562000a9e565b5b50620009f6565b5060208310610133831016604e8410600b8410161715620009c75782820a905083811115620009c157620009c062000a9e565b5b620009f6565b620009d6848484600162000865565b92509050818404811115620009f057620009ef62000a9e565b5b81810290505b9392505050565b600062000a0a8262000a5e565b915062000a178362000a5e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a535762000a5262000a9e565b5b828202905092915050565b6000819050919050565b6000600282049050600182168062000a8157607f821691505b6020821081141562000a985762000a9762000acd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b61341c8062000b916000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d53913931461052d578063d547741f1461054b578063dd62ed3e14610567578063e63ab1e914610597576101c4565b8063a457c2d71461049d578063a9059cbb146104cd578063ca15c873146104fd576101c4565b80639010d07c116100d35780639010d07c1461040157806391d148541461043157806395d89b4114610461578063a217fddf1461047f576101c4565b806370a08231146103ab57806379cc6790146103db5780638456cb59146103f7576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a1461034b57806340c10f191461035557806342966c68146103715780635c975abb1461038d576101c4565b8063313ce567146102e157806336568abe146102ff578063395093511461031b576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca3146102955780632f2ff15d146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de9190612436565b6105b5565b6040516101f09190612871565b60405180910390f35b61020161062f565b60405161020e91906128a7565b60405180910390f35b610231600480360381019061022c9190612359565b6106c1565b60405161023e9190612871565b60405180910390f35b61024f6106df565b60405161025c9190612b29565b60405180910390f35b61027f600480360381019061027a919061230a565b6106e9565b60405161028c9190612871565b60405180910390f35b6102af60048036038101906102aa9190612395565b6107e1565b6040516102bc919061288c565b60405180910390f35b6102df60048036038101906102da91906123be565b610800565b005b6102e9610834565b6040516102f69190612b44565b60405180910390f35b610319600480360381019061031491906123be565b61083d565b005b61033560048036038101906103309190612359565b610871565b6040516103429190612871565b60405180910390f35b61035361091d565b005b61036f600480360381019061036a9190612359565b610997565b005b61038b6004803603810190610386919061245f565b610a15565b005b610395610a29565b6040516103a29190612871565b60405180910390f35b6103c560048036038101906103c091906122a5565b610a40565b6040516103d29190612b29565b60405180910390f35b6103f560048036038101906103f09190612359565b610a89565b005b6103ff610b04565b005b61041b600480360381019061041691906123fa565b610b7e565b6040516104289190612856565b60405180910390f35b61044b600480360381019061044691906123be565b610bad565b6040516104589190612871565b60405180910390f35b610469610c17565b60405161047691906128a7565b60405180910390f35b610487610ca9565b604051610494919061288c565b60405180910390f35b6104b760048036038101906104b29190612359565b610cb0565b6040516104c49190612871565b60405180910390f35b6104e760048036038101906104e29190612359565b610d9b565b6040516104f49190612871565b60405180910390f35b61051760048036038101906105129190612395565b610db9565b6040516105249190612b29565b60405180910390f35b610535610ddd565b604051610542919061288c565b60405180910390f35b610565600480360381019061056091906123be565b610e01565b005b610581600480360381019061057c91906122ce565b610e35565b60405161058e9190612b29565b60405180910390f35b61059f610ebc565b6040516105ac919061288c565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610628575061062782610f7b565b5b9050919050565b60606005805461063e90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90612d52565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b5050505050905090565b60006106d56106ce610ff5565b8484610ffd565b6001905092915050565b6000600454905090565b60006106f68484846111c8565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610741610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b8906129c9565b60405180910390fd5b6107d5856107cd610ff5565b858403610ffd565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b61080a828261144c565b61082f8160016000858152602001908152602001600020610eee90919063ffffffff16565b505050565b60006012905090565b6108478282611475565b61086c81600160008581526020019081526020016000206114f890919063ffffffff16565b505050565b600061091361087e610ff5565b84846003600061088c610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090e9190612b86565b610ffd565b6001905092915050565b61094e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610949610ff5565b610bad565b61098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490612949565b60405180910390fd5b610995611528565b565b6109c87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109c3610ff5565b610bad565b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906129e9565b60405180910390fd5b610a1182826115ca565b5050565b610a26610a20610ff5565b8261172b565b50565b6000600760009054906101000a900460ff16905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610a9c83610a97610ff5565b610e35565b905081811015610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890612a09565b60405180910390fd5b610af583610aed610ff5565b848403610ffd565b610aff838361172b565b505050565b610b357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b30610ff5565b610bad565b610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b90612a89565b60405180910390fd5b610b7c611904565b565b6000610ba582600160008681526020019081526020016000206119a790919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610c2690612d52565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5290612d52565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b5050505050905090565b6000801b81565b60008060036000610cbf610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612aa9565b60405180910390fd5b610d90610d87610ff5565b85858403610ffd565b600191505092915050565b6000610daf610da8610ff5565b84846111c8565b6001905092915050565b6000610dd6600160008481526020019081526020016000206119c1565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e0b82826119d6565b610e3081600160008581526020019081526020016000206114f890919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610eea82826119ff565b5050565b6000610f16836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611adf565b905092915050565b610f29838383610f76565b610f31610a29565b15610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612b09565b60405180910390fd5b505050565b505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fee5750610fed82611b4f565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490612a69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490612969565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111bb9190612b29565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612a49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906128e9565b60405180910390fd5b6112b3838383611bb9565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190612989565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cf9190612b86565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114339190612b29565b60405180910390a3611446848484611bc9565b50505050565b611455826107e1565b61146681611461610ff5565b611bce565b61147083836119ff565b505050565b61147d610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612ac9565b60405180910390fd5b6114f48282611c6b565b5050565b6000611520836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611d4c565b905092915050565b611530610a29565b61156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690612909565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b3610ff5565b6040516115c09190612856565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190612ae9565b60405180910390fd5b61164660008383611bb9565b80600460008282546116589190612b86565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ae9190612b86565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117139190612b29565b60405180910390a361172760008383611bc9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290612a29565b60405180910390fd5b6117a782600083611bb9565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590612929565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546118869190612c36565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118eb9190612b29565b60405180910390a36118ff83600084611bc9565b505050565b61190c610a29565b1561194c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611943906129a9565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611990610ff5565b60405161199d9190612856565b60405180910390a1565b60006119b68360000183611ed2565b60001c905092915050565b60006119cf82600001611f23565b9050919050565b6119df826107e1565b6119f0816119eb610ff5565b611bce565b6119fa8383611c6b565b505050565b611a098282610bad565b611adb57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a80610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611aeb8383611f34565b611b44578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b49565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611bc4838383610f1e565b505050565b505050565b611bd88282610bad565b611c6757611bfd8173ffffffffffffffffffffffffffffffffffffffff166014611f57565b611c0b8360001c6020611f57565b604051602001611c1c92919061281c565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e91906128a7565b60405180910390fd5b5050565b611c758282610bad565b15611d4857600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ced610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611ec6576000600182611d7e9190612c36565b9050600060018660000180549050611d969190612c36565b9050818114611e51576000866000018281548110611ddd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611e27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611e8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611ecc565b60009150505b92915050565b6000826000018281548110611f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b606060006002836002611f6a9190612bdc565b611f749190612b86565b67ffffffffffffffff811115611fb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fe55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106120cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261210d9190612bdc565b6121179190612b86565b90505b6001811115612203577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061217f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106121bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121fc90612d28565b905061211a565b5060008414612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e906128c9565b60405180910390fd5b8091505092915050565b6000813590506122608161338a565b92915050565b600081359050612275816133a1565b92915050565b60008135905061228a816133b8565b92915050565b60008135905061229f816133cf565b92915050565b6000602082840312156122b757600080fd5b60006122c584828501612251565b91505092915050565b600080604083850312156122e157600080fd5b60006122ef85828601612251565b925050602061230085828601612251565b9150509250929050565b60008060006060848603121561231f57600080fd5b600061232d86828701612251565b935050602061233e86828701612251565b925050604061234f86828701612290565b9150509250925092565b6000806040838503121561236c57600080fd5b600061237a85828601612251565b925050602061238b85828601612290565b9150509250929050565b6000602082840312156123a757600080fd5b60006123b584828501612266565b91505092915050565b600080604083850312156123d157600080fd5b60006123df85828601612266565b92505060206123f085828601612251565b9150509250929050565b6000806040838503121561240d57600080fd5b600061241b85828601612266565b925050602061242c85828601612290565b9150509250929050565b60006020828403121561244857600080fd5b60006124568482850161227b565b91505092915050565b60006020828403121561247157600080fd5b600061247f84828501612290565b91505092915050565b61249181612c6a565b82525050565b6124a081612c7c565b82525050565b6124af81612c88565b82525050565b60006124c082612b5f565b6124ca8185612b6a565b93506124da818560208601612cf5565b6124e381612de2565b840191505092915050565b60006124f982612b5f565b6125038185612b7b565b9350612513818560208601612cf5565b80840191505092915050565b600061252c602083612b6a565b915061253782612df3565b602082019050919050565b600061254f602383612b6a565b915061255a82612e1c565b604082019050919050565b6000612572601483612b6a565b915061257d82612e6b565b602082019050919050565b6000612595602283612b6a565b91506125a082612e94565b604082019050919050565b60006125b8603983612b6a565b91506125c382612ee3565b604082019050919050565b60006125db602283612b6a565b91506125e682612f32565b604082019050919050565b60006125fe602683612b6a565b915061260982612f81565b604082019050919050565b6000612621601083612b6a565b915061262c82612fd0565b602082019050919050565b6000612644602883612b6a565b915061264f82612ff9565b604082019050919050565b6000612667603683612b6a565b915061267282613048565b604082019050919050565b600061268a602483612b6a565b915061269582613097565b604082019050919050565b60006126ad602183612b6a565b91506126b8826130e6565b604082019050919050565b60006126d0602583612b6a565b91506126db82613135565b604082019050919050565b60006126f3602483612b6a565b91506126fe82613184565b604082019050919050565b6000612716603783612b6a565b9150612721826131d3565b604082019050919050565b6000612739601783612b7b565b915061274482613222565b601782019050919050565b600061275c602583612b6a565b91506127678261324b565b604082019050919050565b600061277f601183612b7b565b915061278a8261329a565b601182019050919050565b60006127a2602f83612b6a565b91506127ad826132c3565b604082019050919050565b60006127c5601f83612b6a565b91506127d082613312565b602082019050919050565b60006127e8602a83612b6a565b91506127f38261333b565b604082019050919050565b61280781612cde565b82525050565b61281681612ce8565b82525050565b60006128278261272c565b915061283382856124ee565b915061283e82612772565b915061284a82846124ee565b91508190509392505050565b600060208201905061286b6000830184612488565b92915050565b60006020820190506128866000830184612497565b92915050565b60006020820190506128a160008301846124a6565b92915050565b600060208201905081810360008301526128c181846124b5565b905092915050565b600060208201905081810360008301526128e28161251f565b9050919050565b6000602082019050818103600083015261290281612542565b9050919050565b6000602082019050818103600083015261292281612565565b9050919050565b6000602082019050818103600083015261294281612588565b9050919050565b60006020820190508181036000830152612962816125ab565b9050919050565b60006020820190508181036000830152612982816125ce565b9050919050565b600060208201905081810360008301526129a2816125f1565b9050919050565b600060208201905081810360008301526129c281612614565b9050919050565b600060208201905081810360008301526129e281612637565b9050919050565b60006020820190508181036000830152612a028161265a565b9050919050565b60006020820190508181036000830152612a228161267d565b9050919050565b60006020820190508181036000830152612a42816126a0565b9050919050565b60006020820190508181036000830152612a62816126c3565b9050919050565b60006020820190508181036000830152612a82816126e6565b9050919050565b60006020820190508181036000830152612aa281612709565b9050919050565b60006020820190508181036000830152612ac28161274f565b9050919050565b60006020820190508181036000830152612ae281612795565b9050919050565b60006020820190508181036000830152612b02816127b8565b9050919050565b60006020820190508181036000830152612b22816127db565b9050919050565b6000602082019050612b3e60008301846127fe565b92915050565b6000602082019050612b59600083018461280d565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612b9182612cde565b9150612b9c83612cde565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bd157612bd0612d84565b5b828201905092915050565b6000612be782612cde565b9150612bf283612cde565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c2b57612c2a612d84565b5b828202905092915050565b6000612c4182612cde565b9150612c4c83612cde565b925082821015612c5f57612c5e612d84565b5b828203905092915050565b6000612c7582612cbe565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612d13578082015181840152602081019050612cf8565b83811115612d22576000848401525b50505050565b6000612d3382612cde565b91506000821415612d4757612d46612d84565b5b600182039050919050565b60006002820490506001821680612d6a57607f821691505b60208210811415612d7e57612d7d612db3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f20756e706175736500000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f7665206d696e74657220726f6c6520746f206d696e7400000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f207061757365000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b61339381612c6a565b811461339e57600080fd5b50565b6133aa81612c88565b81146133b557600080fd5b50565b6133c181612c92565b81146133cc57600080fd5b50565b6133d881612cde565b81146133e357600080fd5b5056fea26469706673582212200e51264814b0d218c0807529d795a96ad9c94c14ceee829730d7e335ce40d1c564736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a457c2d711610097578063d539139311610071578063d53913931461052d578063d547741f1461054b578063dd62ed3e14610567578063e63ab1e914610597576101c4565b8063a457c2d71461049d578063a9059cbb146104cd578063ca15c873146104fd576101c4565b80639010d07c116100d35780639010d07c1461040157806391d148541461043157806395d89b4114610461578063a217fddf1461047f576101c4565b806370a08231146103ab57806379cc6790146103db5780638456cb59146103f7576101c4565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a1461034b57806340c10f191461035557806342966c68146103715780635c975abb1461038d576101c4565b8063313ce567146102e157806336568abe146102ff578063395093511461031b576101c4565b806318160ddd116101a257806318160ddd1461024757806323b872dd14610265578063248a9ca3146102955780632f2ff15d146102c5576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063095ea7b314610217575b600080fd5b6101e360048036038101906101de9190612436565b6105b5565b6040516101f09190612871565b60405180910390f35b61020161062f565b60405161020e91906128a7565b60405180910390f35b610231600480360381019061022c9190612359565b6106c1565b60405161023e9190612871565b60405180910390f35b61024f6106df565b60405161025c9190612b29565b60405180910390f35b61027f600480360381019061027a919061230a565b6106e9565b60405161028c9190612871565b60405180910390f35b6102af60048036038101906102aa9190612395565b6107e1565b6040516102bc919061288c565b60405180910390f35b6102df60048036038101906102da91906123be565b610800565b005b6102e9610834565b6040516102f69190612b44565b60405180910390f35b610319600480360381019061031491906123be565b61083d565b005b61033560048036038101906103309190612359565b610871565b6040516103429190612871565b60405180910390f35b61035361091d565b005b61036f600480360381019061036a9190612359565b610997565b005b61038b6004803603810190610386919061245f565b610a15565b005b610395610a29565b6040516103a29190612871565b60405180910390f35b6103c560048036038101906103c091906122a5565b610a40565b6040516103d29190612b29565b60405180910390f35b6103f560048036038101906103f09190612359565b610a89565b005b6103ff610b04565b005b61041b600480360381019061041691906123fa565b610b7e565b6040516104289190612856565b60405180910390f35b61044b600480360381019061044691906123be565b610bad565b6040516104589190612871565b60405180910390f35b610469610c17565b60405161047691906128a7565b60405180910390f35b610487610ca9565b604051610494919061288c565b60405180910390f35b6104b760048036038101906104b29190612359565b610cb0565b6040516104c49190612871565b60405180910390f35b6104e760048036038101906104e29190612359565b610d9b565b6040516104f49190612871565b60405180910390f35b61051760048036038101906105129190612395565b610db9565b6040516105249190612b29565b60405180910390f35b610535610ddd565b604051610542919061288c565b60405180910390f35b610565600480360381019061056091906123be565b610e01565b005b610581600480360381019061057c91906122ce565b610e35565b60405161058e9190612b29565b60405180910390f35b61059f610ebc565b6040516105ac919061288c565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610628575061062782610f7b565b5b9050919050565b60606005805461063e90612d52565b80601f016020809104026020016040519081016040528092919081815260200182805461066a90612d52565b80156106b75780601f1061068c576101008083540402835291602001916106b7565b820191906000526020600020905b81548152906001019060200180831161069a57829003601f168201915b5050505050905090565b60006106d56106ce610ff5565b8484610ffd565b6001905092915050565b6000600454905090565b60006106f68484846111c8565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610741610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b8906129c9565b60405180910390fd5b6107d5856107cd610ff5565b858403610ffd565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b61080a828261144c565b61082f8160016000858152602001908152602001600020610eee90919063ffffffff16565b505050565b60006012905090565b6108478282611475565b61086c81600160008581526020019081526020016000206114f890919063ffffffff16565b505050565b600061091361087e610ff5565b84846003600061088c610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090e9190612b86565b610ffd565b6001905092915050565b61094e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610949610ff5565b610bad565b61098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490612949565b60405180910390fd5b610995611528565b565b6109c87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109c3610ff5565b610bad565b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe906129e9565b60405180910390fd5b610a1182826115ca565b5050565b610a26610a20610ff5565b8261172b565b50565b6000600760009054906101000a900460ff16905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610a9c83610a97610ff5565b610e35565b905081811015610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890612a09565b60405180910390fd5b610af583610aed610ff5565b848403610ffd565b610aff838361172b565b505050565b610b357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b30610ff5565b610bad565b610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b90612a89565b60405180910390fd5b610b7c611904565b565b6000610ba582600160008681526020019081526020016000206119a790919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610c2690612d52565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5290612d52565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b5050505050905090565b6000801b81565b60008060036000610cbf610ff5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612aa9565b60405180910390fd5b610d90610d87610ff5565b85858403610ffd565b600191505092915050565b6000610daf610da8610ff5565b84846111c8565b6001905092915050565b6000610dd6600160008481526020019081526020016000206119c1565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610e0b82826119d6565b610e3081600160008581526020019081526020016000206114f890919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610eea82826119ff565b5050565b6000610f16836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611adf565b905092915050565b610f29838383610f76565b610f31610a29565b15610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612b09565b60405180910390fd5b505050565b505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fee5750610fed82611b4f565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561106d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106490612a69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d490612969565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111bb9190612b29565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612a49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906128e9565b60405180910390fd5b6112b3838383611bb9565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190612989565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cf9190612b86565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114339190612b29565b60405180910390a3611446848484611bc9565b50505050565b611455826107e1565b61146681611461610ff5565b611bce565b61147083836119ff565b505050565b61147d610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612ac9565b60405180910390fd5b6114f48282611c6b565b5050565b6000611520836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611d4c565b905092915050565b611530610a29565b61156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690612909565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b3610ff5565b6040516115c09190612856565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190612ae9565b60405180910390fd5b61164660008383611bb9565b80600460008282546116589190612b86565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116ae9190612b86565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117139190612b29565b60405180910390a361172760008383611bc9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290612a29565b60405180910390fd5b6117a782600083611bb9565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590612929565b60405180910390fd5b818103600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546118869190612c36565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118eb9190612b29565b60405180910390a36118ff83600084611bc9565b505050565b61190c610a29565b1561194c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611943906129a9565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611990610ff5565b60405161199d9190612856565b60405180910390a1565b60006119b68360000183611ed2565b60001c905092915050565b60006119cf82600001611f23565b9050919050565b6119df826107e1565b6119f0816119eb610ff5565b611bce565b6119fa8383611c6b565b505050565b611a098282610bad565b611adb57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611a80610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611aeb8383611f34565b611b44578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611b49565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611bc4838383610f1e565b505050565b505050565b611bd88282610bad565b611c6757611bfd8173ffffffffffffffffffffffffffffffffffffffff166014611f57565b611c0b8360001c6020611f57565b604051602001611c1c92919061281c565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e91906128a7565b60405180910390fd5b5050565b611c758282610bad565b15611d4857600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ced610ff5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611ec6576000600182611d7e9190612c36565b9050600060018660000180549050611d969190612c36565b9050818114611e51576000866000018281548110611ddd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611e27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611e8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611ecc565b60009150505b92915050565b6000826000018281548110611f10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b606060006002836002611f6a9190612bdc565b611f749190612b86565b67ffffffffffffffff811115611fb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fe55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106120cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261210d9190612bdc565b6121179190612b86565b90505b6001811115612203577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061217f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106121bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806121fc90612d28565b905061211a565b5060008414612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e906128c9565b60405180910390fd5b8091505092915050565b6000813590506122608161338a565b92915050565b600081359050612275816133a1565b92915050565b60008135905061228a816133b8565b92915050565b60008135905061229f816133cf565b92915050565b6000602082840312156122b757600080fd5b60006122c584828501612251565b91505092915050565b600080604083850312156122e157600080fd5b60006122ef85828601612251565b925050602061230085828601612251565b9150509250929050565b60008060006060848603121561231f57600080fd5b600061232d86828701612251565b935050602061233e86828701612251565b925050604061234f86828701612290565b9150509250925092565b6000806040838503121561236c57600080fd5b600061237a85828601612251565b925050602061238b85828601612290565b9150509250929050565b6000602082840312156123a757600080fd5b60006123b584828501612266565b91505092915050565b600080604083850312156123d157600080fd5b60006123df85828601612266565b92505060206123f085828601612251565b9150509250929050565b6000806040838503121561240d57600080fd5b600061241b85828601612266565b925050602061242c85828601612290565b9150509250929050565b60006020828403121561244857600080fd5b60006124568482850161227b565b91505092915050565b60006020828403121561247157600080fd5b600061247f84828501612290565b91505092915050565b61249181612c6a565b82525050565b6124a081612c7c565b82525050565b6124af81612c88565b82525050565b60006124c082612b5f565b6124ca8185612b6a565b93506124da818560208601612cf5565b6124e381612de2565b840191505092915050565b60006124f982612b5f565b6125038185612b7b565b9350612513818560208601612cf5565b80840191505092915050565b600061252c602083612b6a565b915061253782612df3565b602082019050919050565b600061254f602383612b6a565b915061255a82612e1c565b604082019050919050565b6000612572601483612b6a565b915061257d82612e6b565b602082019050919050565b6000612595602283612b6a565b91506125a082612e94565b604082019050919050565b60006125b8603983612b6a565b91506125c382612ee3565b604082019050919050565b60006125db602283612b6a565b91506125e682612f32565b604082019050919050565b60006125fe602683612b6a565b915061260982612f81565b604082019050919050565b6000612621601083612b6a565b915061262c82612fd0565b602082019050919050565b6000612644602883612b6a565b915061264f82612ff9565b604082019050919050565b6000612667603683612b6a565b915061267282613048565b604082019050919050565b600061268a602483612b6a565b915061269582613097565b604082019050919050565b60006126ad602183612b6a565b91506126b8826130e6565b604082019050919050565b60006126d0602583612b6a565b91506126db82613135565b604082019050919050565b60006126f3602483612b6a565b91506126fe82613184565b604082019050919050565b6000612716603783612b6a565b9150612721826131d3565b604082019050919050565b6000612739601783612b7b565b915061274482613222565b601782019050919050565b600061275c602583612b6a565b91506127678261324b565b604082019050919050565b600061277f601183612b7b565b915061278a8261329a565b601182019050919050565b60006127a2602f83612b6a565b91506127ad826132c3565b604082019050919050565b60006127c5601f83612b6a565b91506127d082613312565b602082019050919050565b60006127e8602a83612b6a565b91506127f38261333b565b604082019050919050565b61280781612cde565b82525050565b61281681612ce8565b82525050565b60006128278261272c565b915061283382856124ee565b915061283e82612772565b915061284a82846124ee565b91508190509392505050565b600060208201905061286b6000830184612488565b92915050565b60006020820190506128866000830184612497565b92915050565b60006020820190506128a160008301846124a6565b92915050565b600060208201905081810360008301526128c181846124b5565b905092915050565b600060208201905081810360008301526128e28161251f565b9050919050565b6000602082019050818103600083015261290281612542565b9050919050565b6000602082019050818103600083015261292281612565565b9050919050565b6000602082019050818103600083015261294281612588565b9050919050565b60006020820190508181036000830152612962816125ab565b9050919050565b60006020820190508181036000830152612982816125ce565b9050919050565b600060208201905081810360008301526129a2816125f1565b9050919050565b600060208201905081810360008301526129c281612614565b9050919050565b600060208201905081810360008301526129e281612637565b9050919050565b60006020820190508181036000830152612a028161265a565b9050919050565b60006020820190508181036000830152612a228161267d565b9050919050565b60006020820190508181036000830152612a42816126a0565b9050919050565b60006020820190508181036000830152612a62816126c3565b9050919050565b60006020820190508181036000830152612a82816126e6565b9050919050565b60006020820190508181036000830152612aa281612709565b9050919050565b60006020820190508181036000830152612ac28161274f565b9050919050565b60006020820190508181036000830152612ae281612795565b9050919050565b60006020820190508181036000830152612b02816127b8565b9050919050565b60006020820190508181036000830152612b22816127db565b9050919050565b6000602082019050612b3e60008301846127fe565b92915050565b6000602082019050612b59600083018461280d565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000612b9182612cde565b9150612b9c83612cde565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bd157612bd0612d84565b5b828201905092915050565b6000612be782612cde565b9150612bf283612cde565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c2b57612c2a612d84565b5b828202905092915050565b6000612c4182612cde565b9150612c4c83612cde565b925082821015612c5f57612c5e612d84565b5b828203905092915050565b6000612c7582612cbe565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612d13578082015181840152602081019050612cf8565b83811115612d22576000848401525b50505050565b6000612d3382612cde565b91506000821415612d4757612d46612d84565b5b600182039050919050565b60006002820490506001821680612d6a57607f821691505b60208210811415612d7e57612d7d612db3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f20756e706175736500000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f7665206d696e74657220726f6c6520746f206d696e7400000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305072657365744d696e7465725061757365723a206d75737420686160008201527f76652070617573657220726f6c6520746f207061757365000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b61339381612c6a565b811461339e57600080fd5b50565b6133aa81612c88565b81146133b557600080fd5b50565b6133c181612c92565b81146133cc57600080fd5b50565b6133d881612cde565b81146133e357600080fd5b5056fea26469706673582212200e51264814b0d218c0807529d795a96ad9c94c14ceee829730d7e335ce40d1c564736f6c63430008040033
Deployed Bytecode Sourcemap
99:268:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;534:212:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2063:98:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4160:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3151:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4793:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3882:121:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1861:193:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3000:91:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2430:202:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5666:212:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2391:175:7;;;:::i;:::-;;1610:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;473:89:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1034:84:14;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3315:125:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;868:361:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2015:169:7;;;:::i;:::-;;1331:143:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2799:137:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2274:102:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1917:49:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6365:405:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3643:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1642:132:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;877:62:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2142:198:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3873:149:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;945:62:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;534:212:1;619:4;657:42;642:57;;;:11;:57;;;;:97;;;;703:36;727:11;703:23;:36::i;:::-;642:97;635:104;;534:212;;;:::o;2063:98:4:-;2117:13;2149:5;2142:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2063:98;:::o;4160:166::-;4243:4;4259:39;4268:12;:10;:12::i;:::-;4282:7;4291:6;4259:8;:39::i;:::-;4315:4;4308:11;;4160:166;;;;:::o;3151:106::-;3212:7;3238:12;;3231:19;;3151:106;:::o;4793:478::-;4929:4;4945:36;4955:6;4963:9;4974:6;4945:9;:36::i;:::-;4992:24;5019:11;:19;5031:6;5019:19;;;;;;;;;;;;;;;:33;5039:12;:10;:12::i;:::-;5019:33;;;;;;;;;;;;;;;;4992:60;;5090:6;5070:16;:26;;5062:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5175:57;5184:6;5192:12;:10;:12::i;:::-;5225:6;5206:16;:25;5175:8;:57::i;:::-;5260:4;5253:11;;;4793:478;;;;;:::o;3882:121:0:-;3948:7;3974:6;:12;3981:4;3974:12;;;;;;;;;;;:22;;;3967:29;;3882:121;;;:::o;1861:193:1:-;1976:30;1992:4;1998:7;1976:15;:30::i;:::-;2016:31;2039:7;2016:12;:18;2029:4;2016:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;1861:193;;:::o;3000:91:4:-;3058:5;3082:2;3075:9;;3000:91;:::o;2430:202:1:-;2548:33;2567:4;2573:7;2548:18;:33::i;:::-;2591:34;2617:7;2591:12;:18;2604:4;2591:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;2430:202;;:::o;5666:212:4:-;5754:4;5770:80;5779:12;:10;:12::i;:::-;5793:7;5839:10;5802:11;:25;5814:12;:10;:12::i;:::-;5802:25;;;;;;;;;;;;;;;:34;5828:7;5802:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5770:8;:80::i;:::-;5867:4;5860:11;;5666:212;;;;:::o;2391:175:7:-;2443:34;983:24;2464:12;:10;:12::i;:::-;2443:7;:34::i;:::-;2435:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;2549:10;:8;:10::i;:::-;2391:175::o;1610:202::-;1685:34;915:24;1706:12;:10;:12::i;:::-;1685:7;:34::i;:::-;1677:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;1788:17;1794:2;1798:6;1788:5;:17::i;:::-;1610:202;;:::o;473:89:5:-;528:27;534:12;:10;:12::i;:::-;548:6;528:5;:27::i;:::-;473:89;:::o;1034:84:14:-;1081:4;1104:7;;;;;;;;;;;1097:14;;1034:84;:::o;3315:125:4:-;3389:7;3415:9;:18;3425:7;3415:18;;;;;;;;;;;;;;;;3408:25;;3315:125;;;:::o;868:361:5:-;944:24;971:32;981:7;990:12;:10;:12::i;:::-;971:9;:32::i;:::-;944:59;;1041:6;1021:16;:26;;1013:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1122:58;1131:7;1140:12;:10;:12::i;:::-;1173:6;1154:16;:25;1122:8;:58::i;:::-;1200:22;1206:7;1215:6;1200:5;:22::i;:::-;868:361;;;:::o;2015:169:7:-;2065:34;983:24;2086:12;:10;:12::i;:::-;2065:7;:34::i;:::-;2057:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;2169:8;:6;:8::i;:::-;2015:169::o;1331:143:1:-;1413:7;1439:28;1461:5;1439:12;:18;1452:4;1439:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;1432:35;;1331:143;;;;:::o;2799:137:0:-;2877:4;2900:6;:12;2907:4;2900:12;;;;;;;;;;;:20;;:29;2921:7;2900:29;;;;;;;;;;;;;;;;;;;;;;;;;2893:36;;2799:137;;;;:::o;2274:102:4:-;2330:13;2362:7;2355:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2274:102;:::o;1917:49:0:-;1962:4;1917:49;;;:::o;6365:405:4:-;6458:4;6474:24;6501:11;:25;6513:12;:10;:12::i;:::-;6501:25;;;;;;;;;;;;;;;:34;6527:7;6501:34;;;;;;;;;;;;;;;;6474:61;;6573:15;6553:16;:35;;6545:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6664:67;6673:12;:10;:12::i;:::-;6687:7;6715:15;6696:16;:34;6664:8;:67::i;:::-;6759:4;6752:11;;;6365:405;;;;:::o;3643:172::-;3729:4;3745:42;3755:12;:10;:12::i;:::-;3769:9;3780:6;3745:9;:42::i;:::-;3804:4;3797:11;;3643:172;;;;:::o;1642:132:1:-;1714:7;1740:27;:12;:18;1753:4;1740:18;;;;;;;;;;;:25;:27::i;:::-;1733:34;;1642:132;;;:::o;877:62:7:-;915:24;877:62;:::o;2142:198:1:-;2258:31;2275:4;2281:7;2258:16;:31::i;:::-;2299:34;2325:7;2299:12;:18;2312:4;2299:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;2142:198;;:::o;3873:149:4:-;3962:7;3988:11;:18;4000:5;3988:18;;;;;;;;;;;;;;;:27;4007:7;3988:27;;;;;;;;;;;;;;;;3981:34;;3873:149;;;;:::o;945:62:7:-;983:24;945:62;:::o;6049:110:0:-;6127:25;6138:4;6144:7;6127:10;:25::i;:::-;6049:110;;:::o;7545:150:8:-;7615:4;7638:50;7643:3;:10;;7679:5;7663:23;;7655:32;;7638:4;:50::i;:::-;7631:57;;7545:150;;;;:::o;572:264:6:-;710:44;737:4;743:2;747:6;710:26;:44::i;:::-;774:8;:6;:8::i;:::-;773:9;765:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;572:264;;;:::o;10895:121:4:-;;;;:::o;2510:202:0:-;2595:4;2633:32;2618:47;;;:11;:47;;;;:87;;;;2669:36;2693:11;2669:23;:36::i;:::-;2618:87;2611:94;;2510:202;;;:::o;587:96:2:-;640:7;666:10;659:17;;587:96;:::o;9941:370:4:-;10089:1;10072:19;;:5;:19;;;;10064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10169:1;10150:21;;:7;:21;;;;10142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10251:6;10221:11;:18;10233:5;10221:18;;;;;;;;;;;;;;;:27;10240:7;10221:27;;;;;;;;;;;;;;;:36;;;;10288:7;10272:32;;10281:5;10272:32;;;10297:6;10272:32;;;;;;:::i;:::-;;;;;;;;9941:370;;;:::o;7244:713::-;7397:1;7379:20;;:6;:20;;;;7371:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7480:1;7459:23;;:9;:23;;;;7451:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7533:47;7554:6;7562:9;7573:6;7533:20;:47::i;:::-;7591:21;7615:9;:17;7625:6;7615:17;;;;;;;;;;;;;;;;7591:41;;7667:6;7650:13;:23;;7642:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7786:6;7770:13;:22;7750:9;:17;7760:6;7750:17;;;;;;;;;;;;;;;:42;;;;7836:6;7812:9;:20;7822:9;7812:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7875:9;7858:35;;7867:6;7858:35;;;7886:6;7858:35;;;;;;:::i;:::-;;;;;;;;7904:46;7924:6;7932:9;7943:6;7904:19;:46::i;:::-;7244:713;;;;:::o;4253:145:0:-;4336:18;4349:4;4336:12;:18::i;:::-;2395:30;2406:4;2412:12;:10;:12::i;:::-;2395:10;:30::i;:::-;4366:25:::1;4377:4;4383:7;4366:10;:25::i;:::-;4253:145:::0;;;:::o;5270:214::-;5376:12;:10;:12::i;:::-;5365:23;;:7;:23;;;5357:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5451:26;5463:4;5469:7;5451:11;:26::i;:::-;5270:214;;:::o;7863:156:8:-;7936:4;7959:53;7967:3;:10;;8003:5;7987:23;;7979:32;;7959:7;:53::i;:::-;7952:60;;7863:156;;;;:::o;2046:117:14:-;1613:8;:6;:8::i;:::-;1605:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2114:5:::1;2104:7;;:15;;;;;;;;;;;;;;;;;;2134:22;2143:12;:10;:12::i;:::-;2134:22;;;;;;:::i;:::-;;;;;;;;2046:117::o:0;8233:389:4:-;8335:1;8316:21;;:7;:21;;;;8308:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8384:49;8413:1;8417:7;8426:6;8384:20;:49::i;:::-;8460:6;8444:12;;:22;;;;;;;:::i;:::-;;;;;;;;8498:6;8476:9;:18;8486:7;8476:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8540:7;8519:37;;8536:1;8519:37;;;8549:6;8519:37;;;;;;:::i;:::-;;;;;;;;8567:48;8595:1;8599:7;8608:6;8567:19;:48::i;:::-;8233:389;;:::o;8942:576::-;9044:1;9025:21;;:7;:21;;;;9017:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9095:49;9116:7;9133:1;9137:6;9095:20;:49::i;:::-;9155:22;9180:9;:18;9190:7;9180:18;;;;;;;;;;;;;;;;9155:43;;9234:6;9216:14;:24;;9208:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9351:6;9334:14;:23;9313:9;:18;9323:7;9313:18;;;;;;;;;;;;;;;:44;;;;9393:6;9377:12;;:22;;;;;;;:::i;:::-;;;;;;;;9441:1;9415:37;;9424:7;9415:37;;;9445:6;9415:37;;;;;;:::i;:::-;;;;;;;;9463:48;9483:7;9500:1;9504:6;9463:19;:48::i;:::-;8942:576;;;:::o;1799:115:14:-;1348:8;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1868:4:::1;1858:7;;:14;;;;;;;;;;;;;;;;;;1887:20;1894:12;:10;:12::i;:::-;1887:20;;;;;;:::i;:::-;;;;;;;;1799:115::o:0;8803:156:8:-;8877:7;8927:22;8931:3;:10;;8943:5;8927:3;:22::i;:::-;8919:31;;8896:56;;8803:156;;;;:::o;8346:115::-;8409:7;8435:19;8443:3;:10;;8435:7;:19::i;:::-;8428:26;;8346:115;;;:::o;4632:147:0:-;4716:18;4729:4;4716:12;:18::i;:::-;2395:30;2406:4;2412:12;:10;:12::i;:::-;2395:10;:30::i;:::-;4746:26:::1;4758:4;4764:7;4746:11;:26::i;:::-;4632:147:::0;;;:::o;6537:224::-;6611:22;6619:4;6625:7;6611;:22::i;:::-;6606:149;;6681:4;6649:6;:12;6656:4;6649:12;;;;;;;;;;;:20;;:29;6670:7;6649:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;6731:12;:10;:12::i;:::-;6704:40;;6722:7;6704:40;;6716:4;6704:40;;;;;;;;;;6606:149;6537:224;;:::o;1630:404:8:-;1693:4;1714:21;1724:3;1729:5;1714:9;:21::i;:::-;1709:319;;1751:3;:11;;1768:5;1751:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:3;:11;;:18;;;;1909:3;:12;;:19;1922:5;1909:19;;;;;;;;;;;:40;;;;1970:4;1963:11;;;;1709:319;2012:5;2005:12;;1630:404;;;;;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2572:211:7:-;2732:44;2759:4;2765:2;2769:6;2732:26;:44::i;:::-;2572:211;;;:::o;11604:120:4:-;;;;:::o;3217:484:0:-;3297:22;3305:4;3311:7;3297;:22::i;:::-;3292:403;;3480:41;3508:7;3480:41;;3518:2;3480:19;:41::i;:::-;3592:38;3620:4;3612:13;;3627:2;3592:19;:38::i;:::-;3387:265;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3335:349;;;;;;;;;;;:::i;:::-;;;;;;;;3292:403;3217:484;;:::o;6767:225::-;6841:22;6849:4;6855:7;6841;:22::i;:::-;6837:149;;;6911:5;6879:6;:12;6886:4;6879:12;;;;;;;;;;;:20;;:29;6900:7;6879:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;6962:12;:10;:12::i;:::-;6935:40;;6953:7;6935:40;;6947:4;6935:40;;;;;;;;;;6837:149;6767:225;;:::o;2202:1388:8:-;2268:4;2384:18;2405:3;:12;;:19;2418:5;2405:19;;;;;;;;;;;;2384:40;;2453:1;2439:10;:15;2435:1149;;2808:21;2845:1;2832:10;:14;;;;:::i;:::-;2808:38;;2860:17;2901:1;2880:3;:11;;:18;;;;:22;;;;:::i;:::-;2860:42;;2934:13;2921:9;:26;2917:398;;2967:17;2987:3;:11;;2999:9;2987:22;;;;;;;;;;;;;;;;;;;;;;;;2967:42;;3138:9;3109:3;:11;;3121:13;3109:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;3247:10;3221:3;:12;;:23;3234:9;3221:23;;;;;;;;;;;:36;;;;2917:398;;3393:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3485:3;:12;;:19;3498:5;3485:19;;;;;;;;;;;3478:26;;;3526:4;3519:11;;;;;;;2435:1149;3568:5;3561:12;;;2202:1388;;;;;:::o;4328:118::-;4395:7;4421:3;:11;;4433:5;4421:18;;;;;;;;;;;;;;;;;;;;;;;;4414:25;;4328:118;;;;:::o;3879:107::-;3935:7;3961:3;:11;;:18;;;;3954:25;;3879:107;;;:::o;3671:127::-;3744:4;3790:1;3767:3;:12;;:19;3780:5;3767:19;;;;;;;;;;;;:24;;3760:31;;3671:127;;;;:::o;1535:441:16:-;1610:13;1635:19;1680:1;1671:6;1667:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1657:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:47;;1692:15;:6;1699:1;1692:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;1717;:6;1724:1;1717:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;1747:9;1772:1;1763:6;1759:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1747:26;;1742:132;1779:1;1775;:5;1742:132;;;1813:12;1834:3;1826:5;:11;1813:25;;;;;;;;;;;;;;;;;;1801:6;1808:1;1801:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;1862:1;1852:11;;;;;1782:3;;;;:::i;:::-;;;1742:132;;;;1900:1;1891:5;:10;1883:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:6;1948:21;;;1535:441;;;;:::o;7:139:17:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;342:5;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;921:6;929;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;1343:6;1351;1359;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;1892:6;1900;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;2296:6;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;2573:6;2581;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:407::-;2986:6;2994;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;3059:1;3056;3049:12;3011:2;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;3229:2;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3200:118;3001:324;;;;;:::o;3331:260::-;3389:6;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3454:1;3451;3444:12;3406:2;3497:1;3522:52;3566:7;3557:6;3546:9;3542:22;3522:52;:::i;:::-;3512:62;;3468:116;3396:195;;;;:::o;3597:262::-;3656:6;3705:2;3693:9;3684:7;3680:23;3676:32;3673:2;;;3721:1;3718;3711:12;3673:2;3764:1;3789:53;3834:7;3825:6;3814:9;3810:22;3789:53;:::i;:::-;3779:63;;3735:117;3663:196;;;;:::o;3865:118::-;3952:24;3970:5;3952:24;:::i;:::-;3947:3;3940:37;3930:53;;:::o;3989:109::-;4070:21;4085:5;4070:21;:::i;:::-;4065:3;4058:34;4048:50;;:::o;4104:118::-;4191:24;4209:5;4191:24;:::i;:::-;4186:3;4179:37;4169:53;;:::o;4228:364::-;4316:3;4344:39;4377:5;4344:39;:::i;:::-;4399:71;4463:6;4458:3;4399:71;:::i;:::-;4392:78;;4479:52;4524:6;4519:3;4512:4;4505:5;4501:16;4479:52;:::i;:::-;4556:29;4578:6;4556:29;:::i;:::-;4551:3;4547:39;4540:46;;4320:272;;;;;:::o;4598:377::-;4704:3;4732:39;4765:5;4732:39;:::i;:::-;4787:89;4869:6;4864:3;4787:89;:::i;:::-;4780:96;;4885:52;4930:6;4925:3;4918:4;4911:5;4907:16;4885:52;:::i;:::-;4962:6;4957:3;4953:16;4946:23;;4708:267;;;;;:::o;4981:366::-;5123:3;5144:67;5208:2;5203:3;5144:67;:::i;:::-;5137:74;;5220:93;5309:3;5220:93;:::i;:::-;5338:2;5333:3;5329:12;5322:19;;5127:220;;;:::o;5353:366::-;5495:3;5516:67;5580:2;5575:3;5516:67;:::i;:::-;5509:74;;5592:93;5681:3;5592:93;:::i;:::-;5710:2;5705:3;5701:12;5694:19;;5499:220;;;:::o;5725:366::-;5867:3;5888:67;5952:2;5947:3;5888:67;:::i;:::-;5881:74;;5964:93;6053:3;5964:93;:::i;:::-;6082:2;6077:3;6073:12;6066:19;;5871:220;;;:::o;6097:366::-;6239:3;6260:67;6324:2;6319:3;6260:67;:::i;:::-;6253:74;;6336:93;6425:3;6336:93;:::i;:::-;6454:2;6449:3;6445:12;6438:19;;6243:220;;;:::o;6469:366::-;6611:3;6632:67;6696:2;6691:3;6632:67;:::i;:::-;6625:74;;6708:93;6797:3;6708:93;:::i;:::-;6826:2;6821:3;6817:12;6810:19;;6615:220;;;:::o;6841:366::-;6983:3;7004:67;7068:2;7063:3;7004:67;:::i;:::-;6997:74;;7080:93;7169:3;7080:93;:::i;:::-;7198:2;7193:3;7189:12;7182:19;;6987:220;;;:::o;7213:366::-;7355:3;7376:67;7440:2;7435:3;7376:67;:::i;:::-;7369:74;;7452:93;7541:3;7452:93;:::i;:::-;7570:2;7565:3;7561:12;7554:19;;7359:220;;;:::o;7585:366::-;7727:3;7748:67;7812:2;7807:3;7748:67;:::i;:::-;7741:74;;7824:93;7913:3;7824:93;:::i;:::-;7942:2;7937:3;7933:12;7926:19;;7731:220;;;:::o;7957:366::-;8099:3;8120:67;8184:2;8179:3;8120:67;:::i;:::-;8113:74;;8196:93;8285:3;8196:93;:::i;:::-;8314:2;8309:3;8305:12;8298:19;;8103:220;;;:::o;8329:366::-;8471:3;8492:67;8556:2;8551:3;8492:67;:::i;:::-;8485:74;;8568:93;8657:3;8568:93;:::i;:::-;8686:2;8681:3;8677:12;8670:19;;8475:220;;;:::o;8701:366::-;8843:3;8864:67;8928:2;8923:3;8864:67;:::i;:::-;8857:74;;8940:93;9029:3;8940:93;:::i;:::-;9058:2;9053:3;9049:12;9042:19;;8847:220;;;:::o;9073:366::-;9215:3;9236:67;9300:2;9295:3;9236:67;:::i;:::-;9229:74;;9312:93;9401:3;9312:93;:::i;:::-;9430:2;9425:3;9421:12;9414:19;;9219:220;;;:::o;9445:366::-;9587:3;9608:67;9672:2;9667:3;9608:67;:::i;:::-;9601:74;;9684:93;9773:3;9684:93;:::i;:::-;9802:2;9797:3;9793:12;9786:19;;9591:220;;;:::o;9817:366::-;9959:3;9980:67;10044:2;10039:3;9980:67;:::i;:::-;9973:74;;10056:93;10145:3;10056:93;:::i;:::-;10174:2;10169:3;10165:12;10158:19;;9963:220;;;:::o;10189:366::-;10331:3;10352:67;10416:2;10411:3;10352:67;:::i;:::-;10345:74;;10428:93;10517:3;10428:93;:::i;:::-;10546:2;10541:3;10537:12;10530:19;;10335:220;;;:::o;10561:402::-;10721:3;10742:85;10824:2;10819:3;10742:85;:::i;:::-;10735:92;;10836:93;10925:3;10836:93;:::i;:::-;10954:2;10949:3;10945:12;10938:19;;10725:238;;;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;11115:220;;;:::o;11341:402::-;11501:3;11522:85;11604:2;11599:3;11522:85;:::i;:::-;11515:92;;11616:93;11705:3;11616:93;:::i;:::-;11734:2;11729:3;11725:12;11718:19;;11505:238;;;:::o;11749:366::-;11891:3;11912:67;11976:2;11971:3;11912:67;:::i;:::-;11905:74;;11988:93;12077:3;11988:93;:::i;:::-;12106:2;12101:3;12097:12;12090:19;;11895:220;;;:::o;12121:366::-;12263:3;12284:67;12348:2;12343:3;12284:67;:::i;:::-;12277:74;;12360:93;12449:3;12360:93;:::i;:::-;12478:2;12473:3;12469:12;12462:19;;12267:220;;;:::o;12493:366::-;12635:3;12656:67;12720:2;12715:3;12656:67;:::i;:::-;12649:74;;12732:93;12821:3;12732:93;:::i;:::-;12850:2;12845:3;12841:12;12834:19;;12639:220;;;:::o;12865:118::-;12952:24;12970:5;12952:24;:::i;:::-;12947:3;12940:37;12930:53;;:::o;12989:112::-;13072:22;13088:5;13072:22;:::i;:::-;13067:3;13060:35;13050:51;;:::o;13107:967::-;13489:3;13511:148;13655:3;13511:148;:::i;:::-;13504:155;;13676:95;13767:3;13758:6;13676:95;:::i;:::-;13669:102;;13788:148;13932:3;13788:148;:::i;:::-;13781:155;;13953:95;14044:3;14035:6;13953:95;:::i;:::-;13946:102;;14065:3;14058:10;;13493:581;;;;;:::o;14080:222::-;14173:4;14211:2;14200:9;14196:18;14188:26;;14224:71;14292:1;14281:9;14277:17;14268:6;14224:71;:::i;:::-;14178:124;;;;:::o;14308:210::-;14395:4;14433:2;14422:9;14418:18;14410:26;;14446:65;14508:1;14497:9;14493:17;14484:6;14446:65;:::i;:::-;14400:118;;;;:::o;14524:222::-;14617:4;14655:2;14644:9;14640:18;14632:26;;14668:71;14736:1;14725:9;14721:17;14712:6;14668:71;:::i;:::-;14622:124;;;;:::o;14752:313::-;14865:4;14903:2;14892:9;14888:18;14880:26;;14952:9;14946:4;14942:20;14938:1;14927:9;14923:17;14916:47;14980:78;15053:4;15044:6;14980:78;:::i;:::-;14972:86;;14870:195;;;;:::o;15071:419::-;15237:4;15275:2;15264:9;15260:18;15252:26;;15324:9;15318:4;15314:20;15310:1;15299:9;15295:17;15288:47;15352:131;15478:4;15352:131;:::i;:::-;15344:139;;15242:248;;;:::o;15496:419::-;15662:4;15700:2;15689:9;15685:18;15677:26;;15749:9;15743:4;15739:20;15735:1;15724:9;15720:17;15713:47;15777:131;15903:4;15777:131;:::i;:::-;15769:139;;15667:248;;;:::o;15921:419::-;16087:4;16125:2;16114:9;16110:18;16102:26;;16174:9;16168:4;16164:20;16160:1;16149:9;16145:17;16138:47;16202:131;16328:4;16202:131;:::i;:::-;16194:139;;16092:248;;;:::o;16346:419::-;16512:4;16550:2;16539:9;16535:18;16527:26;;16599:9;16593:4;16589:20;16585:1;16574:9;16570:17;16563:47;16627:131;16753:4;16627:131;:::i;:::-;16619:139;;16517:248;;;:::o;16771:419::-;16937:4;16975:2;16964:9;16960:18;16952:26;;17024:9;17018:4;17014:20;17010:1;16999:9;16995:17;16988:47;17052:131;17178:4;17052:131;:::i;:::-;17044:139;;16942:248;;;:::o;17196:419::-;17362:4;17400:2;17389:9;17385:18;17377:26;;17449:9;17443:4;17439:20;17435:1;17424:9;17420:17;17413:47;17477:131;17603:4;17477:131;:::i;:::-;17469:139;;17367:248;;;:::o;17621:419::-;17787:4;17825:2;17814:9;17810:18;17802:26;;17874:9;17868:4;17864:20;17860:1;17849:9;17845:17;17838:47;17902:131;18028:4;17902:131;:::i;:::-;17894:139;;17792:248;;;:::o;18046:419::-;18212:4;18250:2;18239:9;18235:18;18227:26;;18299:9;18293:4;18289:20;18285:1;18274:9;18270:17;18263:47;18327:131;18453:4;18327:131;:::i;:::-;18319:139;;18217:248;;;:::o;18471:419::-;18637:4;18675:2;18664:9;18660:18;18652:26;;18724:9;18718:4;18714:20;18710:1;18699:9;18695:17;18688:47;18752:131;18878:4;18752:131;:::i;:::-;18744:139;;18642:248;;;:::o;18896:419::-;19062:4;19100:2;19089:9;19085:18;19077:26;;19149:9;19143:4;19139:20;19135:1;19124:9;19120:17;19113:47;19177:131;19303:4;19177:131;:::i;:::-;19169:139;;19067:248;;;:::o;19321:419::-;19487:4;19525:2;19514:9;19510:18;19502:26;;19574:9;19568:4;19564:20;19560:1;19549:9;19545:17;19538:47;19602:131;19728:4;19602:131;:::i;:::-;19594:139;;19492:248;;;:::o;19746:419::-;19912:4;19950:2;19939:9;19935:18;19927:26;;19999:9;19993:4;19989:20;19985:1;19974:9;19970:17;19963:47;20027:131;20153:4;20027:131;:::i;:::-;20019:139;;19917:248;;;:::o;20171:419::-;20337:4;20375:2;20364:9;20360:18;20352:26;;20424:9;20418:4;20414:20;20410:1;20399:9;20395:17;20388:47;20452:131;20578:4;20452:131;:::i;:::-;20444:139;;20342:248;;;:::o;20596:419::-;20762:4;20800:2;20789:9;20785:18;20777:26;;20849:9;20843:4;20839:20;20835:1;20824:9;20820:17;20813:47;20877:131;21003:4;20877:131;:::i;:::-;20869:139;;20767:248;;;:::o;21021:419::-;21187:4;21225:2;21214:9;21210:18;21202:26;;21274:9;21268:4;21264:20;21260:1;21249:9;21245:17;21238:47;21302:131;21428:4;21302:131;:::i;:::-;21294:139;;21192:248;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21617:248;;;:::o;21871:419::-;22037:4;22075:2;22064:9;22060:18;22052:26;;22124:9;22118:4;22114:20;22110:1;22099:9;22095:17;22088:47;22152:131;22278:4;22152:131;:::i;:::-;22144:139;;22042:248;;;:::o;22296:419::-;22462:4;22500:2;22489:9;22485:18;22477:26;;22549:9;22543:4;22539:20;22535:1;22524:9;22520:17;22513:47;22577:131;22703:4;22577:131;:::i;:::-;22569:139;;22467:248;;;:::o;22721:419::-;22887:4;22925:2;22914:9;22910:18;22902:26;;22974:9;22968:4;22964:20;22960:1;22949:9;22945:17;22938:47;23002:131;23128:4;23002:131;:::i;:::-;22994:139;;22892:248;;;:::o;23146:222::-;23239:4;23277:2;23266:9;23262:18;23254:26;;23290:71;23358:1;23347:9;23343:17;23334:6;23290:71;:::i;:::-;23244:124;;;;:::o;23374:214::-;23463:4;23501:2;23490:9;23486:18;23478:26;;23514:67;23578:1;23567:9;23563:17;23554:6;23514:67;:::i;:::-;23468:120;;;;:::o;23594:99::-;23646:6;23680:5;23674:12;23664:22;;23653:40;;;:::o;23699:169::-;23783:11;23817:6;23812:3;23805:19;23857:4;23852:3;23848:14;23833:29;;23795:73;;;;:::o;23874:148::-;23976:11;24013:3;23998:18;;23988:34;;;;:::o;24028:305::-;24068:3;24087:20;24105:1;24087:20;:::i;:::-;24082:25;;24121:20;24139:1;24121:20;:::i;:::-;24116:25;;24275:1;24207:66;24203:74;24200:1;24197:81;24194:2;;;24281:18;;:::i;:::-;24194:2;24325:1;24322;24318:9;24311:16;;24072:261;;;;:::o;24339:348::-;24379:7;24402:20;24420:1;24402:20;:::i;:::-;24397:25;;24436:20;24454:1;24436:20;:::i;:::-;24431:25;;24624:1;24556:66;24552:74;24549:1;24546:81;24541:1;24534:9;24527:17;24523:105;24520:2;;;24631:18;;:::i;:::-;24520:2;24679:1;24676;24672:9;24661:20;;24387:300;;;;:::o;24693:191::-;24733:4;24753:20;24771:1;24753:20;:::i;:::-;24748:25;;24787:20;24805:1;24787:20;:::i;:::-;24782:25;;24826:1;24823;24820:8;24817:2;;;24831:18;;:::i;:::-;24817:2;24876:1;24873;24869:9;24861:17;;24738:146;;;;:::o;24890:96::-;24927:7;24956:24;24974:5;24956:24;:::i;:::-;24945:35;;24935:51;;;:::o;24992:90::-;25026:7;25069:5;25062:13;25055:21;25044:32;;25034:48;;;:::o;25088:77::-;25125:7;25154:5;25143:16;;25133:32;;;:::o;25171:149::-;25207:7;25247:66;25240:5;25236:78;25225:89;;25215:105;;;:::o;25326:126::-;25363:7;25403:42;25396:5;25392:54;25381:65;;25371:81;;;:::o;25458:77::-;25495:7;25524:5;25513:16;;25503:32;;;:::o;25541:86::-;25576:7;25616:4;25609:5;25605:16;25594:27;;25584:43;;;:::o;25633:307::-;25701:1;25711:113;25725:6;25722:1;25719:13;25711:113;;;25810:1;25805:3;25801:11;25795:18;25791:1;25786:3;25782:11;25775:39;25747:2;25744:1;25740:10;25735:15;;25711:113;;;25842:6;25839:1;25836:13;25833:2;;;25922:1;25913:6;25908:3;25904:16;25897:27;25833:2;25682:258;;;;:::o;25946:171::-;25985:3;26008:24;26026:5;26008:24;:::i;:::-;25999:33;;26054:4;26047:5;26044:15;26041:2;;;26062:18;;:::i;:::-;26041:2;26109:1;26102:5;26098:13;26091:20;;25989:128;;;:::o;26123:320::-;26167:6;26204:1;26198:4;26194:12;26184:22;;26251:1;26245:4;26241:12;26272:18;26262:2;;26328:4;26320:6;26316:17;26306:27;;26262:2;26390;26382:6;26379:14;26359:18;26356:38;26353:2;;;26409:18;;:::i;:::-;26353:2;26174:269;;;;:::o;26449:180::-;26497:77;26494:1;26487:88;26594:4;26591:1;26584:15;26618:4;26615:1;26608:15;26635:180;26683:77;26680:1;26673:88;26780:4;26777:1;26770:15;26804:4;26801:1;26794:15;26821:102;26862:6;26913:2;26909:7;26904:2;26897:5;26893:14;26889:28;26879:38;;26869:54;;;:::o;26929:182::-;27069:34;27065:1;27057:6;27053:14;27046:58;27035:76;:::o;27117:222::-;27257:34;27253:1;27245:6;27241:14;27234:58;27326:5;27321:2;27313:6;27309:15;27302:30;27223:116;:::o;27345:170::-;27485:22;27481:1;27473:6;27469:14;27462:46;27451:64;:::o;27521:221::-;27661:34;27657:1;27649:6;27645:14;27638:58;27730:4;27725:2;27717:6;27713:15;27706:29;27627:115;:::o;27748:244::-;27888:34;27884:1;27876:6;27872:14;27865:58;27957:27;27952:2;27944:6;27940:15;27933:52;27854:138;:::o;27998:221::-;28138:34;28134:1;28126:6;28122:14;28115:58;28207:4;28202:2;28194:6;28190:15;28183:29;28104:115;:::o;28225:225::-;28365:34;28361:1;28353:6;28349:14;28342:58;28434:8;28429:2;28421:6;28417:15;28410:33;28331:119;:::o;28456:166::-;28596:18;28592:1;28584:6;28580:14;28573:42;28562:60;:::o;28628:227::-;28768:34;28764:1;28756:6;28752:14;28745:58;28837:10;28832:2;28824:6;28820:15;28813:35;28734:121;:::o;28861:241::-;29001:34;28997:1;28989:6;28985:14;28978:58;29070:24;29065:2;29057:6;29053:15;29046:49;28967:135;:::o;29108:223::-;29248:34;29244:1;29236:6;29232:14;29225:58;29317:6;29312:2;29304:6;29300:15;29293:31;29214:117;:::o;29337:220::-;29477:34;29473:1;29465:6;29461:14;29454:58;29546:3;29541:2;29533:6;29529:15;29522:28;29443:114;:::o;29563:224::-;29703:34;29699:1;29691:6;29687:14;29680:58;29772:7;29767:2;29759:6;29755:15;29748:32;29669:118;:::o;29793:223::-;29933:34;29929:1;29921:6;29917:14;29910:58;30002:6;29997:2;29989:6;29985:15;29978:31;29899:117;:::o;30022:242::-;30162:34;30158:1;30150:6;30146:14;30139:58;30231:25;30226:2;30218:6;30214:15;30207:50;30128:136;:::o;30270:173::-;30410:25;30406:1;30398:6;30394:14;30387:49;30376:67;:::o;30449:224::-;30589:34;30585:1;30577:6;30573:14;30566:58;30658:7;30653:2;30645:6;30641:15;30634:32;30555:118;:::o;30679:167::-;30819:19;30815:1;30807:6;30803:14;30796:43;30785:61;:::o;30852:234::-;30992:34;30988:1;30980:6;30976:14;30969:58;31061:17;31056:2;31048:6;31044:15;31037:42;30958:128;:::o;31092:181::-;31232:33;31228:1;31220:6;31216:14;31209:57;31198:75;:::o;31279:229::-;31419:34;31415:1;31407:6;31403:14;31396:58;31488:12;31483:2;31475:6;31471:15;31464:37;31385:123;:::o;31514:122::-;31587:24;31605:5;31587:24;:::i;:::-;31580:5;31577:35;31567:2;;31626:1;31623;31616:12;31567:2;31557:79;:::o;31642:122::-;31715:24;31733:5;31715:24;:::i;:::-;31708:5;31705:35;31695:2;;31754:1;31751;31744:12;31695:2;31685:79;:::o;31770:120::-;31842:23;31859:5;31842:23;:::i;:::-;31835:5;31832:34;31822:2;;31880:1;31877;31870:12;31822:2;31812:78;:::o;31896:122::-;31969:24;31987:5;31969:24;:::i;:::-;31962:5;31959:35;31949:2;;32008:1;32005;31998:12;31949:2;31939:79;:::o
Swarm Source
ipfs://0e51264814b0d218c0807529d795a96ad9c94c14ceee829730d7e335ce40d1c5
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.