Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x11448AE79784e367d01e5d7B684C19e97aCCCD11
Contract Name:
DAFADistributor
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-02-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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); } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @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 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 {_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 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]{20}) is missing role (0x[0-9a-f]{32})$/ * * _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]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { //unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); //} } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface CGT3IF { // CGT3IF function supportsInterface(bytes4 interfaceId) external view returns (bool); function bytesOfBaseURI() external view returns (uint256); function setBaseURI(string memory baseURI) external; function setTokenRange(uint256 tokenRangeStart, uint256 tokenRangeEnd) external; function getAttributes(uint256 _tokenId) external view returns (uint256 attributes); function updateAttributes(uint256 _tokenId, uint256 _attributes) external; function mint(address user, uint256 tokenId, uint256 _attributes) external; // IERC721 function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); // IERC721 event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom(address from,address to,uint256 tokenId) external; function transferFrom(address from,address to,uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom(address from,address to,uint256 tokenId,bytes calldata data) external; } contract DAFADistributor is AccessControl { using SafeERC20 for IERC20; CGT3IF public cgt3Token; IERC20 public dafaToken; IERC20 public dinoToken; IERC20 public gblockToken; IERC20 public gennibToken; address public withdrawWallet; bytes32 public constant TOGGLE_MINTING_ROLE = keccak256("TOGGLE_MINTING_ROLE"); address public upgradedToAddress = address(0); constructor( CGT3IF _cgt3Token, IERC20 _dafaToken, IERC20 _dinoToken, IERC20 _gblockToken, IERC20 _gennibToken ) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(TOGGLE_MINTING_ROLE, msg.sender); withdrawWallet = msg.sender; cgt3Token = _cgt3Token; dafaToken = _dafaToken; dinoToken = _dinoToken; gblockToken = _gblockToken; gennibToken = _gennibToken; } function upgrade(address _upgradedToAddress) public { require(hasRole(DEFAULT_ADMIN_ROLE, _msgSender()), "Caller is not a admin"); upgradedToAddress = _upgradedToAddress; } // mint Using cDAFA, range 100,000,000 (Max is 100,000,099), pay 1000 cDAFA bool public mintingPaused_DAFA = false; uint256 public tokenPrice_DAFA = uint256(1000 * 10**18); uint256 public tokenRangeStart_DAFA = 1000000000; uint256 public tokenRangeEnd_DAFA = 1000000099; uint256 public lastMintedTokenId_DAFA = tokenRangeStart_DAFA-1; function mintUsingDAFA() public returns (bool) { require(address(0) == upgradedToAddress, "Contract has been upgraded to a new address"); require(!mintingPaused_DAFA, "Minting paused"); lastMintedTokenId_DAFA++; require(lastMintedTokenId_DAFA >= tokenRangeStart_DAFA, "Incorrect config: last minted token not in range"); require(lastMintedTokenId_DAFA <= tokenRangeEnd_DAFA, "All tokens minted"); uint256 tokenBalance_DAFA = dafaToken.balanceOf(msg.sender); require(tokenBalance_DAFA >= tokenPrice_DAFA, "Insufficient token balance"); dafaToken.safeTransferFrom(msg.sender, address(this), tokenPrice_DAFA ); cgt3Token.mint(address(msg.sender), lastMintedTokenId_DAFA, 0); return true; } // mint Using cDINO, range 100,000,700 (Max is 100,000,999), pay 1000 cDINO bool public mintingPaused_DINO = false; uint256 public tokenPrice_DINO = uint256(1000 * 10**18); uint256 public tokenRangeStart_DINO = 1000000700; uint256 public tokenRangeEnd_DINO = 1000000999; uint256 public lastMintedTokenId_DINO = tokenRangeStart_DINO-1; function mintUsingDINO() public returns (bool) { require(address(0) == upgradedToAddress, "Contract has been upgraded to a new address"); require(!mintingPaused_DINO, "Minting paused"); lastMintedTokenId_DINO++; require(lastMintedTokenId_DINO >= tokenRangeStart_DINO, "Incorrect config: last minted token not in range"); require(lastMintedTokenId_DINO <= tokenRangeEnd_DINO, "All tokens minted"); uint256 tokenBalance_DINO = dinoToken.balanceOf(msg.sender); require(tokenBalance_DINO >= tokenPrice_DINO, "Insufficient token balance"); dinoToken.safeTransferFrom(msg.sender, address(this), tokenPrice_DINO ); cgt3Token.mint(address(msg.sender), lastMintedTokenId_DINO, 0); return true; } // mint Using cGBLOCK, range 100,000,100 (Max is 100,000,399), pay 1000 cGBLOCK bool public mintingPaused_GBLOCK = false; uint256 public tokenPrice_GBLOCK = uint256(1000 * 10**18); uint256 public tokenRangeStart_GBLOCK = 1000000100; uint256 public tokenRangeEnd_GBLOCK = 1000000399; uint256 public lastMintedTokenId_GBLOCK = tokenRangeStart_GBLOCK-1; function mintUsingGBLOCK() public returns (bool) { require(address(0) == upgradedToAddress, "Contract has been upgraded to a new address"); require(!mintingPaused_GBLOCK, "Minting paused"); lastMintedTokenId_GBLOCK++; require(lastMintedTokenId_GBLOCK >= tokenRangeStart_GBLOCK, "Incorrect config: last minted token not in range"); require(lastMintedTokenId_GBLOCK <= tokenRangeEnd_GBLOCK, "All tokens minted"); uint256 tokenBalance_GBLOCK = gblockToken.balanceOf(msg.sender); require(tokenBalance_GBLOCK >= tokenPrice_GBLOCK, "Insufficient token balance"); gblockToken.safeTransferFrom(msg.sender, address(this), tokenPrice_GBLOCK ); cgt3Token.mint(address(msg.sender), lastMintedTokenId_GBLOCK, 0); return true; } // mint Using cGENNIB, range 100,000,400 (Max is 100,000,699), pay 1000 cGENNIB bool public mintingPaused_GENNIB = false; uint256 public tokenPrice_GENNIB = uint256(1000 * 10**18); uint256 public tokenRangeStart_GENNIB = 1000000400; uint256 public tokenRangeEnd_GENNIB = 1000000699; uint256 public lastMintedTokenId_GENNIB = tokenRangeStart_GENNIB-1; function mintUsingGENNIB() public returns (bool) { require(address(0) == upgradedToAddress, "Contract has been upgraded to a new address"); require(!mintingPaused_GENNIB, "Minting paused"); lastMintedTokenId_GENNIB++; require(lastMintedTokenId_GENNIB >= tokenRangeStart_GENNIB, "Incorrect config: last minted token not in range"); require(lastMintedTokenId_GENNIB <= tokenRangeEnd_GENNIB, "All tokens minted"); uint256 tokenBalance_GENNIB = gennibToken.balanceOf(msg.sender); require(tokenBalance_GENNIB >= tokenPrice_GENNIB, "Insufficient token balance"); gennibToken.safeTransferFrom(msg.sender, address(this), tokenPrice_GENNIB ); cgt3Token.mint(address(msg.sender), lastMintedTokenId_GENNIB, 0); return true; } fallback() external payable {} receive() external payable {} // admin functions function togglePauseDAFA(bool _pause) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); require(mintingPaused_DAFA != _pause, "Already in desired pause state"); mintingPaused_DAFA = _pause; } function togglePauseDINO(bool _pause) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); require(mintingPaused_DINO != _pause, "Already in desired pause state"); mintingPaused_DINO = _pause; } function togglePauseGBLOCK(bool _pause) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); require(mintingPaused_GBLOCK != _pause, "Already in desired pause state"); mintingPaused_GBLOCK = _pause; } function togglePauseGENNIB(bool _pause) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); require(mintingPaused_GENNIB != _pause, "Already in desired pause state"); mintingPaused_GENNIB = _pause; } function updateSettingsDAFA(uint256 _newPrice, uint256 _tokenRangeStart, uint256 _tokenRangeEnd) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); tokenPrice_DAFA = _newPrice; tokenRangeStart_DAFA = _tokenRangeStart; tokenRangeEnd_DAFA = _tokenRangeEnd; } function updateSettingsDINO(uint256 _newPrice, uint256 _tokenRangeStart, uint256 _tokenRangeEnd) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); tokenPrice_DINO = _newPrice; tokenRangeStart_DINO = _tokenRangeStart; tokenRangeEnd_DINO = _tokenRangeEnd; } function updateSettingsGBLOCK(uint256 _newPrice, uint256 _tokenRangeStart, uint256 _tokenRangeEnd) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); tokenPrice_GBLOCK = _newPrice; tokenRangeStart_GBLOCK = _tokenRangeStart; tokenRangeEnd_GBLOCK = _tokenRangeEnd; } function updateSettingsGENNIB(uint256 _newPrice, uint256 _tokenRangeStart, uint256 _tokenRangeEnd) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); tokenPrice_GENNIB = _newPrice; tokenRangeStart_GENNIB = _tokenRangeStart; tokenRangeEnd_GENNIB = _tokenRangeEnd; } function withdrawAll() public { uint256 _each = address(this).balance; require(payable(withdrawWallet).send(_each)); } function updateWithdrawWallet(address _newWallet) public { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); withdrawWallet = _newWallet; } function adminWithdrawERC20(address token) external { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); uint256 amount = IERC20(token).balanceOf(address(this)); IERC20(token).transfer(msg.sender, amount); } function adminWithdrawERC721(address token, uint256 _tokenId) external { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); IERC721(token).transferFrom(address(this), msg.sender, _tokenId); } function adminTokenSet( CGT3IF _cgt3Token, IERC20 _dafaToken, IERC20 _dinoToken, IERC20 _gblockToken, IERC20 _gennibToken ) external { require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Caller is not admin"); cgt3Token = _cgt3Token; dafaToken = _dafaToken; dinoToken = _dinoToken; gblockToken = _gblockToken; gennibToken = _gennibToken; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract CGT3IF","name":"_cgt3Token","type":"address"},{"internalType":"contract IERC20","name":"_dafaToken","type":"address"},{"internalType":"contract IERC20","name":"_dinoToken","type":"address"},{"internalType":"contract IERC20","name":"_gblockToken","type":"address"},{"internalType":"contract IERC20","name":"_gennibToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOGGLE_MINTING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract CGT3IF","name":"_cgt3Token","type":"address"},{"internalType":"contract IERC20","name":"_dafaToken","type":"address"},{"internalType":"contract IERC20","name":"_dinoToken","type":"address"},{"internalType":"contract IERC20","name":"_gblockToken","type":"address"},{"internalType":"contract IERC20","name":"_gennibToken","type":"address"}],"name":"adminTokenSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"adminWithdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"adminWithdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cgt3Token","outputs":[{"internalType":"contract CGT3IF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dafaToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dinoToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gblockToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gennibToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"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":[],"name":"lastMintedTokenId_DAFA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintedTokenId_DINO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintedTokenId_GBLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastMintedTokenId_GENNIB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintUsingDAFA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintUsingDINO","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintUsingGBLOCK","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintUsingGENNIB","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingPaused_DAFA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPaused_DINO","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPaused_GBLOCK","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPaused_GENNIB","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"togglePauseDAFA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"togglePauseDINO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"togglePauseGBLOCK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"togglePauseGENNIB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPrice_DAFA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice_DINO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice_GBLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice_GENNIB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeEnd_DAFA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeEnd_DINO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeEnd_GBLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeEnd_GENNIB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeStart_DAFA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeStart_DINO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeStart_GBLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRangeStart_GENNIB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeStart","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeEnd","type":"uint256"}],"name":"updateSettingsDAFA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeStart","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeEnd","type":"uint256"}],"name":"updateSettingsDINO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeStart","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeEnd","type":"uint256"}],"name":"updateSettingsGBLOCK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeStart","type":"uint256"},{"internalType":"uint256","name":"_tokenRangeEnd","type":"uint256"}],"name":"updateSettingsGENNIB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateWithdrawWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_upgradedToAddress","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradedToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760146101000a81548160ff021916908315150217905550683635c9adc5dea00000600855633b9aca00600955633b9aca63600a5560016009546200008f9190620005b0565b600b556000600c60006101000a81548160ff021916908315150217905550683635c9adc5dea00000600d55633b9accbc600e55633b9acde7600f556001600e54620000db9190620005b0565b6010556000601160006101000a81548160ff021916908315150217905550683635c9adc5dea00000601255633b9aca64601355633b9acb8f6014556001601354620001279190620005b0565b6015556000601660006101000a81548160ff021916908315150217905550683635c9adc5dea00000601755633b9acb90601855633b9accbb6019556001601854620001739190620005b0565b601a553480156200018357600080fd5b50604051620046c5380380620046c58339818101604052810190620001a9919062000528565b620001be6000801b336200038160201b60201c565b620001f07f9cb032b8cc7b4041809d26a3bfef7f826e63f69957d4724d2d7f9648e2416509336200038160201b60201c565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620006b9565b6200039382826200039760201b60201c565b5050565b620003a982826200048860201b60201c565b6200048457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000429620004f260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000815190506200050b8162000685565b92915050565b60008151905062000522816200069f565b92915050565b600080600080600060a0868803121562000547576200054662000680565b5b60006200055788828901620004fa565b95505060206200056a8882890162000511565b94505060406200057d8882890162000511565b9350506060620005908882890162000511565b9250506080620005a38882890162000511565b9150509295509295909350565b6000620005bd8262000647565b9150620005ca8362000647565b925082821015620005e057620005df62000651565b5b828203905092915050565b6000620005f88262000627565b9050919050565b60006200060c82620005eb565b9050919050565b60006200062082620005eb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6200069081620005ff565b81146200069c57600080fd5b50565b620006aa8162000613565b8114620006b657600080fd5b50565b613ffc80620006c96000396000f3fe60806040526004361061031e5760003560e01c806385d178f4116101ab578063c9234d78116100f7578063d7df85d511610095578063f36ecf391161006f578063f36ecf3914610b64578063f69adce614610b8f578063f93cee0314610bba578063fd40473b14610be557610325565b8063d7df85d514610ae3578063d83058e214610b0e578063e40b27e314610b3957610325565b8063cd8e0ab2116100d1578063cd8e0ab214610a39578063d30c46cf14610a64578063d547741f14610a8f578063d5ca005614610ab857610325565b8063c9234d78146109b8578063c97f2906146109e3578063ccf9918114610a0e57610325565b8063afc6bce211610164578063c0092a531161013e578063c0092a5314610910578063c1244e8d14610939578063c6d0f42f14610964578063c7aee0751461098d57610325565b8063afc6bce21461088f578063b0700e75146108ba578063b9e4bb72146108e557610325565b806385d178f41461077d578063910697aa146107a857806391d14854146107d357806392e3233314610810578063a217fddf14610839578063a7dd05f81461086457610325565b8063417c40bc1161026a578063697e819a1161022357806382211f7d116101fd57806382211f7d146106e95780638239556e146107125780638412f4841461073b578063853828b61461076657610325565b8063697e819a1461066a5780636f23057d1461069557806374d78895146106be57610325565b8063417c40bc1461056a578063459eaa30146105935780634afd74a5146105be5780635310ec25146105e9578063565600201461061457806363ab75e21461063f57610325565b8063248a9ca3116102d7578063342c1854116102b1578063342c1854146104c457806336568abe146104ef5780633c3fd622146105185780633ebf5fe81461054157610325565b8063248a9ca31461043557806328552734146104725780632f2ff15d1461049b57610325565b806301ffc9a7146103275780630900f0101461036457806315c0e5171461038d57806315fbe3e8146103b657806319a33ea2146103e15780631da9b5321461040a57610325565b3661032557005b005b34801561033357600080fd5b5061034e60048036038101906103499190613149565b610c10565b60405161035b9190613685565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190613015565b610c8a565b005b34801561039957600080fd5b506103b460048036038101906103af919061321e565b610d21565b005b3480156103c257600080fd5b506103cb610d87565b6040516103d891906138b3565b60405180910390f35b3480156103ed57600080fd5b5061040860048036038101906104039190613015565b610d8d565b005b34801561041657600080fd5b5061041f610ef8565b60405161042c91906138b3565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906130dc565b610efe565b60405161046991906136a0565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613082565b610f1d565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613109565b610fdc565b005b3480156104d057600080fd5b506104d9611005565b6040516104e691906138b3565b60405180910390f35b3480156104fb57600080fd5b5061051660048036038101906105119190613109565b61100b565b005b34801561052457600080fd5b5061053f600480360381019061053a9190613082565b61108e565b005b34801561054d57600080fd5b506105686004803603810190610563919061321e565b61114d565b005b34801561057657600080fd5b50610591600480360381019061058c9190613082565b6111b3565b005b34801561059f57600080fd5b506105a8611272565b6040516105b59190613685565b60405180910390f35b3480156105ca57600080fd5b506105d36115dc565b6040516105e091906138b3565b60405180910390f35b3480156105f557600080fd5b506105fe6115e2565b60405161060b9190613685565b60405180910390f35b34801561062057600080fd5b506106296115f5565b60405161063691906138b3565b60405180910390f35b34801561064b57600080fd5b506106546115fb565b60405161066191906138b3565b60405180910390f35b34801561067657600080fd5b5061067f611601565b60405161068c91906138b3565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190613082565b611607565b005b3480156106ca57600080fd5b506106d36116c6565b6040516106e09190613685565b60405180910390f35b3480156106f557600080fd5b50610710600480360381019061070b9190613176565b6116d9565b005b34801561071e57600080fd5b5061073960048036038101906107349190613042565b611871565b005b34801561074757600080fd5b50610750611930565b60405161075d9190613685565b60405180910390f35b34801561077257600080fd5b5061077b611943565b005b34801561078957600080fd5b506107926119ab565b60405161079f91906135d3565b60405180910390f35b3480156107b457600080fd5b506107bd6119d1565b6040516107ca91906138b3565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613109565b6119d7565b6040516108079190613685565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190613015565b611a41565b005b34801561084557600080fd5b5061084e611ad1565b60405161085b91906136a0565b60405180910390f35b34801561087057600080fd5b50610879611ad8565b60405161088691906138b3565b60405180910390f35b34801561089b57600080fd5b506108a4611ade565b6040516108b19190613685565b60405180910390f35b3480156108c657600080fd5b506108cf611e48565b6040516108dc9190613685565b60405180910390f35b3480156108f157600080fd5b506108fa6121b2565b60405161090791906136d6565b60405180910390f35b34801561091c57600080fd5b506109376004803603810190610932919061321e565b6121d8565b005b34801561094557600080fd5b5061094e61223e565b60405161095b91906135d3565b60405180910390f35b34801561097057600080fd5b5061098b6004803603810190610986919061321e565b612264565b005b34801561099957600080fd5b506109a26122ca565b6040516109af91906138b3565b60405180910390f35b3480156109c457600080fd5b506109cd6122d0565b6040516109da91906136d6565b60405180910390f35b3480156109ef57600080fd5b506109f86122f6565b604051610a0591906138b3565b60405180910390f35b348015610a1a57600080fd5b50610a236122fc565b604051610a3091906138b3565b60405180910390f35b348015610a4557600080fd5b50610a4e612302565b604051610a5b91906136a0565b60405180910390f35b348015610a7057600080fd5b50610a79612326565b604051610a8691906138b3565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190613109565b61232c565b005b348015610ac457600080fd5b50610acd612355565b604051610ada91906138b3565b60405180910390f35b348015610aef57600080fd5b50610af861235b565b604051610b0591906136bb565b60405180910390f35b348015610b1a57600080fd5b50610b23612381565b604051610b3091906138b3565b60405180910390f35b348015610b4557600080fd5b50610b4e612387565b604051610b5b91906136d6565b60405180910390f35b348015610b7057600080fd5b50610b796123ad565b604051610b869190613685565b60405180910390f35b348015610b9b57600080fd5b50610ba46123c0565b604051610bb191906136d6565b60405180910390f35b348015610bc657600080fd5b50610bcf6123e6565b604051610bdc91906138b3565b60405180910390f35b348015610bf157600080fd5b50610bfa6123ec565b604051610c079190613685565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c835750610c8282612756565b5b9050919050565b610c9e6000801b610c996127c0565b6119d7565b610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613713565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d2e6000801b336119d7565b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d64906137f3565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b600e5481565b610d9a6000801b336119d7565b610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd0906137f3565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e1491906135d3565b60206040518083038186803b158015610e2c57600080fd5b505afa158015610e40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6491906131f1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ea1929190613625565b602060405180830381600087803b158015610ebb57600080fd5b505af1158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef391906130af565b505050565b600d5481565b6000806000838152602001908152602001600020600101549050919050565b610f2a6000801b336119d7565b610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f60906137f3565b60405180910390fd5b801515600c60009054906101000a900460ff1615151415610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613853565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b610fe582610efe565b610ff681610ff16127c0565b6127c8565b6110008383612865565b505050565b600a5481565b6110136127c0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613893565b60405180910390fd5b61108a8282612945565b5050565b61109b6000801b336119d7565b6110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d1906137f3565b60405180910390fd5b801515601660009054906101000a900460ff1615151415611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613853565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b61115a6000801b336119d7565b611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906137f3565b60405180910390fd5b826008819055508160098190555080600a81905550505050565b6111c06000801b336119d7565b6111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f6906137f3565b60405180910390fd5b801515600760149054906101000a900460ff1615151415611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613853565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc906137b3565b60405180910390fd5b601160009054906101000a900460ff1615611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613753565b60405180910390fd5b6015600081548092919061136890613b14565b919050555060135460155410156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613873565b60405180910390fd5b60145460155411156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290613773565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161145891906135d3565b60206040518083038186803b15801561147057600080fd5b505afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a891906131f1565b90506012548110156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906137d3565b60405180910390fd5b6115403330601254600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a26909392919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663156e29f63360155460006040518463ffffffff1660e01b81526004016115a29392919061364e565b600060405180830381600087803b1580156115bc57600080fd5b505af11580156115d0573d6000803e3d6000fd5b50505050600191505090565b601a5481565b601160009054906101000a900460ff1681565b60175481565b60095481565b60195481565b6116146000801b336119d7565b611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a906137f3565b60405180910390fd5b801515601160009054906101000a900460ff16151514156116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090613853565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6116e66000801b336119d7565b611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906137f3565b60405180910390fd5b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b61187e6000801b336119d7565b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b4906137f3565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016118fa939291906135ee565b600060405180830381600087803b15801561191457600080fd5b505af1158015611928573d6000803e3d6000fd5b505050505050565b600760149054906101000a900460ff1681565b6000479050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506119a857600080fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a4e6000801b336119d7565b611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a84906137f3565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000801b81565b60135481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906137b3565b60405180910390fd5b601660009054906101000a900460ff1615611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890613753565b60405180910390fd5b601a6000815480929190611bd490613b14565b9190505550601854601a541015611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790613873565b60405180910390fd5b601954601a541115611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90613773565b60405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611cc491906135d3565b60206040518083038186803b158015611cdc57600080fd5b505afa158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1491906131f1565b9050601754811015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906137d3565b60405180910390fd5b611dac3330601754600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a26909392919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663156e29f633601a5460006040518463ffffffff1660e01b8152600401611e0e9392919061364e565b600060405180830381600087803b158015611e2857600080fd5b505af1158015611e3c573d6000803e3d6000fd5b50505050600191505090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed2906137b3565b60405180910390fd5b600760149054906101000a900460ff1615611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613753565b60405180910390fd5b600b6000815480929190611f3e90613b14565b9190505550600954600b541015611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8190613873565b60405180910390fd5b600a54600b541115611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613773565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161202e91906135d3565b60206040518083038186803b15801561204657600080fd5b505afa15801561205a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207e91906131f1565b90506008548110156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906137d3565b60405180910390fd5b6121163330600854600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a26909392919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663156e29f633600b5460006040518463ffffffff1660e01b81526004016121789392919061364e565b600060405180830381600087803b15801561219257600080fd5b505af11580156121a6573d6000803e3d6000fd5b50505050600191505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121e56000801b336119d7565b612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b906137f3565b60405180910390fd5b826012819055508160138190555080601481905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122716000801b336119d7565b6122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a7906137f3565b60405180910390fd5b826017819055508160188190555080601981905550505050565b60085481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b60145481565b7f9cb032b8cc7b4041809d26a3bfef7f826e63f69957d4724d2d7f9648e241650981565b60105481565b61233582610efe565b612346816123416127c0565b6127c8565b6123508383612945565b505050565b600f5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660009054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff161461247f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612476906137b3565b60405180910390fd5b600c60009054906101000a900460ff16156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690613753565b60405180910390fd5b601060008154809291906124e290613b14565b9190505550600e54601054101561252e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252590613873565b60405180910390fd5b600f546010541115612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c90613773565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016125d291906135d3565b60206040518083038186803b1580156125ea57600080fd5b505afa1580156125fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262291906131f1565b9050600d54811015612669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612660906137d3565b60405180910390fd5b6126ba3330600d54600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612a26909392919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663156e29f63360105460006040518463ffffffff1660e01b815260040161271c9392919061364e565b600060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b50505050600191505090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6127d282826119d7565b612861576127f78173ffffffffffffffffffffffffffffffffffffffff166014612aaf565b6128058360001c6020612aaf565b604051602001612816929190613599565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285891906136f1565b60405180910390fd5b5050565b61286f82826119d7565b61294157600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506128e66127c0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61294f82826119d7565b15612a2257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506129c76127c0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b612aa9846323b872dd60e01b858585604051602401612a47939291906135ee565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ceb565b50505050565b606060006002836002612ac29190613961565b612acc919061390b565b67ffffffffffffffff811115612ae557612ae4613bbb565b5b6040519080825280601f01601f191660200182016040528015612b175781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612b4f57612b4e613b8c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612bb357612bb2613b8c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612bf39190613961565b612bfd919061390b565b90505b6001811115612c9d577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612c3f57612c3e613b8c565b5b1a60f81b828281518110612c5657612c55613b8c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612c9690613aea565b9050612c00565b5060008414612ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd890613733565b60405180910390fd5b8091505092915050565b6000612d4d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612db29092919063ffffffff16565b9050600081511115612dad5780806020019051810190612d6d91906130af565b612dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da390613833565b60405180910390fd5b5b505050565b6060612dc18484600085612dca565b90509392505050565b606082471015612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0690613793565b60405180910390fd5b612e1885612ede565b612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e90613813565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612e809190613582565b60006040518083038185875af1925050503d8060008114612ebd576040519150601f19603f3d011682016040523d82523d6000602084013e612ec2565b606091505b5091509150612ed2828286612ef1565b92505050949350505050565b600080823b905060008111915050919050565b60608315612f0157829050612f51565b600083511115612f145782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4891906136f1565b60405180910390fd5b9392505050565b600081359050612f6781613f25565b92915050565b600081359050612f7c81613f3c565b92915050565b600081519050612f9181613f3c565b92915050565b600081359050612fa681613f53565b92915050565b600081359050612fbb81613f6a565b92915050565b600081359050612fd081613f81565b92915050565b600081359050612fe581613f98565b92915050565b600081359050612ffa81613faf565b92915050565b60008151905061300f81613faf565b92915050565b60006020828403121561302b5761302a613bea565b5b600061303984828501612f58565b91505092915050565b6000806040838503121561305957613058613bea565b5b600061306785828601612f58565b925050602061307885828601612feb565b9150509250929050565b60006020828403121561309857613097613bea565b5b60006130a684828501612f6d565b91505092915050565b6000602082840312156130c5576130c4613bea565b5b60006130d384828501612f82565b91505092915050565b6000602082840312156130f2576130f1613bea565b5b600061310084828501612f97565b91505092915050565b600080604083850312156131205761311f613bea565b5b600061312e85828601612f97565b925050602061313f85828601612f58565b9150509250929050565b60006020828403121561315f5761315e613bea565b5b600061316d84828501612fac565b91505092915050565b600080600080600060a0868803121561319257613191613bea565b5b60006131a088828901612fc1565b95505060206131b188828901612fd6565b94505060406131c288828901612fd6565b93505060606131d388828901612fd6565b92505060806131e488828901612fd6565b9150509295509295909350565b60006020828403121561320757613206613bea565b5b600061321584828501613000565b91505092915050565b60008060006060848603121561323757613236613bea565b5b600061324586828701612feb565b935050602061325686828701612feb565b925050604061326786828701612feb565b9150509250925092565b61327a816139bb565b82525050565b613289816139cd565b82525050565b613298816139d9565b82525050565b60006132a9826138ce565b6132b381856138e4565b93506132c3818560208601613ab7565b80840191505092915050565b6132d881613a5d565b82525050565b6132e781613a81565b82525050565b6132f681613aa5565b82525050565b6000613307826138d9565b61331181856138ef565b9350613321818560208601613ab7565b61332a81613bef565b840191505092915050565b6000613340826138d9565b61334a8185613900565b935061335a818560208601613ab7565b80840191505092915050565b60006133736015836138ef565b915061337e82613c00565b602082019050919050565b60006133966020836138ef565b91506133a182613c29565b602082019050919050565b60006133b9600e836138ef565b91506133c482613c52565b602082019050919050565b60006133dc6011836138ef565b91506133e782613c7b565b602082019050919050565b60006133ff6026836138ef565b915061340a82613ca4565b604082019050919050565b6000613422602b836138ef565b915061342d82613cf3565b604082019050919050565b6000613445601a836138ef565b915061345082613d42565b602082019050919050565b60006134686013836138ef565b915061347382613d6b565b602082019050919050565b600061348b601d836138ef565b915061349682613d94565b602082019050919050565b60006134ae601783613900565b91506134b982613dbd565b601782019050919050565b60006134d1602a836138ef565b91506134dc82613de6565b604082019050919050565b60006134f4601e836138ef565b91506134ff82613e35565b602082019050919050565b60006135176030836138ef565b915061352282613e5e565b604082019050919050565b600061353a601183613900565b915061354582613ead565b601182019050919050565b600061355d602f836138ef565b915061356882613ed6565b604082019050919050565b61357c81613a53565b82525050565b600061358e828461329e565b915081905092915050565b60006135a4826134a1565b91506135b08285613335565b91506135bb8261352d565b91506135c78284613335565b91508190509392505050565b60006020820190506135e86000830184613271565b92915050565b60006060820190506136036000830186613271565b6136106020830185613271565b61361d6040830184613573565b949350505050565b600060408201905061363a6000830185613271565b6136476020830184613573565b9392505050565b60006060820190506136636000830186613271565b6136706020830185613573565b61367d60408301846132ed565b949350505050565b600060208201905061369a6000830184613280565b92915050565b60006020820190506136b5600083018461328f565b92915050565b60006020820190506136d060008301846132cf565b92915050565b60006020820190506136eb60008301846132de565b92915050565b6000602082019050818103600083015261370b81846132fc565b905092915050565b6000602082019050818103600083015261372c81613366565b9050919050565b6000602082019050818103600083015261374c81613389565b9050919050565b6000602082019050818103600083015261376c816133ac565b9050919050565b6000602082019050818103600083015261378c816133cf565b9050919050565b600060208201905081810360008301526137ac816133f2565b9050919050565b600060208201905081810360008301526137cc81613415565b9050919050565b600060208201905081810360008301526137ec81613438565b9050919050565b6000602082019050818103600083015261380c8161345b565b9050919050565b6000602082019050818103600083015261382c8161347e565b9050919050565b6000602082019050818103600083015261384c816134c4565b9050919050565b6000602082019050818103600083015261386c816134e7565b9050919050565b6000602082019050818103600083015261388c8161350a565b9050919050565b600060208201905081810360008301526138ac81613550565b9050919050565b60006020820190506138c86000830184613573565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061391682613a53565b915061392183613a53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395657613955613b5d565b5b828201905092915050565b600061396c82613a53565b915061397783613a53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b0576139af613b5d565b5b828202905092915050565b60006139c682613a33565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613a1a826139bb565b9050919050565b6000613a2c826139bb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613a6882613a6f565b9050919050565b6000613a7a82613a33565b9050919050565b6000613a8c82613a93565b9050919050565b6000613a9e82613a33565b9050919050565b6000613ab082613a53565b9050919050565b60005b83811015613ad5578082015181840152602081019050613aba565b83811115613ae4576000848401525b50505050565b6000613af582613a53565b91506000821415613b0957613b08613b5d565b5b600182039050919050565b6000613b1f82613a53565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b5257613b51613b5d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572206973206e6f7420612061646d696e0000000000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f436f6e747261637420686173206265656e20757067726164656420746f20612060008201527f6e65772061646472657373000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b7f43616c6c6572206973206e6f742061646d696e00000000000000000000000000600082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f416c726561647920696e20646573697265642070617573652073746174650000600082015250565b7f496e636f727265637420636f6e6669673a206c617374206d696e74656420746f60008201527f6b656e206e6f7420696e2072616e676500000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b613f2e816139bb565b8114613f3957600080fd5b50565b613f45816139cd565b8114613f5057600080fd5b50565b613f5c816139d9565b8114613f6757600080fd5b50565b613f73816139e3565b8114613f7e57600080fd5b50565b613f8a81613a0f565b8114613f9557600080fd5b50565b613fa181613a21565b8114613fac57600080fd5b50565b613fb881613a53565b8114613fc357600080fd5b5056fea2646970667358221220e91a1248f058883d9d0636310f98fb48c24a8958c7b67a4076987ff3588833bd64736f6c6343000806003300000000000000000000000015eb6f3239195203787f8af107495ab9c8e489fb000000000000000000000000443de4fd7dcdbbe0f91855d45d152784565178130000000000000000000000004a5d9bbe740d15b199b51ad102ad04a222453955000000000000000000000000582baac5c18212b226db259f6bd6ad7f3ce142b6000000000000000000000000f9510f10b5de8b0cb256b7606a9aafadda12a9d4
Deployed ByteCode Sourcemap
33953:9803:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8440:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34878:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41403:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36461:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42781:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36398:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9851:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40262:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10236:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35336:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11284:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40794:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41065:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39999:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37838:829;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38986:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37538:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38809:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35281:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38931;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40525:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36353:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43298:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43052:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35174:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42437:141;;;;;;;;;;;;;:::i;:::-;;34193:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38874:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8736:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42586:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6714:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37650:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39061:829;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35461:801;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34127:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41741:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34318:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42089:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35219:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34067:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37585:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37707:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34231:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36570:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10628:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36517:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34037:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35389:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34159:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38762:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34097:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37762:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36642:801;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8440:204;8525:4;8564:32;8549:47;;;:11;:47;;;;:87;;;;8600:36;8624:11;8600:23;:36::i;:::-;8549:87;8542:94;;8440:204;;;:::o;34878:205::-;34949:41;6759:4;34957:18;;34977:12;:10;:12::i;:::-;34949:7;:41::i;:::-;34941:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35057:18;35037:17;;:38;;;;;;;;;;;;;;;;;;34878:205;:::o;41403:330::-;41526:39;6759:4;41534:18;;41554:10;41526:7;:39::i;:::-;41518:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41620:9;41602:15;:27;;;;41663:16;41640:20;:39;;;;41711:14;41690:18;:35;;;;41403:330;;;:::o;36461:48::-;;;;:::o;42781:263::-;42852:39;6759:4;42860:18;;42880:10;42852:7;:39::i;:::-;42844:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42928:14;42952:5;42945:23;;;42977:4;42945:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42928:55;;43001:5;42994:22;;;43017:10;43029:6;42994:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42833:211;42781:263;:::o;36398:55::-;;;;:::o;9851:123::-;9917:7;9944:6;:12;9951:4;9944:12;;;;;;;;;;;:22;;;9937:29;;9851:123;;;:::o;40262:255::-;40326:39;6759:4;40334:18;;40354:10;40326:7;:39::i;:::-;40318:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40430:6;40408:28;;:18;;;;;;;;;;;:28;;;;40400:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40503:6;40482:18;;:27;;;;;;;;;;;;;;;;;;40262:255;:::o;10236:147::-;10319:18;10332:4;10319:12;:18::i;:::-;8318:30;8329:4;8335:12;:10;:12::i;:::-;8318:10;:30::i;:::-;10350:25:::1;10361:4;10367:7;10350:10;:25::i;:::-;10236:147:::0;;;:::o;35336:46::-;;;;:::o;11284:218::-;11391:12;:10;:12::i;:::-;11380:23;;:7;:23;;;11372:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;11468:26;11480:4;11486:7;11468:11;:26::i;:::-;11284:218;;:::o;40794:261::-;40860:39;6759:4;40868:18;;40888:10;40860:7;:39::i;:::-;40852:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40966:6;40942:30;;:20;;;;;;;;;;;:30;;;;40934:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41041:6;41018:20;;:29;;;;;;;;;;;;;;;;;;40794:261;:::o;41065:330::-;41188:39;6759:4;41196:18;;41216:10;41188:7;:39::i;:::-;41180:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41282:9;41264:15;:27;;;;41325:16;41302:20;:39;;;;41373:14;41352:18;:35;;;;41065:330;;;:::o;39999:255::-;40063:39;6759:4;40071:18;;40091:10;40063:7;:39::i;:::-;40055:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40167:6;40145:28;;:18;;;;;;;;;;;:28;;;;40137:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40240:6;40219:18;;:27;;;;;;;;;;;;;;;;;;39999:255;:::o;37838:829::-;37881:4;37920:17;;;;;;;;;;;37906:31;;37914:1;37906:31;;;37898:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38005:20;;;;;;;;;;;38004:21;37996:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;38057:24;;:26;;;;;;;;;:::i;:::-;;;;;;38130:22;;38102:24;;:50;;38094:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;38252:20;;38224:24;;:48;;38216:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38307:27;38337:11;;;;;;;;;;;:21;;;38359:10;38337:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38307:63;;38412:17;;38389:19;:40;;38381:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;38483:75;38512:10;38532:4;38539:17;;38483:11;;;;;;;;;;;:28;;;;:75;;;;;;:::i;:::-;38571:9;;;;;;;;;;;:14;;;38594:10;38607:24;;38633:1;38571:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38655:4;38648:11;;;37838:829;:::o;38986:66::-;;;;:::o;37538:40::-;;;;;;;;;;;;;:::o;38809:57::-;;;;:::o;35281:48::-;;;;:::o;38931:::-;;;;:::o;40525:261::-;40591:39;6759:4;40599:18;;40619:10;40591:7;:39::i;:::-;40583:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40697:6;40673:30;;:20;;;;;;;;;;;:30;;;;40665:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40772:6;40749:20;;:29;;;;;;;;;;;;;;;;;;40525:261;:::o;36353:38::-;;;;;;;;;;;;;:::o;43298:455::-;43507:39;6759:4;43515:18;;43535:10;43507:7;:39::i;:::-;43499:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43595:10;43583:9;;:22;;;;;;;;;;;;;;;;;;43628:10;43616:9;;:22;;;;;;;;;;;;;;;;;;43661:10;43649:9;;:22;;;;;;;;;;;;;;;;;;43696:12;43682:11;;:26;;;;;;;;;;;;;;;;;;43733:12;43719:11;;:26;;;;;;;;;;;;;;;;;;43298:455;;;;;:::o;43052:238::-;43142:39;6759:4;43150:18;;43170:10;43142:7;:39::i;:::-;43134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43226:5;43218:27;;;43254:4;43261:10;43273:8;43218:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43052:238;;:::o;35174:38::-;;;;;;;;;;;;;:::o;42437:141::-;42478:13;42494:21;42478:37;;42542:14;;;;;;;;;;;42534:28;;:35;42563:5;42534:35;;;;;;;;;;;;;;;;;;;;;;;42526:44;;;;;;42467:111;42437:141::o;34193:29::-;;;;;;;;;;;;;:::o;38874:50::-;;;;:::o;8736:139::-;8814:4;8838:6;:12;8845:4;8838:12;;;;;;;;;;;:20;;:29;8859:7;8838:29;;;;;;;;;;;;;;;;;;;;;;;;;8831:36;;8736:139;;;;:::o;42586:187::-;42662:39;6759:4;42670:18;;42690:10;42662:7;:39::i;:::-;42654:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42755:10;42738:14;;:27;;;;;;;;;;;;;;;;;;42586:187;:::o;6714:49::-;6759:4;6714:49;;;:::o;37650:50::-;;;;:::o;39061:829::-;39104:4;39143:17;;;;;;;;;;;39129:31;;39137:1;39129:31;;;39121:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39228:20;;;;;;;;;;;39227:21;39219:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;39280:24;;:26;;;;;;;;;:::i;:::-;;;;;;39353:22;;39325:24;;:50;;39317:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;39475:20;;39447:24;;:48;;39439:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39530:27;39560:11;;;;;;;;;;;:21;;;39582:10;39560:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39530:63;;39635:17;;39612:19;:40;;39604:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;39706:75;39735:10;39755:4;39762:17;;39706:11;;;;;;;;;;;:28;;;;:75;;;;;;:::i;:::-;39794:9;;;;;;;;;;;:14;;;39817:10;39830:24;;39856:1;39794:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39878:4;39871:11;;;39061:829;:::o;35461:801::-;35502:4;35541:17;;;;;;;;;;;35527:31;;35535:1;35527:31;;;35519:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35626:18;;;;;;;;;;;35625:19;35617:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35676:22;;:24;;;;;;;;;:::i;:::-;;;;;;35745:20;;35719:22;;:46;;35711:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;35863:18;;35837:22;;:44;;35829:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35916:25;35944:9;;;;;;;;;;;:19;;;35964:10;35944:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35916:59;;36015:15;;35994:17;:36;;35986:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36084:71;36111:10;36131:4;36138:15;;36084:9;;;;;;;;;;;:26;;;;:71;;;;;;:::i;:::-;36168:9;;;;;;;;;;;:14;;;36191:10;36204:22;;36228:1;36168:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36250:4;36243:11;;;35461:801;:::o;34127:25::-;;;;;;;;;;;;;:::o;41741:338::-;41866:39;6759:4;41874:18;;41894:10;41866:7;:39::i;:::-;41858:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41962:9;41942:17;:29;;;;42007:16;41982:22;:41;;;;42057:14;42034:20;:37;;;;41741:338;;;:::o;34318:45::-;;;;;;;;;;;;;:::o;42089:338::-;42214:39;6759:4;42222:18;;42242:10;42214:7;:39::i;:::-;42206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42310:9;42290:17;:29;;;;42355:16;42330:22;:41;;;;42405:14;42382:20;:37;;;;42089:338;;;:::o;35219:55::-;;;;:::o;34067:23::-;;;;;;;;;;;;;:::o;37585:57::-;;;;:::o;37707:48::-;;;;:::o;34231:78::-;34277:32;34231:78;:::o;36570:62::-;;;;:::o;10628:149::-;10712:18;10725:4;10712:12;:18::i;:::-;8318:30;8329:4;8335:12;:10;:12::i;:::-;8318:10;:30::i;:::-;10743:26:::1;10755:4;10761:7;10743:11;:26::i;:::-;10628:149:::0;;;:::o;36517:46::-;;;;:::o;34037:23::-;;;;;;;;;;;;;:::o;35389:62::-;;;;:::o;34159:25::-;;;;;;;;;;;;;:::o;38762:40::-;;;;;;;;;;;;;:::o;34097:23::-;;;;;;;;;;;;;:::o;37762:66::-;;;;:::o;36642:801::-;36683:4;36722:17;;;;;;;;;;;36708:31;;36716:1;36708:31;;;36700:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36807:18;;;;;;;;;;;36806:19;36798:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36857:22;;:24;;;;;;;;;:::i;:::-;;;;;;36926:20;;36900:22;;:46;;36892:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;37044:18;;37018:22;;:44;;37010:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37097:25;37125:9;;;;;;;;;;;:19;;;37145:10;37125:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37097:59;;37196:15;;37175:17;:36;;37167:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37265:71;37292:10;37312:4;37319:15;;37265:9;;;;;;;;;;;:26;;;;:71;;;;;;:::i;:::-;37349:9;;;;;;;;;;;:14;;;37372:10;37385:22;;37409:1;37349:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37431:4;37424:11;;;36642:801;:::o;4254:157::-;4339:4;4378:25;4363:40;;;:11;:40;;;;4356:47;;4254:157;;;:::o;601:98::-;654:7;681:10;674:17;;601:98;:::o;9165:497::-;9246:22;9254:4;9260:7;9246;:22::i;:::-;9241:414;;9434:41;9462:7;9434:41;;9472:2;9434:19;:41::i;:::-;9548:38;9576:4;9568:13;;9583:2;9548:19;:38::i;:::-;9339:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9285:358;;;;;;;;;;;:::i;:::-;;;;;;;;9241:414;9165:497;;:::o;12532:229::-;12607:22;12615:4;12621:7;12607;:22::i;:::-;12602:152;;12678:4;12646:6;:12;12653:4;12646:12;;;;;;;;;;;:20;;:29;12667:7;12646:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;12729:12;:10;:12::i;:::-;12702:40;;12720:7;12702:40;;12714:4;12702:40;;;;;;;;;;12602:152;12532:229;;:::o;12769:230::-;12844:22;12852:4;12858:7;12844;:22::i;:::-;12840:152;;;12915:5;12883:6;:12;12890:4;12883:12;;;;;;;;;;;:20;;:29;12904:7;12883:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;12967:12;:10;:12::i;:::-;12940:40;;12958:7;12940:40;;12952:4;12940:40;;;;;;;;;;12840:152;12769:230;;:::o;29004:248::-;29148:96;29168:5;29198:27;;;29227:4;29233:2;29237:5;29175:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29148:19;:96::i;:::-;29004:248;;;;:::o;2344:451::-;2419:13;2445:19;2490:1;2481:6;2477:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;2467:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2445:47;;2503:15;:6;2510:1;2503:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;2529;:6;2536:1;2529:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;2560:9;2585:1;2576:6;2572:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;2560:26;;2555:135;2592:1;2588;:5;2555:135;;;2627:12;2648:3;2640:5;:11;2627:25;;;;;;;:::i;:::-;;;;;2615:6;2622:1;2615:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;2677:1;2667:11;;;;;2595:3;;;;:::i;:::-;;;2555:135;;;;2717:1;2708:5;:10;2700:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2780:6;2766:21;;;2344:451;;;;:::o;31362:716::-;31786:23;31812:69;31840:4;31812:69;;;;;;;;;;;;;;;;;31820:5;31812:27;;;;:69;;;;;:::i;:::-;31786:95;;31916:1;31896:10;:17;:21;31892:179;;;31993:10;31982:30;;;;;;;;;;;;:::i;:::-;31974:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31892:179;31432:646;31362:716;;:::o;23951:229::-;24088:12;24120:52;24142:6;24150:4;24156:1;24159:12;24120:21;:52::i;:::-;24113:59;;23951:229;;;;;:::o;25071:511::-;25241:12;25299:5;25274:21;:30;;25266:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25366:18;25377:6;25366:10;:18::i;:::-;25358:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25432:12;25446:23;25473:6;:11;;25492:5;25499:4;25473:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25431:73;;;;25522:52;25540:7;25549:10;25561:12;25522:17;:52::i;:::-;25515:59;;;;25071:511;;;;;;:::o;21145:387::-;21205:4;21413:12;21480:7;21468:20;21460:28;;21523:1;21516:4;:8;21509:15;;;21145:387;;;:::o;27540:712::-;27690:12;27719:7;27715:530;;;27750:10;27743:17;;;;27715:530;27884:1;27864:10;:17;:21;27860:374;;;28062:10;28056:17;28123:15;28110:10;28106:2;28102:19;28095:44;27860:374;28205:12;28198:20;;;;;;;;;;;:::i;:::-;;;;;;;;27540:712;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:137::-;345:5;376:6;370:13;361:22;;392:30;416:5;392:30;:::i;:::-;351:77;;;;:::o;434:139::-;480:5;518:6;505:20;496:29;;534:33;561:5;534:33;:::i;:::-;486:87;;;;:::o;579:137::-;624:5;662:6;649:20;640:29;;678:32;704:5;678:32;:::i;:::-;630:86;;;;:::o;722:169::-;783:5;821:6;808:20;799:29;;837:48;879:5;837:48;:::i;:::-;789:102;;;;:::o;897:167::-;957:5;995:6;982:20;973:29;;1011:47;1052:5;1011:47;:::i;:::-;963:101;;;;:::o;1070:139::-;1116:5;1154:6;1141:20;1132:29;;1170:33;1197:5;1170:33;:::i;:::-;1122:87;;;;:::o;1215:143::-;1272:5;1303:6;1297:13;1288:22;;1319:33;1346:5;1319:33;:::i;:::-;1278:80;;;;:::o;1364:329::-;1423:6;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1478:79;;:::i;:::-;1440:2;1598:1;1623:53;1668:7;1659:6;1648:9;1644:22;1623:53;:::i;:::-;1613:63;;1569:117;1430:263;;;;:::o;1699:474::-;1767:6;1775;1824:2;1812:9;1803:7;1799:23;1795:32;1792:2;;;1830:79;;:::i;:::-;1792:2;1950:1;1975:53;2020:7;2011:6;2000:9;1996:22;1975:53;:::i;:::-;1965:63;;1921:117;2077:2;2103:53;2148:7;2139:6;2128:9;2124:22;2103:53;:::i;:::-;2093:63;;2048:118;1782:391;;;;;:::o;2179:323::-;2235:6;2284:2;2272:9;2263:7;2259:23;2255:32;2252:2;;;2290:79;;:::i;:::-;2252:2;2410:1;2435:50;2477:7;2468:6;2457:9;2453:22;2435:50;:::i;:::-;2425:60;;2381:114;2242:260;;;;:::o;2508:345::-;2575:6;2624:2;2612:9;2603:7;2599:23;2595:32;2592:2;;;2630:79;;:::i;:::-;2592:2;2750:1;2775:61;2828:7;2819:6;2808:9;2804:22;2775:61;:::i;:::-;2765:71;;2721:125;2582:271;;;;:::o;2859:329::-;2918:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:2;;;2973:79;;:::i;:::-;2935:2;3093:1;3118:53;3163:7;3154:6;3143:9;3139:22;3118:53;:::i;:::-;3108:63;;3064:117;2925:263;;;;:::o;3194:474::-;3262:6;3270;3319:2;3307:9;3298:7;3294:23;3290:32;3287:2;;;3325:79;;:::i;:::-;3287:2;3445:1;3470:53;3515:7;3506:6;3495:9;3491:22;3470:53;:::i;:::-;3460:63;;3416:117;3572:2;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3543:118;3277:391;;;;;:::o;3674:327::-;3732:6;3781:2;3769:9;3760:7;3756:23;3752:32;3749:2;;;3787:79;;:::i;:::-;3749:2;3907:1;3932:52;3976:7;3967:6;3956:9;3952:22;3932:52;:::i;:::-;3922:62;;3878:116;3739:262;;;;:::o;4007:1053::-;4173:6;4181;4189;4197;4205;4254:3;4242:9;4233:7;4229:23;4225:33;4222:2;;;4261:79;;:::i;:::-;4222:2;4381:1;4406:68;4466:7;4457:6;4446:9;4442:22;4406:68;:::i;:::-;4396:78;;4352:132;4523:2;4549:67;4608:7;4599:6;4588:9;4584:22;4549:67;:::i;:::-;4539:77;;4494:132;4665:2;4691:67;4750:7;4741:6;4730:9;4726:22;4691:67;:::i;:::-;4681:77;;4636:132;4807:2;4833:67;4892:7;4883:6;4872:9;4868:22;4833:67;:::i;:::-;4823:77;;4778:132;4949:3;4976:67;5035:7;5026:6;5015:9;5011:22;4976:67;:::i;:::-;4966:77;;4920:133;4212:848;;;;;;;;:::o;5066:351::-;5136:6;5185:2;5173:9;5164:7;5160:23;5156:32;5153:2;;;5191:79;;:::i;:::-;5153:2;5311:1;5336:64;5392:7;5383:6;5372:9;5368:22;5336:64;:::i;:::-;5326:74;;5282:128;5143:274;;;;:::o;5423:619::-;5500:6;5508;5516;5565:2;5553:9;5544:7;5540:23;5536:32;5533:2;;;5571:79;;:::i;:::-;5533:2;5691:1;5716:53;5761:7;5752:6;5741:9;5737:22;5716:53;:::i;:::-;5706:63;;5662:117;5818:2;5844:53;5889:7;5880:6;5869:9;5865:22;5844:53;:::i;:::-;5834:63;;5789:118;5946:2;5972:53;6017:7;6008:6;5997:9;5993:22;5972:53;:::i;:::-;5962:63;;5917:118;5523:519;;;;;:::o;6048:118::-;6135:24;6153:5;6135:24;:::i;:::-;6130:3;6123:37;6113:53;;:::o;6172:109::-;6253:21;6268:5;6253:21;:::i;:::-;6248:3;6241:34;6231:50;;:::o;6287:118::-;6374:24;6392:5;6374:24;:::i;:::-;6369:3;6362:37;6352:53;;:::o;6411:373::-;6515:3;6543:38;6575:5;6543:38;:::i;:::-;6597:88;6678:6;6673:3;6597:88;:::i;:::-;6590:95;;6694:52;6739:6;6734:3;6727:4;6720:5;6716:16;6694:52;:::i;:::-;6771:6;6766:3;6762:16;6755:23;;6519:265;;;;;:::o;6790:161::-;6892:52;6938:5;6892:52;:::i;:::-;6887:3;6880:65;6870:81;;:::o;6957:159::-;7058:51;7103:5;7058:51;:::i;:::-;7053:3;7046:64;7036:80;;:::o;7122:147::-;7217:45;7256:5;7217:45;:::i;:::-;7212:3;7205:58;7195:74;;:::o;7275:364::-;7363:3;7391:39;7424:5;7391:39;:::i;:::-;7446:71;7510:6;7505:3;7446:71;:::i;:::-;7439:78;;7526:52;7571:6;7566:3;7559:4;7552:5;7548:16;7526:52;:::i;:::-;7603:29;7625:6;7603:29;:::i;:::-;7598:3;7594:39;7587:46;;7367:272;;;;;:::o;7645:377::-;7751:3;7779:39;7812:5;7779:39;:::i;:::-;7834:89;7916:6;7911:3;7834:89;:::i;:::-;7827:96;;7932:52;7977:6;7972:3;7965:4;7958:5;7954:16;7932:52;:::i;:::-;8009:6;8004:3;8000:16;7993:23;;7755:267;;;;;:::o;8028:366::-;8170:3;8191:67;8255:2;8250:3;8191:67;:::i;:::-;8184:74;;8267:93;8356:3;8267:93;:::i;:::-;8385:2;8380:3;8376:12;8369:19;;8174:220;;;:::o;8400:366::-;8542:3;8563:67;8627:2;8622:3;8563:67;:::i;:::-;8556:74;;8639:93;8728:3;8639:93;:::i;:::-;8757:2;8752:3;8748:12;8741:19;;8546:220;;;:::o;8772:366::-;8914:3;8935:67;8999:2;8994:3;8935:67;:::i;:::-;8928:74;;9011:93;9100:3;9011:93;:::i;:::-;9129:2;9124:3;9120:12;9113:19;;8918:220;;;:::o;9144:366::-;9286:3;9307:67;9371:2;9366:3;9307:67;:::i;:::-;9300:74;;9383:93;9472:3;9383:93;:::i;:::-;9501:2;9496:3;9492:12;9485:19;;9290:220;;;:::o;9516:366::-;9658:3;9679:67;9743:2;9738:3;9679:67;:::i;:::-;9672:74;;9755:93;9844:3;9755:93;:::i;:::-;9873:2;9868:3;9864:12;9857:19;;9662:220;;;:::o;9888:366::-;10030:3;10051:67;10115:2;10110:3;10051:67;:::i;:::-;10044:74;;10127:93;10216:3;10127:93;:::i;:::-;10245:2;10240:3;10236:12;10229:19;;10034:220;;;:::o;10260:366::-;10402:3;10423:67;10487:2;10482:3;10423:67;:::i;:::-;10416:74;;10499:93;10588:3;10499:93;:::i;:::-;10617:2;10612:3;10608:12;10601:19;;10406:220;;;:::o;10632:366::-;10774:3;10795:67;10859:2;10854:3;10795:67;:::i;:::-;10788:74;;10871:93;10960:3;10871:93;:::i;:::-;10989:2;10984:3;10980:12;10973:19;;10778:220;;;:::o;11004:366::-;11146:3;11167:67;11231:2;11226:3;11167:67;:::i;:::-;11160:74;;11243:93;11332:3;11243:93;:::i;:::-;11361:2;11356:3;11352:12;11345:19;;11150:220;;;:::o;11376:402::-;11536:3;11557:85;11639:2;11634:3;11557:85;:::i;:::-;11550:92;;11651:93;11740:3;11651:93;:::i;:::-;11769:2;11764:3;11760:12;11753:19;;11540:238;;;:::o;11784:366::-;11926:3;11947:67;12011:2;12006:3;11947:67;:::i;:::-;11940:74;;12023:93;12112:3;12023:93;:::i;:::-;12141:2;12136:3;12132:12;12125:19;;11930:220;;;:::o;12156:366::-;12298:3;12319:67;12383:2;12378:3;12319:67;:::i;:::-;12312:74;;12395:93;12484:3;12395:93;:::i;:::-;12513:2;12508:3;12504:12;12497:19;;12302:220;;;:::o;12528:366::-;12670:3;12691:67;12755:2;12750:3;12691:67;:::i;:::-;12684:74;;12767:93;12856:3;12767:93;:::i;:::-;12885:2;12880:3;12876:12;12869:19;;12674:220;;;:::o;12900:402::-;13060:3;13081:85;13163:2;13158:3;13081:85;:::i;:::-;13074:92;;13175:93;13264:3;13175:93;:::i;:::-;13293:2;13288:3;13284:12;13277:19;;13064:238;;;:::o;13308:366::-;13450:3;13471:67;13535:2;13530:3;13471:67;:::i;:::-;13464:74;;13547:93;13636:3;13547:93;:::i;:::-;13665:2;13660:3;13656:12;13649:19;;13454:220;;;:::o;13680:118::-;13767:24;13785:5;13767:24;:::i;:::-;13762:3;13755:37;13745:53;;:::o;13804:271::-;13934:3;13956:93;14045:3;14036:6;13956:93;:::i;:::-;13949:100;;14066:3;14059:10;;13938:137;;;;:::o;14081:967::-;14463:3;14485:148;14629:3;14485:148;:::i;:::-;14478:155;;14650:95;14741:3;14732:6;14650:95;:::i;:::-;14643:102;;14762:148;14906:3;14762:148;:::i;:::-;14755:155;;14927:95;15018:3;15009:6;14927:95;:::i;:::-;14920:102;;15039:3;15032:10;;14467:581;;;;;:::o;15054:222::-;15147:4;15185:2;15174:9;15170:18;15162:26;;15198:71;15266:1;15255:9;15251:17;15242:6;15198:71;:::i;:::-;15152:124;;;;:::o;15282:442::-;15431:4;15469:2;15458:9;15454:18;15446:26;;15482:71;15550:1;15539:9;15535:17;15526:6;15482:71;:::i;:::-;15563:72;15631:2;15620:9;15616:18;15607:6;15563:72;:::i;:::-;15645;15713:2;15702:9;15698:18;15689:6;15645:72;:::i;:::-;15436:288;;;;;;:::o;15730:332::-;15851:4;15889:2;15878:9;15874:18;15866:26;;15902:71;15970:1;15959:9;15955:17;15946:6;15902:71;:::i;:::-;15983:72;16051:2;16040:9;16036:18;16027:6;15983:72;:::i;:::-;15856:206;;;;;:::o;16068:458::-;16225:4;16263:2;16252:9;16248:18;16240:26;;16276:71;16344:1;16333:9;16329:17;16320:6;16276:71;:::i;:::-;16357:72;16425:2;16414:9;16410:18;16401:6;16357:72;:::i;:::-;16439:80;16515:2;16504:9;16500:18;16491:6;16439:80;:::i;:::-;16230:296;;;;;;:::o;16532:210::-;16619:4;16657:2;16646:9;16642:18;16634:26;;16670:65;16732:1;16721:9;16717:17;16708:6;16670:65;:::i;:::-;16624:118;;;;:::o;16748:222::-;16841:4;16879:2;16868:9;16864:18;16856:26;;16892:71;16960:1;16949:9;16945:17;16936:6;16892:71;:::i;:::-;16846:124;;;;:::o;16976:252::-;17084:4;17122:2;17111:9;17107:18;17099:26;;17135:86;17218:1;17207:9;17203:17;17194:6;17135:86;:::i;:::-;17089:139;;;;:::o;17234:250::-;17341:4;17379:2;17368:9;17364:18;17356:26;;17392:85;17474:1;17463:9;17459:17;17450:6;17392:85;:::i;:::-;17346:138;;;;:::o;17490:313::-;17603:4;17641:2;17630:9;17626:18;17618:26;;17690:9;17684:4;17680:20;17676:1;17665:9;17661:17;17654:47;17718:78;17791:4;17782:6;17718:78;:::i;:::-;17710:86;;17608:195;;;;:::o;17809:419::-;17975:4;18013:2;18002:9;17998:18;17990:26;;18062:9;18056:4;18052:20;18048:1;18037:9;18033:17;18026:47;18090:131;18216:4;18090:131;:::i;:::-;18082:139;;17980:248;;;:::o;18234:419::-;18400:4;18438:2;18427:9;18423:18;18415:26;;18487:9;18481:4;18477:20;18473:1;18462:9;18458:17;18451:47;18515:131;18641:4;18515:131;:::i;:::-;18507:139;;18405:248;;;:::o;18659:419::-;18825:4;18863:2;18852:9;18848:18;18840:26;;18912:9;18906:4;18902:20;18898:1;18887:9;18883:17;18876:47;18940:131;19066:4;18940:131;:::i;:::-;18932:139;;18830:248;;;:::o;19084:419::-;19250:4;19288:2;19277:9;19273:18;19265:26;;19337:9;19331:4;19327:20;19323:1;19312:9;19308:17;19301:47;19365:131;19491:4;19365:131;:::i;:::-;19357:139;;19255:248;;;:::o;19509:419::-;19675:4;19713:2;19702:9;19698:18;19690:26;;19762:9;19756:4;19752:20;19748:1;19737:9;19733:17;19726:47;19790:131;19916:4;19790:131;:::i;:::-;19782:139;;19680:248;;;:::o;19934:419::-;20100:4;20138:2;20127:9;20123:18;20115:26;;20187:9;20181:4;20177:20;20173:1;20162:9;20158:17;20151:47;20215:131;20341:4;20215:131;:::i;:::-;20207:139;;20105:248;;;:::o;20359:419::-;20525:4;20563:2;20552:9;20548:18;20540:26;;20612:9;20606:4;20602:20;20598:1;20587:9;20583:17;20576:47;20640:131;20766:4;20640:131;:::i;:::-;20632:139;;20530:248;;;:::o;20784:419::-;20950:4;20988:2;20977:9;20973:18;20965:26;;21037:9;21031:4;21027:20;21023:1;21012:9;21008:17;21001:47;21065:131;21191:4;21065:131;:::i;:::-;21057:139;;20955:248;;;:::o;21209:419::-;21375:4;21413:2;21402:9;21398:18;21390:26;;21462:9;21456:4;21452:20;21448:1;21437:9;21433:17;21426:47;21490:131;21616:4;21490:131;:::i;:::-;21482:139;;21380:248;;;:::o;21634:419::-;21800:4;21838:2;21827:9;21823:18;21815:26;;21887:9;21881:4;21877:20;21873:1;21862:9;21858:17;21851:47;21915:131;22041:4;21915:131;:::i;:::-;21907:139;;21805:248;;;:::o;22059:419::-;22225:4;22263:2;22252:9;22248:18;22240:26;;22312:9;22306:4;22302:20;22298:1;22287:9;22283:17;22276:47;22340:131;22466:4;22340:131;:::i;:::-;22332:139;;22230:248;;;:::o;22484:419::-;22650:4;22688:2;22677:9;22673:18;22665:26;;22737:9;22731:4;22727:20;22723:1;22712:9;22708:17;22701:47;22765:131;22891:4;22765:131;:::i;:::-;22757:139;;22655:248;;;:::o;22909:419::-;23075:4;23113:2;23102:9;23098:18;23090:26;;23162:9;23156:4;23152:20;23148:1;23137:9;23133:17;23126:47;23190:131;23316:4;23190:131;:::i;:::-;23182:139;;23080:248;;;:::o;23334:222::-;23427:4;23465:2;23454:9;23450:18;23442:26;;23478:71;23546:1;23535:9;23531:17;23522:6;23478:71;:::i;:::-;23432:124;;;;:::o;23643:98::-;23694:6;23728:5;23722:12;23712:22;;23701:40;;;:::o;23747:99::-;23799:6;23833:5;23827:12;23817:22;;23806:40;;;:::o;23852:147::-;23953:11;23990:3;23975:18;;23965:34;;;;:::o;24005:169::-;24089:11;24123:6;24118:3;24111:19;24163:4;24158:3;24154:14;24139:29;;24101:73;;;;:::o;24180:148::-;24282:11;24319:3;24304:18;;24294:34;;;;:::o;24334:305::-;24374:3;24393:20;24411:1;24393:20;:::i;:::-;24388:25;;24427:20;24445:1;24427:20;:::i;:::-;24422:25;;24581:1;24513:66;24509:74;24506:1;24503:81;24500:2;;;24587:18;;:::i;:::-;24500:2;24631:1;24628;24624:9;24617:16;;24378:261;;;;:::o;24645:348::-;24685:7;24708:20;24726:1;24708:20;:::i;:::-;24703:25;;24742:20;24760:1;24742:20;:::i;:::-;24737:25;;24930:1;24862:66;24858:74;24855:1;24852:81;24847:1;24840:9;24833:17;24829:105;24826:2;;;24937:18;;:::i;:::-;24826:2;24985:1;24982;24978:9;24967:20;;24693:300;;;;:::o;24999:96::-;25036:7;25065:24;25083:5;25065:24;:::i;:::-;25054:35;;25044:51;;;:::o;25101:90::-;25135:7;25178:5;25171:13;25164:21;25153:32;;25143:48;;;:::o;25197:77::-;25234:7;25263:5;25252:16;;25242:32;;;:::o;25280:149::-;25316:7;25356:66;25349:5;25345:78;25334:89;;25324:105;;;:::o;25435:111::-;25487:7;25516:24;25534:5;25516:24;:::i;:::-;25505:35;;25495:51;;;:::o;25552:110::-;25603:7;25632:24;25650:5;25632:24;:::i;:::-;25621:35;;25611:51;;;:::o;25668:126::-;25705:7;25745:42;25738:5;25734:54;25723:65;;25713:81;;;:::o;25800:77::-;25837:7;25866:5;25855:16;;25845:32;;;:::o;25883:156::-;25948:9;25981:52;26027:5;25981:52;:::i;:::-;25968:65;;25958:81;;;:::o;26045:128::-;26110:9;26143:24;26161:5;26143:24;:::i;:::-;26130:37;;26120:53;;;:::o;26179:154::-;26243:9;26276:51;26321:5;26276:51;:::i;:::-;26263:64;;26253:80;;;:::o;26339:127::-;26403:9;26436:24;26454:5;26436:24;:::i;:::-;26423:37;;26413:53;;;:::o;26472:121::-;26530:9;26563:24;26581:5;26563:24;:::i;:::-;26550:37;;26540:53;;;:::o;26599:307::-;26667:1;26677:113;26691:6;26688:1;26685:13;26677:113;;;26776:1;26771:3;26767:11;26761:18;26757:1;26752:3;26748:11;26741:39;26713:2;26710:1;26706:10;26701:15;;26677:113;;;26808:6;26805:1;26802:13;26799:2;;;26888:1;26879:6;26874:3;26870:16;26863:27;26799:2;26648:258;;;;:::o;26912:171::-;26951:3;26974:24;26992:5;26974:24;:::i;:::-;26965:33;;27020:4;27013:5;27010:15;27007:2;;;27028:18;;:::i;:::-;27007:2;27075:1;27068:5;27064:13;27057:20;;26955:128;;;:::o;27089:233::-;27128:3;27151:24;27169:5;27151:24;:::i;:::-;27142:33;;27197:66;27190:5;27187:77;27184:2;;;27267:18;;:::i;:::-;27184:2;27314:1;27307:5;27303:13;27296:20;;27132:190;;;:::o;27328:180::-;27376:77;27373:1;27366:88;27473:4;27470:1;27463:15;27497:4;27494:1;27487:15;27514:180;27562:77;27559:1;27552:88;27659:4;27656:1;27649:15;27683:4;27680:1;27673:15;27700:180;27748:77;27745:1;27738:88;27845:4;27842:1;27835:15;27869:4;27866:1;27859:15;28009:117;28118:1;28115;28108:12;28132:102;28173:6;28224:2;28220:7;28215:2;28208:5;28204:14;28200:28;28190:38;;28180:54;;;:::o;28240:171::-;28380:23;28376:1;28368:6;28364:14;28357:47;28346:65;:::o;28417:182::-;28557:34;28553:1;28545:6;28541:14;28534:58;28523:76;:::o;28605:164::-;28745:16;28741:1;28733:6;28729:14;28722:40;28711:58;:::o;28775:167::-;28915:19;28911:1;28903:6;28899:14;28892:43;28881:61;:::o;28948:225::-;29088:34;29084:1;29076:6;29072:14;29065:58;29157:8;29152:2;29144:6;29140:15;29133:33;29054:119;:::o;29179:230::-;29319:34;29315:1;29307:6;29303:14;29296:58;29388:13;29383:2;29375:6;29371:15;29364:38;29285:124;:::o;29415:176::-;29555:28;29551:1;29543:6;29539:14;29532:52;29521:70;:::o;29597:169::-;29737:21;29733:1;29725:6;29721:14;29714:45;29703:63;:::o;29772:179::-;29912:31;29908:1;29900:6;29896:14;29889:55;29878:73;:::o;29957:173::-;30097:25;30093:1;30085:6;30081:14;30074:49;30063:67;:::o;30136:229::-;30276:34;30272:1;30264:6;30260:14;30253:58;30345:12;30340:2;30332:6;30328:15;30321:37;30242:123;:::o;30371:180::-;30511:32;30507:1;30499:6;30495:14;30488:56;30477:74;:::o;30557:235::-;30697:34;30693:1;30685:6;30681:14;30674:58;30766:18;30761:2;30753:6;30749:15;30742:43;30663:129;:::o;30798:167::-;30938:19;30934:1;30926:6;30922:14;30915:43;30904:61;:::o;30971:234::-;31111:34;31107:1;31099:6;31095:14;31088:58;31180:17;31175:2;31167:6;31163:15;31156:42;31077:128;:::o;31211:122::-;31284:24;31302:5;31284:24;:::i;:::-;31277:5;31274:35;31264:2;;31323:1;31320;31313:12;31264:2;31254:79;:::o;31339:116::-;31409:21;31424:5;31409:21;:::i;:::-;31402:5;31399:32;31389:2;;31445:1;31442;31435:12;31389:2;31379:76;:::o;31461:122::-;31534:24;31552:5;31534:24;:::i;:::-;31527:5;31524:35;31514:2;;31573:1;31570;31563:12;31514:2;31504:79;:::o;31589:120::-;31661:23;31678:5;31661:23;:::i;:::-;31654:5;31651:34;31641:2;;31699:1;31696;31689:12;31641:2;31631:78;:::o;31715:152::-;31803:39;31836:5;31803:39;:::i;:::-;31796:5;31793:50;31783:2;;31857:1;31854;31847:12;31783:2;31773:94;:::o;31873:150::-;31960:38;31992:5;31960:38;:::i;:::-;31953:5;31950:49;31940:2;;32013:1;32010;32003:12;31940:2;31930:93;:::o;32029:122::-;32102:24;32120:5;32102:24;:::i;:::-;32095:5;32092:35;32082:2;;32141:1;32138;32131:12;32082:2;32072:79;:::o
Swarm Source
ipfs://e91a1248f058883d9d0636310f98fb48c24a8958c7b67a4076987ff3588833bd
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.