ERC-20
Gaming
Overview
Max Total Supply
34,675,220.648779072079603612 ISKY
Holders
1,721 (0.00%)
Market
Price
$0.0028 @ 0.004113 POL (+4.39%)
Onchain Market Cap
$96,057.30
Circulating Supply Market Cap
$42,938.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
215.580397803140300822 ISKYValue
$0.60 ( ~0.8909196826876 POL) [0.0006%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Skyblocks
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-31 */ // SPDX-License-Identifier: UNLICENSED // Sources flattened with hardhat v2.7.0 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) 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); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) 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; } } // File contracts/utils/ERC20.sol pragma solidity 0.8.9; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/IAccessControl.sol) 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; } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/IAccessControlEnumerable.sol) pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) 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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) 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); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @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 revoked `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}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ 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); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/utils/structs/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/structs/EnumerableSet.sol) 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; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.0 (access/AccessControlEnumerable.sol) pragma solidity ^0.8.0; /** * @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) internal virtual override { super._grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {_revokeRole} to track enumerable memberships */ function _revokeRole(bytes32 role, address account) internal virtual override { super._revokeRole(role, account); _roleMembers[role].remove(account); } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Arrays.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to array types. */ library Arrays { /** * @dev Searches a sorted `array` and returns the first index that contains * a value greater or equal to `element`. If no such index exists (i.e. all * values in the array are strictly less than `element`), the array length is * returned. Time complexity O(log n). * * `array` is expected to be sorted in ascending order, and to contain no * repeated elements. */ function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) { if (array.length == 0) { return 0; } uint256 low = 0; uint256 high = array.length; while (low < high) { uint256 mid = Math.average(low, high); // Note that mid will always be strictly less than high (i.e. it will be a valid array index) // because Math.average rounds down (it does integer division with truncation). if (array[mid] > element) { high = mid; } else { low = mid + 1; } } // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound. if (low > 0 && array[low - 1] == element) { return low - 1; } else { return low; } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File contracts/TokenSystems/Skyblocks.sol pragma solidity 0.8.9; /** * * @dev {Skyblocks} ERC20 compliant token * * * @notice TokenVesting will control ALL minting of after deployment. Whitelisting * and tax role are relegated for multi sig ecosystem governance. All ecosystem contracts * and applicable addresses will be untaxed permanently. Tax follows 3% -> Play To Earn, * 1.5% -> Claim Pool, and 0.5% -> Development Treasury. * * Claim Pool operates intrinsically with this contract's snapshotting. Snapshotting is * triggered solely by the Claim Pool contract itself, therefore creating a permanent * on-chain history that can be used by claim pool logic. * */ contract Skyblocks is Context, AccessControlEnumerable, ERC20 { struct Snapshots { uint256[] ids; uint256[] values; } bytes32 public immutable MINTER_ROLE; bytes32 public immutable WHITELIST_ROLE; bytes32 public immutable SNAPSHOT_ROLE; bytes32 public immutable TAX_ROLE_1; bytes32 public immutable TAX_ROLE_2; bytes32 public immutable TAX_ROLE_3; bytes32 public immutable MINTER_ROLE_ADMIN; bytes32 public immutable WHITELIST_ROLE_ADMIN; bytes32 public immutable TAX_ROLE_ADMIN; mapping(address => bool) public protocolWhitelist; address public playToEarn; address public claimPool; address public developmentTreasury; uint256 public developmentTax; uint256 public claimPoolTax; uint256 public playToEarnTax; uint256 public immutable taxDenominator; uint256 public immutable cap; using Arrays for uint256[]; using Counters for Counters.Counter; mapping(address => Snapshots) private _accountBalanceSnapshots; Snapshots private _totalSupplySnapshots; Snapshots private _amountSentToClaimPoolSnapshots; uint256 public _amountSentToClaimPool; Counters.Counter private _currentSnapshotId; event Snapshot(uint256 indexed id, uint256 time); event PlayToEarnTaxUpdated(uint256 tax); event ClaimPoolTaxUpdated(uint256 tax); event DevelopmentTaxUpdated(uint256 tax); /** * * @dev deploys with initial minting(s), whitelisting of first wave protocol * contracts, and role hiarachy initialization * * @param name string name Skyblocks * @param symbol string symbol ISKY * @param _initialBeneficiaries list of the initial address to receive skyblocks * @param _amounts array of the intial amounts to mint * @param _claimPool address of the claim pool contract * @param _developmentTreasury address of the development treasury pool * @param _playToEarn address of the play to earn pool * @param _tokenStaking Address of the token staking contract * @param governance Address of the multi sig governance contract * */ constructor( string memory name, string memory symbol, address[] memory _initialBeneficiaries, uint256[] memory _amounts, address _claimPool, address _developmentTreasury, address _playToEarn, address _tokenStaking, address governance ) ERC20(name, symbol) { require(_playToEarn != address(0), "Skyblocks: zero address"); playToEarn = _playToEarn; require(_developmentTreasury != address(0), "Skyblocks: zero address"); developmentTreasury = _developmentTreasury; require(_claimPool != address(0), "Skyblocks: zero address"); claimPool = _claimPool; require(_tokenStaking != address(0), "Skyblocks: address 0"); require(governance != address(0), "Skyblocks: address 0"); MINTER_ROLE = keccak256("MINTER_ROLE"); WHITELIST_ROLE = keccak256("WHITELIST_ROLE"); SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); TAX_ROLE_1 = keccak256("TAX_ROLE_1"); TAX_ROLE_2 = keccak256("TAX_ROLE_2"); TAX_ROLE_3 = keccak256("TAX_ROLE_3"); MINTER_ROLE_ADMIN = keccak256("MINTER_ROLE_ADMIN"); WHITELIST_ROLE_ADMIN = keccak256("WHITELIST_ROLE_ADMIN"); TAX_ROLE_ADMIN = keccak256("TAX_ROLE_ADMIN"); taxDenominator = 1000; developmentTax = 5; // 0.5 claimPoolTax = 15; // 1.5 playToEarnTax = 30; // 3.0 // setup role admins _setRoleAdmin(TAX_ROLE_1, TAX_ROLE_ADMIN); _setRoleAdmin(TAX_ROLE_2, TAX_ROLE_ADMIN); _setRoleAdmin(TAX_ROLE_3, TAX_ROLE_ADMIN); _setRoleAdmin(WHITELIST_ROLE, WHITELIST_ROLE_ADMIN); _setRoleAdmin(MINTER_ROLE, MINTER_ROLE_ADMIN); // grant admins _setupRole(MINTER_ROLE_ADMIN, governance); _setupRole(TAX_ROLE_ADMIN, governance); _setupRole(WHITELIST_ROLE_ADMIN, governance); // grant roles _setupRole(SNAPSHOT_ROLE, _claimPool); _setupRole(WHITELIST_ROLE, governance); // mint initial amounts and give minter role to the vesting contract for (uint256 i; i < _initialBeneficiaries.length; ++i) { require(_initialBeneficiaries[i] != address(0)); require(_amounts[i] > 0); _mint(_initialBeneficiaries[i], _amounts[i]); } // setup whitelists protocolWhitelist[_claimPool] = true; protocolWhitelist[_tokenStaking] = true; _amountSentToClaimPool; cap = 100_000_000 * 1e18; // initialize snapshotting _snapshot(); } /** * * @dev enables the long term minting of additional skyblocks via the release * schedule of vesting * * @param _skyblocksVesting the address of the Vesting Contract * * @notice minter admin is permanently renounced upon this call * */ function setupVesting(address _skyblocksVesting) external onlyRole(MINTER_ROLE_ADMIN) { require(_skyblocksVesting != address(0), "Skyblocks: zero address"); _setupRole(MINTER_ROLE, _skyblocksVesting); renounceRole(MINTER_ROLE_ADMIN, _msgSender()); } /** * * @dev Mints Skyblocks to an account * * @param account address to receive Skyblocks * @param amount address to receive amount * */ function mint(address account, uint256 amount) external onlyRole(MINTER_ROLE) { require(totalSupply() + amount <= cap, "Skyblocks: cap"); _mint(account, amount); } /** * * @dev Moves tokens `amount` from `sender` to `recipient'. * Two outcome paths can occur based on ecosystem interaction. * All contracts within InfinitySkies ecosystem are * whitelisted from taxation. Additionally, this function tracks * all applicable historical balances for snapshoting * * @param sender 'from' * @param recipient 'to' * @param amount tokens in native decimals * */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual override(ERC20) { require(sender != address(0), "Skyblocks: zero address"); require(recipient != address(0), "Skyblocks: zero address"); _beforeTokenTransfer(sender, recipient, amount); if (protocolWhitelist[sender] || protocolWhitelist[recipient]) { // normal transfer uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Skyblocks: exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } else { // tax transfer require(amount > 1e5, "SkyBlocks: minimum amount"); uint256 toDevelopmentTreasury = (amount * developmentTax) / (taxDenominator); uint256 toClaimPool = (amount * (claimPoolTax)) / (taxDenominator); uint256 toPlayToEarn = (amount * (playToEarnTax)) / (taxDenominator); uint256 rest = amount - (toDevelopmentTreasury + (toClaimPool) + (toPlayToEarn)); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Skyblocks: exceeds balance"); _balances[sender] = senderBalance - amount; _balances[developmentTreasury] += toDevelopmentTreasury; _balances[claimPool] += toClaimPool; _amountSentToClaimPool += toClaimPool; _balances[playToEarn] += toPlayToEarn; _balances[recipient] += rest; emit Transfer(sender, developmentTreasury, toDevelopmentTreasury); emit Transfer(sender, claimPool, toClaimPool); emit Transfer(sender, playToEarn, toPlayToEarn); emit Transfer(sender, recipient, rest); } } /** * * @dev Sets the development tax; reserved only for TAX_ROLE_1 * * @param _tax tax to set between 0 and 5% * */ function setDevelopmentTax(uint256 _tax) external onlyRole(TAX_ROLE_1) { require(_tax >= 0 && _tax <= 50, "Skyblocks: tax range 0 to 5%"); developmentTax = _tax; emit DevelopmentTaxUpdated(_tax); } /** * * @dev Sets the claimpool tax; reserved only for TAX_ROLE_2 * * @param _tax tax to set between 0 and 5% * */ function setClaimPoolTax(uint256 _tax) external onlyRole(TAX_ROLE_2) { require(_tax >= 0 && _tax <= 50, "Skyblocks: tax range 0 to 5%"); claimPoolTax = _tax; emit ClaimPoolTaxUpdated(_tax); } /** * * @dev Sets the playToEarn tax; reserved only for TAX_ROLE_3 * * @param _tax tax to set between 0 and 5% * */ function setPlayToEarnTax(uint256 _tax) external onlyRole(TAX_ROLE_3) { require(_tax >= 0 && _tax <= 50, "Skyblocks: tax range 0 to 5%"); playToEarnTax = _tax; emit PlayToEarnTaxUpdated(_tax); } /** * * @dev Snapshots all current balances, totalSupply, and Claim Pool Accumulation * * @notice The only Snapshot user will be the claim pool contract. Snapshots will * be publicly accessible * */ function snapshot() external onlyRole(SNAPSHOT_ROLE) returns (uint256) { return _snapshot(); } /** * * @dev adds a protocol contract to whitelist in order * to avoid taxation within the ecosystem * * @param toAdd address of the Infinity Skies ecosystem contract to whitelist from taxation * * @notice Should only be used to add ecosystem contracts/dapps * */ function addWhitelist(address toAdd) external onlyRole(WHITELIST_ROLE) { require(address(0) != toAdd, "Skyblocks: zero address"); require(!protocolWhitelist[toAdd], "Skyblocks: already added"); protocolWhitelist[toAdd] = true; } /** * * @dev removes a protocol contract to whitelist * * @param toRemove address of the Infinity Skies ecosystem contract to UNwhitelist from taxation * * @notice Should only be used to remove ecosystem contracts/dapps * */ function removeWhitelist(address toRemove) external onlyRole(WHITELIST_ROLE) { require(address(0) != toRemove, "Skyblocks: zero address"); require(protocolWhitelist[toRemove], "Skyblocks: not whitelisted"); protocolWhitelist[toRemove] = false; } /** * @dev Creates a new snapshot and returns its snapshot id. * * Emits a {Snapshot} event that contains the same id. * */ function _snapshot() internal virtual returns (uint256) { _currentSnapshotId.increment(); uint256 currentId = _getCurrentSnapshotId(); emit Snapshot(currentId, block.timestamp); return currentId; } /** * * @dev Exposed: Get the current snapshotId * */ function getCurrentSnapshotId() external view returns (uint256) { return _getCurrentSnapshotId(); } /** * * @dev Get the current snapshotId * */ function _getCurrentSnapshotId() internal view virtual returns (uint256) { return _currentSnapshotId.current(); } /** * * @dev Retrieves the balance of `account` at the time `snapshotId` was created. * * @param account address * @param snapshotId Id to query * */ function balanceOfAt(address account, uint256 snapshotId) external view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt( snapshotId, _accountBalanceSnapshots[account] ); return snapshotted ? value : balanceOf(account); } /** * * @dev Retrieves the total supply at the time `snapshotId` was created. * * @param snapshotId Id to query * */ function totalSupplyAt(uint256 snapshotId) external view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt( snapshotId, _totalSupplySnapshots ); return snapshotted ? value : totalSupply(); } /** * * @dev Retrieves the total amount sent to the Claim Pool * at the time `snapshotId` was created. * * @param snapshotId Id to query * */ function amountSentToClaimPoolAt(uint256 snapshotId) external view virtual returns (uint256) { (bool snapshotted, uint256 value) = _valueAt( snapshotId, _amountSentToClaimPoolSnapshots ); return snapshotted ? value : _amountSentToClaimPool; } /** * * @dev Update balance, total supply, claimpool amounts, * and applicable additional balance snapshots before the * values are modified. This is implemented in the _beforeTokenTransfer * hook, which is executed for _mint, _burn, and _transfer operations. * * @param from address sender * @param to address recipient * @param amount uint256 native decimal amount * */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override(ERC20) { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // mint _updateAccountSnapshot(to); _updateTotalSupplySnapshot(); } else if (to == address(0)) { // burn _updateAccountSnapshot(from); _updateTotalSupplySnapshot(); } else { // transfer _updateClaimPoolSnapShot(); _updateAccountSnapshot(from); _updateAccountSnapshot(to); _updateAccountSnapshot(developmentTreasury); _updateAccountSnapshot(claimPool); _updateAccountSnapshot(playToEarn); } } /** * * @dev returns the snapshot value for a given type of snapshot * */ function _valueAt(uint256 snapshotId, Snapshots storage snapshots) private view returns (bool, uint256) { require(snapshotId > 0, "ERC20Snapshot: id is 0"); require( snapshotId <= _getCurrentSnapshotId(), "ERC20Snapshot: nonexistent id" ); uint256 index = snapshots.ids.findUpperBound(snapshotId); if (index == snapshots.ids.length) { return (false, 0); } else { return (true, snapshots.values[index]); } } /** * * @dev updates the balances snapshots * */ function _updateAccountSnapshot(address account) private { _updateSnapshot(_accountBalanceSnapshots[account], balanceOf(account)); } /** * * @dev updates the total supply snapshots * */ function _updateTotalSupplySnapshot() private { _updateSnapshot(_totalSupplySnapshots, totalSupply()); } /** * * @dev updates the claim pool accumulation snapshots * */ function _updateClaimPoolSnapShot() private { _updateSnapshot( _amountSentToClaimPoolSnapshots, _amountSentToClaimPool ); } /** * * @dev generalized updating up the snapshots object * */ function _updateSnapshot(Snapshots storage snapshots, uint256 currentValue) private { uint256 currentId = _getCurrentSnapshotId(); if (_lastSnapshotId(snapshots.ids) < currentId) { snapshots.ids.push(currentId); snapshots.values.push(currentValue); } } /** * * @dev returns the last applicable snapshot Id * */ function _lastSnapshotId(uint256[] storage ids) private view returns (uint256) { if (ids.length == 0) { return 0; } else { return ids[ids.length - 1]; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address[]","name":"_initialBeneficiaries","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"address","name":"_claimPool","type":"address"},{"internalType":"address","name":"_developmentTreasury","type":"address"},{"internalType":"address","name":"_playToEarn","type":"address"},{"internalType":"address","name":"_tokenStaking","type":"address"},{"internalType":"address","name":"governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"ClaimPoolTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"DevelopmentTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"PlayToEarnTaxUpdated","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":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Snapshot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"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":"MINTER_ROLE_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNAPSHOT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_ROLE_1","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_ROLE_2","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_ROLE_3","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_ROLE_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_ROLE_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_amountSentToClaimPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAdd","type":"address"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"amountSentToClaimPoolAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"balanceOfAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPoolTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSnapshotId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","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":"playToEarn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"playToEarnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protocolWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_tax","type":"uint256"}],"name":"setClaimPoolTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setDevelopmentTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setPlayToEarnTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_skyblocksVesting","type":"address"}],"name":"setupVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"taxDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"name":"totalSupplyAt","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"}]
Contract Creation Code
6101e06040523480156200001257600080fd5b5060405162005fad38038062005fad8339818101604052810190620000389190620014f7565b888881600590805190602001906200005292919062001059565b5080600690805190602001906200006b92919062001059565b505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d890620016b3565b60405180910390fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000195576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018c90620016b3565b60405180910390fd5b83600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562000249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024090620016b3565b60405180910390fd5b84600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f49062001725565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003679062001725565b60405180910390fd5b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6608081815250507fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676060a081815250507f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f60c081815250507fd19c9a135042d8a53b9e61e107842ea53fd68027525deae6282612cfcce652be60e081815250507f49514dda7ee21596253b494f3ea1c5e997b7588b34eb1f01a437153bb97f45c561010081815250507f9a8c8f915b10863c961780eb6c2efad1286e296cf5c315eb5a47f49fa5b43b1b61012081815250507f11c2020b6b4f4e00c2410234e0c72636b4739cf7cda4d8e24ef6b881350e670461014081815250507f3dbd7c6bedf2412ff4c88c73c5cbd78a9c5f5066ba3f3b3b9a0c01e1a620d32061016081815250507f177588173caf214224a1e3e13572ac12b605b6c2cb220768a93636b9f9cd72b161018081815250506103e86101a081815250506005600b81905550600f600c81905550601e600d819055506200051760e05161018051620007b160201b60201c565b6200052f6101005161018051620007b160201b60201c565b620005476101205161018051620007b160201b60201c565b6200055e60a05161016051620007b160201b60201c565b6200057560805161014051620007b160201b60201c565b6200058a61014051826200081460201b60201c565b6200059f61018051826200081460201b60201c565b620005b461016051826200081460201b60201c565b620005c860c051866200081460201b60201c565b620005dc60a051826200081460201b60201c565b60005b8751811015620006cc57600073ffffffffffffffffffffffffffffffffffffffff1688828151811062000617576200061662001747565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156200064157600080fd5b600087828151811062000659576200065862001747565b5b6020026020010151116200066c57600080fd5b620006b888828151811062000686576200068562001747565b5b6020026020010151888381518110620006a457620006a362001747565b5b60200260200101516200082a60201b60201c565b80620006c490620017a5565b9050620005df565b506001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506a52b7d2dcc80cd2e40000006101c08181525050620007a16200099060201b60201c565b5050505050505050505062001990565b6000620007c483620009fe60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b62000826828262000a1d60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200089d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008949062001843565b60405180910390fd5b620008b16000838362000a6560201b60201c565b8060046000828254620008c5919062001865565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200091d919062001865565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009849190620018d3565b60405180910390a35050565b6000620009a9601462000c0960201b62001b811760201c565b6000620009bb62000c1f60201b60201c565b9050807f492fbd8cfdd942203e99f6bc74253a1e1f5791b0644612279e778349f353b19842604051620009ef9190620018d3565b60405180910390a28091505090565b6000806000838152602001908152602001600020600101549050919050565b62000a34828262000c3d60201b62001b971760201c565b62000a60816001600085815260200190815260200160002062000d2e60201b62001c771790919060201c565b505050565b62000a7d83838362000d6660201b62001ca71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000ada5762000ac48262000d6b60201b60201c565b62000ad462000dce60201b60201c565b62000c04565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b375762000b218362000d6b60201b60201c565b62000b3162000dce60201b60201c565b62000c03565b62000b4762000df260201b60201c565b62000b588362000d6b60201b60201c565b62000b698262000d6b60201b60201c565b62000b9c600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d6b60201b60201c565b62000bcf600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d6b60201b60201c565b62000c02600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d6b60201b60201c565b5b5b505050565b6001816000016000828254019250508190555050565b600062000c38601462000e0960201b62001cac1760201c565b905090565b62000c4f828262000e1760201b60201c565b62000d2a57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000ccf62000e8160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000d5e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b62000e8960201b60201c565b905092915050565b505050565b62000dcb600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000dbf8362000f0360201b60201c565b62000f4c60201b60201c565b50565b62000df0600f62000de462000fd860201b60201c565b62000f4c60201b60201c565b565b62000e07601160135462000f4c60201b60201c565b565b600081600001549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600062000e9d838362000fe260201b60201c565b62000ef857826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000efd565b600090505b92915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600062000f5e62000c1f60201b60201c565b90508062000f75846000016200100560201b60201c565b101562000fd35782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b6000600454905090565b600080836001016000848152602001908152602001600020541415905092915050565b600080828054905014156200101e576000905062001054565b8160018380549050620010329190620018f0565b8154811062001046576200104562001747565b5b906000526020600020015490505b919050565b82805462001067906200195a565b90600052602060002090601f0160209004810192826200108b5760008555620010d7565b82601f10620010a657805160ff1916838001178555620010d7565b82800160010185558215620010d7579182015b82811115620010d6578251825591602001919060010190620010b9565b5b509050620010e69190620010ea565b5090565b5b8082111562001105576000816000905550600101620010eb565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620011728262001127565b810181811067ffffffffffffffff8211171562001194576200119362001138565b5b80604052505050565b6000620011a962001109565b9050620011b7828262001167565b919050565b600067ffffffffffffffff821115620011da57620011d962001138565b5b620011e58262001127565b9050602081019050919050565b60005b8381101562001212578082015181840152602081019050620011f5565b8381111562001222576000848401525b50505050565b60006200123f6200123984620011bc565b6200119d565b9050828152602081018484840111156200125e576200125d62001122565b5b6200126b848285620011f2565b509392505050565b600082601f8301126200128b576200128a6200111d565b5b81516200129d84826020860162001228565b91505092915050565b600067ffffffffffffffff821115620012c457620012c362001138565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200130782620012da565b9050919050565b6200131981620012fa565b81146200132557600080fd5b50565b60008151905062001339816200130e565b92915050565b6000620013566200135084620012a6565b6200119d565b905080838252602082019050602084028301858111156200137c576200137b620012d5565b5b835b81811015620013a9578062001394888262001328565b8452602084019350506020810190506200137e565b5050509392505050565b600082601f830112620013cb57620013ca6200111d565b5b8151620013dd8482602086016200133f565b91505092915050565b600067ffffffffffffffff82111562001404576200140362001138565b5b602082029050602081019050919050565b6000819050919050565b6200142a8162001415565b81146200143657600080fd5b50565b6000815190506200144a816200141f565b92915050565b6000620014676200146184620013e6565b6200119d565b905080838252602082019050602084028301858111156200148d576200148c620012d5565b5b835b81811015620014ba5780620014a5888262001439565b8452602084019350506020810190506200148f565b5050509392505050565b600082601f830112620014dc57620014db6200111d565b5b8151620014ee84826020860162001450565b91505092915050565b60008060008060008060008060006101208a8c0312156200151d576200151c62001113565b5b60008a015167ffffffffffffffff8111156200153e576200153d62001118565b5b6200154c8c828d0162001273565b99505060208a015167ffffffffffffffff81111562001570576200156f62001118565b5b6200157e8c828d0162001273565b98505060408a015167ffffffffffffffff811115620015a257620015a162001118565b5b620015b08c828d01620013b3565b97505060608a015167ffffffffffffffff811115620015d457620015d362001118565b5b620015e28c828d01620014c4565b9650506080620015f58c828d0162001328565b95505060a0620016088c828d0162001328565b94505060c06200161b8c828d0162001328565b93505060e06200162e8c828d0162001328565b925050610100620016428c828d0162001328565b9150509295985092959850929598565b600082825260208201905092915050565b7f536b79626c6f636b733a207a65726f2061646472657373000000000000000000600082015250565b60006200169b60178362001652565b9150620016a88262001663565b602082019050919050565b60006020820190508181036000830152620016ce816200168c565b9050919050565b7f536b79626c6f636b733a20616464726573732030000000000000000000000000600082015250565b60006200170d60148362001652565b91506200171a82620016d5565b602082019050919050565b600060208201905081810360008301526200174081620016fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620017b28262001415565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620017e857620017e762001776565b5b600182019050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200182b601f8362001652565b91506200183882620017f3565b602082019050919050565b600060208201905081810360008301526200185e816200181c565b9050919050565b6000620018728262001415565b91506200187f8362001415565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620018b757620018b662001776565b5b828201905092915050565b620018cd8162001415565b82525050565b6000602082019050620018ea6000830184620018c2565b92915050565b6000620018fd8262001415565b91506200190a8362001415565b92508282101562001920576200191f62001776565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200197357607f821691505b602082108114156200198a57620019896200192b565b5b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c05161453462001a7960003960008181610cfe0152610e830152600081816118b601528181612278015281816122b501526122f2015260006112e40152600061186e015260008181610b780152818161130801526113d7015260008181610b54015261142d015260008181610f860152611892015260008181611409015261158b01526000818161109101526116e40152600081816110fe0152818161128e01526119f8015260008181610e51015281816113ad015261192401526145346000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c80637a6d66dc1161019d578063981b24d0116100e9578063b361b2b5116100a2578063d53913931161007c578063d539139314610976578063d547741f14610994578063dd62ed3e146109b0578063f80f5dd5146109e0576102f1565b8063b361b2b51461090a578063b6bfd24b14610928578063ca15c87314610946576102f1565b8063981b24d014610820578063a217fddf14610850578063a457c2d71461086e578063a9059cbb1461089e578063a970cbf6146108ce578063a99b6248146108ec576102f1565b80638c1d11721161015657806391d148541161013057806391d14854146107985780639574aaf6146107c857806395d89b41146107e45780639711715a14610802576102f1565b80638c1d11721461072e5780638cf808af1461074c5780639010d07c14610768576102f1565b80637a6d66dc1461066a5780637a997ab7146106885780637ac1145a146106a65780637df4ebbd146106c45780638931392b146106f45780638be2bd2f14610712576102f1565b8063313ce5671161025c5780635439ad8611610215578063612cb2b5116101ef578063612cb2b5146105d05780637028e2cd1461060057806370a082311461061e57806378c8cda71461064e576102f1565b80635439ad86146105785780635475eba41461059657806355bf98fe146105b2576102f1565b8063313ce567146104a4578063355274ea146104c257806336568abe146104e057806339509351146104fc57806340c10f191461052c5780634ee2cd7e14610548576102f1565b806311d15e7a116102ae57806311d15e7a146103ce57806318160ddd146103ec57806323b872dd1461040a578063248a9ca31461043a5780632a7024731461046a5780632f2ff15d14610488576102f1565b806301ffc9a7146102f65780630204bb5f1461032657806306fdde0314610344578063095ea7b3146103625780630d9fdb37146103925780630eae4f02146103b0575b600080fd5b610310600480360381019061030b9190613570565b6109fc565b60405161031d91906135b8565b60405180910390f35b61032e610a76565b60405161033b9190613614565b60405180910390f35b61034c610a9c565b60405161035991906136c8565b60405180910390f35b61037c6004803603810190610377919061374c565b610b2e565b60405161038991906135b8565b60405180910390f35b61039a610b4c565b6040516103a7919061379b565b60405180910390f35b6103b8610b52565b6040516103c591906137cf565b60405180910390f35b6103d6610b76565b6040516103e391906137cf565b60405180910390f35b6103f4610b9a565b604051610401919061379b565b60405180910390f35b610424600480360381019061041f91906137ea565b610ba4565b60405161043191906135b8565b60405180910390f35b610454600480360381019061044f9190613869565b610ca5565b60405161046191906137cf565b60405180910390f35b610472610cc4565b60405161047f919061379b565b60405180910390f35b6104a2600480360381019061049d9190613896565b610cca565b005b6104ac610cf3565b6040516104b991906138f2565b60405180910390f35b6104ca610cfc565b6040516104d7919061379b565b60405180910390f35b6104fa60048036038101906104f59190613896565b610d20565b005b6105166004803603810190610511919061374c565b610da3565b60405161052391906135b8565b60405180910390f35b6105466004803603810190610541919061374c565b610e4f565b005b610562600480360381019061055d919061374c565b610f05565b60405161056f919061379b565b60405180910390f35b610580610f75565b60405161058d919061379b565b60405180910390f35b6105b060048036038101906105ab919061390d565b610f84565b005b6105ba611049565b6040516105c79190613614565b60405180910390f35b6105ea60048036038101906105e5919061393a565b61106f565b6040516105f791906135b8565b60405180910390f35b61060861108f565b60405161061591906137cf565b60405180910390f35b6106386004803603810190610633919061393a565b6110b3565b604051610645919061379b565b60405180910390f35b6106686004803603810190610663919061393a565b6110fc565b005b610672611286565b60405161067f919061379b565b60405180910390f35b61069061128c565b60405161069d91906137cf565b60405180910390f35b6106ae6112b0565b6040516106bb919061379b565b60405180910390f35b6106de60048036038101906106d9919061390d565b6112b6565b6040516106eb919061379b565b60405180910390f35b6106fc6112e2565b60405161070991906137cf565b60405180910390f35b61072c6004803603810190610727919061393a565b611306565b005b610736611407565b60405161074391906137cf565b60405180910390f35b6107666004803603810190610761919061390d565b61142b565b005b610782600480360381019061077d9190613967565b6114f0565b60405161078f9190613614565b60405180910390f35b6107b260048036038101906107ad9190613896565b61151f565b6040516107bf91906135b8565b60405180910390f35b6107e260048036038101906107dd919061390d565b611589565b005b6107ec61164e565b6040516107f991906136c8565b60405180910390f35b61080a6116e0565b604051610817919061379b565b60405180910390f35b61083a6004803603810190610835919061390d565b611722565b604051610847919061379b565b60405180910390f35b610858611753565b60405161086591906137cf565b60405180910390f35b6108886004803603810190610883919061374c565b61175a565b60405161089591906135b8565b60405180910390f35b6108b860048036038101906108b3919061374c565b61184e565b6040516108c591906135b8565b60405180910390f35b6108d661186c565b6040516108e391906137cf565b60405180910390f35b6108f4611890565b60405161090191906137cf565b60405180910390f35b6109126118b4565b60405161091f919061379b565b60405180910390f35b6109306118d8565b60405161093d9190613614565b60405180910390f35b610960600480360381019061095b9190613869565b6118fe565b60405161096d919061379b565b60405180910390f35b61097e611922565b60405161098b91906137cf565b60405180910390f35b6109ae60048036038101906109a99190613896565b611946565b005b6109ca60048036038101906109c591906139a7565b61196f565b6040516109d7919061379b565b60405180910390f35b6109fa60048036038101906109f5919061393a565b6119f6565b005b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6f5750610a6e82611cba565b5b9050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060058054610aab90613a16565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad790613a16565b8015610b245780601f10610af957610100808354040283529160200191610b24565b820191906000526020600020905b815481529060010190602001808311610b0757829003601f168201915b5050505050905090565b6000610b42610b3b611d34565b8484611d3c565b6001905092915050565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b6000610bb1848484611f07565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bfc611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613aba565b60405180910390fd5b610c9985610c88611d34565b8584610c949190613b09565b611d3c565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b60135481565b610cd382610ca5565b610ce481610cdf611d34565b612803565b610cee83836128a0565b505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d28611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613baf565b60405180910390fd5b610d9f82826128d4565b5050565b6000610e45610db0611d34565b848460036000610dbe611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e409190613bcf565b611d3c565b6001905092915050565b7f0000000000000000000000000000000000000000000000000000000000000000610e8181610e7c611d34565b612803565b7f000000000000000000000000000000000000000000000000000000000000000082610eab610b9a565b610eb59190613bcf565b1115610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613c71565b60405180910390fd5b610f008383612908565b505050565b6000806000610f5284600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5d565b9150915081610f6957610f64856110b3565b610f6b565b805b9250505092915050565b6000610f7f612b53565b905090565b7f0000000000000000000000000000000000000000000000000000000000000000610fb681610fb1611d34565b612803565b60008210158015610fc8575060328211155b611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90613cdd565b60405180910390fd5b81600c819055507f8d7156f97c3f3874c6f1255f65e1a12a7c50235ff12cfbaddaf2e4ded86281938260405161103d919061379b565b60405180910390a15050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000061112e81611129611d34565b612803565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613d49565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613db5565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b60008060006112c6846011612a5d565b91509150816112d7576013546112d9565b805b92505050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061133881611333611d34565b612803565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613d49565b60405180910390fd5b6113d27f000000000000000000000000000000000000000000000000000000000000000083612b64565b6114037f00000000000000000000000000000000000000000000000000000000000000006113fe611d34565b610d20565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061145d81611458611d34565b612803565b6000821015801561146f575060328211155b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613cdd565b60405180910390fd5b81600d819055507f1380c885556fcd87b5f3b8485f1c7b22359b2210baf03e22e74e4d61fcd40be0826040516114e4919061379b565b60405180910390a15050565b60006115178260016000868152602001908152602001600020612b7290919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f00000000000000000000000000000000000000000000000000000000000000006115bb816115b6611d34565b612803565b600082101580156115cd575060328211155b61160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390613cdd565b60405180910390fd5b81600b819055507f76e64a69bfc8a971ed674b8ab3748bcd02fd4b4ffa22af4f5b1b997bd3b2ad6782604051611642919061379b565b60405180910390a15050565b60606006805461165d90613a16565b80601f016020809104026020016040519081016040528092919081815260200182805461168990613a16565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b5050505050905090565b60007f00000000000000000000000000000000000000000000000000000000000000006117148161170f611d34565b612803565b61171c612b8c565b91505090565b600080600061173284600f612a5d565b915091508161174857611743610b9a565b61174a565b805b92505050919050565b6000801b81565b60008060036000611769611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90613e47565b60405180910390fd5b611843611831611d34565b85858461183e9190613b09565b611d3c565b600191505092915050565b600061186261185b611d34565b8484611f07565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061191b60016000848152602001908152602001600020612be3565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61194f82610ca5565b6119608161195b611d34565b612803565b61196a83836128d4565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f0000000000000000000000000000000000000000000000000000000000000000611a2881611a23611d34565b612803565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff161415611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613d49565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613eb3565b60405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001816000016000828254019250508190555050565b611ba1828261151f565b611c7357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c18611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611c9f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612bf8565b905092915050565b505050565b600081600001549050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d2d5750611d2c82612c68565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613fd7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611efa919061379b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613d49565b60405180910390fd5b611ff2838383612cd2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120935750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561222f576000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614043565b60405180910390fd5b818161212b9190613b09565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bd9190613bcf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612221919061379b565b60405180910390a3506127fe565b620186a08111612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b906140af565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000600b54836122a591906140cf565b6122af9190614158565b905060007f0000000000000000000000000000000000000000000000000000000000000000600c54846122e291906140cf565b6122ec9190614158565b905060007f0000000000000000000000000000000000000000000000000000000000000000600d548561231f91906140cf565b6123299190614158565b9050600081838561233a9190613bcf565b6123449190613bcf565b8561234f9190613b09565b90506000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90614043565b60405180910390fd5b85816123e49190613b09565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124989190613bcf565b925050819055508360026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125109190613bcf565b9250508190555083601360008282546125299190613bcf565b925050819055508260026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a19190613bcf565b9250508190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f79190613bcf565b92505081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161267d919061379b565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612704919061379b565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278b919061379b565b60405180910390a38673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127f0919061379b565b60405180910390a350505050505b505050565b61280d828261151f565b61289c576128328173ffffffffffffffffffffffffffffffffffffffff166014612e15565b6128408360001c6020612e15565b60405160200161285192919061425d565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289391906136c8565b60405180910390fd5b5050565b6128aa8282611b97565b6128cf8160016000858152602001908152602001600020611c7790919063ffffffff16565b505050565b6128de8282613051565b612903816001600085815260200190815260200160002061313290919063ffffffff16565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f906142e3565b60405180910390fd5b61298460008383612cd2565b80600460008282546129969190613bcf565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ec9190613bcf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a51919061379b565b60405180910390a35050565b60008060008411612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061434f565b60405180910390fd5b612aab612b53565b841115612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906143bb565b60405180910390fd5b6000612b05858560000161316290919063ffffffff16565b90508360000180549050811415612b23576000809250925050612b4c565b6001846001018281548110612b3b57612b3a6143db565b5b906000526020600020015492509250505b9250929050565b6000612b5f6014611cac565b905090565b612b6e82826128a0565b5050565b6000612b81836000018361323c565b60001c905092915050565b6000612b986014611b81565b6000612ba2612b53565b9050807f492fbd8cfdd942203e99f6bc74253a1e1f5791b0644612279e778349f353b19842604051612bd4919061379b565b60405180910390a28091505090565b6000612bf182600001613267565b9050919050565b6000612c048383613278565b612c5d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612c62565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cdd838383611ca7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2857612d1b8261329b565b612d236132ee565b612e10565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d7357612d668361329b565b612d6e6132ee565b612e0f565b612d7b613302565b612d848361329b565b612d8d8261329b565b612db8600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b612de3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b612e0e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b5b5b505050565b606060006002836002612e2891906140cf565b612e329190613bcf565b67ffffffffffffffff811115612e4b57612e4a61440a565b5b6040519080825280601f01601f191660200182016040528015612e7d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612eb557612eb46143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612f1957612f186143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612f5991906140cf565b612f639190613bcf565b90505b6001811115613003577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612fa557612fa46143db565b5b1a60f81b828281518110612fbc57612fbb6143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612ffc90614439565b9050612f66565b5060008414613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e906144af565b60405180910390fd5b8091505092915050565b61305b828261151f565b1561312e57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506130d3611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600061315a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613311565b905092915050565b600080838054905014156131795760009050613236565b600080848054905090505b808210156131dd5760006131988383613425565b9050848682815481106131ae576131ad6143db565b5b906000526020600020015411156131c7578091506131d7565b6001816131d49190613bcf565b92505b50613184565b600082118015613215575083856001846131f79190613b09565b81548110613208576132076143db565b5b9060005260206000200154145b15613230576001826132279190613b09565b92505050613236565b81925050505b92915050565b6000826000018281548110613254576132536143db565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6132eb600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206132e6836110b3565b61344b565b50565b613300600f6132fb610b9a565b61344b565b565b61330f601160135461344b565b565b600080836001016000848152602001908152602001600020549050600081146134195760006001826133439190613b09565b905060006001866000018054905061335b9190613b09565b90508181146133ca57600086600001828154811061337c5761337b6143db565b5b90600052602060002001549050808760000184815481106133a05761339f6143db565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806133de576133dd6144cf565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061341f565b60009150505b92915050565b600060028284186134369190614158565b8284166134439190613bcf565b905092915050565b6000613455612b53565b905080613464846000016134c6565b10156134c15782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600080828054905014156134dd576000905061350e565b81600183805490506134ef9190613b09565b81548110613500576134ff6143db565b5b906000526020600020015490505b919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61354d81613518565b811461355857600080fd5b50565b60008135905061356a81613544565b92915050565b60006020828403121561358657613585613513565b5b60006135948482850161355b565b91505092915050565b60008115159050919050565b6135b28161359d565b82525050565b60006020820190506135cd60008301846135a9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135fe826135d3565b9050919050565b61360e816135f3565b82525050565b60006020820190506136296000830184613605565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561366957808201518184015260208101905061364e565b83811115613678576000848401525b50505050565b6000601f19601f8301169050919050565b600061369a8261362f565b6136a4818561363a565b93506136b481856020860161364b565b6136bd8161367e565b840191505092915050565b600060208201905081810360008301526136e2818461368f565b905092915050565b6136f3816135f3565b81146136fe57600080fd5b50565b600081359050613710816136ea565b92915050565b6000819050919050565b61372981613716565b811461373457600080fd5b50565b60008135905061374681613720565b92915050565b6000806040838503121561376357613762613513565b5b600061377185828601613701565b925050602061378285828601613737565b9150509250929050565b61379581613716565b82525050565b60006020820190506137b0600083018461378c565b92915050565b6000819050919050565b6137c9816137b6565b82525050565b60006020820190506137e460008301846137c0565b92915050565b60008060006060848603121561380357613802613513565b5b600061381186828701613701565b935050602061382286828701613701565b925050604061383386828701613737565b9150509250925092565b613846816137b6565b811461385157600080fd5b50565b6000813590506138638161383d565b92915050565b60006020828403121561387f5761387e613513565b5b600061388d84828501613854565b91505092915050565b600080604083850312156138ad576138ac613513565b5b60006138bb85828601613854565b92505060206138cc85828601613701565b9150509250929050565b600060ff82169050919050565b6138ec816138d6565b82525050565b600060208201905061390760008301846138e3565b92915050565b60006020828403121561392357613922613513565b5b600061393184828501613737565b91505092915050565b6000602082840312156139505761394f613513565b5b600061395e84828501613701565b91505092915050565b6000806040838503121561397e5761397d613513565b5b600061398c85828601613854565b925050602061399d85828601613737565b9150509250929050565b600080604083850312156139be576139bd613513565b5b60006139cc85828601613701565b92505060206139dd85828601613701565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2e57607f821691505b60208210811415613a4257613a416139e7565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613aa460288361363a565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1482613716565b9150613b1f83613716565b925082821015613b3257613b31613ada565b5b828203905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613b99602f8361363a565b9150613ba482613b3d565b604082019050919050565b60006020820190508181036000830152613bc881613b8c565b9050919050565b6000613bda82613716565b9150613be583613716565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c1a57613c19613ada565b5b828201905092915050565b7f536b79626c6f636b733a20636170000000000000000000000000000000000000600082015250565b6000613c5b600e8361363a565b9150613c6682613c25565b602082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f536b79626c6f636b733a207461782072616e6765203020746f20352500000000600082015250565b6000613cc7601c8361363a565b9150613cd282613c91565b602082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b7f536b79626c6f636b733a207a65726f2061646472657373000000000000000000600082015250565b6000613d3360178361363a565b9150613d3e82613cfd565b602082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f536b79626c6f636b733a206e6f742077686974656c6973746564000000000000600082015250565b6000613d9f601a8361363a565b9150613daa82613d69565b602082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e3160258361363a565b9150613e3c82613dd5565b604082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b7f536b79626c6f636b733a20616c72656164792061646465640000000000000000600082015250565b6000613e9d60188361363a565b9150613ea882613e67565b602082019050919050565b60006020820190508181036000830152613ecc81613e90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f2f60248361363a565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc160228361363a565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f536b79626c6f636b733a20657863656564732062616c616e6365000000000000600082015250565b600061402d601a8361363a565b915061403882613ff7565b602082019050919050565b6000602082019050818103600083015261405c81614020565b9050919050565b7f536b79426c6f636b733a206d696e696d756d20616d6f756e7400000000000000600082015250565b600061409960198361363a565b91506140a482614063565b602082019050919050565b600060208201905081810360008301526140c88161408c565b9050919050565b60006140da82613716565b91506140e583613716565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411e5761411d613ada565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416382613716565b915061416e83613716565b92508261417e5761417d614129565b5b828204905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006141ca601783614189565b91506141d582614194565b601782019050919050565b60006141eb8261362f565b6141f58185614189565b935061420581856020860161364b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614247601183614189565b915061425282614211565b601182019050919050565b6000614268826141bd565b915061427482856141e0565b915061427f8261423a565b915061428b82846141e0565b91508190509392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006142cd601f8361363a565b91506142d882614297565b602082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b600061433960168361363a565b915061434482614303565b602082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b60006143a5601d8361363a565b91506143b08261436f565b602082019050919050565b600060208201905081810360008301526143d481614398565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061444482613716565b9150600082141561445857614457613ada565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061449960208361363a565b91506144a482614463565b602082019050919050565b600060208201905081810360008301526144c88161448c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220dde40956612f70f8525f32654082f649b9df969c6b70f5b0e91a60297c5fb75464736f6c634300080900330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000ea0000000000000000000000000152a3d85fb7d4dbeb407e6bbdcd1cfe4845d2db7000000000000000000000000e54b918e19163c9eeb0af36f502bc8be2fc27477000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046000000000000000000000000f7f42998bff417ea5aceb4d252bdcfabc78fb907000000000000000000000000c5d13027ae19f5a41fef1335a33ca4434c457fbb0000000000000000000000000000000000000000000000000000000000000009536b79626c6f636b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000449534b59000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067000000000000000000000000bc46e99f434bab242ea1a0c57f54a2e05681e45e0000000000000000000000006768f0f8a212f5b5b8081131323772ea7ea2a33100000000000000000000000039446c6743d9188b846813819161e9d66020a0ed000000000000000000000000826bcea879e4496ed163bcc128926b5627e1f08d00000000000000000000000018a878afa68ff540ddf520bab2f1f9470f7184100000000000000000000000004f20cb7a1d567a54350a18dacb0cc803aebb4483000000000000000000000000aa4237995a8ddb6fc30c3c5bc4cb9c0c15ee7c4f000000000000000000000000f3c9ea1658997558e5eb76ae49bed1a9832e18010000000000000000000000001d945e9ea2da9cb9a36b3e53e78b5e22bea1e3d90000000000000000000000005e2b1f3acf6473fa61c513ac5a5719d398ff42af00000000000000000000000099d218ad1ec627e786c50c5ffe6732410b8c78fd00000000000000000000000001aa498bbf2642d93c8d65e149d534c97676173a000000000000000000000000ac2e1d3f07a6b7b3c16f8811e77b36b1b5c3c40b0000000000000000000000009f7b75c2205d10f6f1ffc73c33ddb805167d27d5000000000000000000000000d378d1142830a9816128d8815137a070e3ede8f8000000000000000000000000f14c9dbdb31b0a18af44fcf97ed12b0abfe1b92e000000000000000000000000a02086f132afc89d0e129f323811f19bd13f79650000000000000000000000004da94e682326bd14997d1e1c62350654d8e44c5d0000000000000000000000008888888888e9997e64793849389a8faf5e8e547c000000000000000000000000eec32f9ba98938acafb3dff6100a546a50f25f9d000000000000000000000000cb47a9d150580b692f9e183c089abec12f14367000000000000000000000000026c68c139930de8d2901ef4dce945e8282f4e22c00000000000000000000000036b696aa9ba2aa4441e03baabeaa828f8ba7dc2c0000000000000000000000004549d92dd1e05df5615c0bb50163fc3a2d5b6933000000000000000000000000637e21ac11f0e0cf95d926d6bd2737b059a2858a000000000000000000000000874f5b8cc54ead6738a7bc3af7c16790808ffda9000000000000000000000000646f7044865bd507e3512f1847a901adc78bc74100000000000000000000000018701332a0126472ea908f54de9836ca1c5e96790000000000000000000000000e0b7c7e5c49525365b36a39b112f27965790e9e000000000000000000000000cec07cf2cace4ea5ca2b65e58b307e9efd2a2845000000000000000000000000cbc83a731e2baf8c26507ef952dee6889770c6f3000000000000000000000000151091122624bddb51ee8003d9c734aadc4dc8b0000000000000000000000000113b622f8f14d94cd449f4ecd2110cd5786a89be000000000000000000000000f5bc8bb5fa79b608f55afbe002884f736daf11ee000000000000000000000000e1476c3dd4be8c160636e68094d235922b9cdf1400000000000000000000000017ec047622c000df03599026a3b39871ec9384db000000000000000000000000f56345338cb4cddaf915ebef3bfde63e70fe30530000000000000000000000002031213cd107911515bbbdd98ce3b5c6db3e40120000000000000000000000002145dc142134d37b62a113e7293af87d0a186526000000000000000000000000707b8f3075521ee750c25ac3ba9a0b9b85e370c4000000000000000000000000f241607c45655a6bd0fee44e219890098e3dadbc000000000000000000000000644260a7987aa3510965213e7d244650c40fe343000000000000000000000000f130a864c042c908a9cf8f02cdbc1aca5220077b0000000000000000000000001a9edea0b12497f83487ef9598c24277ef87d85a0000000000000000000000002aff03a664417b7f83ff6385c0f7007afbe3d7c2000000000000000000000000f7069f11dc6b2d0f6a0654081cf951589e2b36c6000000000000000000000000825ffa5c61ed5a2f6a2320fba9dccc81fec6d9dc00000000000000000000000019be513f1ae7910d81ba80bdd0ac5426c2840fef0000000000000000000000004a3b614b084231d41f0ed71c7b748cfb6bbb83650000000000000000000000009efd227fc50dfd05eb42cdd3f1ff6918c44a79c20000000000000000000000007a1e1880b63daa7693d05b5a9192e8483dbfef640000000000000000000000009c0e9a8e72ab71aad7c85b3e1f87e3a70c8f4d140000000000000000000000007495e84fa5343fe83cc7d39df2d1152c53d2f294000000000000000000000000530588ece1281d1dbe1691f18ed8472bb898f8150000000000000000000000004a9456e33d53a32117ff84dcd7bf5892d247c0e800000000000000000000000009c8f3873109abc62929faed85942f13a31cda5d000000000000000000000000d34213ac9d09ce2b797ad17298f6a454985d506a00000000000000000000000060b01e7870acfbb6512634102f1463f8454389e9000000000000000000000000ce0d229d6dd09c2c92947294884cb9596bf427350000000000000000000000001fc36c331df289e592d2a75c3fa75da724fd81f50000000000000000000000008f4b3f9150412a0dc69a6cae03ffe6a6f9abe49c000000000000000000000000d9a80647011b1aa90b7d594688dea493c7ff139a0000000000000000000000008b835417cbe898ef8da0c8f79371bbb8e7a1daff000000000000000000000000ee36210d03f71f31dc949d907fcb44a8f9f97012000000000000000000000000be623350a8f95fddff5e00e0b0f0fe544e39f1c70000000000000000000000008b8a9bb77206977742a5bb2fd136e9f580395910000000000000000000000000d252960b0bf6b2848fdead80136db5f507f8be020000000000000000000000000d078bd6f56de18c0a97e714f390d9e63b2bb4d6000000000000000000000000e2b7fede2758d465019ce2c468f9414f274f262e000000000000000000000000c69a36f448d8a4b8282033ef6a209c2ff3d330c700000000000000000000000093ef9a16f2fb2871fc4ed6cb11bb8354330fb2d5000000000000000000000000ba3d570535360bc9383b28691c872959d4a34061000000000000000000000000f432eda8680d98aaa8270ecb4cfffc9c3b4534f0000000000000000000000000fc7035d84a37e65e6e8315747b85ca87d68e47220000000000000000000000009fe553de68865f425d8071c81640855a7c9613eb000000000000000000000000ca9061ae96f2728259e328aeda513270532fc43d000000000000000000000000714ea962c0c85e3ec05085c82fe702b11ca954490000000000000000000000000b23f70874c68410c240d1627b455c755638249300000000000000000000000081bfa4bff74e4af25ff112389527197d9cd2babd00000000000000000000000062c34149183c3426671c21bba85dc2588e57517d00000000000000000000000075069e4b3893094d521c52360ca701bfc3a4fbd600000000000000000000000017d903dc9530e5017a0fc3bcbcfe5c7c592b1d4c000000000000000000000000252378dd762da1eb778e1a3b6683f5457184ac98000000000000000000000000ac6de9f16c7b9b44c4e5c9073c3a10fa45ab4d5a0000000000000000000000006e14d4e15e245d6ecfe3181b08c2ff30d2c1da19000000000000000000000000be1b18279b30d524ca2d1c78a9a16cfc672d4fda000000000000000000000000edc5f04e825402c49e43bd475d864a8b5780bada0000000000000000000000004910198f711b06953b91f5665be6eb6b2d39c5a9000000000000000000000000be519c96c3bb0b240f3a5259dbc2ec461172ed97000000000000000000000000f5b88ba7ebe3b4cf5fe614237cc33ddcf6b991dd000000000000000000000000f8e2dabb64d034d405b6d5482eef5e9856d6bb9d00000000000000000000000032adf37e3be9a0b3682542042624b449790e92b900000000000000000000000008403f83a5da27fcecdbb12bb4649cd7f7a8c61f000000000000000000000000bcd8c157c75738086e9682cff7ef671e3d0e1e3100000000000000000000000021bd011b65aaf15add5909e97d33a9ad441bc873000000000000000000000000cc9ad85d1ec41b54f4d3a18ba750847d94f3c3d7000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046000000000000000000000000d8d88bded611411097ccb83f9f32dc8b0523737c000000000000000000000000b940455e0ccdc8c471f7524072a9ac9996a91cb9000000000000000000000000b4b6f5f044b2de24dece953afa59bb540366fc5d000000000000000000000000c20d2fcebbda545ecbb24d7c217469bd6d854888000000000000000000000000998a16c18c8f75cf613012908ea561ee53eae59b000000000000000000000000575a5e79b2cec8265515cb536250dd8afcd5ccd00000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000004f68ca6d8cd91c60000000000000000000000000000000000000000000000000215a1794693c77700000000000000000000000000000000000000000000000000fe1c215e8f838e00000000000000000000000000000000000000000000000000fe1c215e8f838e000000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000023bbf4b14c2e7ff800000000000000000000000000000000000000000000000023bbf4b14c2e7ff800000000000000000000000000000000000000000000000028b2815824fc11be00000000000000000000000000000000000000000000000003fc815b00e0188400000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000003f870857a3e0e380000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000000a56cefd5e102f4400000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003fc815b00e0188400000000000000000000000000000000000000000000000019cedb639a935c6c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000003f870857a3e0e380000000000000000000000000000000000000000000000001dc33b138e2f605800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000ee3a5f48a68b55200000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000004f68ca6d8cd91c600000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000261dd1ce2f2088800000000000000000000000000000000000000000000000002fa54641bae8aaa00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000000cb49b44ba602d8000000000000000000000000000000000000000000000000023efeeb72c3dd4800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000000ae401136a4d0db00000000000000000000000000000000000000000000000002c781f708c509f400000000000000000000000000000000000000000000000000ae401136a4d0db000000000000000000000000000000000000000000000000012268b272de251e00000000000000000000000000000000000000000000000000742ab6246de09200000000000000000000000000000000000000000000000000742ab6246de0920000000000000000000000000000000000000000000000000065a4da25d3016c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000742ab6246de0920000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000cb49b44ba602d800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000ae401136a4d0db00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000009ed194db19b238c0000000000000000000000000000000000000000000000000032d26d12e980b60000000000000000000000000000000000000000000000000032d26d12e980b6000000000000000000000000000000000000000000000000001d09a3150131fd00000000000000000000000000000000000000000000000000b1e07dc231427d00000000000000000000000000000000000000000000000009ed194db19b238c0000000000000000000000000000000000000000000000001dc74be914d16aa40000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000065a4da25d3016c0000000000000000000000000000000000000000000000000163c0fb846284fa000000000000000000000000000000000000000000000000007f0e10af47c1c70000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000e4b2ead51ac3330000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000fe1c215e8f838e0000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000b1e07dc231427d0000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000000b1e07dc231427d000000000000000000000000000000000000000000000000002107bc71ca4d820000000000000000000000000000000000000000000000000032d26d12e980b60000000000000000000000000000000000000000000000000028a857425466f800000000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000130ee8e7179044400000000000000000000000000000000000000000000000001969368974c05b000000000000000000000000000000000000000000000000000b1e07dc231427d0000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000002fa54641bae8aaa0000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000001178557e80443e900000000000000000000000000000000000000000000000001fc3842bd1f071c000000000000000000000000000000000000000000000000015c7e0d851515670000000000000000000000000000000000000000000000000163c0fb846284fa000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000001acc3de76d8001208000000000000000000000000000000000000000000000000943b1377290cbd800000000000000000000000000000000000000000000000002a5a058fc295ed0000000000000000000000000000000000000000000000000026805f9fa6f344a800000000000000000000000000000000000000000000000009a017e7e9bcd12a00000000000000000000000000000000000000000000000009a017e7e9bcd12a0000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f15760003560e01c80637a6d66dc1161019d578063981b24d0116100e9578063b361b2b5116100a2578063d53913931161007c578063d539139314610976578063d547741f14610994578063dd62ed3e146109b0578063f80f5dd5146109e0576102f1565b8063b361b2b51461090a578063b6bfd24b14610928578063ca15c87314610946576102f1565b8063981b24d014610820578063a217fddf14610850578063a457c2d71461086e578063a9059cbb1461089e578063a970cbf6146108ce578063a99b6248146108ec576102f1565b80638c1d11721161015657806391d148541161013057806391d14854146107985780639574aaf6146107c857806395d89b41146107e45780639711715a14610802576102f1565b80638c1d11721461072e5780638cf808af1461074c5780639010d07c14610768576102f1565b80637a6d66dc1461066a5780637a997ab7146106885780637ac1145a146106a65780637df4ebbd146106c45780638931392b146106f45780638be2bd2f14610712576102f1565b8063313ce5671161025c5780635439ad8611610215578063612cb2b5116101ef578063612cb2b5146105d05780637028e2cd1461060057806370a082311461061e57806378c8cda71461064e576102f1565b80635439ad86146105785780635475eba41461059657806355bf98fe146105b2576102f1565b8063313ce567146104a4578063355274ea146104c257806336568abe146104e057806339509351146104fc57806340c10f191461052c5780634ee2cd7e14610548576102f1565b806311d15e7a116102ae57806311d15e7a146103ce57806318160ddd146103ec57806323b872dd1461040a578063248a9ca31461043a5780632a7024731461046a5780632f2ff15d14610488576102f1565b806301ffc9a7146102f65780630204bb5f1461032657806306fdde0314610344578063095ea7b3146103625780630d9fdb37146103925780630eae4f02146103b0575b600080fd5b610310600480360381019061030b9190613570565b6109fc565b60405161031d91906135b8565b60405180910390f35b61032e610a76565b60405161033b9190613614565b60405180910390f35b61034c610a9c565b60405161035991906136c8565b60405180910390f35b61037c6004803603810190610377919061374c565b610b2e565b60405161038991906135b8565b60405180910390f35b61039a610b4c565b6040516103a7919061379b565b60405180910390f35b6103b8610b52565b6040516103c591906137cf565b60405180910390f35b6103d6610b76565b6040516103e391906137cf565b60405180910390f35b6103f4610b9a565b604051610401919061379b565b60405180910390f35b610424600480360381019061041f91906137ea565b610ba4565b60405161043191906135b8565b60405180910390f35b610454600480360381019061044f9190613869565b610ca5565b60405161046191906137cf565b60405180910390f35b610472610cc4565b60405161047f919061379b565b60405180910390f35b6104a2600480360381019061049d9190613896565b610cca565b005b6104ac610cf3565b6040516104b991906138f2565b60405180910390f35b6104ca610cfc565b6040516104d7919061379b565b60405180910390f35b6104fa60048036038101906104f59190613896565b610d20565b005b6105166004803603810190610511919061374c565b610da3565b60405161052391906135b8565b60405180910390f35b6105466004803603810190610541919061374c565b610e4f565b005b610562600480360381019061055d919061374c565b610f05565b60405161056f919061379b565b60405180910390f35b610580610f75565b60405161058d919061379b565b60405180910390f35b6105b060048036038101906105ab919061390d565b610f84565b005b6105ba611049565b6040516105c79190613614565b60405180910390f35b6105ea60048036038101906105e5919061393a565b61106f565b6040516105f791906135b8565b60405180910390f35b61060861108f565b60405161061591906137cf565b60405180910390f35b6106386004803603810190610633919061393a565b6110b3565b604051610645919061379b565b60405180910390f35b6106686004803603810190610663919061393a565b6110fc565b005b610672611286565b60405161067f919061379b565b60405180910390f35b61069061128c565b60405161069d91906137cf565b60405180910390f35b6106ae6112b0565b6040516106bb919061379b565b60405180910390f35b6106de60048036038101906106d9919061390d565b6112b6565b6040516106eb919061379b565b60405180910390f35b6106fc6112e2565b60405161070991906137cf565b60405180910390f35b61072c6004803603810190610727919061393a565b611306565b005b610736611407565b60405161074391906137cf565b60405180910390f35b6107666004803603810190610761919061390d565b61142b565b005b610782600480360381019061077d9190613967565b6114f0565b60405161078f9190613614565b60405180910390f35b6107b260048036038101906107ad9190613896565b61151f565b6040516107bf91906135b8565b60405180910390f35b6107e260048036038101906107dd919061390d565b611589565b005b6107ec61164e565b6040516107f991906136c8565b60405180910390f35b61080a6116e0565b604051610817919061379b565b60405180910390f35b61083a6004803603810190610835919061390d565b611722565b604051610847919061379b565b60405180910390f35b610858611753565b60405161086591906137cf565b60405180910390f35b6108886004803603810190610883919061374c565b61175a565b60405161089591906135b8565b60405180910390f35b6108b860048036038101906108b3919061374c565b61184e565b6040516108c591906135b8565b60405180910390f35b6108d661186c565b6040516108e391906137cf565b60405180910390f35b6108f4611890565b60405161090191906137cf565b60405180910390f35b6109126118b4565b60405161091f919061379b565b60405180910390f35b6109306118d8565b60405161093d9190613614565b60405180910390f35b610960600480360381019061095b9190613869565b6118fe565b60405161096d919061379b565b60405180910390f35b61097e611922565b60405161098b91906137cf565b60405180910390f35b6109ae60048036038101906109a99190613896565b611946565b005b6109ca60048036038101906109c591906139a7565b61196f565b6040516109d7919061379b565b60405180910390f35b6109fa60048036038101906109f5919061393a565b6119f6565b005b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6f5750610a6e82611cba565b5b9050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060058054610aab90613a16565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad790613a16565b8015610b245780601f10610af957610100808354040283529160200191610b24565b820191906000526020600020905b815481529060010190602001808311610b0757829003601f168201915b5050505050905090565b6000610b42610b3b611d34565b8484611d3c565b6001905092915050565b600d5481565b7f9a8c8f915b10863c961780eb6c2efad1286e296cf5c315eb5a47f49fa5b43b1b81565b7f11c2020b6b4f4e00c2410234e0c72636b4739cf7cda4d8e24ef6b881350e670481565b6000600454905090565b6000610bb1848484611f07565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bfc611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613aba565b60405180910390fd5b610c9985610c88611d34565b8584610c949190613b09565b611d3c565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b60135481565b610cd382610ca5565b610ce481610cdf611d34565b612803565b610cee83836128a0565b505050565b60006012905090565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000081565b610d28611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c90613baf565b60405180910390fd5b610d9f82826128d4565b5050565b6000610e45610db0611d34565b848460036000610dbe611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e409190613bcf565b611d3c565b6001905092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610e8181610e7c611d34565b612803565b7f00000000000000000000000000000000000000000052b7d2dcc80cd2e400000082610eab610b9a565b610eb59190613bcf565b1115610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90613c71565b60405180910390fd5b610f008383612908565b505050565b6000806000610f5284600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5d565b9150915081610f6957610f64856110b3565b610f6b565b805b9250505092915050565b6000610f7f612b53565b905090565b7f49514dda7ee21596253b494f3ea1c5e997b7588b34eb1f01a437153bb97f45c5610fb681610fb1611d34565b612803565b60008210158015610fc8575060328211155b611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90613cdd565b60405180910390fd5b81600c819055507f8d7156f97c3f3874c6f1255f65e1a12a7c50235ff12cfbaddaf2e4ded86281938260405161103d919061379b565b60405180910390a15050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b7f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f81565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676061112e81611129611d34565b612803565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613d49565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613db5565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be676081565b600c5481565b60008060006112c6846011612a5d565b91509150816112d7576013546112d9565b805b92505050919050565b7f177588173caf214224a1e3e13572ac12b605b6c2cb220768a93636b9f9cd72b181565b7f11c2020b6b4f4e00c2410234e0c72636b4739cf7cda4d8e24ef6b881350e670461133881611333611d34565b612803565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613d49565b60405180910390fd5b6113d27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683612b64565b6114037f11c2020b6b4f4e00c2410234e0c72636b4739cf7cda4d8e24ef6b881350e67046113fe611d34565b610d20565b5050565b7fd19c9a135042d8a53b9e61e107842ea53fd68027525deae6282612cfcce652be81565b7f9a8c8f915b10863c961780eb6c2efad1286e296cf5c315eb5a47f49fa5b43b1b61145d81611458611d34565b612803565b6000821015801561146f575060328211155b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613cdd565b60405180910390fd5b81600d819055507f1380c885556fcd87b5f3b8485f1c7b22359b2210baf03e22e74e4d61fcd40be0826040516114e4919061379b565b60405180910390a15050565b60006115178260016000868152602001908152602001600020612b7290919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7fd19c9a135042d8a53b9e61e107842ea53fd68027525deae6282612cfcce652be6115bb816115b6611d34565b612803565b600082101580156115cd575060328211155b61160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390613cdd565b60405180910390fd5b81600b819055507f76e64a69bfc8a971ed674b8ab3748bcd02fd4b4ffa22af4f5b1b997bd3b2ad6782604051611642919061379b565b60405180910390a15050565b60606006805461165d90613a16565b80601f016020809104026020016040519081016040528092919081815260200182805461168990613a16565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b5050505050905090565b60007f5fdbd35e8da83ee755d5e62a539e5ed7f47126abede0b8b10f9ea43dc6eed07f6117148161170f611d34565b612803565b61171c612b8c565b91505090565b600080600061173284600f612a5d565b915091508161174857611743610b9a565b61174a565b805b92505050919050565b6000801b81565b60008060036000611769611d34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90613e47565b60405180910390fd5b611843611831611d34565b85858461183e9190613b09565b611d3c565b600191505092915050565b600061186261185b611d34565b8484611f07565b6001905092915050565b7f3dbd7c6bedf2412ff4c88c73c5cbd78a9c5f5066ba3f3b3b9a0c01e1a620d32081565b7f49514dda7ee21596253b494f3ea1c5e997b7588b34eb1f01a437153bb97f45c581565b7f00000000000000000000000000000000000000000000000000000000000003e881565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061191b60016000848152602001908152602001600020612be3565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61194f82610ca5565b6119608161195b611d34565b612803565b61196a83836128d4565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fdc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760611a2881611a23611d34565b612803565b8173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff161415611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613d49565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90613eb3565b60405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001816000016000828254019250508190555050565b611ba1828261151f565b611c7357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c18611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000611c9f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612bf8565b905092915050565b505050565b600081600001549050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d2d5750611d2c82612c68565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390613f45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613fd7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611efa919061379b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e90613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613d49565b60405180910390fd5b611ff2838383612cd2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120935750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561222f576000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614043565b60405180910390fd5b818161212b9190613b09565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121bd9190613bcf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612221919061379b565b60405180910390a3506127fe565b620186a08111612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b906140af565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000003e8600b54836122a591906140cf565b6122af9190614158565b905060007f00000000000000000000000000000000000000000000000000000000000003e8600c54846122e291906140cf565b6122ec9190614158565b905060007f00000000000000000000000000000000000000000000000000000000000003e8600d548561231f91906140cf565b6123299190614158565b9050600081838561233a9190613bcf565b6123449190613bcf565b8561234f9190613b09565b90506000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90614043565b60405180910390fd5b85816123e49190613b09565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124989190613bcf565b925050819055508360026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125109190613bcf565b9250508190555083601360008282546125299190613bcf565b925050819055508260026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a19190613bcf565b9250508190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f79190613bcf565b92505081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161267d919061379b565b60405180910390a3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612704919061379b565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161278b919061379b565b60405180910390a38673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127f0919061379b565b60405180910390a350505050505b505050565b61280d828261151f565b61289c576128328173ffffffffffffffffffffffffffffffffffffffff166014612e15565b6128408360001c6020612e15565b60405160200161285192919061425d565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289391906136c8565b60405180910390fd5b5050565b6128aa8282611b97565b6128cf8160016000858152602001908152602001600020611c7790919063ffffffff16565b505050565b6128de8282613051565b612903816001600085815260200190815260200160002061313290919063ffffffff16565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296f906142e3565b60405180910390fd5b61298460008383612cd2565b80600460008282546129969190613bcf565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ec9190613bcf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a51919061379b565b60405180910390a35050565b60008060008411612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a9061434f565b60405180910390fd5b612aab612b53565b841115612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906143bb565b60405180910390fd5b6000612b05858560000161316290919063ffffffff16565b90508360000180549050811415612b23576000809250925050612b4c565b6001846001018281548110612b3b57612b3a6143db565b5b906000526020600020015492509250505b9250929050565b6000612b5f6014611cac565b905090565b612b6e82826128a0565b5050565b6000612b81836000018361323c565b60001c905092915050565b6000612b986014611b81565b6000612ba2612b53565b9050807f492fbd8cfdd942203e99f6bc74253a1e1f5791b0644612279e778349f353b19842604051612bd4919061379b565b60405180910390a28091505090565b6000612bf182600001613267565b9050919050565b6000612c048383613278565b612c5d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612c62565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cdd838383611ca7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2857612d1b8261329b565b612d236132ee565b612e10565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d7357612d668361329b565b612d6e6132ee565b612e0f565b612d7b613302565b612d848361329b565b612d8d8261329b565b612db8600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b612de3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b612e0e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329b565b5b5b505050565b606060006002836002612e2891906140cf565b612e329190613bcf565b67ffffffffffffffff811115612e4b57612e4a61440a565b5b6040519080825280601f01601f191660200182016040528015612e7d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612eb557612eb46143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612f1957612f186143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612f5991906140cf565b612f639190613bcf565b90505b6001811115613003577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612fa557612fa46143db565b5b1a60f81b828281518110612fbc57612fbb6143db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612ffc90614439565b9050612f66565b5060008414613047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303e906144af565b60405180910390fd5b8091505092915050565b61305b828261151f565b1561312e57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506130d3611d34565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600061315a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613311565b905092915050565b600080838054905014156131795760009050613236565b600080848054905090505b808210156131dd5760006131988383613425565b9050848682815481106131ae576131ad6143db565b5b906000526020600020015411156131c7578091506131d7565b6001816131d49190613bcf565b92505b50613184565b600082118015613215575083856001846131f79190613b09565b81548110613208576132076143db565b5b9060005260206000200154145b15613230576001826132279190613b09565b92505050613236565b81925050505b92915050565b6000826000018281548110613254576132536143db565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6132eb600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206132e6836110b3565b61344b565b50565b613300600f6132fb610b9a565b61344b565b565b61330f601160135461344b565b565b600080836001016000848152602001908152602001600020549050600081146134195760006001826133439190613b09565b905060006001866000018054905061335b9190613b09565b90508181146133ca57600086600001828154811061337c5761337b6143db565b5b90600052602060002001549050808760000184815481106133a05761339f6143db565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b856000018054806133de576133dd6144cf565b5b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061341f565b60009150505b92915050565b600060028284186134369190614158565b8284166134439190613bcf565b905092915050565b6000613455612b53565b905080613464846000016134c6565b10156134c15782600001819080600181540180825580915050600190039060005260206000200160009091909190915055826001018290806001815401808255809150506001900390600052602060002001600090919091909150555b505050565b600080828054905014156134dd576000905061350e565b81600183805490506134ef9190613b09565b81548110613500576134ff6143db565b5b906000526020600020015490505b919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61354d81613518565b811461355857600080fd5b50565b60008135905061356a81613544565b92915050565b60006020828403121561358657613585613513565b5b60006135948482850161355b565b91505092915050565b60008115159050919050565b6135b28161359d565b82525050565b60006020820190506135cd60008301846135a9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135fe826135d3565b9050919050565b61360e816135f3565b82525050565b60006020820190506136296000830184613605565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561366957808201518184015260208101905061364e565b83811115613678576000848401525b50505050565b6000601f19601f8301169050919050565b600061369a8261362f565b6136a4818561363a565b93506136b481856020860161364b565b6136bd8161367e565b840191505092915050565b600060208201905081810360008301526136e2818461368f565b905092915050565b6136f3816135f3565b81146136fe57600080fd5b50565b600081359050613710816136ea565b92915050565b6000819050919050565b61372981613716565b811461373457600080fd5b50565b60008135905061374681613720565b92915050565b6000806040838503121561376357613762613513565b5b600061377185828601613701565b925050602061378285828601613737565b9150509250929050565b61379581613716565b82525050565b60006020820190506137b0600083018461378c565b92915050565b6000819050919050565b6137c9816137b6565b82525050565b60006020820190506137e460008301846137c0565b92915050565b60008060006060848603121561380357613802613513565b5b600061381186828701613701565b935050602061382286828701613701565b925050604061383386828701613737565b9150509250925092565b613846816137b6565b811461385157600080fd5b50565b6000813590506138638161383d565b92915050565b60006020828403121561387f5761387e613513565b5b600061388d84828501613854565b91505092915050565b600080604083850312156138ad576138ac613513565b5b60006138bb85828601613854565b92505060206138cc85828601613701565b9150509250929050565b600060ff82169050919050565b6138ec816138d6565b82525050565b600060208201905061390760008301846138e3565b92915050565b60006020828403121561392357613922613513565b5b600061393184828501613737565b91505092915050565b6000602082840312156139505761394f613513565b5b600061395e84828501613701565b91505092915050565b6000806040838503121561397e5761397d613513565b5b600061398c85828601613854565b925050602061399d85828601613737565b9150509250929050565b600080604083850312156139be576139bd613513565b5b60006139cc85828601613701565b92505060206139dd85828601613701565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2e57607f821691505b60208210811415613a4257613a416139e7565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613aa460288361363a565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1482613716565b9150613b1f83613716565b925082821015613b3257613b31613ada565b5b828203905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613b99602f8361363a565b9150613ba482613b3d565b604082019050919050565b60006020820190508181036000830152613bc881613b8c565b9050919050565b6000613bda82613716565b9150613be583613716565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c1a57613c19613ada565b5b828201905092915050565b7f536b79626c6f636b733a20636170000000000000000000000000000000000000600082015250565b6000613c5b600e8361363a565b9150613c6682613c25565b602082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f536b79626c6f636b733a207461782072616e6765203020746f20352500000000600082015250565b6000613cc7601c8361363a565b9150613cd282613c91565b602082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b7f536b79626c6f636b733a207a65726f2061646472657373000000000000000000600082015250565b6000613d3360178361363a565b9150613d3e82613cfd565b602082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f536b79626c6f636b733a206e6f742077686974656c6973746564000000000000600082015250565b6000613d9f601a8361363a565b9150613daa82613d69565b602082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613e3160258361363a565b9150613e3c82613dd5565b604082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b7f536b79626c6f636b733a20616c72656164792061646465640000000000000000600082015250565b6000613e9d60188361363a565b9150613ea882613e67565b602082019050919050565b60006020820190508181036000830152613ecc81613e90565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f2f60248361363a565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc160228361363a565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b7f536b79626c6f636b733a20657863656564732062616c616e6365000000000000600082015250565b600061402d601a8361363a565b915061403882613ff7565b602082019050919050565b6000602082019050818103600083015261405c81614020565b9050919050565b7f536b79426c6f636b733a206d696e696d756d20616d6f756e7400000000000000600082015250565b600061409960198361363a565b91506140a482614063565b602082019050919050565b600060208201905081810360008301526140c88161408c565b9050919050565b60006140da82613716565b91506140e583613716565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411e5761411d613ada565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061416382613716565b915061416e83613716565b92508261417e5761417d614129565b5b828204905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006141ca601783614189565b91506141d582614194565b601782019050919050565b60006141eb8261362f565b6141f58185614189565b935061420581856020860161364b565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614247601183614189565b915061425282614211565b601182019050919050565b6000614268826141bd565b915061427482856141e0565b915061427f8261423a565b915061428b82846141e0565b91508190509392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006142cd601f8361363a565b91506142d882614297565b602082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b7f4552433230536e617073686f743a206964206973203000000000000000000000600082015250565b600061433960168361363a565b915061434482614303565b602082019050919050565b600060208201905081810360008301526143688161432c565b9050919050565b7f4552433230536e617073686f743a206e6f6e6578697374656e74206964000000600082015250565b60006143a5601d8361363a565b91506143b08261436f565b602082019050919050565b600060208201905081810360008301526143d481614398565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061444482613716565b9150600082141561445857614457613ada565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061449960208361363a565b91506144a482614463565b602082019050919050565b600060208201905081810360008301526144c88161448c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220dde40956612f70f8525f32654082f649b9df969c6b70f5b0e91a60297c5fb75464736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000ea0000000000000000000000000152a3d85fb7d4dbeb407e6bbdcd1cfe4845d2db7000000000000000000000000e54b918e19163c9eeb0af36f502bc8be2fc27477000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046000000000000000000000000f7f42998bff417ea5aceb4d252bdcfabc78fb907000000000000000000000000c5d13027ae19f5a41fef1335a33ca4434c457fbb0000000000000000000000000000000000000000000000000000000000000009536b79626c6f636b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000449534b59000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067000000000000000000000000bc46e99f434bab242ea1a0c57f54a2e05681e45e0000000000000000000000006768f0f8a212f5b5b8081131323772ea7ea2a33100000000000000000000000039446c6743d9188b846813819161e9d66020a0ed000000000000000000000000826bcea879e4496ed163bcc128926b5627e1f08d00000000000000000000000018a878afa68ff540ddf520bab2f1f9470f7184100000000000000000000000004f20cb7a1d567a54350a18dacb0cc803aebb4483000000000000000000000000aa4237995a8ddb6fc30c3c5bc4cb9c0c15ee7c4f000000000000000000000000f3c9ea1658997558e5eb76ae49bed1a9832e18010000000000000000000000001d945e9ea2da9cb9a36b3e53e78b5e22bea1e3d90000000000000000000000005e2b1f3acf6473fa61c513ac5a5719d398ff42af00000000000000000000000099d218ad1ec627e786c50c5ffe6732410b8c78fd00000000000000000000000001aa498bbf2642d93c8d65e149d534c97676173a000000000000000000000000ac2e1d3f07a6b7b3c16f8811e77b36b1b5c3c40b0000000000000000000000009f7b75c2205d10f6f1ffc73c33ddb805167d27d5000000000000000000000000d378d1142830a9816128d8815137a070e3ede8f8000000000000000000000000f14c9dbdb31b0a18af44fcf97ed12b0abfe1b92e000000000000000000000000a02086f132afc89d0e129f323811f19bd13f79650000000000000000000000004da94e682326bd14997d1e1c62350654d8e44c5d0000000000000000000000008888888888e9997e64793849389a8faf5e8e547c000000000000000000000000eec32f9ba98938acafb3dff6100a546a50f25f9d000000000000000000000000cb47a9d150580b692f9e183c089abec12f14367000000000000000000000000026c68c139930de8d2901ef4dce945e8282f4e22c00000000000000000000000036b696aa9ba2aa4441e03baabeaa828f8ba7dc2c0000000000000000000000004549d92dd1e05df5615c0bb50163fc3a2d5b6933000000000000000000000000637e21ac11f0e0cf95d926d6bd2737b059a2858a000000000000000000000000874f5b8cc54ead6738a7bc3af7c16790808ffda9000000000000000000000000646f7044865bd507e3512f1847a901adc78bc74100000000000000000000000018701332a0126472ea908f54de9836ca1c5e96790000000000000000000000000e0b7c7e5c49525365b36a39b112f27965790e9e000000000000000000000000cec07cf2cace4ea5ca2b65e58b307e9efd2a2845000000000000000000000000cbc83a731e2baf8c26507ef952dee6889770c6f3000000000000000000000000151091122624bddb51ee8003d9c734aadc4dc8b0000000000000000000000000113b622f8f14d94cd449f4ecd2110cd5786a89be000000000000000000000000f5bc8bb5fa79b608f55afbe002884f736daf11ee000000000000000000000000e1476c3dd4be8c160636e68094d235922b9cdf1400000000000000000000000017ec047622c000df03599026a3b39871ec9384db000000000000000000000000f56345338cb4cddaf915ebef3bfde63e70fe30530000000000000000000000002031213cd107911515bbbdd98ce3b5c6db3e40120000000000000000000000002145dc142134d37b62a113e7293af87d0a186526000000000000000000000000707b8f3075521ee750c25ac3ba9a0b9b85e370c4000000000000000000000000f241607c45655a6bd0fee44e219890098e3dadbc000000000000000000000000644260a7987aa3510965213e7d244650c40fe343000000000000000000000000f130a864c042c908a9cf8f02cdbc1aca5220077b0000000000000000000000001a9edea0b12497f83487ef9598c24277ef87d85a0000000000000000000000002aff03a664417b7f83ff6385c0f7007afbe3d7c2000000000000000000000000f7069f11dc6b2d0f6a0654081cf951589e2b36c6000000000000000000000000825ffa5c61ed5a2f6a2320fba9dccc81fec6d9dc00000000000000000000000019be513f1ae7910d81ba80bdd0ac5426c2840fef0000000000000000000000004a3b614b084231d41f0ed71c7b748cfb6bbb83650000000000000000000000009efd227fc50dfd05eb42cdd3f1ff6918c44a79c20000000000000000000000007a1e1880b63daa7693d05b5a9192e8483dbfef640000000000000000000000009c0e9a8e72ab71aad7c85b3e1f87e3a70c8f4d140000000000000000000000007495e84fa5343fe83cc7d39df2d1152c53d2f294000000000000000000000000530588ece1281d1dbe1691f18ed8472bb898f8150000000000000000000000004a9456e33d53a32117ff84dcd7bf5892d247c0e800000000000000000000000009c8f3873109abc62929faed85942f13a31cda5d000000000000000000000000d34213ac9d09ce2b797ad17298f6a454985d506a00000000000000000000000060b01e7870acfbb6512634102f1463f8454389e9000000000000000000000000ce0d229d6dd09c2c92947294884cb9596bf427350000000000000000000000001fc36c331df289e592d2a75c3fa75da724fd81f50000000000000000000000008f4b3f9150412a0dc69a6cae03ffe6a6f9abe49c000000000000000000000000d9a80647011b1aa90b7d594688dea493c7ff139a0000000000000000000000008b835417cbe898ef8da0c8f79371bbb8e7a1daff000000000000000000000000ee36210d03f71f31dc949d907fcb44a8f9f97012000000000000000000000000be623350a8f95fddff5e00e0b0f0fe544e39f1c70000000000000000000000008b8a9bb77206977742a5bb2fd136e9f580395910000000000000000000000000d252960b0bf6b2848fdead80136db5f507f8be020000000000000000000000000d078bd6f56de18c0a97e714f390d9e63b2bb4d6000000000000000000000000e2b7fede2758d465019ce2c468f9414f274f262e000000000000000000000000c69a36f448d8a4b8282033ef6a209c2ff3d330c700000000000000000000000093ef9a16f2fb2871fc4ed6cb11bb8354330fb2d5000000000000000000000000ba3d570535360bc9383b28691c872959d4a34061000000000000000000000000f432eda8680d98aaa8270ecb4cfffc9c3b4534f0000000000000000000000000fc7035d84a37e65e6e8315747b85ca87d68e47220000000000000000000000009fe553de68865f425d8071c81640855a7c9613eb000000000000000000000000ca9061ae96f2728259e328aeda513270532fc43d000000000000000000000000714ea962c0c85e3ec05085c82fe702b11ca954490000000000000000000000000b23f70874c68410c240d1627b455c755638249300000000000000000000000081bfa4bff74e4af25ff112389527197d9cd2babd00000000000000000000000062c34149183c3426671c21bba85dc2588e57517d00000000000000000000000075069e4b3893094d521c52360ca701bfc3a4fbd600000000000000000000000017d903dc9530e5017a0fc3bcbcfe5c7c592b1d4c000000000000000000000000252378dd762da1eb778e1a3b6683f5457184ac98000000000000000000000000ac6de9f16c7b9b44c4e5c9073c3a10fa45ab4d5a0000000000000000000000006e14d4e15e245d6ecfe3181b08c2ff30d2c1da19000000000000000000000000be1b18279b30d524ca2d1c78a9a16cfc672d4fda000000000000000000000000edc5f04e825402c49e43bd475d864a8b5780bada0000000000000000000000004910198f711b06953b91f5665be6eb6b2d39c5a9000000000000000000000000be519c96c3bb0b240f3a5259dbc2ec461172ed97000000000000000000000000f5b88ba7ebe3b4cf5fe614237cc33ddcf6b991dd000000000000000000000000f8e2dabb64d034d405b6d5482eef5e9856d6bb9d00000000000000000000000032adf37e3be9a0b3682542042624b449790e92b900000000000000000000000008403f83a5da27fcecdbb12bb4649cd7f7a8c61f000000000000000000000000bcd8c157c75738086e9682cff7ef671e3d0e1e3100000000000000000000000021bd011b65aaf15add5909e97d33a9ad441bc873000000000000000000000000cc9ad85d1ec41b54f4d3a18ba750847d94f3c3d7000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046000000000000000000000000d8d88bded611411097ccb83f9f32dc8b0523737c000000000000000000000000b940455e0ccdc8c471f7524072a9ac9996a91cb9000000000000000000000000b4b6f5f044b2de24dece953afa59bb540366fc5d000000000000000000000000c20d2fcebbda545ecbb24d7c217469bd6d854888000000000000000000000000998a16c18c8f75cf613012908ea561ee53eae59b000000000000000000000000575a5e79b2cec8265515cb536250dd8afcd5ccd00000000000000000000000000000000000000000000000000000000000000067000000000000000000000000000000000000000000004f68ca6d8cd91c60000000000000000000000000000000000000000000000000215a1794693c77700000000000000000000000000000000000000000000000000fe1c215e8f838e00000000000000000000000000000000000000000000000000fe1c215e8f838e000000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000023bbf4b14c2e7ff800000000000000000000000000000000000000000000000023bbf4b14c2e7ff800000000000000000000000000000000000000000000000028b2815824fc11be00000000000000000000000000000000000000000000000003fc815b00e0188400000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000003f870857a3e0e380000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000000a56cefd5e102f4400000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003fc815b00e0188400000000000000000000000000000000000000000000000019cedb639a935c6c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000003f870857a3e0e380000000000000000000000000000000000000000000000001dc33b138e2f605800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000ee3a5f48a68b55200000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000004f68ca6d8cd91c600000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000261dd1ce2f2088800000000000000000000000000000000000000000000000002fa54641bae8aaa00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000000cb49b44ba602d8000000000000000000000000000000000000000000000000023efeeb72c3dd4800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000000ae401136a4d0db00000000000000000000000000000000000000000000000002c781f708c509f400000000000000000000000000000000000000000000000000ae401136a4d0db000000000000000000000000000000000000000000000000012268b272de251e00000000000000000000000000000000000000000000000000742ab6246de09200000000000000000000000000000000000000000000000000742ab6246de0920000000000000000000000000000000000000000000000000065a4da25d3016c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000742ab6246de0920000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000cb49b44ba602d800000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000ae401136a4d0db00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000003f870857a3e0e3800000000000000000000000000000000000000000000000009ed194db19b238c0000000000000000000000000000000000000000000000000032d26d12e980b60000000000000000000000000000000000000000000000000032d26d12e980b6000000000000000000000000000000000000000000000000001d09a3150131fd00000000000000000000000000000000000000000000000000b1e07dc231427d00000000000000000000000000000000000000000000000009ed194db19b238c0000000000000000000000000000000000000000000000001dc74be914d16aa40000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000065a4da25d3016c0000000000000000000000000000000000000000000000000163c0fb846284fa000000000000000000000000000000000000000000000000007f0e10af47c1c70000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000e4b2ead51ac3330000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000fe1c215e8f838e0000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000b1e07dc231427d0000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000000b1e07dc231427d000000000000000000000000000000000000000000000000002107bc71ca4d820000000000000000000000000000000000000000000000000032d26d12e980b60000000000000000000000000000000000000000000000000028a857425466f800000000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000130ee8e7179044400000000000000000000000000000000000000000000000001969368974c05b000000000000000000000000000000000000000000000000000b1e07dc231427d0000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000002fa54641bae8aaa0000000000000000000000000000000000000000000000000098774738bc822200000000000000000000000000000000000000000000000000cb49b44ba602d80000000000000000000000000000000000000000000000000032d26d12e980b600000000000000000000000000000000000000000000000001178557e80443e900000000000000000000000000000000000000000000000001fc3842bd1f071c000000000000000000000000000000000000000000000000015c7e0d851515670000000000000000000000000000000000000000000000000163c0fb846284fa000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000001acc3de76d8001208000000000000000000000000000000000000000000000000943b1377290cbd800000000000000000000000000000000000000000000000002a5a058fc295ed0000000000000000000000000000000000000000000000000026805f9fa6f344a800000000000000000000000000000000000000000000000009a017e7e9bcd12a00000000000000000000000000000000000000000000000009a017e7e9bcd12a0000
-----Decoded View---------------
Arg [0] : name (string): Skyblocks
Arg [1] : symbol (string): ISKY
Arg [2] : _initialBeneficiaries (address[]): 0xBc46E99F434bAb242Ea1A0C57f54a2e05681E45E,0x6768f0F8A212F5b5B8081131323772ea7ea2a331,0x39446C6743d9188b846813819161e9d66020a0ed,0x826BCEA879E4496Ed163BCC128926B5627E1f08d,0x18a878afa68FF540dDf520BAb2F1F9470F718410,0x4F20Cb7a1D567A54350a18DAcB0cc803aEBB4483,0xaA4237995A8DDb6FC30C3C5bC4Cb9C0c15eE7C4F,0xF3C9eA1658997558E5EB76ae49bed1A9832E1801,0x1d945e9eA2DA9CB9A36B3E53e78B5e22BEa1e3D9,0x5E2b1f3aCF6473fa61c513Ac5A5719d398ff42aF,0x99D218Ad1eC627E786C50c5FFE6732410B8C78fd,0x01aA498bBf2642d93C8D65E149D534C97676173a,0xac2e1d3f07a6b7B3C16F8811e77b36b1B5c3c40b,0x9f7b75c2205d10f6F1FFc73C33dDb805167D27D5,0xd378d1142830A9816128d8815137A070E3EDe8f8,0xF14c9dbDb31b0a18aF44Fcf97Ed12b0abfE1b92e,0xa02086F132Afc89D0E129f323811f19BD13F7965,0x4dA94e682326BD14997D1E1c62350654D8e44c5d,0x8888888888E9997E64793849389a8Faf5E8e547C,0xEeC32f9bA98938AcAFB3dFf6100A546a50F25F9d,0xCB47A9d150580B692F9e183C089ABEc12f143670,0x26C68c139930de8D2901Ef4DCe945e8282F4e22c,0x36B696aA9bA2Aa4441e03baabeAA828f8Ba7dc2c,0x4549d92Dd1E05df5615c0Bb50163FC3A2d5B6933,0x637E21Ac11F0E0Cf95D926d6bd2737b059A2858a,0x874f5b8cc54EAd6738a7bc3aF7C16790808FFDA9,0x646f7044865bD507e3512f1847A901ADc78bC741,0x18701332A0126472Ea908f54dE9836Ca1C5e9679,0x0e0b7c7e5C49525365b36a39B112F27965790E9E,0xcEc07Cf2cAce4eA5cA2b65E58b307E9eFD2a2845,0xCBC83a731E2baF8C26507EF952deE6889770c6f3,0x151091122624bddb51ee8003D9C734aaDC4dc8B0,0x113B622f8F14D94CD449F4ecd2110cd5786a89bE,0xF5bC8bb5FA79B608f55AfbE002884f736dAf11ee,0xE1476C3dD4BE8C160636e68094D235922B9Cdf14,0x17ec047622C000Df03599026A3B39871EC9384DB,0xf56345338Cb4CddaF915ebeF3bfde63E70FE3053,0x2031213cD107911515bBBDD98CE3b5C6dB3e4012,0x2145DC142134D37b62A113E7293AF87D0A186526,0x707B8F3075521Ee750C25Ac3bA9a0B9B85E370C4,0xF241607C45655a6Bd0Fee44E219890098E3dadbc,0x644260A7987aa3510965213e7D244650c40fE343,0xf130a864c042C908A9cF8f02cdbc1Aca5220077B,0x1A9eDea0b12497F83487Ef9598c24277EF87D85a,0x2afF03a664417b7F83Ff6385c0F7007Afbe3d7C2,0xF7069F11dC6B2D0F6a0654081Cf951589E2B36C6,0x825Ffa5C61Ed5A2F6a2320fBa9dccc81Fec6d9DC,0x19bE513f1Ae7910d81bA80BdD0ac5426C2840fEf,0x4a3B614B084231D41f0ed71C7B748CFB6bbb8365,0x9efd227fC50dfd05eb42cdD3F1ff6918c44A79C2,0x7a1E1880B63DaA7693D05b5A9192E8483DbfEF64,0x9C0E9a8E72AB71aAd7C85B3e1f87e3A70C8f4d14,0x7495E84fA5343FE83cC7d39Df2D1152c53D2F294,0x530588ECE1281D1dBe1691F18eD8472Bb898f815,0x4A9456e33D53A32117fF84dcD7bf5892D247C0E8,0x09C8f3873109aBC62929Faed85942f13a31CdA5D,0xd34213Ac9d09cE2B797ad17298f6a454985d506A,0x60B01e7870acfBB6512634102f1463f8454389E9,0xcE0D229d6dD09C2C92947294884CB9596bf42735,0x1fC36c331df289E592D2A75c3fA75dA724fd81f5,0x8F4B3f9150412A0DC69A6cAE03fFE6A6F9abe49c,0xd9a80647011B1AA90b7D594688dEA493c7fF139A,0x8B835417cBE898ef8Da0c8F79371bbb8E7a1dAFf,0xEE36210d03f71F31dc949d907Fcb44a8f9f97012,0xBE623350A8f95FDDfF5e00E0b0F0FE544e39f1C7,0x8b8a9bb77206977742a5bB2fd136e9F580395910,0xd252960b0bf6B2848fdeAd80136db5f507f8be02,0x0d078bD6f56De18C0a97e714F390d9E63B2bb4d6,0xe2b7FeDE2758D465019cE2c468f9414F274F262E,0xc69A36f448d8a4b8282033ef6A209C2fF3d330C7,0x93eF9a16f2fb2871FC4eD6cB11bb8354330FB2D5,0xBA3d570535360bc9383B28691C872959d4A34061,0xf432EdA8680D98aaA8270Ecb4cfFfC9C3B4534F0,0xFc7035D84a37e65e6e8315747b85Ca87d68e4722,0x9fe553de68865F425d8071C81640855A7C9613eb,0xCa9061Ae96f2728259E328AEda513270532FC43d,0x714Ea962C0c85e3Ec05085C82fE702B11ca95449,0x0b23F70874c68410C240d1627B455C7556382493,0x81bFa4Bff74e4AF25FF112389527197d9Cd2BABd,0x62C34149183C3426671C21bbA85dC2588E57517d,0x75069e4B3893094D521C52360Ca701bFC3a4FBD6,0x17d903DC9530e5017A0FC3bcbcFE5C7c592b1d4C,0x252378Dd762da1EB778e1a3B6683f5457184ac98,0xaC6dE9f16c7b9B44C4e5C9073C3a10fA45aB4d5a,0x6E14D4e15E245d6ECfe3181B08c2FF30d2c1Da19,0xbe1B18279b30d524Ca2d1c78A9a16CfC672D4fDa,0xEdc5F04e825402C49E43BD475D864A8b5780bADA,0x4910198F711b06953B91F5665Be6EB6B2d39c5A9,0xBE519C96C3bb0B240F3a5259dBc2Ec461172ed97,0xf5B88BA7eBE3b4Cf5fE614237Cc33DDcF6b991Dd,0xF8e2DAbB64d034D405b6d5482eEF5E9856d6BB9d,0x32adF37E3BE9a0b3682542042624b449790E92b9,0x08403F83a5Da27FCeCdbB12Bb4649cD7f7a8C61F,0xbCd8c157c75738086E9682cfF7ef671e3d0e1e31,0x21Bd011B65Aaf15aDd5909e97d33a9ad441bC873,0xcC9AD85d1Ec41b54f4d3a18Ba750847d94f3C3D7,0xB0612f90e5b7aaA1887bc71ED21cbeA72AcB8046,0xD8d88Bded611411097CCB83f9f32DC8b0523737C,0xb940455e0CcDC8c471F7524072A9ac9996A91Cb9,0xB4B6F5f044B2DE24decE953afA59BB540366fC5D,0xc20D2FcebBDa545EcBB24D7c217469bd6D854888,0x998A16c18c8F75cf613012908Ea561EE53eAe59b,0x575A5E79b2ceC8265515Cb536250dD8AFCd5cCd0
Arg [3] : _amounts (uint256[]): 375000000000000000000000,157500000000000000000000,75000000000000000000000,75000000000000000000000,93750000000000000000000,168750000000000000000000,168750000000000000000000,192187500000000000000000,18825000000000000000000,28125000000000000000000,18750000000000000000000,300000000000000000000000,48825000000000000000000,9375000000000000000000,18825000000000000000000,121875000000000000000000,46875000000000000000000,18750000000000000000000,140550000000000000000000,46875000000000000000000,9375000000000000000000,70312500000000000000000,46875000000000000000000,46875000000000000000000,9375000000000000000000,37500000000000000000000,9375000000000000000000,23437500000000000000000,187500000000000000000000,9375000000000000000000,11250000000000000000000,14062500000000000000000,9375000000000000000000,9375000000000000000000,18750000000000000000000,93750000000000000000000,18750000000000000000000,3750000000000000000000,10606800000000000000000,46875000000000000000000,3214350000000000000000,13125000000000000000000,3214350000000000000000,5357100000000000000000,2142900000000000000000,2142900000000000000000,1875000000000000000000,9375000000000000000000,2142900000000000000000,2812500000000000000000,3750000000000000000000,46875000000000000000000,9375000000000000000000,18750000000000000000000,9375000000000000000000,3214350000000000000000,46875000000000000000000,46875000000000000000000,18750000000000000000000,46875000000000000000000,937500000000000000000,937500000000000000000,535650000000000000000,3281250000000000000000,46875000000000000000000,140625000000000000000000,150000000000000000000000,1875000000000000000000,6562500000000000000000,2343750000000000000000,2812500000000000000000,4218750000000000000000,2812500000000000000000,4687500000000000000000,2812500000000000000000,3281250000000000000000,937500000000000000000,3281250000000000000000,609300000000000000000,937500000000000000000,750000000000000000000,3750000000000000000000,5625000000000000000000,7500000000000000000000,3281250000000000000000,937500000000000000000,187500000000000000000000,28125000000000000000000,14062500000000000000000,2812500000000000000000,3750000000000000000000,937500000000000000000,5156250000000000000000,9375000000000000000000,6428550000000000000000,6562500000000000000000,100000000000000000000000,2024786000000000000000000,700000000000000000000000,200000000000000000000000,181818000000000000000000,45454500000000000000000,45454500000000000000000
Arg [4] : _claimPool (address): 0x152a3D85FB7D4DbEb407E6bBDCd1cfe4845d2db7
Arg [5] : _developmentTreasury (address): 0xE54B918e19163C9eEB0aF36f502Bc8bE2FC27477
Arg [6] : _playToEarn (address): 0xB0612f90e5b7aaA1887bc71ED21cbeA72AcB8046
Arg [7] : _tokenStaking (address): 0xF7F42998bFf417ea5Aceb4D252bDCfABc78Fb907
Arg [8] : governance (address): 0xc5D13027Ae19F5a41feF1335A33cA4434c457FbB
-----Encoded View---------------
221 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000ea0
Arg [4] : 000000000000000000000000152a3d85fb7d4dbeb407e6bbdcd1cfe4845d2db7
Arg [5] : 000000000000000000000000e54b918e19163c9eeb0af36f502bc8be2fc27477
Arg [6] : 000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046
Arg [7] : 000000000000000000000000f7f42998bff417ea5aceb4d252bdcfabc78fb907
Arg [8] : 000000000000000000000000c5d13027ae19f5a41fef1335a33ca4434c457fbb
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 536b79626c6f636b730000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 49534b5900000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000067
Arg [14] : 000000000000000000000000bc46e99f434bab242ea1a0c57f54a2e05681e45e
Arg [15] : 0000000000000000000000006768f0f8a212f5b5b8081131323772ea7ea2a331
Arg [16] : 00000000000000000000000039446c6743d9188b846813819161e9d66020a0ed
Arg [17] : 000000000000000000000000826bcea879e4496ed163bcc128926b5627e1f08d
Arg [18] : 00000000000000000000000018a878afa68ff540ddf520bab2f1f9470f718410
Arg [19] : 0000000000000000000000004f20cb7a1d567a54350a18dacb0cc803aebb4483
Arg [20] : 000000000000000000000000aa4237995a8ddb6fc30c3c5bc4cb9c0c15ee7c4f
Arg [21] : 000000000000000000000000f3c9ea1658997558e5eb76ae49bed1a9832e1801
Arg [22] : 0000000000000000000000001d945e9ea2da9cb9a36b3e53e78b5e22bea1e3d9
Arg [23] : 0000000000000000000000005e2b1f3acf6473fa61c513ac5a5719d398ff42af
Arg [24] : 00000000000000000000000099d218ad1ec627e786c50c5ffe6732410b8c78fd
Arg [25] : 00000000000000000000000001aa498bbf2642d93c8d65e149d534c97676173a
Arg [26] : 000000000000000000000000ac2e1d3f07a6b7b3c16f8811e77b36b1b5c3c40b
Arg [27] : 0000000000000000000000009f7b75c2205d10f6f1ffc73c33ddb805167d27d5
Arg [28] : 000000000000000000000000d378d1142830a9816128d8815137a070e3ede8f8
Arg [29] : 000000000000000000000000f14c9dbdb31b0a18af44fcf97ed12b0abfe1b92e
Arg [30] : 000000000000000000000000a02086f132afc89d0e129f323811f19bd13f7965
Arg [31] : 0000000000000000000000004da94e682326bd14997d1e1c62350654d8e44c5d
Arg [32] : 0000000000000000000000008888888888e9997e64793849389a8faf5e8e547c
Arg [33] : 000000000000000000000000eec32f9ba98938acafb3dff6100a546a50f25f9d
Arg [34] : 000000000000000000000000cb47a9d150580b692f9e183c089abec12f143670
Arg [35] : 00000000000000000000000026c68c139930de8d2901ef4dce945e8282f4e22c
Arg [36] : 00000000000000000000000036b696aa9ba2aa4441e03baabeaa828f8ba7dc2c
Arg [37] : 0000000000000000000000004549d92dd1e05df5615c0bb50163fc3a2d5b6933
Arg [38] : 000000000000000000000000637e21ac11f0e0cf95d926d6bd2737b059a2858a
Arg [39] : 000000000000000000000000874f5b8cc54ead6738a7bc3af7c16790808ffda9
Arg [40] : 000000000000000000000000646f7044865bd507e3512f1847a901adc78bc741
Arg [41] : 00000000000000000000000018701332a0126472ea908f54de9836ca1c5e9679
Arg [42] : 0000000000000000000000000e0b7c7e5c49525365b36a39b112f27965790e9e
Arg [43] : 000000000000000000000000cec07cf2cace4ea5ca2b65e58b307e9efd2a2845
Arg [44] : 000000000000000000000000cbc83a731e2baf8c26507ef952dee6889770c6f3
Arg [45] : 000000000000000000000000151091122624bddb51ee8003d9c734aadc4dc8b0
Arg [46] : 000000000000000000000000113b622f8f14d94cd449f4ecd2110cd5786a89be
Arg [47] : 000000000000000000000000f5bc8bb5fa79b608f55afbe002884f736daf11ee
Arg [48] : 000000000000000000000000e1476c3dd4be8c160636e68094d235922b9cdf14
Arg [49] : 00000000000000000000000017ec047622c000df03599026a3b39871ec9384db
Arg [50] : 000000000000000000000000f56345338cb4cddaf915ebef3bfde63e70fe3053
Arg [51] : 0000000000000000000000002031213cd107911515bbbdd98ce3b5c6db3e4012
Arg [52] : 0000000000000000000000002145dc142134d37b62a113e7293af87d0a186526
Arg [53] : 000000000000000000000000707b8f3075521ee750c25ac3ba9a0b9b85e370c4
Arg [54] : 000000000000000000000000f241607c45655a6bd0fee44e219890098e3dadbc
Arg [55] : 000000000000000000000000644260a7987aa3510965213e7d244650c40fe343
Arg [56] : 000000000000000000000000f130a864c042c908a9cf8f02cdbc1aca5220077b
Arg [57] : 0000000000000000000000001a9edea0b12497f83487ef9598c24277ef87d85a
Arg [58] : 0000000000000000000000002aff03a664417b7f83ff6385c0f7007afbe3d7c2
Arg [59] : 000000000000000000000000f7069f11dc6b2d0f6a0654081cf951589e2b36c6
Arg [60] : 000000000000000000000000825ffa5c61ed5a2f6a2320fba9dccc81fec6d9dc
Arg [61] : 00000000000000000000000019be513f1ae7910d81ba80bdd0ac5426c2840fef
Arg [62] : 0000000000000000000000004a3b614b084231d41f0ed71c7b748cfb6bbb8365
Arg [63] : 0000000000000000000000009efd227fc50dfd05eb42cdd3f1ff6918c44a79c2
Arg [64] : 0000000000000000000000007a1e1880b63daa7693d05b5a9192e8483dbfef64
Arg [65] : 0000000000000000000000009c0e9a8e72ab71aad7c85b3e1f87e3a70c8f4d14
Arg [66] : 0000000000000000000000007495e84fa5343fe83cc7d39df2d1152c53d2f294
Arg [67] : 000000000000000000000000530588ece1281d1dbe1691f18ed8472bb898f815
Arg [68] : 0000000000000000000000004a9456e33d53a32117ff84dcd7bf5892d247c0e8
Arg [69] : 00000000000000000000000009c8f3873109abc62929faed85942f13a31cda5d
Arg [70] : 000000000000000000000000d34213ac9d09ce2b797ad17298f6a454985d506a
Arg [71] : 00000000000000000000000060b01e7870acfbb6512634102f1463f8454389e9
Arg [72] : 000000000000000000000000ce0d229d6dd09c2c92947294884cb9596bf42735
Arg [73] : 0000000000000000000000001fc36c331df289e592d2a75c3fa75da724fd81f5
Arg [74] : 0000000000000000000000008f4b3f9150412a0dc69a6cae03ffe6a6f9abe49c
Arg [75] : 000000000000000000000000d9a80647011b1aa90b7d594688dea493c7ff139a
Arg [76] : 0000000000000000000000008b835417cbe898ef8da0c8f79371bbb8e7a1daff
Arg [77] : 000000000000000000000000ee36210d03f71f31dc949d907fcb44a8f9f97012
Arg [78] : 000000000000000000000000be623350a8f95fddff5e00e0b0f0fe544e39f1c7
Arg [79] : 0000000000000000000000008b8a9bb77206977742a5bb2fd136e9f580395910
Arg [80] : 000000000000000000000000d252960b0bf6b2848fdead80136db5f507f8be02
Arg [81] : 0000000000000000000000000d078bd6f56de18c0a97e714f390d9e63b2bb4d6
Arg [82] : 000000000000000000000000e2b7fede2758d465019ce2c468f9414f274f262e
Arg [83] : 000000000000000000000000c69a36f448d8a4b8282033ef6a209c2ff3d330c7
Arg [84] : 00000000000000000000000093ef9a16f2fb2871fc4ed6cb11bb8354330fb2d5
Arg [85] : 000000000000000000000000ba3d570535360bc9383b28691c872959d4a34061
Arg [86] : 000000000000000000000000f432eda8680d98aaa8270ecb4cfffc9c3b4534f0
Arg [87] : 000000000000000000000000fc7035d84a37e65e6e8315747b85ca87d68e4722
Arg [88] : 0000000000000000000000009fe553de68865f425d8071c81640855a7c9613eb
Arg [89] : 000000000000000000000000ca9061ae96f2728259e328aeda513270532fc43d
Arg [90] : 000000000000000000000000714ea962c0c85e3ec05085c82fe702b11ca95449
Arg [91] : 0000000000000000000000000b23f70874c68410c240d1627b455c7556382493
Arg [92] : 00000000000000000000000081bfa4bff74e4af25ff112389527197d9cd2babd
Arg [93] : 00000000000000000000000062c34149183c3426671c21bba85dc2588e57517d
Arg [94] : 00000000000000000000000075069e4b3893094d521c52360ca701bfc3a4fbd6
Arg [95] : 00000000000000000000000017d903dc9530e5017a0fc3bcbcfe5c7c592b1d4c
Arg [96] : 000000000000000000000000252378dd762da1eb778e1a3b6683f5457184ac98
Arg [97] : 000000000000000000000000ac6de9f16c7b9b44c4e5c9073c3a10fa45ab4d5a
Arg [98] : 0000000000000000000000006e14d4e15e245d6ecfe3181b08c2ff30d2c1da19
Arg [99] : 000000000000000000000000be1b18279b30d524ca2d1c78a9a16cfc672d4fda
Arg [100] : 000000000000000000000000edc5f04e825402c49e43bd475d864a8b5780bada
Arg [101] : 0000000000000000000000004910198f711b06953b91f5665be6eb6b2d39c5a9
Arg [102] : 000000000000000000000000be519c96c3bb0b240f3a5259dbc2ec461172ed97
Arg [103] : 000000000000000000000000f5b88ba7ebe3b4cf5fe614237cc33ddcf6b991dd
Arg [104] : 000000000000000000000000f8e2dabb64d034d405b6d5482eef5e9856d6bb9d
Arg [105] : 00000000000000000000000032adf37e3be9a0b3682542042624b449790e92b9
Arg [106] : 00000000000000000000000008403f83a5da27fcecdbb12bb4649cd7f7a8c61f
Arg [107] : 000000000000000000000000bcd8c157c75738086e9682cff7ef671e3d0e1e31
Arg [108] : 00000000000000000000000021bd011b65aaf15add5909e97d33a9ad441bc873
Arg [109] : 000000000000000000000000cc9ad85d1ec41b54f4d3a18ba750847d94f3c3d7
Arg [110] : 000000000000000000000000b0612f90e5b7aaa1887bc71ed21cbea72acb8046
Arg [111] : 000000000000000000000000d8d88bded611411097ccb83f9f32dc8b0523737c
Arg [112] : 000000000000000000000000b940455e0ccdc8c471f7524072a9ac9996a91cb9
Arg [113] : 000000000000000000000000b4b6f5f044b2de24dece953afa59bb540366fc5d
Arg [114] : 000000000000000000000000c20d2fcebbda545ecbb24d7c217469bd6d854888
Arg [115] : 000000000000000000000000998a16c18c8f75cf613012908ea561ee53eae59b
Arg [116] : 000000000000000000000000575a5e79b2cec8265515cb536250dd8afcd5ccd0
Arg [117] : 0000000000000000000000000000000000000000000000000000000000000067
Arg [118] : 000000000000000000000000000000000000000000004f68ca6d8cd91c600000
Arg [119] : 00000000000000000000000000000000000000000000215a1794693c77700000
Arg [120] : 000000000000000000000000000000000000000000000fe1c215e8f838e00000
Arg [121] : 000000000000000000000000000000000000000000000fe1c215e8f838e00000
Arg [122] : 0000000000000000000000000000000000000000000013da329b633647180000
Arg [123] : 0000000000000000000000000000000000000000000023bbf4b14c2e7ff80000
Arg [124] : 0000000000000000000000000000000000000000000023bbf4b14c2e7ff80000
Arg [125] : 0000000000000000000000000000000000000000000028b2815824fc11be0000
Arg [126] : 0000000000000000000000000000000000000000000003fc815b00e018840000
Arg [127] : 0000000000000000000000000000000000000000000005f4a8c8375d15540000
Arg [128] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [129] : 000000000000000000000000000000000000000000003f870857a3e0e3800000
Arg [130] : 000000000000000000000000000000000000000000000a56cefd5e102f440000
Arg [131] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [132] : 0000000000000000000000000000000000000000000003fc815b00e018840000
Arg [133] : 0000000000000000000000000000000000000000000019cedb639a935c6c0000
Arg [134] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [135] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [136] : 000000000000000000000000000000000000000000001dc33b138e2f60580000
Arg [137] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [138] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [139] : 000000000000000000000000000000000000000000000ee3a5f48a68b5520000
Arg [140] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [141] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [142] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [143] : 0000000000000000000000000000000000000000000007f0e10af47c1c700000
Arg [144] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [145] : 0000000000000000000000000000000000000000000004f68ca6d8cd91c60000
Arg [146] : 0000000000000000000000000000000000000000000027b46536c66c8e300000
Arg [147] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [148] : 000000000000000000000000000000000000000000000261dd1ce2f208880000
Arg [149] : 0000000000000000000000000000000000000000000002fa54641bae8aaa0000
Arg [150] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [151] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [152] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [153] : 0000000000000000000000000000000000000000000013da329b633647180000
Arg [154] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [155] : 0000000000000000000000000000000000000000000000cb49b44ba602d80000
Arg [156] : 00000000000000000000000000000000000000000000023efeeb72c3dd480000
Arg [157] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [158] : 0000000000000000000000000000000000000000000000ae401136a4d0db0000
Arg [159] : 0000000000000000000000000000000000000000000002c781f708c509f40000
Arg [160] : 0000000000000000000000000000000000000000000000ae401136a4d0db0000
Arg [161] : 00000000000000000000000000000000000000000000012268b272de251e0000
Arg [162] : 0000000000000000000000000000000000000000000000742ab6246de0920000
Arg [163] : 0000000000000000000000000000000000000000000000742ab6246de0920000
Arg [164] : 000000000000000000000000000000000000000000000065a4da25d3016c0000
Arg [165] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [166] : 0000000000000000000000000000000000000000000000742ab6246de0920000
Arg [167] : 000000000000000000000000000000000000000000000098774738bc82220000
Arg [168] : 0000000000000000000000000000000000000000000000cb49b44ba602d80000
Arg [169] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [170] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [171] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [172] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [173] : 0000000000000000000000000000000000000000000000ae401136a4d0db0000
Arg [174] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [175] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [176] : 0000000000000000000000000000000000000000000003f870857a3e0e380000
Arg [177] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [178] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [179] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [180] : 00000000000000000000000000000000000000000000001d09a3150131fd0000
Arg [181] : 0000000000000000000000000000000000000000000000b1e07dc231427d0000
Arg [182] : 0000000000000000000000000000000000000000000009ed194db19b238c0000
Arg [183] : 000000000000000000000000000000000000000000001dc74be914d16aa40000
Arg [184] : 000000000000000000000000000000000000000000001fc3842bd1f071c00000
Arg [185] : 000000000000000000000000000000000000000000000065a4da25d3016c0000
Arg [186] : 000000000000000000000000000000000000000000000163c0fb846284fa0000
Arg [187] : 00000000000000000000000000000000000000000000007f0e10af47c1c70000
Arg [188] : 000000000000000000000000000000000000000000000098774738bc82220000
Arg [189] : 0000000000000000000000000000000000000000000000e4b2ead51ac3330000
Arg [190] : 000000000000000000000000000000000000000000000098774738bc82220000
Arg [191] : 0000000000000000000000000000000000000000000000fe1c215e8f838e0000
Arg [192] : 000000000000000000000000000000000000000000000098774738bc82220000
Arg [193] : 0000000000000000000000000000000000000000000000b1e07dc231427d0000
Arg [194] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [195] : 0000000000000000000000000000000000000000000000b1e07dc231427d0000
Arg [196] : 00000000000000000000000000000000000000000000002107bc71ca4d820000
Arg [197] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [198] : 000000000000000000000000000000000000000000000028a857425466f80000
Arg [199] : 0000000000000000000000000000000000000000000000cb49b44ba602d80000
Arg [200] : 000000000000000000000000000000000000000000000130ee8e717904440000
Arg [201] : 0000000000000000000000000000000000000000000001969368974c05b00000
Arg [202] : 0000000000000000000000000000000000000000000000b1e07dc231427d0000
Arg [203] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [204] : 0000000000000000000000000000000000000000000027b46536c66c8e300000
Arg [205] : 0000000000000000000000000000000000000000000005f4a8c8375d15540000
Arg [206] : 0000000000000000000000000000000000000000000002fa54641bae8aaa0000
Arg [207] : 000000000000000000000000000000000000000000000098774738bc82220000
Arg [208] : 0000000000000000000000000000000000000000000000cb49b44ba602d80000
Arg [209] : 000000000000000000000000000000000000000000000032d26d12e980b60000
Arg [210] : 0000000000000000000000000000000000000000000001178557e80443e90000
Arg [211] : 0000000000000000000000000000000000000000000001fc3842bd1f071c0000
Arg [212] : 00000000000000000000000000000000000000000000015c7e0d851515670000
Arg [213] : 000000000000000000000000000000000000000000000163c0fb846284fa0000
Arg [214] : 00000000000000000000000000000000000000000000152d02c7e14af6800000
Arg [215] : 00000000000000000000000000000000000000000001acc3de76d80012080000
Arg [216] : 00000000000000000000000000000000000000000000943b1377290cbd800000
Arg [217] : 000000000000000000000000000000000000000000002a5a058fc295ed000000
Arg [218] : 0000000000000000000000000000000000000000000026805f9fa6f344a80000
Arg [219] : 0000000000000000000000000000000000000000000009a017e7e9bcd12a0000
Arg [220] : 0000000000000000000000000000000000000000000009a017e7e9bcd12a0000
Deployed Bytecode Sourcemap
51171:16862:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44316:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51791:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5929:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8210:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51967:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51542:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51586:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7022:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8902:493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27615:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52335:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28000:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6873:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52050:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29048:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9804:297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56823:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63239:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62712:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60057:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51854:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51735:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51413:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7193:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61914:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51897:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51367:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51933:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64262:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51687:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56326:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51458:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60447:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45129:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26500:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59662:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6139:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60929:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63751:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25591:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10604:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7583:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51635:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51500:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52002:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51823:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45448:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51324:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28392:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7862:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61368:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44316:214;44401:4;44440:42;44425:57;;;:11;:57;;;;:97;;;;44486:36;44510:11;44486:23;:36::i;:::-;44425:97;44418:104;;44316:214;;;:::o;51791:25::-;;;;;;;;;;;;;:::o;5929:91::-;5974:13;6007:5;6000:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5929:91;:::o;8210:210::-;8329:4;8351:39;8360:12;:10;:12::i;:::-;8374:7;8383:6;8351:8;:39::i;:::-;8408:4;8401:11;;8210:210;;;;:::o;51967:28::-;;;;:::o;51542:35::-;;;:::o;51586:42::-;;;:::o;7022:108::-;7083:7;7110:12;;7103:19;;7022:108;:::o;8902:493::-;9042:4;9059:36;9069:6;9077:9;9088:6;9059:9;:36::i;:::-;9108:24;9135:11;:19;9147:6;9135:19;;;;;;;;;;;;;;;:33;9155:12;:10;:12::i;:::-;9135:33;;;;;;;;;;;;;;;;9108:60;;9221:6;9201:16;:26;;9179:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;9306:57;9315:6;9323:12;:10;:12::i;:::-;9356:6;9337:16;:25;;;;:::i;:::-;9306:8;:57::i;:::-;9383:4;9376:11;;;8902:493;;;;;:::o;27615:123::-;27681:7;27708:6;:12;27715:4;27708:12;;;;;;;;;;;:22;;;27701:29;;27615:123;;;:::o;52335:37::-;;;;:::o;28000:147::-;28083:18;28096:4;28083:12;:18::i;:::-;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;28114:25:::1;28125:4;28131:7;28114:10;:25::i;:::-;28000:147:::0;;;:::o;6873:84::-;6922:5;6947:2;6940:9;;6873:84;:::o;52050:28::-;;;:::o;29048:218::-;29155:12;:10;:12::i;:::-;29144:23;;:7;:23;;;29136:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:26;29244:4;29250:7;29232:11;:26::i;:::-;29048:218;;:::o;9804:297::-;9919:4;9941:130;9964:12;:10;:12::i;:::-;9991:7;10050:10;10013:11;:25;10025:12;:10;:12::i;:::-;10013:25;;;;;;;;;;;;;;;:34;10039:7;10013:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9941:8;:130::i;:::-;10089:4;10082:11;;9804:297;;;;:::o;56823:209::-;56906:11;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;56969:3:::1;56959:6;56943:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:29;;56935:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;57002:22;57008:7;57017:6;57002:5;:22::i;:::-;56823:209:::0;;;:::o;63239:346::-;63364:7;63390:16;63408:13;63425:92;63448:10;63473:24;:33;63498:7;63473:33;;;;;;;;;;;;;;;63425:8;:92::i;:::-;63389:128;;;;63537:11;:40;;63559:18;63569:7;63559:9;:18::i;:::-;63537:40;;;63551:5;63537:40;63530:47;;;;63239:346;;;;:::o;62712:113::-;62767:7;62794:23;:21;:23::i;:::-;62787:30;;62712:113;:::o;60057:225::-;60114:10;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;60153:1:::1;60145:4;:9;;:23;;;;;60166:2;60158:4;:10;;60145:23;60137:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;60227:4;60212:12;:19;;;;60249:25;60269:4;60249:25;;;;;;:::i;:::-;;;;;;;;60057:225:::0;;:::o;51854:34::-;;;;;;;;;;;;;:::o;51735:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;51413:38::-;;;:::o;7193:177::-;7312:7;7344:9;:18;7354:7;7344:18;;;;;;;;;;;;;;;;7337:25;;7193:177;;;:::o;61914:300::-;61993:14;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;62047:8:::1;62033:22;;62041:1;62033:22;;;;62025:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;62102:17;:27;62120:8;62102:27;;;;;;;;;;;;;;;;;;;;;;;;;62094:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;62201:5;62171:17;:27;62189:8;62171:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;61914:300:::0;;:::o;51897:29::-;;;;:::o;51367:39::-;;;:::o;51933:27::-;;;;:::o;64262:343::-;64382:7;64408:16;64426:13;64443:90;64466:10;64491:31;64443:8;:90::i;:::-;64407:126;;;;64553:11;:44;;64575:22;;64553:44;;;64567:5;64553:44;64546:51;;;;64262:343;;;:::o;51687:39::-;;;:::o;56326:304::-;56411:17;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;56483:1:::1;56454:31;;:17;:31;;;;56446:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;56524:42;56535:11;56548:17;56524:10;:42::i;:::-;56577:45;56590:17;56609:12;:10;:12::i;:::-;56577;:45::i;:::-;56326:304:::0;;:::o;51458:35::-;;;:::o;60447:228::-;60505:10;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;60544:1:::1;60536:4;:9;;:23;;;;;60557:2;60549:4;:10;;60536:23;60528:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;60619:4;60603:13;:20;;;;60641:26;60662:4;60641:26;;;;;;:::i;:::-;;;;;;;;60447:228:::0;;:::o;45129:145::-;45211:7;45238:28;45260:5;45238:12;:18;45251:4;45238:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;45231:35;;45129:145;;;;:::o;26500:139::-;26578:4;26602:6;:12;26609:4;26602:12;;;;;;;;;;;:20;;:29;26623:7;26602:29;;;;;;;;;;;;;;;;;;;;;;;;;26595:36;;26500:139;;;;:::o;59662:231::-;59721:10;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;59760:1:::1;59752:4;:9;;:23;;;;;59773:2;59765:4;:10;;59752:23;59744:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;59836:4;59819:14;:21;;;;59858:27;59880:4;59858:27;;;;;;:::i;:::-;;;;;;;;59662:231:::0;;:::o;6139:95::-;6186:13;6219:7;6212:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6139:95;:::o;60929:108::-;60991:7;60967:13;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;61018:11:::1;:9;:11::i;:::-;61011:18;;60929:108:::0;;:::o;63751:314::-;63861:7;63887:16;63905:13;63922:80;63945:10;63970:21;63922:8;:80::i;:::-;63886:116;;;;64022:11;:35;;64044:13;:11;:13::i;:::-;64022:35;;;64036:5;64022:35;64015:42;;;;63751:314;;;:::o;25591:49::-;25636:4;25591:49;;;:::o;10604:446::-;10724:4;10746:24;10773:11;:25;10785:12;:10;:12::i;:::-;10773:25;;;;;;;;;;;;;;;:34;10799:7;10773:34;;;;;;;;;;;;;;;;10746:61;;10860:15;10840:16;:35;;10818:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;10951:67;10960:12;:10;:12::i;:::-;10974:7;11002:15;10983:16;:34;;;;:::i;:::-;10951:8;:67::i;:::-;11038:4;11031:11;;;10604:446;;;;:::o;7583:216::-;7705:4;7727:42;7737:12;:10;:12::i;:::-;7751:9;7762:6;7727:9;:42::i;:::-;7787:4;7780:11;;7583:216;;;;:::o;51635:45::-;;;:::o;51500:35::-;;;:::o;52002:39::-;;;:::o;51823:24::-;;;;;;;;;;;;;:::o;45448:134::-;45520:7;45547:27;:12;:18;45560:4;45547:18;;;;;;;;;;;:25;:27::i;:::-;45540:34;;45448:134;;;:::o;51324:36::-;;;:::o;28392:149::-;28476:18;28489:4;28476:12;:18::i;:::-;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;28507:26:::1;28519:4;28525:7;28507:11;:26::i;:::-;28392:149:::0;;;:::o;7862:201::-;7996:7;8028:11;:18;8040:5;8028:18;;;;;;;;;;;;;;;:27;8047:7;8028:27;;;;;;;;;;;;;;;;8021:34;;7862:201;;;;:::o;61368:260::-;61423:14;26082:30;26093:4;26099:12;:10;:12::i;:::-;26082:10;:30::i;:::-;61472:5:::1;61458:19;;61466:1;61458:19;;;;61450:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;61525:17;:24;61543:5;61525:24;;;;;;;;;;;;;;;;;;;;;;;;;61524:25;61516:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;61616:4;61589:17;:24;61607:5;61589:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;61368:260:::0;;:::o;49985:127::-;50092:1;50074:7;:14;;;:19;;;;;;;;;;;49985:127;:::o;30549:238::-;30633:22;30641:4;30647:7;30633;:22::i;:::-;30628:152;;30704:4;30672:6;:12;30679:4;30672:12;;;;;;;;;;;:20;;:29;30693:7;30672:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30755:12;:10;:12::i;:::-;30728:40;;30746:7;30728:40;;30740:4;30728:40;;;;;;;;;;30628:152;30549:238;;:::o;39043:152::-;39113:4;39137:50;39142:3;:10;;39178:5;39162:23;;39154:32;;39137:4;:50::i;:::-;39130:57;;39043:152;;;;:::o;15083:125::-;;;;:::o;49863:114::-;49928:7;49955;:14;;;49948:21;;49863:114;;;:::o;26204:204::-;26289:4;26328:32;26313:47;;;:11;:47;;;;:87;;;;26364:36;26388:11;26364:23;:36::i;:::-;26313:87;26306:94;;26204:204;;;:::o;3691:98::-;3744:7;3771:10;3764:17;;3691:98;:::o;14100:380::-;14253:1;14236:19;;:5;:19;;;;14228:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14334:1;14315:21;;:7;:21;;;;14307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14418:6;14388:11;:18;14400:5;14388:18;;;;;;;;;;;;;;;:27;14407:7;14388:27;;;;;;;;;;;;;;;:36;;;;14456:7;14440:32;;14449:5;14440:32;;;14465:6;14440:32;;;;;;:::i;:::-;;;;;;;;14100:380;;;:::o;57508:1988::-;57682:1;57664:20;;:6;:20;;;;57656:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;57752:1;57731:23;;:9;:23;;;;57723:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;57795:47;57816:6;57824:9;57835:6;57795:20;:47::i;:::-;57859:17;:25;57877:6;57859:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;57888:17;:28;57906:9;57888:28;;;;;;;;;;;;;;;;;;;;;;;;;57859:57;57855:1634;;;57965:21;57989:9;:17;57999:6;57989:17;;;;;;;;;;;;;;;;57965:41;;58046:6;58029:13;:23;;58021:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;58136:6;58120:13;:22;;;;:::i;:::-;58100:9;:17;58110:6;58100:17;;;;;;;;;;;;;;;:42;;;;58181:6;58157:9;:20;58167:9;58157:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;58226:9;58209:35;;58218:6;58209:35;;;58237:6;58209:35;;;;;;:::i;:::-;;;;;;;;57918:338;57855:1634;;;58323:3;58314:6;:12;58306:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;58371:29;58449:14;58413;;58404:6;:23;;;;:::i;:::-;58403:61;;;;:::i;:::-;58371:93;;58479:19;58530:14;58512:12;;58502:6;:23;;;;:::i;:::-;58501:44;;;;:::i;:::-;58479:66;;58560:20;58630:14;58594:13;;58584:6;:24;;;;:::i;:::-;58583:62;;;;:::i;:::-;58560:85;;58660:12;58743;58727:11;58702:21;:37;;;;:::i;:::-;:54;;;;:::i;:::-;58675:6;:82;;;;:::i;:::-;58660:97;;58774:21;58798:9;:17;58808:6;58798:17;;;;;;;;;;;;;;;;58774:41;;58855:6;58838:13;:23;;58830:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;58943:6;58927:13;:22;;;;:::i;:::-;58907:9;:17;58917:6;58907:17;;;;;;;;;;;;;;;:42;;;;58998:21;58964:9;:30;58974:19;;;;;;;;;;;58964:30;;;;;;;;;;;;;;;;:55;;;;;;;:::i;:::-;;;;;;;;59060:11;59036:9;:20;59046:9;;;;;;;;;;;59036:20;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;59112:11;59086:22;;:37;;;;;;;:::i;:::-;;;;;;;;59165:12;59140:9;:21;59150:10;;;;;;;;;;;59140:21;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;59216:4;59192:9;:20;59202:9;59192:20;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;59259:19;;;;;;;;;;;59242:60;;59251:6;59242:60;;;59280:21;59242:60;;;;;;:::i;:::-;;;;;;;;59339:9;;;;;;;;;;;59322:40;;59331:6;59322:40;;;59350:11;59322:40;;;;;;:::i;:::-;;;;;;;;59399:10;;;;;;;;;;;59382:42;;59391:6;59382:42;;;59411:12;59382:42;;;;;;:::i;:::-;;;;;;;;59461:9;59444:33;;59453:6;59444:33;;;59472:4;59444:33;;;;;;:::i;:::-;;;;;;;;58262:1227;;;;;57855:1634;57508:1988;;;:::o;26929:497::-;27010:22;27018:4;27024:7;27010;:22::i;:::-;27005:414;;27198:41;27226:7;27198:41;;27236:2;27198:19;:41::i;:::-;27312:38;27340:4;27332:13;;27347:2;27312:19;:38::i;:::-;27103:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27049:358;;;;;;;;;;;:::i;:::-;;;;;;;;27005:414;26929:497;;:::o;45675:169::-;45763:31;45780:4;45786:7;45763:16;:31::i;:::-;45805;45828:7;45805:12;:18;45818:4;45805:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;45675:169;;:::o;45938:174::-;46027:32;46045:4;46051:7;46027:17;:32::i;:::-;46070:34;46096:7;46070:12;:18;46083:4;46070:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;45938:174;;:::o;12497:338::-;12600:1;12581:21;;:7;:21;;;;12573:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12651:49;12680:1;12684:7;12693:6;12651:20;:49::i;:::-;12729:6;12713:12;;:22;;;;;;;:::i;:::-;;;;;;;;12768:6;12746:9;:18;12756:7;12746:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12811:7;12790:37;;12807:1;12790:37;;;12820:6;12790:37;;;;;;:::i;:::-;;;;;;;;12497:338;;:::o;65992:562::-;66108:4;66114:7;66160:1;66147:10;:14;66139:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;66235:23;:21;:23::i;:::-;66221:10;:37;;66199:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;66328:13;66344:40;66373:10;66344:9;:13;;:28;;:40;;;;:::i;:::-;66328:56;;66410:9;:13;;:20;;;;66401:5;:29;66397:150;;;66455:5;66462:1;66447:17;;;;;;;66397:150;66505:4;66511:9;:16;;66528:5;66511:23;;;;;;;;:::i;:::-;;;;;;;;;;66497:38;;;;;65992:562;;;;;;:::o;62907:127::-;62971:7;62998:28;:18;:26;:28::i;:::-;62991:35;;62907:127;:::o;29925:112::-;30004:25;30015:4;30021:7;30004:10;:25::i;:::-;29925:112;;:::o;40339:158::-;40413:7;40464:22;40468:3;:10;;40480:5;40464:3;:22::i;:::-;40456:31;;40433:56;;40339:158;;;;:::o;62381:240::-;62428:7;62448:30;:18;:28;:30::i;:::-;62491:17;62511:23;:21;:23::i;:::-;62491:43;;62559:9;62550:36;62570:15;62550:36;;;;;;:::i;:::-;;;;;;;;62604:9;62597:16;;;62381:240;:::o;39868:117::-;39931:7;39958:19;39966:3;:10;;39958:7;:19::i;:::-;39951:26;;39868:117;;;:::o;32958:414::-;33021:4;33043:21;33053:3;33058:5;33043:9;:21::i;:::-;33038:327;;33081:3;:11;;33098:5;33081:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33264:3;:11;;:18;;;;33242:3;:12;;:19;33255:5;33242:19;;;;;;;;;;;:40;;;;33304:4;33297:11;;;;33038:327;33348:5;33341:12;;32958:414;;;;;:::o;23460:157::-;23545:4;23584:25;23569:40;;;:11;:40;;;;23562:47;;23460:157;;;:::o;65056:825::-;65206:44;65233:4;65239:2;65243:6;65206:26;:44::i;:::-;65283:1;65267:18;;:4;:18;;;65263:611;;;65323:26;65346:2;65323:22;:26::i;:::-;65364:28;:26;:28::i;:::-;65263:611;;;65428:1;65414:16;;:2;:16;;;65410:464;;;65468:28;65491:4;65468:22;:28::i;:::-;65511;:26;:28::i;:::-;65410:464;;;65597:26;:24;:26::i;:::-;65638:28;65661:4;65638:22;:28::i;:::-;65681:26;65704:2;65681:22;:26::i;:::-;65722:43;65745:19;;;;;;;;;;;65722:22;:43::i;:::-;65780:33;65803:9;;;;;;;;;;;65780:22;:33::i;:::-;65828:34;65851:10;;;;;;;;;;;65828:22;:34::i;:::-;65410:464;65263:611;65056:825;;;:::o;21210:451::-;21285:13;21311:19;21356:1;21347:6;21343:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21333:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21311:47;;21369:15;:6;21376:1;21369:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;21395;:6;21402:1;21395:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;21426:9;21451:1;21442:6;21438:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;21426:26;;21421:135;21458:1;21454;:5;21421:135;;;21493:12;21514:3;21506:5;:11;21493:25;;;;;;;:::i;:::-;;;;;21481:6;21488:1;21481:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;21543:1;21533:11;;;;;21461:3;;;;:::i;:::-;;;21421:135;;;;21583:1;21574:5;:10;21566:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21646:6;21632:21;;;21210:451;;;;:::o;30919:239::-;31003:22;31011:4;31017:7;31003;:22::i;:::-;30999:152;;;31074:5;31042:6;:12;31049:4;31042:12;;;;;;;;;;;:20;;:29;31063:7;31042:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;31126:12;:10;:12::i;:::-;31099:40;;31117:7;31099:40;;31111:4;31099:40;;;;;;;;;;30999:152;30919:239;;:::o;39371:158::-;39444:4;39468:53;39476:3;:10;;39512:5;39496:23;;39488:32;;39468:7;:53::i;:::-;39461:60;;39371:158;;;;:::o;48060:918::-;48149:7;48189:1;48173:5;:12;;;;:17;48169:58;;;48214:1;48207:8;;;;48169:58;48239:11;48265:12;48280:5;:12;;;;48265:27;;48305:424;48318:4;48312:3;:10;48305:424;;;48339:11;48353:23;48366:3;48371:4;48353:12;:23::i;:::-;48339:37;;48610:7;48597:5;48603:3;48597:10;;;;;;;;:::i;:::-;;;;;;;;;;:20;48593:125;;;48645:3;48638:10;;48593:125;;;48701:1;48695:3;:7;;;;:::i;:::-;48689:13;;48593:125;48324:405;48305:424;;;48855:1;48849:3;:7;:36;;;;;48878:7;48860:5;48872:1;48866:3;:7;;;;:::i;:::-;48860:14;;;;;;;;:::i;:::-;;;;;;;;;;:25;48849:36;48845:126;;;48915:1;48909:3;:7;;;;:::i;:::-;48902:14;;;;;;48845:126;48956:3;48949:10;;;;48060:918;;;;;:::o;35732:120::-;35799:7;35826:3;:11;;35838:5;35826:18;;;;;;;;:::i;:::-;;;;;;;;;;35819:25;;35732:120;;;;:::o;35269:109::-;35325:7;35352:3;:11;;:18;;;;35345:25;;35269:109;;;:::o;35054:129::-;35127:4;35174:1;35151:3;:12;;:19;35164:5;35151:19;;;;;;;;;;;;:24;;35144:31;;35054:129;;;;:::o;66640:146::-;66708:70;66724:24;:33;66749:7;66724:33;;;;;;;;;;;;;;;66759:18;66769:7;66759:9;:18::i;:::-;66708:15;:70::i;:::-;66640:146;:::o;66876:118::-;66933:53;66949:21;66972:13;:11;:13::i;:::-;66933:15;:53::i;:::-;66876:118::o;67095:172::-;67150:109;67180:31;67226:22;;67150:15;:109::i;:::-;67095:172::o;33548:1420::-;33614:4;33732:18;33753:3;:12;;:19;33766:5;33753:19;;;;;;;;;;;;33732:40;;33803:1;33789:10;:15;33785:1176;;34164:21;34201:1;34188:10;:14;;;;:::i;:::-;34164:38;;34217:17;34258:1;34237:3;:11;;:18;;;;:22;;;;:::i;:::-;34217:42;;34293:13;34280:9;:26;34276:405;;34327:17;34347:3;:11;;34359:9;34347:22;;;;;;;;:::i;:::-;;;;;;;;;;34327:42;;34501:9;34472:3;:11;;34484:13;34472:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;34612:10;34586:3;:12;;:23;34599:9;34586:23;;;;;;;;;;;:36;;;;34308:373;34276:405;34762:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34857:3;:12;;:19;34870:5;34857:19;;;;;;;;;;;34850:26;;;34900:4;34893:11;;;;;;;33785:1176;34944:5;34937:12;;;33548:1420;;;;;:::o;46840:156::-;46902:7;46987:1;46982;46978;:5;46977:11;;;;:::i;:::-;46972:1;46968;:5;46967:21;;;;:::i;:::-;46960:28;;46840:156;;;;:::o;67367:324::-;67476:17;67496:23;:21;:23::i;:::-;67476:43;;67567:9;67534:30;67550:9;:13;;67534:15;:30::i;:::-;:42;67530:154;;;67593:9;:13;;67612:9;67593:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67637:9;:16;;67659:12;67637:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67530:154;67465:226;67367:324;;:::o;67786:244::-;67883:7;67926:1;67912:3;:10;;;;:15;67908:115;;;67951:1;67944:8;;;;67908:115;67992:3;68009:1;67996:3;:10;;;;:14;;;;:::i;:::-;67992:19;;;;;;;;:::i;:::-;;;;;;;;;;67985:26;;67786:244;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:118::-;1839:24;1857:5;1839:24;:::i;:::-;1834:3;1827:37;1752:118;;:::o;1876:222::-;1969:4;2007:2;1996:9;1992:18;1984:26;;2020:71;2088:1;2077:9;2073:17;2064:6;2020:71;:::i;:::-;1876:222;;;;:::o;2104:99::-;2156:6;2190:5;2184:12;2174:22;;2104:99;;;:::o;2209:169::-;2293:11;2327:6;2322:3;2315:19;2367:4;2362:3;2358:14;2343:29;;2209:169;;;;:::o;2384:307::-;2452:1;2462:113;2476:6;2473:1;2470:13;2462:113;;;2561:1;2556:3;2552:11;2546:18;2542:1;2537:3;2533:11;2526:39;2498:2;2495:1;2491:10;2486:15;;2462:113;;;2593:6;2590:1;2587:13;2584:101;;;2673:1;2664:6;2659:3;2655:16;2648:27;2584:101;2433:258;2384:307;;;:::o;2697:102::-;2738:6;2789:2;2785:7;2780:2;2773:5;2769:14;2765:28;2755:38;;2697:102;;;:::o;2805:364::-;2893:3;2921:39;2954:5;2921:39;:::i;:::-;2976:71;3040:6;3035:3;2976:71;:::i;:::-;2969:78;;3056:52;3101:6;3096:3;3089:4;3082:5;3078:16;3056:52;:::i;:::-;3133:29;3155:6;3133:29;:::i;:::-;3128:3;3124:39;3117:46;;2897:272;2805:364;;;;:::o;3175:313::-;3288:4;3326:2;3315:9;3311:18;3303:26;;3375:9;3369:4;3365:20;3361:1;3350:9;3346:17;3339:47;3403:78;3476:4;3467:6;3403:78;:::i;:::-;3395:86;;3175:313;;;;:::o;3494:122::-;3567:24;3585:5;3567:24;:::i;:::-;3560:5;3557:35;3547:63;;3606:1;3603;3596:12;3547:63;3494:122;:::o;3622:139::-;3668:5;3706:6;3693:20;3684:29;;3722:33;3749:5;3722:33;:::i;:::-;3622:139;;;;:::o;3767:77::-;3804:7;3833:5;3822:16;;3767:77;;;:::o;3850:122::-;3923:24;3941:5;3923:24;:::i;:::-;3916:5;3913:35;3903:63;;3962:1;3959;3952:12;3903:63;3850:122;:::o;3978:139::-;4024:5;4062:6;4049:20;4040:29;;4078:33;4105:5;4078:33;:::i;:::-;3978:139;;;;:::o;4123:474::-;4191:6;4199;4248:2;4236:9;4227:7;4223:23;4219:32;4216:119;;;4254:79;;:::i;:::-;4216:119;4374:1;4399:53;4444:7;4435:6;4424:9;4420:22;4399:53;:::i;:::-;4389:63;;4345:117;4501:2;4527:53;4572:7;4563:6;4552:9;4548:22;4527:53;:::i;:::-;4517:63;;4472:118;4123:474;;;;;:::o;4603:118::-;4690:24;4708:5;4690:24;:::i;:::-;4685:3;4678:37;4603:118;;:::o;4727:222::-;4820:4;4858:2;4847:9;4843:18;4835:26;;4871:71;4939:1;4928:9;4924:17;4915:6;4871:71;:::i;:::-;4727:222;;;;:::o;4955:77::-;4992:7;5021:5;5010:16;;4955:77;;;:::o;5038:118::-;5125:24;5143:5;5125:24;:::i;:::-;5120:3;5113:37;5038:118;;:::o;5162:222::-;5255:4;5293:2;5282:9;5278:18;5270:26;;5306:71;5374:1;5363:9;5359:17;5350:6;5306:71;:::i;:::-;5162:222;;;;:::o;5390:619::-;5467:6;5475;5483;5532:2;5520:9;5511:7;5507:23;5503:32;5500:119;;;5538:79;;:::i;:::-;5500:119;5658:1;5683:53;5728:7;5719:6;5708:9;5704:22;5683:53;:::i;:::-;5673:63;;5629:117;5785:2;5811:53;5856:7;5847:6;5836:9;5832:22;5811:53;:::i;:::-;5801:63;;5756:118;5913:2;5939:53;5984:7;5975:6;5964:9;5960:22;5939:53;:::i;:::-;5929:63;;5884:118;5390:619;;;;;:::o;6015:122::-;6088:24;6106:5;6088:24;:::i;:::-;6081:5;6078:35;6068:63;;6127:1;6124;6117:12;6068:63;6015:122;:::o;6143:139::-;6189:5;6227:6;6214:20;6205:29;;6243:33;6270:5;6243:33;:::i;:::-;6143:139;;;;:::o;6288:329::-;6347:6;6396:2;6384:9;6375:7;6371:23;6367:32;6364:119;;;6402:79;;:::i;:::-;6364:119;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6288:329;;;;:::o;6623:474::-;6691:6;6699;6748:2;6736:9;6727:7;6723:23;6719:32;6716:119;;;6754:79;;:::i;:::-;6716:119;6874:1;6899:53;6944:7;6935:6;6924:9;6920:22;6899:53;:::i;:::-;6889:63;;6845:117;7001:2;7027:53;7072:7;7063:6;7052:9;7048:22;7027:53;:::i;:::-;7017:63;;6972:118;6623:474;;;;;:::o;7103:86::-;7138:7;7178:4;7171:5;7167:16;7156:27;;7103:86;;;:::o;7195:112::-;7278:22;7294:5;7278:22;:::i;:::-;7273:3;7266:35;7195:112;;:::o;7313:214::-;7402:4;7440:2;7429:9;7425:18;7417:26;;7453:67;7517:1;7506:9;7502:17;7493:6;7453:67;:::i;:::-;7313:214;;;;:::o;7533:329::-;7592:6;7641:2;7629:9;7620:7;7616:23;7612:32;7609:119;;;7647:79;;:::i;:::-;7609:119;7767:1;7792:53;7837:7;7828:6;7817:9;7813:22;7792:53;:::i;:::-;7782:63;;7738:117;7533:329;;;;:::o;7868:::-;7927:6;7976:2;7964:9;7955:7;7951:23;7947:32;7944:119;;;7982:79;;:::i;:::-;7944:119;8102:1;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8073:117;7868:329;;;;:::o;8203:474::-;8271:6;8279;8328:2;8316:9;8307:7;8303:23;8299:32;8296:119;;;8334:79;;:::i;:::-;8296:119;8454:1;8479:53;8524:7;8515:6;8504:9;8500:22;8479:53;:::i;:::-;8469:63;;8425:117;8581:2;8607:53;8652:7;8643:6;8632:9;8628:22;8607:53;:::i;:::-;8597:63;;8552:118;8203:474;;;;;:::o;8683:::-;8751:6;8759;8808:2;8796:9;8787:7;8783:23;8779:32;8776:119;;;8814:79;;:::i;:::-;8776:119;8934:1;8959:53;9004:7;8995:6;8984:9;8980:22;8959:53;:::i;:::-;8949:63;;8905:117;9061:2;9087:53;9132:7;9123:6;9112:9;9108:22;9087:53;:::i;:::-;9077:63;;9032:118;8683:474;;;;;:::o;9163:180::-;9211:77;9208:1;9201:88;9308:4;9305:1;9298:15;9332:4;9329:1;9322:15;9349:320;9393:6;9430:1;9424:4;9420:12;9410:22;;9477:1;9471:4;9467:12;9498:18;9488:81;;9554:4;9546:6;9542:17;9532:27;;9488:81;9616:2;9608:6;9605:14;9585:18;9582:38;9579:84;;;9635:18;;:::i;:::-;9579:84;9400:269;9349:320;;;:::o;9675:227::-;9815:34;9811:1;9803:6;9799:14;9792:58;9884:10;9879:2;9871:6;9867:15;9860:35;9675:227;:::o;9908:366::-;10050:3;10071:67;10135:2;10130:3;10071:67;:::i;:::-;10064:74;;10147:93;10236:3;10147:93;:::i;:::-;10265:2;10260:3;10256:12;10249:19;;9908:366;;;:::o;10280:419::-;10446:4;10484:2;10473:9;10469:18;10461:26;;10533:9;10527:4;10523:20;10519:1;10508:9;10504:17;10497:47;10561:131;10687:4;10561:131;:::i;:::-;10553:139;;10280:419;;;:::o;10705:180::-;10753:77;10750:1;10743:88;10850:4;10847:1;10840:15;10874:4;10871:1;10864:15;10891:191;10931:4;10951:20;10969:1;10951:20;:::i;:::-;10946:25;;10985:20;11003:1;10985:20;:::i;:::-;10980:25;;11024:1;11021;11018:8;11015:34;;;11029:18;;:::i;:::-;11015:34;11074:1;11071;11067:9;11059:17;;10891:191;;;;:::o;11088:234::-;11228:34;11224:1;11216:6;11212:14;11205:58;11297:17;11292:2;11284:6;11280:15;11273:42;11088:234;:::o;11328:366::-;11470:3;11491:67;11555:2;11550:3;11491:67;:::i;:::-;11484:74;;11567:93;11656:3;11567:93;:::i;:::-;11685:2;11680:3;11676:12;11669:19;;11328:366;;;:::o;11700:419::-;11866:4;11904:2;11893:9;11889:18;11881:26;;11953:9;11947:4;11943:20;11939:1;11928:9;11924:17;11917:47;11981:131;12107:4;11981:131;:::i;:::-;11973:139;;11700:419;;;:::o;12125:305::-;12165:3;12184:20;12202:1;12184:20;:::i;:::-;12179:25;;12218:20;12236:1;12218:20;:::i;:::-;12213:25;;12372:1;12304:66;12300:74;12297:1;12294:81;12291:107;;;12378:18;;:::i;:::-;12291:107;12422:1;12419;12415:9;12408:16;;12125:305;;;;:::o;12436:164::-;12576:16;12572:1;12564:6;12560:14;12553:40;12436:164;:::o;12606:366::-;12748:3;12769:67;12833:2;12828:3;12769:67;:::i;:::-;12762:74;;12845:93;12934:3;12845:93;:::i;:::-;12963:2;12958:3;12954:12;12947:19;;12606:366;;;:::o;12978:419::-;13144:4;13182:2;13171:9;13167:18;13159:26;;13231:9;13225:4;13221:20;13217:1;13206:9;13202:17;13195:47;13259:131;13385:4;13259:131;:::i;:::-;13251:139;;12978:419;;;:::o;13403:178::-;13543:30;13539:1;13531:6;13527:14;13520:54;13403:178;:::o;13587:366::-;13729:3;13750:67;13814:2;13809:3;13750:67;:::i;:::-;13743:74;;13826:93;13915:3;13826:93;:::i;:::-;13944:2;13939:3;13935:12;13928:19;;13587:366;;;:::o;13959:419::-;14125:4;14163:2;14152:9;14148:18;14140:26;;14212:9;14206:4;14202:20;14198:1;14187:9;14183:17;14176:47;14240:131;14366:4;14240:131;:::i;:::-;14232:139;;13959:419;;;:::o;14384:173::-;14524:25;14520:1;14512:6;14508:14;14501:49;14384:173;:::o;14563:366::-;14705:3;14726:67;14790:2;14785:3;14726:67;:::i;:::-;14719:74;;14802:93;14891:3;14802:93;:::i;:::-;14920:2;14915:3;14911:12;14904:19;;14563:366;;;:::o;14935:419::-;15101:4;15139:2;15128:9;15124:18;15116:26;;15188:9;15182:4;15178:20;15174:1;15163:9;15159:17;15152:47;15216:131;15342:4;15216:131;:::i;:::-;15208:139;;14935:419;;;:::o;15360:176::-;15500:28;15496:1;15488:6;15484:14;15477:52;15360:176;:::o;15542:366::-;15684:3;15705:67;15769:2;15764:3;15705:67;:::i;:::-;15698:74;;15781:93;15870:3;15781:93;:::i;:::-;15899:2;15894:3;15890:12;15883:19;;15542:366;;;:::o;15914:419::-;16080:4;16118:2;16107:9;16103:18;16095:26;;16167:9;16161:4;16157:20;16153:1;16142:9;16138:17;16131:47;16195:131;16321:4;16195:131;:::i;:::-;16187:139;;15914:419;;;:::o;16339:224::-;16479:34;16475:1;16467:6;16463:14;16456:58;16548:7;16543:2;16535:6;16531:15;16524:32;16339:224;:::o;16569:366::-;16711:3;16732:67;16796:2;16791:3;16732:67;:::i;:::-;16725:74;;16808:93;16897:3;16808:93;:::i;:::-;16926:2;16921:3;16917:12;16910:19;;16569:366;;;:::o;16941:419::-;17107:4;17145:2;17134:9;17130:18;17122:26;;17194:9;17188:4;17184:20;17180:1;17169:9;17165:17;17158:47;17222:131;17348:4;17222:131;:::i;:::-;17214:139;;16941:419;;;:::o;17366:174::-;17506:26;17502:1;17494:6;17490:14;17483:50;17366:174;:::o;17546:366::-;17688:3;17709:67;17773:2;17768:3;17709:67;:::i;:::-;17702:74;;17785:93;17874:3;17785:93;:::i;:::-;17903:2;17898:3;17894:12;17887:19;;17546:366;;;:::o;17918:419::-;18084:4;18122:2;18111:9;18107:18;18099:26;;18171:9;18165:4;18161:20;18157:1;18146:9;18142:17;18135:47;18199:131;18325:4;18199:131;:::i;:::-;18191:139;;17918:419;;;:::o;18343:223::-;18483:34;18479:1;18471:6;18467:14;18460:58;18552:6;18547:2;18539:6;18535:15;18528:31;18343:223;:::o;18572:366::-;18714:3;18735:67;18799:2;18794:3;18735:67;:::i;:::-;18728:74;;18811:93;18900:3;18811:93;:::i;:::-;18929:2;18924:3;18920:12;18913:19;;18572:366;;;:::o;18944:419::-;19110:4;19148:2;19137:9;19133:18;19125:26;;19197:9;19191:4;19187:20;19183:1;19172:9;19168:17;19161:47;19225:131;19351:4;19225:131;:::i;:::-;19217:139;;18944:419;;;:::o;19369:221::-;19509:34;19505:1;19497:6;19493:14;19486:58;19578:4;19573:2;19565:6;19561:15;19554:29;19369:221;:::o;19596:366::-;19738:3;19759:67;19823:2;19818:3;19759:67;:::i;:::-;19752:74;;19835:93;19924:3;19835:93;:::i;:::-;19953:2;19948:3;19944:12;19937:19;;19596:366;;;:::o;19968:419::-;20134:4;20172:2;20161:9;20157:18;20149:26;;20221:9;20215:4;20211:20;20207:1;20196:9;20192:17;20185:47;20249:131;20375:4;20249:131;:::i;:::-;20241:139;;19968:419;;;:::o;20393:176::-;20533:28;20529:1;20521:6;20517:14;20510:52;20393:176;:::o;20575:366::-;20717:3;20738:67;20802:2;20797:3;20738:67;:::i;:::-;20731:74;;20814:93;20903:3;20814:93;:::i;:::-;20932:2;20927:3;20923:12;20916:19;;20575:366;;;:::o;20947:419::-;21113:4;21151:2;21140:9;21136:18;21128:26;;21200:9;21194:4;21190:20;21186:1;21175:9;21171:17;21164:47;21228:131;21354:4;21228:131;:::i;:::-;21220:139;;20947:419;;;:::o;21372:175::-;21512:27;21508:1;21500:6;21496:14;21489:51;21372:175;:::o;21553:366::-;21695:3;21716:67;21780:2;21775:3;21716:67;:::i;:::-;21709:74;;21792:93;21881:3;21792:93;:::i;:::-;21910:2;21905:3;21901:12;21894:19;;21553:366;;;:::o;21925:419::-;22091:4;22129:2;22118:9;22114:18;22106:26;;22178:9;22172:4;22168:20;22164:1;22153:9;22149:17;22142:47;22206:131;22332:4;22206:131;:::i;:::-;22198:139;;21925:419;;;:::o;22350:348::-;22390:7;22413:20;22431:1;22413:20;:::i;:::-;22408:25;;22447:20;22465:1;22447:20;:::i;:::-;22442:25;;22635:1;22567:66;22563:74;22560:1;22557:81;22552:1;22545:9;22538:17;22534:105;22531:131;;;22642:18;;:::i;:::-;22531:131;22690:1;22687;22683:9;22672:20;;22350:348;;;;:::o;22704:180::-;22752:77;22749:1;22742:88;22849:4;22846:1;22839:15;22873:4;22870:1;22863:15;22890:185;22930:1;22947:20;22965:1;22947:20;:::i;:::-;22942:25;;22981:20;22999:1;22981:20;:::i;:::-;22976:25;;23020:1;23010:35;;23025:18;;:::i;:::-;23010:35;23067:1;23064;23060:9;23055:14;;22890:185;;;;:::o;23081:148::-;23183:11;23220:3;23205:18;;23081:148;;;;:::o;23235:173::-;23375:25;23371:1;23363:6;23359:14;23352:49;23235:173;:::o;23414:402::-;23574:3;23595:85;23677:2;23672:3;23595:85;:::i;:::-;23588:92;;23689:93;23778:3;23689:93;:::i;:::-;23807:2;23802:3;23798:12;23791:19;;23414:402;;;:::o;23822:377::-;23928:3;23956:39;23989:5;23956:39;:::i;:::-;24011:89;24093:6;24088:3;24011:89;:::i;:::-;24004:96;;24109:52;24154:6;24149:3;24142:4;24135:5;24131:16;24109:52;:::i;:::-;24186:6;24181:3;24177:16;24170:23;;23932:267;23822:377;;;;:::o;24205:167::-;24345:19;24341:1;24333:6;24329:14;24322:43;24205:167;:::o;24378:402::-;24538:3;24559:85;24641:2;24636:3;24559:85;:::i;:::-;24552:92;;24653:93;24742:3;24653:93;:::i;:::-;24771:2;24766:3;24762:12;24755:19;;24378:402;;;:::o;24786:967::-;25168:3;25190:148;25334:3;25190:148;:::i;:::-;25183:155;;25355:95;25446:3;25437:6;25355:95;:::i;:::-;25348:102;;25467:148;25611:3;25467:148;:::i;:::-;25460:155;;25632:95;25723:3;25714:6;25632:95;:::i;:::-;25625:102;;25744:3;25737:10;;24786:967;;;;;:::o;25759:181::-;25899:33;25895:1;25887:6;25883:14;25876:57;25759:181;:::o;25946:366::-;26088:3;26109:67;26173:2;26168:3;26109:67;:::i;:::-;26102:74;;26185:93;26274:3;26185:93;:::i;:::-;26303:2;26298:3;26294:12;26287:19;;25946:366;;;:::o;26318:419::-;26484:4;26522:2;26511:9;26507:18;26499:26;;26571:9;26565:4;26561:20;26557:1;26546:9;26542:17;26535:47;26599:131;26725:4;26599:131;:::i;:::-;26591:139;;26318:419;;;:::o;26743:172::-;26883:24;26879:1;26871:6;26867:14;26860:48;26743:172;:::o;26921:366::-;27063:3;27084:67;27148:2;27143:3;27084:67;:::i;:::-;27077:74;;27160:93;27249:3;27160:93;:::i;:::-;27278:2;27273:3;27269:12;27262:19;;26921:366;;;:::o;27293:419::-;27459:4;27497:2;27486:9;27482:18;27474:26;;27546:9;27540:4;27536:20;27532:1;27521:9;27517:17;27510:47;27574:131;27700:4;27574:131;:::i;:::-;27566:139;;27293:419;;;:::o;27718:179::-;27858:31;27854:1;27846:6;27842:14;27835:55;27718:179;:::o;27903:366::-;28045:3;28066:67;28130:2;28125:3;28066:67;:::i;:::-;28059:74;;28142:93;28231:3;28142:93;:::i;:::-;28260:2;28255:3;28251:12;28244:19;;27903:366;;;:::o;28275:419::-;28441:4;28479:2;28468:9;28464:18;28456:26;;28528:9;28522:4;28518:20;28514:1;28503:9;28499:17;28492:47;28556:131;28682:4;28556:131;:::i;:::-;28548:139;;28275:419;;;:::o;28700:180::-;28748:77;28745:1;28738:88;28845:4;28842:1;28835:15;28869:4;28866:1;28859:15;28886:180;28934:77;28931:1;28924:88;29031:4;29028:1;29021:15;29055:4;29052:1;29045:15;29072:171;29111:3;29134:24;29152:5;29134:24;:::i;:::-;29125:33;;29180:4;29173:5;29170:15;29167:41;;;29188:18;;:::i;:::-;29167:41;29235:1;29228:5;29224:13;29217:20;;29072:171;;;:::o;29249:182::-;29389:34;29385:1;29377:6;29373:14;29366:58;29249:182;:::o;29437:366::-;29579:3;29600:67;29664:2;29659:3;29600:67;:::i;:::-;29593:74;;29676:93;29765:3;29676:93;:::i;:::-;29794:2;29789:3;29785:12;29778:19;;29437:366;;;:::o;29809:419::-;29975:4;30013:2;30002:9;29998:18;29990:26;;30062:9;30056:4;30052:20;30048:1;30037:9;30033:17;30026:47;30090:131;30216:4;30090:131;:::i;:::-;30082:139;;29809:419;;;:::o;30234:180::-;30282:77;30279:1;30272:88;30379:4;30376:1;30369:15;30403:4;30400:1;30393:15
Swarm Source
ipfs://dde40956612f70f8525f32654082f649b9df969c6b70f5b0e91a60297c5fb754
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.