Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,635 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 65075778 | 76 days ago | IN | 0 POL | 0.00668192 | ||||
Approve | 65075751 | 76 days ago | IN | 0 POL | 0.00642165 | ||||
Transfer | 55148337 | 328 days ago | IN | 0 POL | 0.00504141 | ||||
Approve | 54429033 | 347 days ago | IN | 0 POL | 0.00329696 | ||||
Approve | 53989263 | 358 days ago | IN | 0 POL | 0.00389042 | ||||
Approve | 53989258 | 358 days ago | IN | 0 POL | 0.00407036 | ||||
Approve | 53989254 | 358 days ago | IN | 0 POL | 0.00393683 | ||||
Approve | 51103459 | 433 days ago | IN | 0 POL | 0.00399632 | ||||
Approve | 45541446 | 573 days ago | IN | 0 POL | 0.00254498 | ||||
Approve | 45541445 | 573 days ago | IN | 0 POL | 0.00255891 | ||||
Approve | 42237232 | 658 days ago | IN | 0 POL | 0.00529683 | ||||
Approve | 42237231 | 658 days ago | IN | 0 POL | 0.0054133 | ||||
Approve | 39545518 | 728 days ago | IN | 0 POL | 0.00434762 | ||||
Approve | 29933378 | 970 days ago | IN | 0 POL | 0.00141783 | ||||
Approve | 28552969 | 1005 days ago | IN | 0 POL | 0.00126758 | ||||
Approve | 28552524 | 1005 days ago | IN | 0 POL | 0.00664787 | ||||
Approve | 24525428 | 1110 days ago | IN | 0 POL | 0.00004845 | ||||
Approve | 23550062 | 1135 days ago | IN | 0 POL | 0.00071467 | ||||
Approve | 22735883 | 1156 days ago | IN | 0 POL | 0.00074445 | ||||
Approve | 22696907 | 1157 days ago | IN | 0 POL | 0.0014889 | ||||
Approve | 22696500 | 1157 days ago | IN | 0 POL | 0.000938 | ||||
Approve | 22468873 | 1163 days ago | IN | 0 POL | 0.00044667 | ||||
Approve | 22468869 | 1163 days ago | IN | 0 POL | 0.00044667 | ||||
Approve | 22404799 | 1165 days ago | IN | 0 POL | 0.00199512 | ||||
Approve | 22404781 | 1165 days ago | IN | 0 POL | 0.00169734 |
Loading...
Loading
Contract Name:
DelightToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-09-07 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] pragma solidity ^0.8.0; /** * @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"); } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/DelightToken.sol /* ___ ___ ___ _____ /\__\ /\__\ /\ \ /::\ \ /:/ _/_ ___ /:/ _/_ \:\ \ ___ /:/\:\ \ /:/ /\__\ /\__\ /:/ /\ \ \:\ \ /\__\ /:/ \:\__\ /:/ /:/ _/_ ___ ___ /:/__/ /:/ /::\ \ ___ /::\ \ /:/ / /:/__/ \:|__| /:/_/:/ /\__\ /\ \ /\__\ /::\ \ /:/__\/\:\__\ /\ /:/\:\__\ /:/__/ \:\ \ /:/ / \:\/:/ /:/ / \:\ \ /:/ / \/\:\ \__ \:\ \ /:/ / \:\/:/ \/__/ /::\ \ \:\ /:/ / \::/_/:/ / \:\ /:/ / ~~\:\/\__\ \:\ /:/ / \::/__/ /:/\:\ \ \:\/:/ / \:\/:/ / \:\/:/ / \::/ / \:\/:/ / \:\ \ \/__\:\ \ \::/ / \::/ / \::/ / /:/ / \::/ / \:\__\ \:\__\ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ */ pragma solidity ^0.8.4; /* ERROR REF --------- E1: Presale hasn't started yet, good things come to those that wait E2: Presale has ended, come back next time! E3: No more Delight remains! E4: No more Delight left! E5: Not enough usdc provided E6: Delight Presale hardcap reached E7: User has already purchased too much delight E8: User cannot purchase 0 delight E9: Cannot change start block if sale has already started E10: Cannot set start block in the past E11: Can only mint once! E12: Start block has to be less than end block E13: New blocks cant be less than 3 days E14: Can only send excess delight to dead address after presale has ended E15: Can only burn unsold presale once! E16: Can only send excess delight to dead address after presale has ended E17: Can only burn unsold presale once! E18: Failed sending delight */ contract DelightToken is ERC20('DELIGHT PRESALE', 'DELIGHT'), ReentrancyGuard, Ownable { using SafeERC20 for IERC20; address public constant PRESALE_ADDRESS = 0x8f78c64E2d876E0cFC72374a9fa9Ef3730082C04; address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; IERC20 public USDC = IERC20(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174); IERC20 delightToken = IERC20(address(this)); uint256 public constant delightPublicPresaleMaximumSupply = 75 * (10 ** 3) * (10 ** 18); //75,000k presale public uint256 public constant delightPerAccountMaxTotal = 500 * (10 ** 18); // 500 delight uint256 public delightRemaining = delightPublicPresaleMaximumSupply; uint256 public salePriceE35 = 10 * (10 ** 33); // 10 usdc uint256 public maxHardCap = 750 * (10 ** 3) * (10 ** 6); // 750,000 usdc uint256 public constant oneHourMatic = 1500; uint256 public constant minDurationPresale = oneHourMatic * 24 * 3; // 3 days uint256 public startBlock; uint256 public endBlock; bool public hasMintedForL1; bool public hasBurnedUnsoldPresale; mapping(address => uint256) public userDelightTotally; event StartBlockChanged(uint256 newStartBlock, uint256 newEndBlock); event DelightPurchased(address sender, uint256 usdcSpent, uint256 delightReceived); event MintDelightForSandManL1(uint256 amountToMint); event BurnUnclaimedDelight(uint256 amountDelightBurned); constructor(uint256 _startBlock, uint256 _endBlock) { startBlock = _startBlock; endBlock = _endBlock; _mint(address(this), delightPublicPresaleMaximumSupply); } function buyDelight(uint256 _usdcSpent) external nonReentrant { require(block.number >= startBlock, "E1"); require(block.number < endBlock, "E2"); require(delightRemaining > 0, "E3"); require(delightToken.balanceOf(address(this)) > 0, "E4"); require(_usdcSpent > 0, "E5"); require(_usdcSpent <= maxHardCap, "E6"); require(userDelightTotally[msg.sender] <= delightPerAccountMaxTotal, "E7"); uint256 delightPurchaseAmount = (_usdcSpent * (10 ** 12) * salePriceE35) / 1e35; // if we dont have enough left, give them the rest. if (delightRemaining < delightPurchaseAmount) { delightPurchaseAmount = delightRemaining; _usdcSpent = ((delightPurchaseAmount * salePriceE35) / 1e33 ) / 1e12; } require(delightPurchaseAmount > 0, "E8"); // shouldn't be possible to fail these asserts. assert(delightPurchaseAmount <= delightRemaining); assert(delightPurchaseAmount <= delightToken.balanceOf(address(this))); //send delight to user delightToken.safeTransfer(msg.sender, delightPurchaseAmount); // send usdc to presale address USDC.safeTransferFrom(msg.sender, PRESALE_ADDRESS, _usdcSpent); delightRemaining = delightRemaining - delightPurchaseAmount; userDelightTotally[msg.sender] = userDelightTotally[msg.sender] + delightPurchaseAmount; emit DelightPurchased(msg.sender, _usdcSpent, delightPurchaseAmount); } function setStartBlock(uint256 _newStartBlock, uint256 _newEndBlock) external onlyOwner { require(block.number < startBlock, "E9"); require(block.number < _newStartBlock, "E10"); require(_newStartBlock < _newEndBlock, "E9"); require((_newEndBlock - _newStartBlock) > minDurationPresale, "E13"); startBlock = _newStartBlock; endBlock = _newEndBlock; emit StartBlockChanged(_newStartBlock, _newEndBlock); } function mintDelightForSandManL1(uint256 amountToMint, address presaleVipAddress) external onlyOwner { require(!hasMintedForL1, "E11"); require(amountToMint > 0); hasMintedForL1 = true; _mint(presaleVipAddress, amountToMint); emit MintDelightForSandManL1(amountToMint); } function sendUnclaimedDelightToDeadAddress() external onlyOwner { require(block.number > endBlock, "E16"); require(!hasBurnedUnsoldPresale, "E17"); uint256 delightInContract = delightToken.balanceOf(address(this)); if (delightInContract > 0) require(delightToken.transfer(BURN_ADDRESS, delightInContract), "E18"); hasBurnedUnsoldPresale = true; emit BurnUnclaimedDelight(delightInContract); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountDelightBurned","type":"uint256"}],"name":"BurnUnclaimedDelight","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"usdcSpent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delightReceived","type":"uint256"}],"name":"DelightPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"MintDelightForSandManL1","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newStartBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEndBlock","type":"uint256"}],"name":"StartBlockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdcSpent","type":"uint256"}],"name":"buyDelight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delightPerAccountMaxTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delightPublicPresaleMaximumSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delightRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasBurnedUnsoldPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasMintedForL1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxHardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDurationPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToMint","type":"uint256"},{"internalType":"address","name":"presaleVipAddress","type":"address"}],"name":"mintDelightForSandManL1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oneHourMatic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePriceE35","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendUnclaimedDelightToDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStartBlock","type":"uint256"},{"internalType":"uint256","name":"_newEndBlock","type":"uint256"}],"name":"setStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDelightTotally","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052732791bca1f2de4661ed88a30c99a7a9449aa84174600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550690fe1c215e8f838e000006009556e01ed09bead87c0378d8e6400000000600a5564ae9f7bcc00600b55348015620000d157600080fd5b50604051620040ee380380620040ee8339818101604052810190620000f7919062000509565b6040518060400160405280600f81526020017f44454c494748542050524553414c4500000000000000000000000000000000008152506040518060400160405280600781526020017f44454c494748540000000000000000000000000000000000000000000000000081525081600390805190602001906200017b92919062000442565b5080600490805190602001906200019492919062000442565b5050506001600581905550620001bf620001b3620001f160201b60201c565b620001f960201b60201c565b81600c8190555080600d81905550620001e930690fe1c215e8f838e00000620002bf60201b60201c565b505062000710565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000332576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003299062000582565b60405180910390fd5b62000346600083836200043860201b60201c565b80600260008282546200035a9190620005d2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003b19190620005d2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004189190620005a4565b60405180910390a362000434600083836200043d60201b60201c565b5050565b505050565b505050565b828054620004509062000639565b90600052602060002090601f016020900481019282620004745760008555620004c0565b82601f106200048f57805160ff1916838001178555620004c0565b82800160010185558215620004c0579182015b82811115620004bf578251825591602001919060010190620004a2565b5b509050620004cf9190620004d3565b5090565b5b80821115620004ee576000816000905550600101620004d4565b5090565b6000815190506200050381620006f6565b92915050565b600080604083850312156200051d57600080fd5b60006200052d85828601620004f2565b92505060206200054085828601620004f2565b9150509250929050565b600062000559601f83620005c1565b91506200056682620006cd565b602082019050919050565b6200057c816200062f565b82525050565b600060208201905081810360008301526200059d816200054a565b9050919050565b6000602082019050620005bb600083018462000571565b92915050565b600082825260208201905092915050565b6000620005df826200062f565b9150620005ec836200062f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200062457620006236200066f565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200065257607f821691505b602082108114156200066957620006686200069e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000701816200062f565b81146200070d57600080fd5b50565b6139ce80620007206000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a796bf61161011a578063c32f60d7116100ad578063e7cb6d451161007c578063e7cb6d45146105ac578063eafaeea9146105c8578063f015bc93146105e6578063f2fde38b14610604578063fccc281314610620576101fb565b8063c32f60d714610522578063d3ebb9de14610540578063dc49a82f1461055e578063dd62ed3e1461057c576101fb565b8063a9059cbb116100e9578063a9059cbb14610488578063a9badf2f146104b8578063b5ba3d49146104e8578063bfe2c56e14610506576101fb565b80638a796bf6146104005780638da5cb5b1461041c57806395d89b411461043a578063a457c2d714610458576101fb565b8063313ce567116101925780636301613d116101615780636301613d1461038a57806370a08231146103a8578063715018a6146103d857806389a30271146103e2576101fb565b8063313ce56714610300578063395093511461031e57806348cd4cb11461034e578063611bf8d01461036c576101fb565b8063122eba36116101ce578063122eba361461027657806318160ddd146102945780631dc4b809146102b257806323b872dd146102d0576101fb565b806306fdde0314610200578063083c63231461021e578063095ea7b31461023c5780630f2c976b1461026c575b600080fd5b61020861063e565b6040516102159190612c4e565b60405180910390f35b6102266106d0565b6040516102339190613010565b60405180910390f35b61025660048036038101906102519190612574565b6106d6565b6040516102639190612c18565b60405180910390f35b6102746106f4565b005b61027e610a02565b60405161028b9190612c18565b60405180910390f35b61029c610a15565b6040516102a99190613010565b60405180910390f35b6102ba610a1f565b6040516102c79190612c18565b60405180910390f35b6102ea60048036038101906102e59190612525565b610a32565b6040516102f79190612c18565b60405180910390f35b610308610b2a565b6040516103159190613054565b60405180910390f35b61033860048036038101906103339190612574565b610b33565b6040516103459190612c18565b60405180910390f35b610356610bdf565b6040516103639190613010565b60405180910390f35b610374610be5565b6040516103819190613010565b60405180910390f35b610392610beb565b60405161039f9190613010565b60405180910390f35b6103c260048036038101906103bd91906124c0565b610bf8565b6040516103cf9190613010565b60405180910390f35b6103e0610c40565b005b6103ea610cc8565b6040516103f79190612c33565b60405180910390f35b61041a60048036038101906104159190612667565b610cee565b005b610424610ee4565b6040516104319190612b66565b60405180910390f35b610442610f0e565b60405161044f9190612c4e565b60405180910390f35b610472600480360381019061046d9190612574565b610fa0565b60405161047f9190612c18565b60405180910390f35b6104a2600480360381019061049d9190612574565b61108b565b6040516104af9190612c18565b60405180910390f35b6104d260048036038101906104cd91906124c0565b6110a9565b6040516104df9190613010565b60405180910390f35b6104f06110c1565b6040516104fd9190613010565b60405180910390f35b610520600480360381019061051b91906125d9565b6110df565b005b61052a611776565b6040516105379190613010565b60405180910390f35b61054861177c565b6040516105559190613010565b60405180910390f35b610566611782565b6040516105739190613010565b60405180910390f35b610596600480360381019061059191906124e9565b611790565b6040516105a39190613010565b60405180910390f35b6105c660048036038101906105c1919061262b565b611817565b005b6105d0611950565b6040516105dd9190613010565b60405180910390f35b6105ee611956565b6040516105fb9190612b66565b60405180910390f35b61061e600480360381019061061991906124c0565b61196e565b005b610628611a66565b6040516106359190612b66565b60405180910390f35b60606003805461064d90613262565b80601f016020809104026020016040519081016040528092919081815260200182805461067990613262565b80156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b5050505050905090565b600d5481565b60006106ea6106e3611a6c565b8484611a74565b6001905092915050565b6106fc611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661071a610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790612ed0565b60405180910390fd5b600d5443116107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab90612ef0565b60405180910390fd5b600e60019054906101000a900460ff1615610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612df0565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108619190612b66565b60206040518083038186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612602565b905060008111156109ad57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b815260040161091b929190612bb8565b602060405180830381600087803b15801561093557600080fd5b505af1158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d91906125b0565b6109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390612dd0565b60405180910390fd5b5b6001600e60016101000a81548160ff0219169083151502179055507f9a8f4822fe4ad52cc3445484f82c26e10bd1498f7025c454e95fb3b4ce6e70a8816040516109f79190613010565b60405180910390a150565b600e60009054906101000a900460ff1681565b6000600254905090565b600e60019054906101000a900460ff1681565b6000610a3f848484611c3f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8a611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190612eb0565b60405180910390fd5b610b1e85610b16611a6c565b858403611a74565b60019150509392505050565b60006012905090565b6000610bd5610b40611a6c565b848460016000610b4e611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd091906130a1565b611a74565b6001905092915050565b600c5481565b6105dc81565b681b1ae4d6e2ef50000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c48611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610c66610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390612ed0565b60405180910390fd5b610cc66000611ec0565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cf6611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610d14610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612ed0565b60405180910390fd5b600c544310610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590612d30565b60405180910390fd5b814310610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612e10565b60405180910390fd5b808210610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612d30565b60405180910390fd5b600360186105dc610e439190613128565b610e4d9190613128565b8282610e599190613182565b11610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090612e90565b60405180910390fd5b81600c8190555080600d819055507f8774aa9221f02a7971c04902013456be92b6a521a2347a44ec6610e4b9a5d8fc8282604051610ed892919061302b565b60405180910390a15050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f1d90613262565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4990613262565b8015610f965780601f10610f6b57610100808354040283529160200191610f96565b820191906000526020600020905b815481529060010190602001808311610f7957829003601f168201915b5050505050905090565b60008060016000610faf611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390612fd0565b60405180910390fd5b611080611077611a6c565b85858403611a74565b600191505092915050565b600061109f611098611a6c565b8484611c3f565b6001905092915050565b600f6020528060005260406000206000915090505481565b600360186105dc6110d29190613128565b6110dc9190613128565b81565b60026005541415611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90612fb0565b60405180910390fd5b6002600581905550600c54431015611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990612e50565b60405180910390fd5b600d5443106111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90612cd0565b60405180910390fd5b6000600954116111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290612c70565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112589190612b66565b60206040518083038186803b15801561127057600080fd5b505afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190612602565b116112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612f70565b60405180910390fd5b6000811161132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612cb0565b60405180910390fd5b600b54811115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790612d70565b60405180910390fd5b681b1ae4d6e2ef500000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612e30565b60405180910390fd5b60006e13426172c74d822b878fe800000000600a5464e8d4a51000846114219190613128565b61142b9190613128565b61143591906130f7565b905080600954101561148057600954905064e8d4a510006d314dc6448d9338c15b0a00000000600a54836114699190613128565b61147391906130f7565b61147d91906130f7565b91505b600081116114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90612db0565b60405180910390fd5b6009548111156114fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115579190612b66565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190612602565b8111156115dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b61162a3382600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f869092919063ffffffff16565b61168d33738f78c64e2d876e0cfc72374a9fa9ef3730082c0484600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661200c909392919063ffffffff16565b8060095461169b9190613182565b60098190555080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec91906130a1565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fa313f04d77b0e727bf76d38bae7d3033b2cc40867e3ff941d13af1d5991cb62133838360405161176293929190612be1565b60405180910390a150600160058190555050565b600a5481565b600b5481565b690fe1c215e8f838e0000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61181f611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661183d610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90612ed0565b60405180910390fd5b600e60009054906101000a900460ff16156118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90612e70565b60405180910390fd5b600082116118f057600080fd5b6001600e60006101000a81548160ff0219169083151502179055506119158183612095565b7fd300bf0c586c8fc319aaa4417532afeb02bde1aba5fc709471c0e9f0843884d4826040516119449190613010565b60405180910390a15050565b60095481565b738f78c64e2d876e0cfc72374a9fa9ef3730082c0481565b611976611a6c565b73ffffffffffffffffffffffffffffffffffffffff16611994610ee4565b73ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190612ed0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190612cf0565b60405180910390fd5b611a6381611ec0565b50565b61dead81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90612d10565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c329190613010565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690612f10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690612c90565b60405180910390fd5b611d2a8383836121f5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790612d50565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4391906130a1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea79190613010565b60405180910390a3611eba8484846121fa565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120078363a9059cbb60e01b8484604051602401611fa5929190612bb8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ff565b505050565b61208f846323b872dd60e01b85858560405160240161202d93929190612b81565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ff565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90612ff0565b60405180910390fd5b612111600083836121f5565b806002600082825461212391906130a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461217891906130a1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121dd9190613010565b60405180910390a36121f1600083836121fa565b5050565b505050565b505050565b6000612261826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122c69092919063ffffffff16565b90506000815111156122c1578080602001905181019061228191906125b0565b6122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790612f90565b60405180910390fd5b5b505050565b60606122d584846000856122de565b90509392505050565b606082471015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90612d90565b60405180910390fd5b61232c856123f2565b61236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236290612f50565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123949190612b4f565b60006040518083038185875af1925050503d80600081146123d1576040519150601f19603f3d011682016040523d82523d6000602084013e6123d6565b606091505b50915091506123e6828286612405565b92505050949350505050565b600080823b905060008111915050919050565b6060831561241557829050612465565b6000835111156124285782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c9190612c4e565b60405180910390fd5b9392505050565b60008135905061247b81613953565b92915050565b6000815190506124908161396a565b92915050565b6000813590506124a581613981565b92915050565b6000815190506124ba81613981565b92915050565b6000602082840312156124d257600080fd5b60006124e08482850161246c565b91505092915050565b600080604083850312156124fc57600080fd5b600061250a8582860161246c565b925050602061251b8582860161246c565b9150509250929050565b60008060006060848603121561253a57600080fd5b60006125488682870161246c565b93505060206125598682870161246c565b925050604061256a86828701612496565b9150509250925092565b6000806040838503121561258757600080fd5b60006125958582860161246c565b92505060206125a685828601612496565b9150509250929050565b6000602082840312156125c257600080fd5b60006125d084828501612481565b91505092915050565b6000602082840312156125eb57600080fd5b60006125f984828501612496565b91505092915050565b60006020828403121561261457600080fd5b6000612622848285016124ab565b91505092915050565b6000806040838503121561263e57600080fd5b600061264c85828601612496565b925050602061265d8582860161246c565b9150509250929050565b6000806040838503121561267a57600080fd5b600061268885828601612496565b925050602061269985828601612496565b9150509250929050565b6126ac816131b6565b82525050565b6126bb816131c8565b82525050565b60006126cc8261306f565b6126d68185613085565b93506126e681856020860161322f565b80840191505092915050565b6126fb8161320b565b82525050565b600061270c8261307a565b6127168185613090565b935061272681856020860161322f565b61272f81613321565b840191505092915050565b6000612747600283613090565b915061275282613332565b602082019050919050565b600061276a602383613090565b91506127758261335b565b604082019050919050565b600061278d600283613090565b9150612798826133aa565b602082019050919050565b60006127b0600283613090565b91506127bb826133d3565b602082019050919050565b60006127d3602683613090565b91506127de826133fc565b604082019050919050565b60006127f6602283613090565b91506128018261344b565b604082019050919050565b6000612819600283613090565b91506128248261349a565b602082019050919050565b600061283c602683613090565b9150612847826134c3565b604082019050919050565b600061285f600283613090565b915061286a82613512565b602082019050919050565b6000612882602683613090565b915061288d8261353b565b604082019050919050565b60006128a5600283613090565b91506128b08261358a565b602082019050919050565b60006128c8600383613090565b91506128d3826135b3565b602082019050919050565b60006128eb600383613090565b91506128f6826135dc565b602082019050919050565b600061290e600383613090565b915061291982613605565b602082019050919050565b6000612931600283613090565b915061293c8261362e565b602082019050919050565b6000612954600283613090565b915061295f82613657565b602082019050919050565b6000612977600383613090565b915061298282613680565b602082019050919050565b600061299a600383613090565b91506129a5826136a9565b602082019050919050565b60006129bd602883613090565b91506129c8826136d2565b604082019050919050565b60006129e0602083613090565b91506129eb82613721565b602082019050919050565b6000612a03600383613090565b9150612a0e8261374a565b602082019050919050565b6000612a26602583613090565b9150612a3182613773565b604082019050919050565b6000612a49602483613090565b9150612a54826137c2565b604082019050919050565b6000612a6c601d83613090565b9150612a7782613811565b602082019050919050565b6000612a8f600283613090565b9150612a9a8261383a565b602082019050919050565b6000612ab2602a83613090565b9150612abd82613863565b604082019050919050565b6000612ad5601f83613090565b9150612ae0826138b2565b602082019050919050565b6000612af8602583613090565b9150612b03826138db565b604082019050919050565b6000612b1b601f83613090565b9150612b268261392a565b602082019050919050565b612b3a816131f4565b82525050565b612b49816131fe565b82525050565b6000612b5b82846126c1565b915081905092915050565b6000602082019050612b7b60008301846126a3565b92915050565b6000606082019050612b9660008301866126a3565b612ba360208301856126a3565b612bb06040830184612b31565b949350505050565b6000604082019050612bcd60008301856126a3565b612bda6020830184612b31565b9392505050565b6000606082019050612bf660008301866126a3565b612c036020830185612b31565b612c106040830184612b31565b949350505050565b6000602082019050612c2d60008301846126b2565b92915050565b6000602082019050612c4860008301846126f2565b92915050565b60006020820190508181036000830152612c688184612701565b905092915050565b60006020820190508181036000830152612c898161273a565b9050919050565b60006020820190508181036000830152612ca98161275d565b9050919050565b60006020820190508181036000830152612cc981612780565b9050919050565b60006020820190508181036000830152612ce9816127a3565b9050919050565b60006020820190508181036000830152612d09816127c6565b9050919050565b60006020820190508181036000830152612d29816127e9565b9050919050565b60006020820190508181036000830152612d498161280c565b9050919050565b60006020820190508181036000830152612d698161282f565b9050919050565b60006020820190508181036000830152612d8981612852565b9050919050565b60006020820190508181036000830152612da981612875565b9050919050565b60006020820190508181036000830152612dc981612898565b9050919050565b60006020820190508181036000830152612de9816128bb565b9050919050565b60006020820190508181036000830152612e09816128de565b9050919050565b60006020820190508181036000830152612e2981612901565b9050919050565b60006020820190508181036000830152612e4981612924565b9050919050565b60006020820190508181036000830152612e6981612947565b9050919050565b60006020820190508181036000830152612e898161296a565b9050919050565b60006020820190508181036000830152612ea98161298d565b9050919050565b60006020820190508181036000830152612ec9816129b0565b9050919050565b60006020820190508181036000830152612ee9816129d3565b9050919050565b60006020820190508181036000830152612f09816129f6565b9050919050565b60006020820190508181036000830152612f2981612a19565b9050919050565b60006020820190508181036000830152612f4981612a3c565b9050919050565b60006020820190508181036000830152612f6981612a5f565b9050919050565b60006020820190508181036000830152612f8981612a82565b9050919050565b60006020820190508181036000830152612fa981612aa5565b9050919050565b60006020820190508181036000830152612fc981612ac8565b9050919050565b60006020820190508181036000830152612fe981612aeb565b9050919050565b6000602082019050818103600083015261300981612b0e565b9050919050565b60006020820190506130256000830184612b31565b92915050565b60006040820190506130406000830185612b31565b61304d6020830184612b31565b9392505050565b60006020820190506130696000830184612b40565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006130ac826131f4565b91506130b7836131f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130ec576130eb613294565b5b828201905092915050565b6000613102826131f4565b915061310d836131f4565b92508261311d5761311c6132c3565b5b828204905092915050565b6000613133826131f4565b915061313e836131f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561317757613176613294565b5b828202905092915050565b600061318d826131f4565b9150613198836131f4565b9250828210156131ab576131aa613294565b5b828203905092915050565b60006131c1826131d4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006132168261321d565b9050919050565b6000613228826131d4565b9050919050565b60005b8381101561324d578082015181840152602081019050613232565b8381111561325c576000848401525b50505050565b6000600282049050600182168061327a57607f821691505b6020821081141561328e5761328d6132f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531380000000000000000000000000000000000000000000000000000000000600082015250565b7f4531370000000000000000000000000000000000000000000000000000000000600082015250565b7f4531300000000000000000000000000000000000000000000000000000000000600082015250565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b7f4531330000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4531360000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61395c816131b6565b811461396757600080fd5b50565b613973816131c8565b811461397e57600080fd5b50565b61398a816131f4565b811461399557600080fd5b5056fea2646970667358221220f04e86834b1b9b267b63f8158032f40feaaa35d24e7922a4a50408d380efef6064736f6c634300080400330000000000000000000000000000000000000000000000000000000001228268000000000000000000000000000000000000000000000000000000000124c7a8
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80638a796bf61161011a578063c32f60d7116100ad578063e7cb6d451161007c578063e7cb6d45146105ac578063eafaeea9146105c8578063f015bc93146105e6578063f2fde38b14610604578063fccc281314610620576101fb565b8063c32f60d714610522578063d3ebb9de14610540578063dc49a82f1461055e578063dd62ed3e1461057c576101fb565b8063a9059cbb116100e9578063a9059cbb14610488578063a9badf2f146104b8578063b5ba3d49146104e8578063bfe2c56e14610506576101fb565b80638a796bf6146104005780638da5cb5b1461041c57806395d89b411461043a578063a457c2d714610458576101fb565b8063313ce567116101925780636301613d116101615780636301613d1461038a57806370a08231146103a8578063715018a6146103d857806389a30271146103e2576101fb565b8063313ce56714610300578063395093511461031e57806348cd4cb11461034e578063611bf8d01461036c576101fb565b8063122eba36116101ce578063122eba361461027657806318160ddd146102945780631dc4b809146102b257806323b872dd146102d0576101fb565b806306fdde0314610200578063083c63231461021e578063095ea7b31461023c5780630f2c976b1461026c575b600080fd5b61020861063e565b6040516102159190612c4e565b60405180910390f35b6102266106d0565b6040516102339190613010565b60405180910390f35b61025660048036038101906102519190612574565b6106d6565b6040516102639190612c18565b60405180910390f35b6102746106f4565b005b61027e610a02565b60405161028b9190612c18565b60405180910390f35b61029c610a15565b6040516102a99190613010565b60405180910390f35b6102ba610a1f565b6040516102c79190612c18565b60405180910390f35b6102ea60048036038101906102e59190612525565b610a32565b6040516102f79190612c18565b60405180910390f35b610308610b2a565b6040516103159190613054565b60405180910390f35b61033860048036038101906103339190612574565b610b33565b6040516103459190612c18565b60405180910390f35b610356610bdf565b6040516103639190613010565b60405180910390f35b610374610be5565b6040516103819190613010565b60405180910390f35b610392610beb565b60405161039f9190613010565b60405180910390f35b6103c260048036038101906103bd91906124c0565b610bf8565b6040516103cf9190613010565b60405180910390f35b6103e0610c40565b005b6103ea610cc8565b6040516103f79190612c33565b60405180910390f35b61041a60048036038101906104159190612667565b610cee565b005b610424610ee4565b6040516104319190612b66565b60405180910390f35b610442610f0e565b60405161044f9190612c4e565b60405180910390f35b610472600480360381019061046d9190612574565b610fa0565b60405161047f9190612c18565b60405180910390f35b6104a2600480360381019061049d9190612574565b61108b565b6040516104af9190612c18565b60405180910390f35b6104d260048036038101906104cd91906124c0565b6110a9565b6040516104df9190613010565b60405180910390f35b6104f06110c1565b6040516104fd9190613010565b60405180910390f35b610520600480360381019061051b91906125d9565b6110df565b005b61052a611776565b6040516105379190613010565b60405180910390f35b61054861177c565b6040516105559190613010565b60405180910390f35b610566611782565b6040516105739190613010565b60405180910390f35b610596600480360381019061059191906124e9565b611790565b6040516105a39190613010565b60405180910390f35b6105c660048036038101906105c1919061262b565b611817565b005b6105d0611950565b6040516105dd9190613010565b60405180910390f35b6105ee611956565b6040516105fb9190612b66565b60405180910390f35b61061e600480360381019061061991906124c0565b61196e565b005b610628611a66565b6040516106359190612b66565b60405180910390f35b60606003805461064d90613262565b80601f016020809104026020016040519081016040528092919081815260200182805461067990613262565b80156106c65780601f1061069b576101008083540402835291602001916106c6565b820191906000526020600020905b8154815290600101906020018083116106a957829003601f168201915b5050505050905090565b600d5481565b60006106ea6106e3611a6c565b8484611a74565b6001905092915050565b6106fc611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661071a610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076790612ed0565b60405180910390fd5b600d5443116107b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ab90612ef0565b60405180910390fd5b600e60019054906101000a900460ff1615610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612df0565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108619190612b66565b60206040518083038186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190612602565b905060008111156109ad57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b815260040161091b929190612bb8565b602060405180830381600087803b15801561093557600080fd5b505af1158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d91906125b0565b6109ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a390612dd0565b60405180910390fd5b5b6001600e60016101000a81548160ff0219169083151502179055507f9a8f4822fe4ad52cc3445484f82c26e10bd1498f7025c454e95fb3b4ce6e70a8816040516109f79190613010565b60405180910390a150565b600e60009054906101000a900460ff1681565b6000600254905090565b600e60019054906101000a900460ff1681565b6000610a3f848484611c3f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8a611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0190612eb0565b60405180910390fd5b610b1e85610b16611a6c565b858403611a74565b60019150509392505050565b60006012905090565b6000610bd5610b40611a6c565b848460016000610b4e611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd091906130a1565b611a74565b6001905092915050565b600c5481565b6105dc81565b681b1ae4d6e2ef50000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c48611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610c66610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390612ed0565b60405180910390fd5b610cc66000611ec0565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cf6611a6c565b73ffffffffffffffffffffffffffffffffffffffff16610d14610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612ed0565b60405180910390fd5b600c544310610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590612d30565b60405180910390fd5b814310610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de790612e10565b60405180910390fd5b808210610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612d30565b60405180910390fd5b600360186105dc610e439190613128565b610e4d9190613128565b8282610e599190613182565b11610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090612e90565b60405180910390fd5b81600c8190555080600d819055507f8774aa9221f02a7971c04902013456be92b6a521a2347a44ec6610e4b9a5d8fc8282604051610ed892919061302b565b60405180910390a15050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f1d90613262565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4990613262565b8015610f965780601f10610f6b57610100808354040283529160200191610f96565b820191906000526020600020905b815481529060010190602001808311610f7957829003601f168201915b5050505050905090565b60008060016000610faf611a6c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390612fd0565b60405180910390fd5b611080611077611a6c565b85858403611a74565b600191505092915050565b600061109f611098611a6c565b8484611c3f565b6001905092915050565b600f6020528060005260406000206000915090505481565b600360186105dc6110d29190613128565b6110dc9190613128565b81565b60026005541415611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90612fb0565b60405180910390fd5b6002600581905550600c54431015611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990612e50565b60405180910390fd5b600d5443106111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90612cd0565b60405180910390fd5b6000600954116111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290612c70565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112589190612b66565b60206040518083038186803b15801561127057600080fd5b505afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190612602565b116112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612f70565b60405180910390fd5b6000811161132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290612cb0565b60405180910390fd5b600b54811115611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790612d70565b60405180910390fd5b681b1ae4d6e2ef500000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612e30565b60405180910390fd5b60006e13426172c74d822b878fe800000000600a5464e8d4a51000846114219190613128565b61142b9190613128565b61143591906130f7565b905080600954101561148057600954905064e8d4a510006d314dc6448d9338c15b0a00000000600a54836114699190613128565b61147391906130f7565b61147d91906130f7565b91505b600081116114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90612db0565b60405180910390fd5b6009548111156114fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115579190612b66565b60206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a79190612602565b8111156115dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b61162a3382600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f869092919063ffffffff16565b61168d33738f78c64e2d876e0cfc72374a9fa9ef3730082c0484600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661200c909392919063ffffffff16565b8060095461169b9190613182565b60098190555080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec91906130a1565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fa313f04d77b0e727bf76d38bae7d3033b2cc40867e3ff941d13af1d5991cb62133838360405161176293929190612be1565b60405180910390a150600160058190555050565b600a5481565b600b5481565b690fe1c215e8f838e0000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61181f611a6c565b73ffffffffffffffffffffffffffffffffffffffff1661183d610ee4565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90612ed0565b60405180910390fd5b600e60009054906101000a900460ff16156118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da90612e70565b60405180910390fd5b600082116118f057600080fd5b6001600e60006101000a81548160ff0219169083151502179055506119158183612095565b7fd300bf0c586c8fc319aaa4417532afeb02bde1aba5fc709471c0e9f0843884d4826040516119449190613010565b60405180910390a15050565b60095481565b738f78c64e2d876e0cfc72374a9fa9ef3730082c0481565b611976611a6c565b73ffffffffffffffffffffffffffffffffffffffff16611994610ee4565b73ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190612ed0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5190612cf0565b60405180910390fd5b611a6381611ec0565b50565b61dead81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90612d10565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c329190613010565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690612f10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690612c90565b60405180910390fd5b611d2a8383836121f5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790612d50565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4391906130a1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea79190613010565b60405180910390a3611eba8484846121fa565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120078363a9059cbb60e01b8484604051602401611fa5929190612bb8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ff565b505050565b61208f846323b872dd60e01b85858560405160240161202d93929190612b81565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ff565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90612ff0565b60405180910390fd5b612111600083836121f5565b806002600082825461212391906130a1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461217891906130a1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121dd9190613010565b60405180910390a36121f1600083836121fa565b5050565b505050565b505050565b6000612261826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122c69092919063ffffffff16565b90506000815111156122c1578080602001905181019061228191906125b0565b6122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790612f90565b60405180910390fd5b5b505050565b60606122d584846000856122de565b90509392505050565b606082471015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90612d90565b60405180910390fd5b61232c856123f2565b61236b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236290612f50565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123949190612b4f565b60006040518083038185875af1925050503d80600081146123d1576040519150601f19603f3d011682016040523d82523d6000602084013e6123d6565b606091505b50915091506123e6828286612405565b92505050949350505050565b600080823b905060008111915050919050565b6060831561241557829050612465565b6000835111156124285782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c9190612c4e565b60405180910390fd5b9392505050565b60008135905061247b81613953565b92915050565b6000815190506124908161396a565b92915050565b6000813590506124a581613981565b92915050565b6000815190506124ba81613981565b92915050565b6000602082840312156124d257600080fd5b60006124e08482850161246c565b91505092915050565b600080604083850312156124fc57600080fd5b600061250a8582860161246c565b925050602061251b8582860161246c565b9150509250929050565b60008060006060848603121561253a57600080fd5b60006125488682870161246c565b93505060206125598682870161246c565b925050604061256a86828701612496565b9150509250925092565b6000806040838503121561258757600080fd5b60006125958582860161246c565b92505060206125a685828601612496565b9150509250929050565b6000602082840312156125c257600080fd5b60006125d084828501612481565b91505092915050565b6000602082840312156125eb57600080fd5b60006125f984828501612496565b91505092915050565b60006020828403121561261457600080fd5b6000612622848285016124ab565b91505092915050565b6000806040838503121561263e57600080fd5b600061264c85828601612496565b925050602061265d8582860161246c565b9150509250929050565b6000806040838503121561267a57600080fd5b600061268885828601612496565b925050602061269985828601612496565b9150509250929050565b6126ac816131b6565b82525050565b6126bb816131c8565b82525050565b60006126cc8261306f565b6126d68185613085565b93506126e681856020860161322f565b80840191505092915050565b6126fb8161320b565b82525050565b600061270c8261307a565b6127168185613090565b935061272681856020860161322f565b61272f81613321565b840191505092915050565b6000612747600283613090565b915061275282613332565b602082019050919050565b600061276a602383613090565b91506127758261335b565b604082019050919050565b600061278d600283613090565b9150612798826133aa565b602082019050919050565b60006127b0600283613090565b91506127bb826133d3565b602082019050919050565b60006127d3602683613090565b91506127de826133fc565b604082019050919050565b60006127f6602283613090565b91506128018261344b565b604082019050919050565b6000612819600283613090565b91506128248261349a565b602082019050919050565b600061283c602683613090565b9150612847826134c3565b604082019050919050565b600061285f600283613090565b915061286a82613512565b602082019050919050565b6000612882602683613090565b915061288d8261353b565b604082019050919050565b60006128a5600283613090565b91506128b08261358a565b602082019050919050565b60006128c8600383613090565b91506128d3826135b3565b602082019050919050565b60006128eb600383613090565b91506128f6826135dc565b602082019050919050565b600061290e600383613090565b915061291982613605565b602082019050919050565b6000612931600283613090565b915061293c8261362e565b602082019050919050565b6000612954600283613090565b915061295f82613657565b602082019050919050565b6000612977600383613090565b915061298282613680565b602082019050919050565b600061299a600383613090565b91506129a5826136a9565b602082019050919050565b60006129bd602883613090565b91506129c8826136d2565b604082019050919050565b60006129e0602083613090565b91506129eb82613721565b602082019050919050565b6000612a03600383613090565b9150612a0e8261374a565b602082019050919050565b6000612a26602583613090565b9150612a3182613773565b604082019050919050565b6000612a49602483613090565b9150612a54826137c2565b604082019050919050565b6000612a6c601d83613090565b9150612a7782613811565b602082019050919050565b6000612a8f600283613090565b9150612a9a8261383a565b602082019050919050565b6000612ab2602a83613090565b9150612abd82613863565b604082019050919050565b6000612ad5601f83613090565b9150612ae0826138b2565b602082019050919050565b6000612af8602583613090565b9150612b03826138db565b604082019050919050565b6000612b1b601f83613090565b9150612b268261392a565b602082019050919050565b612b3a816131f4565b82525050565b612b49816131fe565b82525050565b6000612b5b82846126c1565b915081905092915050565b6000602082019050612b7b60008301846126a3565b92915050565b6000606082019050612b9660008301866126a3565b612ba360208301856126a3565b612bb06040830184612b31565b949350505050565b6000604082019050612bcd60008301856126a3565b612bda6020830184612b31565b9392505050565b6000606082019050612bf660008301866126a3565b612c036020830185612b31565b612c106040830184612b31565b949350505050565b6000602082019050612c2d60008301846126b2565b92915050565b6000602082019050612c4860008301846126f2565b92915050565b60006020820190508181036000830152612c688184612701565b905092915050565b60006020820190508181036000830152612c898161273a565b9050919050565b60006020820190508181036000830152612ca98161275d565b9050919050565b60006020820190508181036000830152612cc981612780565b9050919050565b60006020820190508181036000830152612ce9816127a3565b9050919050565b60006020820190508181036000830152612d09816127c6565b9050919050565b60006020820190508181036000830152612d29816127e9565b9050919050565b60006020820190508181036000830152612d498161280c565b9050919050565b60006020820190508181036000830152612d698161282f565b9050919050565b60006020820190508181036000830152612d8981612852565b9050919050565b60006020820190508181036000830152612da981612875565b9050919050565b60006020820190508181036000830152612dc981612898565b9050919050565b60006020820190508181036000830152612de9816128bb565b9050919050565b60006020820190508181036000830152612e09816128de565b9050919050565b60006020820190508181036000830152612e2981612901565b9050919050565b60006020820190508181036000830152612e4981612924565b9050919050565b60006020820190508181036000830152612e6981612947565b9050919050565b60006020820190508181036000830152612e898161296a565b9050919050565b60006020820190508181036000830152612ea98161298d565b9050919050565b60006020820190508181036000830152612ec9816129b0565b9050919050565b60006020820190508181036000830152612ee9816129d3565b9050919050565b60006020820190508181036000830152612f09816129f6565b9050919050565b60006020820190508181036000830152612f2981612a19565b9050919050565b60006020820190508181036000830152612f4981612a3c565b9050919050565b60006020820190508181036000830152612f6981612a5f565b9050919050565b60006020820190508181036000830152612f8981612a82565b9050919050565b60006020820190508181036000830152612fa981612aa5565b9050919050565b60006020820190508181036000830152612fc981612ac8565b9050919050565b60006020820190508181036000830152612fe981612aeb565b9050919050565b6000602082019050818103600083015261300981612b0e565b9050919050565b60006020820190506130256000830184612b31565b92915050565b60006040820190506130406000830185612b31565b61304d6020830184612b31565b9392505050565b60006020820190506130696000830184612b40565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006130ac826131f4565b91506130b7836131f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130ec576130eb613294565b5b828201905092915050565b6000613102826131f4565b915061310d836131f4565b92508261311d5761311c6132c3565b5b828204905092915050565b6000613133826131f4565b915061313e836131f4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561317757613176613294565b5b828202905092915050565b600061318d826131f4565b9150613198836131f4565b9250828210156131ab576131aa613294565b5b828203905092915050565b60006131c1826131d4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006132168261321d565b9050919050565b6000613228826131d4565b9050919050565b60005b8381101561324d578082015181840152602081019050613232565b8381111561325c576000848401525b50505050565b6000600282049050600182168061327a57607f821691505b6020821081141561328e5761328d6132f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531380000000000000000000000000000000000000000000000000000000000600082015250565b7f4531370000000000000000000000000000000000000000000000000000000000600082015250565b7f4531300000000000000000000000000000000000000000000000000000000000600082015250565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b7f4531330000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4531360000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61395c816131b6565b811461396757600080fd5b50565b613973816131c8565b811461397e57600080fd5b50565b61398a816131f4565b811461399557600080fd5b5056fea2646970667358221220f04e86834b1b9b267b63f8158032f40feaaa35d24e7922a4a50408d380efef6064736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000001228268000000000000000000000000000000000000000000000000000000000124c7a8
-----Decoded View---------------
Arg [0] : _startBlock (uint256): 19038824
Arg [1] : _endBlock (uint256): 19187624
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000001228268
Arg [1] : 000000000000000000000000000000000000000000000000000000000124c7a8
Deployed Bytecode Sourcemap
35264:4588:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6439:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36323:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8606:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39376:471;;;:::i;:::-;;36355:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7559:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36388:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9257:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7401:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10158:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36285:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36148:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35831:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32558:94;;;:::i;:::-;;35574:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38559:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31907:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6658:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10876:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8070:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36431:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36198:66;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36990:1561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36003:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36068:55;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35710:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8308:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39045:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35923:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35393:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32807:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35484:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6439:100;6493:13;6526:5;6519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6439:100;:::o;36323:23::-;;;;:::o;8606:169::-;8689:4;8706:39;8715:12;:10;:12::i;:::-;8729:7;8738:6;8706:8;:39::i;:::-;8763:4;8756:11;;8606:169;;;;:::o;39376:471::-;32138:12;:10;:12::i;:::-;32127:23;;:7;:5;:7::i;:::-;:23;;;32119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39474:8:::1;;39459:12;:23;39451:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39510:22;;;;;;;;;;;39509:23;39501:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39553:25;39582:12;;;;;;;;;;;:22;;;39613:4;39582:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39553:66;;39656:1;39636:17;:21;39632:110;;;39680:12;;;;;;;;;;;:21;;;35523:42;39716:17;39680:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39672:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39632:110;39778:4;39753:22;;:29;;;;;;;;;;;;;;;;;;39800:39;39821:17;39800:39;;;;;;:::i;:::-;;;;;;;;32198:1;39376:471::o:0;36355:26::-;;;;;;;;;;;;;:::o;7559:108::-;7620:7;7647:12;;7640:19;;7559:108;:::o;36388:34::-;;;;;;;;;;;;;:::o;9257:492::-;9397:4;9414:36;9424:6;9432:9;9443:6;9414:9;:36::i;:::-;9463:24;9490:11;:19;9502:6;9490:19;;;;;;;;;;;;;;;:33;9510:12;:10;:12::i;:::-;9490:33;;;;;;;;;;;;;;;;9463:60;;9562:6;9542:16;:26;;9534:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9649:57;9658:6;9666:12;:10;:12::i;:::-;9699:6;9680:16;:25;9649:8;:57::i;:::-;9737:4;9730:11;;;9257:492;;;;;:::o;7401:93::-;7459:5;7484:2;7477:9;;7401:93;:::o;10158:215::-;10246:4;10263:80;10272:12;:10;:12::i;:::-;10286:7;10332:10;10295:11;:25;10307:12;:10;:12::i;:::-;10295:25;;;;;;;;;;;;;;;:34;10321:7;10295:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10263:8;:80::i;:::-;10361:4;10354:11;;10158:215;;;;:::o;36285:25::-;;;;:::o;36148:43::-;36187:4;36148:43;:::o;35831:68::-;35883:16;35831:68;:::o;7730:127::-;7804:7;7831:9;:18;7841:7;7831:18;;;;;;;;;;;;;;;;7824:25;;7730:127;;;:::o;32558:94::-;32138:12;:10;:12::i;:::-;32127:23;;:7;:5;:7::i;:::-;:23;;;32119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32623:21:::1;32641:1;32623:9;:21::i;:::-;32558:94::o:0;35574:71::-;;;;;;;;;;;;;:::o;38559:478::-;32138:12;:10;:12::i;:::-;32127:23;;:7;:5;:7::i;:::-;:23;;;32119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38681:10:::1;;38666:12;:25;38658:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;38732:14;38717:12;:29;38709:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38790:12;38773:14;:29;38765:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;36263:1;36258:2;36187:4;36243:17;;;;:::i;:::-;:21;;;;:::i;:::-;38844:14;38829:12;:29;;;;:::i;:::-;38828:52;38820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38914:14;38901:10;:27;;;;38952:12;38939:8;:25;;;;38982:47;39000:14;39016:12;38982:47;;;;;;;:::i;:::-;;;;;;;;38559:478:::0;;:::o;31907:87::-;31953:7;31980:6;;;;;;;;;;;31973:13;;31907:87;:::o;6658:104::-;6714:13;6747:7;6740:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6658:104;:::o;10876:413::-;10969:4;10986:24;11013:11;:25;11025:12;:10;:12::i;:::-;11013:25;;;;;;;;;;;;;;;:34;11039:7;11013:34;;;;;;;;;;;;;;;;10986:61;;11086:15;11066:16;:35;;11058:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11179:67;11188:12;:10;:12::i;:::-;11202:7;11230:15;11211:16;:34;11179:8;:67::i;:::-;11277:4;11270:11;;;10876:413;;;;:::o;8070:175::-;8156:4;8173:42;8183:12;:10;:12::i;:::-;8197:9;8208:6;8173:9;:42::i;:::-;8233:4;8226:11;;8070:175;;;;:::o;36431:53::-;;;;;;;;;;;;;;;;;:::o;36198:66::-;36263:1;36258:2;36187:4;36243:17;;;;:::i;:::-;:21;;;;:::i;:::-;36198:66;:::o;36990:1561::-;29962:1;30558:7;;:19;;30550:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29962:1;30691:7;:18;;;;37087:10:::1;;37071:12;:26;;37063:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;37138:8;;37123:12;:23;37115:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37191:1;37172:16;;:20;37164:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;37258:1;37218:12;;;;;;;;;;;:22;;;37249:4;37218:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;37210:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37298:1;37285:10;:14;37277:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;37339:10;;37325;:24;;37317:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;35883:16;37375:18;:30;37394:10;37375:30;;;;;;;;;;;;;;;;:59;;37367:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37454:29;37529:4;37513:12;;37501:8;37487:10;:23;;;;:::i;:::-;:38;;;;:::i;:::-;37486:47;;;;:::i;:::-;37454:79;;37630:21;37611:16;;:40;37607:207;;;37701:16;;37677:40;;37796:4;37787;37771:12;;37747:21;:36;;;;:::i;:::-;37746:45;;;;:::i;:::-;37745:55;;;;:::i;:::-;37732:68;;37607:207;37858:1;37834:21;:25;37826:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;37968:16;;37943:21;:41;;37936:49;;;;;;;;;;;;38028:12;;;;;;;;;;;:22;;;38059:4;38028:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38003:21;:62;;37996:70;;;;;;;;;;;;38119:60;38145:10;38157:21;38119:12;;;;;;;;;;;:25;;;;:60;;;;;:::i;:::-;38228:62;38250:10;35435:42;38279:10;38228:4;;;;;;;;;;;:21;;;;:62;;;;;;:::i;:::-;38341:21;38322:16;;:40;;;;:::i;:::-;38303:16;:59;;;;38439:21;38406:18;:30;38425:10;38406:30;;;;;;;;;;;;;;;;:54;;;;:::i;:::-;38373:18;:30;38392:10;38373:30;;;;;;;;;;;;;;;:87;;;;38478:63;38495:10;38507;38519:21;38478:63;;;;;;;;:::i;:::-;;;;;;;;30722:1;29918::::0;30870:7;:22;;;;36990:1561;:::o;36003:45::-;;;;:::o;36068:55::-;;;;:::o;35710:87::-;35770:27;35710:87;:::o;8308:151::-;8397:7;8424:11;:18;8436:5;8424:18;;;;;;;;;;;;;;;:27;8443:7;8424:27;;;;;;;;;;;;;;;;8417:34;;8308:151;;;;:::o;39045:323::-;32138:12;:10;:12::i;:::-;32127:23;;:7;:5;:7::i;:::-;:23;;;32119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39166:14:::1;;;;;;;;;;;39165:15;39157:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;39222:1;39207:12;:16;39199:25;;;::::0;::::1;;39254:4;39237:14;;:21;;;;;;;;;;;;;;;;;;39269:38;39275:17;39294:12;39269:5;:38::i;:::-;39323:37;39347:12;39323:37;;;;;;:::i;:::-;;;;;;;;39045:323:::0;;:::o;35923:67::-;;;;:::o;35393:84::-;35435:42;35393:84;:::o;32807:192::-;32138:12;:10;:12::i;:::-;32127:23;;:7;:5;:7::i;:::-;:23;;;32119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32916:1:::1;32896:22;;:8;:22;;;;32888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32972:19;32982:8;32972:9;:19::i;:::-;32807:192:::0;:::o;35484:81::-;35523:42;35484:81;:::o;4161:98::-;4214:7;4241:10;4234:17;;4161:98;:::o;14560:380::-;14713:1;14696:19;;:5;:19;;;;14688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14794:1;14775:21;;:7;:21;;;;14767:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14878:6;14848:11;:18;14860:5;14848:18;;;;;;;;;;;;;;;:27;14867:7;14848:27;;;;;;;;;;;;;;;:36;;;;14916:7;14900:32;;14909:5;14900:32;;;14925:6;14900:32;;;;;;:::i;:::-;;;;;;;;14560:380;;;:::o;11779:733::-;11937:1;11919:20;;:6;:20;;;;11911:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12021:1;12000:23;;:9;:23;;;;11992:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12076:47;12097:6;12105:9;12116:6;12076:20;:47::i;:::-;12136:21;12160:9;:17;12170:6;12160:17;;;;;;;;;;;;;;;;12136:41;;12213:6;12196:13;:23;;12188:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12334:6;12318:13;:22;12298:9;:17;12308:6;12298:17;;;;;;;;;;;;;;;:42;;;;12386:6;12362:9;:20;12372:9;12362:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12427:9;12410:35;;12419:6;12410:35;;;12438:6;12410:35;;;;;;:::i;:::-;;;;;;;;12458:46;12478:6;12486:9;12497:6;12458:19;:46::i;:::-;11779:733;;;;:::o;33007:173::-;33063:16;33082:6;;;;;;;;;;;33063:25;;33108:8;33099:6;;:17;;;;;;;;;;;;;;;;;;33163:8;33132:40;;33153:8;33132:40;;;;;;;;;;;;33007:173;;:::o;24915:211::-;25032:86;25052:5;25082:23;;;25107:2;25111:5;25059:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25032:19;:86::i;:::-;24915:211;;;:::o;25134:248::-;25278:96;25298:5;25328:27;;;25357:4;25363:2;25367:5;25305:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25278:19;:96::i;:::-;25134:248;;;;:::o;12799:399::-;12902:1;12883:21;;:7;:21;;;;12875:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12953:49;12982:1;12986:7;12995:6;12953:20;:49::i;:::-;13031:6;13015:12;;:22;;;;;;;:::i;:::-;;;;;;;;13070:6;13048:9;:18;13058:7;13048:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13113:7;13092:37;;13109:1;13092:37;;;13122:6;13092:37;;;;;;:::i;:::-;;;;;;;;13142:48;13170:1;13174:7;13183:6;13142:19;:48::i;:::-;12799:399;;:::o;15540:125::-;;;;:::o;16269:124::-;;;;:::o;27488:716::-;27912:23;27938:69;27966:4;27938:69;;;;;;;;;;;;;;;;;27946:5;27938:27;;;;:69;;;;;:::i;:::-;27912:95;;28042:1;28022:10;:17;:21;28018:179;;;28119:10;28108:30;;;;;;;;;;;;:::i;:::-;28100:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28018:179;27488:716;;;:::o;19976:229::-;20113:12;20145:52;20167:6;20175:4;20181:1;20184:12;20145:21;:52::i;:::-;20138:59;;19976:229;;;;;:::o;21096:511::-;21266:12;21324:5;21299:21;:30;;21291:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;21391:18;21402:6;21391:10;:18::i;:::-;21383:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21457:12;21471:23;21498:6;:11;;21517:5;21524:4;21498:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21456:73;;;;21547:52;21565:7;21574:10;21586:12;21547:17;:52::i;:::-;21540:59;;;;21096:511;;;;;;:::o;17170:387::-;17230:4;17438:12;17505:7;17493:20;17485:28;;17548:1;17541:4;:8;17534:15;;;17170:387;;;:::o;23565:712::-;23715:12;23744:7;23740:530;;;23775:10;23768:17;;;;23740:530;23909:1;23889:10;:17;:21;23885:374;;;24087:10;24081:17;24148:15;24135:10;24131:2;24127:19;24120:44;24035:148;24230:12;24223:20;;;;;;;;;;;:::i;:::-;;;;;;;;23565:712;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:143::-;497:5;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;503:80;;;;:::o;589:262::-;648:6;697:2;685:9;676:7;672:23;668:32;665:2;;;713:1;710;703:12;665:2;756:1;781:53;826:7;817:6;806:9;802:22;781:53;:::i;:::-;771:63;;727:117;655:196;;;;:::o;857:407::-;925:6;933;982:2;970:9;961:7;957:23;953:32;950:2;;;998:1;995;988:12;950:2;1041:1;1066:53;1111:7;1102:6;1091:9;1087:22;1066:53;:::i;:::-;1056:63;;1012:117;1168:2;1194:53;1239:7;1230:6;1219:9;1215:22;1194:53;:::i;:::-;1184:63;;1139:118;940:324;;;;;:::o;1270:552::-;1347:6;1355;1363;1412:2;1400:9;1391:7;1387:23;1383:32;1380:2;;;1428:1;1425;1418:12;1380:2;1471:1;1496:53;1541:7;1532:6;1521:9;1517:22;1496:53;:::i;:::-;1486:63;;1442:117;1598:2;1624:53;1669:7;1660:6;1649:9;1645:22;1624:53;:::i;:::-;1614:63;;1569:118;1726:2;1752:53;1797:7;1788:6;1777:9;1773:22;1752:53;:::i;:::-;1742:63;;1697:118;1370:452;;;;;:::o;1828:407::-;1896:6;1904;1953:2;1941:9;1932:7;1928:23;1924:32;1921:2;;;1969:1;1966;1959:12;1921:2;2012:1;2037:53;2082:7;2073:6;2062:9;2058:22;2037:53;:::i;:::-;2027:63;;1983:117;2139:2;2165:53;2210:7;2201:6;2190:9;2186:22;2165:53;:::i;:::-;2155:63;;2110:118;1911:324;;;;;:::o;2241:278::-;2308:6;2357:2;2345:9;2336:7;2332:23;2328:32;2325:2;;;2373:1;2370;2363:12;2325:2;2416:1;2441:61;2494:7;2485:6;2474:9;2470:22;2441:61;:::i;:::-;2431:71;;2387:125;2315:204;;;;:::o;2525:262::-;2584:6;2633:2;2621:9;2612:7;2608:23;2604:32;2601:2;;;2649:1;2646;2639:12;2601:2;2692:1;2717:53;2762:7;2753:6;2742:9;2738:22;2717:53;:::i;:::-;2707:63;;2663:117;2591:196;;;;:::o;2793:284::-;2863:6;2912:2;2900:9;2891:7;2887:23;2883:32;2880:2;;;2928:1;2925;2918:12;2880:2;2971:1;2996:64;3052:7;3043:6;3032:9;3028:22;2996:64;:::i;:::-;2986:74;;2942:128;2870:207;;;;:::o;3083:407::-;3151:6;3159;3208:2;3196:9;3187:7;3183:23;3179:32;3176:2;;;3224:1;3221;3214:12;3176:2;3267:1;3292:53;3337:7;3328:6;3317:9;3313:22;3292:53;:::i;:::-;3282:63;;3238:117;3394:2;3420:53;3465:7;3456:6;3445:9;3441:22;3420:53;:::i;:::-;3410:63;;3365:118;3166:324;;;;;:::o;3496:407::-;3564:6;3572;3621:2;3609:9;3600:7;3596:23;3592:32;3589:2;;;3637:1;3634;3627:12;3589:2;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3807:2;3833:53;3878:7;3869:6;3858:9;3854:22;3833:53;:::i;:::-;3823:63;;3778:118;3579:324;;;;;:::o;3909:118::-;3996:24;4014:5;3996:24;:::i;:::-;3991:3;3984:37;3974:53;;:::o;4033:109::-;4114:21;4129:5;4114:21;:::i;:::-;4109:3;4102:34;4092:50;;:::o;4148:373::-;4252:3;4280:38;4312:5;4280:38;:::i;:::-;4334:88;4415:6;4410:3;4334:88;:::i;:::-;4327:95;;4431:52;4476:6;4471:3;4464:4;4457:5;4453:16;4431:52;:::i;:::-;4508:6;4503:3;4499:16;4492:23;;4256:265;;;;;:::o;4527:157::-;4627:50;4671:5;4627:50;:::i;:::-;4622:3;4615:63;4605:79;;:::o;4690:364::-;4778:3;4806:39;4839:5;4806:39;:::i;:::-;4861:71;4925:6;4920:3;4861:71;:::i;:::-;4854:78;;4941:52;4986:6;4981:3;4974:4;4967:5;4963:16;4941:52;:::i;:::-;5018:29;5040:6;5018:29;:::i;:::-;5013:3;5009:39;5002:46;;4782:272;;;;;:::o;5060:365::-;5202:3;5223:66;5287:1;5282:3;5223:66;:::i;:::-;5216:73;;5298:93;5387:3;5298:93;:::i;:::-;5416:2;5411:3;5407:12;5400:19;;5206:219;;;:::o;5431:366::-;5573:3;5594:67;5658:2;5653:3;5594:67;:::i;:::-;5587:74;;5670:93;5759:3;5670:93;:::i;:::-;5788:2;5783:3;5779:12;5772:19;;5577:220;;;:::o;5803:365::-;5945:3;5966:66;6030:1;6025:3;5966:66;:::i;:::-;5959:73;;6041:93;6130:3;6041:93;:::i;:::-;6159:2;6154:3;6150:12;6143:19;;5949:219;;;:::o;6174:365::-;6316:3;6337:66;6401:1;6396:3;6337:66;:::i;:::-;6330:73;;6412:93;6501:3;6412:93;:::i;:::-;6530:2;6525:3;6521:12;6514:19;;6320:219;;;:::o;6545:366::-;6687:3;6708:67;6772:2;6767:3;6708:67;:::i;:::-;6701:74;;6784:93;6873:3;6784:93;:::i;:::-;6902:2;6897:3;6893:12;6886:19;;6691:220;;;:::o;6917:366::-;7059:3;7080:67;7144:2;7139:3;7080:67;:::i;:::-;7073:74;;7156:93;7245:3;7156:93;:::i;:::-;7274:2;7269:3;7265:12;7258:19;;7063:220;;;:::o;7289:365::-;7431:3;7452:66;7516:1;7511:3;7452:66;:::i;:::-;7445:73;;7527:93;7616:3;7527:93;:::i;:::-;7645:2;7640:3;7636:12;7629:19;;7435:219;;;:::o;7660:366::-;7802:3;7823:67;7887:2;7882:3;7823:67;:::i;:::-;7816:74;;7899:93;7988:3;7899:93;:::i;:::-;8017:2;8012:3;8008:12;8001:19;;7806:220;;;:::o;8032:365::-;8174:3;8195:66;8259:1;8254:3;8195:66;:::i;:::-;8188:73;;8270:93;8359:3;8270:93;:::i;:::-;8388:2;8383:3;8379:12;8372:19;;8178:219;;;:::o;8403:366::-;8545:3;8566:67;8630:2;8625:3;8566:67;:::i;:::-;8559:74;;8642:93;8731:3;8642:93;:::i;:::-;8760:2;8755:3;8751:12;8744:19;;8549:220;;;:::o;8775:365::-;8917:3;8938:66;9002:1;8997:3;8938:66;:::i;:::-;8931:73;;9013:93;9102:3;9013:93;:::i;:::-;9131:2;9126:3;9122:12;9115:19;;8921:219;;;:::o;9146:365::-;9288:3;9309:66;9373:1;9368:3;9309:66;:::i;:::-;9302:73;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9292:219;;;:::o;9517:365::-;9659:3;9680:66;9744:1;9739:3;9680:66;:::i;:::-;9673:73;;9755:93;9844:3;9755:93;:::i;:::-;9873:2;9868:3;9864:12;9857:19;;9663:219;;;:::o;9888:365::-;10030:3;10051:66;10115:1;10110:3;10051:66;:::i;:::-;10044:73;;10126:93;10215:3;10126:93;:::i;:::-;10244:2;10239:3;10235:12;10228:19;;10034:219;;;:::o;10259:365::-;10401:3;10422:66;10486:1;10481:3;10422:66;:::i;:::-;10415:73;;10497:93;10586:3;10497:93;:::i;:::-;10615:2;10610:3;10606:12;10599:19;;10405:219;;;:::o;10630:365::-;10772:3;10793:66;10857:1;10852:3;10793:66;:::i;:::-;10786:73;;10868:93;10957:3;10868:93;:::i;:::-;10986:2;10981:3;10977:12;10970:19;;10776:219;;;:::o;11001:365::-;11143:3;11164:66;11228:1;11223:3;11164:66;:::i;:::-;11157:73;;11239:93;11328:3;11239:93;:::i;:::-;11357:2;11352:3;11348:12;11341:19;;11147:219;;;:::o;11372:365::-;11514:3;11535:66;11599:1;11594:3;11535:66;:::i;:::-;11528:73;;11610:93;11699:3;11610:93;:::i;:::-;11728:2;11723:3;11719:12;11712:19;;11518:219;;;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11889:220;;;:::o;12115:366::-;12257:3;12278:67;12342:2;12337:3;12278:67;:::i;:::-;12271:74;;12354:93;12443:3;12354:93;:::i;:::-;12472:2;12467:3;12463:12;12456:19;;12261:220;;;:::o;12487:365::-;12629:3;12650:66;12714:1;12709:3;12650:66;:::i;:::-;12643:73;;12725:93;12814:3;12725:93;:::i;:::-;12843:2;12838:3;12834:12;12827:19;;12633:219;;;:::o;12858:366::-;13000:3;13021:67;13085:2;13080:3;13021:67;:::i;:::-;13014:74;;13097:93;13186:3;13097:93;:::i;:::-;13215:2;13210:3;13206:12;13199:19;;13004:220;;;:::o;13230:366::-;13372:3;13393:67;13457:2;13452:3;13393:67;:::i;:::-;13386:74;;13469:93;13558:3;13469:93;:::i;:::-;13587:2;13582:3;13578:12;13571:19;;13376:220;;;:::o;13602:366::-;13744:3;13765:67;13829:2;13824:3;13765:67;:::i;:::-;13758:74;;13841:93;13930:3;13841:93;:::i;:::-;13959:2;13954:3;13950:12;13943:19;;13748:220;;;:::o;13974:365::-;14116:3;14137:66;14201:1;14196:3;14137:66;:::i;:::-;14130:73;;14212:93;14301:3;14212:93;:::i;:::-;14330:2;14325:3;14321:12;14314:19;;14120:219;;;:::o;14345:366::-;14487:3;14508:67;14572:2;14567:3;14508:67;:::i;:::-;14501:74;;14584:93;14673:3;14584:93;:::i;:::-;14702:2;14697:3;14693:12;14686:19;;14491:220;;;:::o;14717:366::-;14859:3;14880:67;14944:2;14939:3;14880:67;:::i;:::-;14873:74;;14956:93;15045:3;14956:93;:::i;:::-;15074:2;15069:3;15065:12;15058:19;;14863:220;;;:::o;15089:366::-;15231:3;15252:67;15316:2;15311:3;15252:67;:::i;:::-;15245:74;;15328:93;15417:3;15328:93;:::i;:::-;15446:2;15441:3;15437:12;15430:19;;15235:220;;;:::o;15461:366::-;15603:3;15624:67;15688:2;15683:3;15624:67;:::i;:::-;15617:74;;15700:93;15789:3;15700:93;:::i;:::-;15818:2;15813:3;15809:12;15802:19;;15607:220;;;:::o;15833:118::-;15920:24;15938:5;15920:24;:::i;:::-;15915:3;15908:37;15898:53;;:::o;15957:112::-;16040:22;16056:5;16040:22;:::i;:::-;16035:3;16028:35;16018:51;;:::o;16075:271::-;16205:3;16227:93;16316:3;16307:6;16227:93;:::i;:::-;16220:100;;16337:3;16330:10;;16209:137;;;;:::o;16352:222::-;16445:4;16483:2;16472:9;16468:18;16460:26;;16496:71;16564:1;16553:9;16549:17;16540:6;16496:71;:::i;:::-;16450:124;;;;:::o;16580:442::-;16729:4;16767:2;16756:9;16752:18;16744:26;;16780:71;16848:1;16837:9;16833:17;16824:6;16780:71;:::i;:::-;16861:72;16929:2;16918:9;16914:18;16905:6;16861:72;:::i;:::-;16943;17011:2;17000:9;16996:18;16987:6;16943:72;:::i;:::-;16734:288;;;;;;:::o;17028:332::-;17149:4;17187:2;17176:9;17172:18;17164:26;;17200:71;17268:1;17257:9;17253:17;17244:6;17200:71;:::i;:::-;17281:72;17349:2;17338:9;17334:18;17325:6;17281:72;:::i;:::-;17154:206;;;;;:::o;17366:442::-;17515:4;17553:2;17542:9;17538:18;17530:26;;17566:71;17634:1;17623:9;17619:17;17610:6;17566:71;:::i;:::-;17647:72;17715:2;17704:9;17700:18;17691:6;17647:72;:::i;:::-;17729;17797:2;17786:9;17782:18;17773:6;17729:72;:::i;:::-;17520:288;;;;;;:::o;17814:210::-;17901:4;17939:2;17928:9;17924:18;17916:26;;17952:65;18014:1;18003:9;17999:17;17990:6;17952:65;:::i;:::-;17906:118;;;;:::o;18030:248::-;18136:4;18174:2;18163:9;18159:18;18151:26;;18187:84;18268:1;18257:9;18253:17;18244:6;18187:84;:::i;:::-;18141:137;;;;:::o;18284:313::-;18397:4;18435:2;18424:9;18420:18;18412:26;;18484:9;18478:4;18474:20;18470:1;18459:9;18455:17;18448:47;18512:78;18585:4;18576:6;18512:78;:::i;:::-;18504:86;;18402:195;;;;:::o;18603:419::-;18769:4;18807:2;18796:9;18792:18;18784:26;;18856:9;18850:4;18846:20;18842:1;18831:9;18827:17;18820:47;18884:131;19010:4;18884:131;:::i;:::-;18876:139;;18774:248;;;:::o;19028:419::-;19194:4;19232:2;19221:9;19217:18;19209:26;;19281:9;19275:4;19271:20;19267:1;19256:9;19252:17;19245:47;19309:131;19435:4;19309:131;:::i;:::-;19301:139;;19199:248;;;:::o;19453:419::-;19619:4;19657:2;19646:9;19642:18;19634:26;;19706:9;19700:4;19696:20;19692:1;19681:9;19677:17;19670:47;19734:131;19860:4;19734:131;:::i;:::-;19726:139;;19624:248;;;:::o;19878:419::-;20044:4;20082:2;20071:9;20067:18;20059:26;;20131:9;20125:4;20121:20;20117:1;20106:9;20102:17;20095:47;20159:131;20285:4;20159:131;:::i;:::-;20151:139;;20049:248;;;:::o;20303:419::-;20469:4;20507:2;20496:9;20492:18;20484:26;;20556:9;20550:4;20546:20;20542:1;20531:9;20527:17;20520:47;20584:131;20710:4;20584:131;:::i;:::-;20576:139;;20474:248;;;:::o;20728:419::-;20894:4;20932:2;20921:9;20917:18;20909:26;;20981:9;20975:4;20971:20;20967:1;20956:9;20952:17;20945:47;21009:131;21135:4;21009:131;:::i;:::-;21001:139;;20899:248;;;:::o;21153:419::-;21319:4;21357:2;21346:9;21342:18;21334:26;;21406:9;21400:4;21396:20;21392:1;21381:9;21377:17;21370:47;21434:131;21560:4;21434:131;:::i;:::-;21426:139;;21324:248;;;:::o;21578:419::-;21744:4;21782:2;21771:9;21767:18;21759:26;;21831:9;21825:4;21821:20;21817:1;21806:9;21802:17;21795:47;21859:131;21985:4;21859:131;:::i;:::-;21851:139;;21749:248;;;:::o;22003:419::-;22169:4;22207:2;22196:9;22192:18;22184:26;;22256:9;22250:4;22246:20;22242:1;22231:9;22227:17;22220:47;22284:131;22410:4;22284:131;:::i;:::-;22276:139;;22174:248;;;:::o;22428:419::-;22594:4;22632:2;22621:9;22617:18;22609:26;;22681:9;22675:4;22671:20;22667:1;22656:9;22652:17;22645:47;22709:131;22835:4;22709:131;:::i;:::-;22701:139;;22599:248;;;:::o;22853:419::-;23019:4;23057:2;23046:9;23042:18;23034:26;;23106:9;23100:4;23096:20;23092:1;23081:9;23077:17;23070:47;23134:131;23260:4;23134:131;:::i;:::-;23126:139;;23024:248;;;:::o;23278:419::-;23444:4;23482:2;23471:9;23467:18;23459:26;;23531:9;23525:4;23521:20;23517:1;23506:9;23502:17;23495:47;23559:131;23685:4;23559:131;:::i;:::-;23551:139;;23449:248;;;:::o;23703:419::-;23869:4;23907:2;23896:9;23892:18;23884:26;;23956:9;23950:4;23946:20;23942:1;23931:9;23927:17;23920:47;23984:131;24110:4;23984:131;:::i;:::-;23976:139;;23874:248;;;:::o;24128:419::-;24294:4;24332:2;24321:9;24317:18;24309:26;;24381:9;24375:4;24371:20;24367:1;24356:9;24352:17;24345:47;24409:131;24535:4;24409:131;:::i;:::-;24401:139;;24299:248;;;:::o;24553:419::-;24719:4;24757:2;24746:9;24742:18;24734:26;;24806:9;24800:4;24796:20;24792:1;24781:9;24777:17;24770:47;24834:131;24960:4;24834:131;:::i;:::-;24826:139;;24724:248;;;:::o;24978:419::-;25144:4;25182:2;25171:9;25167:18;25159:26;;25231:9;25225:4;25221:20;25217:1;25206:9;25202:17;25195:47;25259:131;25385:4;25259:131;:::i;:::-;25251:139;;25149:248;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25574:248;;;:::o;25828:419::-;25994:4;26032:2;26021:9;26017:18;26009:26;;26081:9;26075:4;26071:20;26067:1;26056:9;26052:17;26045:47;26109:131;26235:4;26109:131;:::i;:::-;26101:139;;25999:248;;;:::o;26253:419::-;26419:4;26457:2;26446:9;26442:18;26434:26;;26506:9;26500:4;26496:20;26492:1;26481:9;26477:17;26470:47;26534:131;26660:4;26534:131;:::i;:::-;26526:139;;26424:248;;;:::o;26678:419::-;26844:4;26882:2;26871:9;26867:18;26859:26;;26931:9;26925:4;26921:20;26917:1;26906:9;26902:17;26895:47;26959:131;27085:4;26959:131;:::i;:::-;26951:139;;26849:248;;;:::o;27103:419::-;27269:4;27307:2;27296:9;27292:18;27284:26;;27356:9;27350:4;27346:20;27342:1;27331:9;27327:17;27320:47;27384:131;27510:4;27384:131;:::i;:::-;27376:139;;27274:248;;;:::o;27528:419::-;27694:4;27732:2;27721:9;27717:18;27709:26;;27781:9;27775:4;27771:20;27767:1;27756:9;27752:17;27745:47;27809:131;27935:4;27809:131;:::i;:::-;27801:139;;27699:248;;;:::o;27953:419::-;28119:4;28157:2;28146:9;28142:18;28134:26;;28206:9;28200:4;28196:20;28192:1;28181:9;28177:17;28170:47;28234:131;28360:4;28234:131;:::i;:::-;28226:139;;28124:248;;;:::o;28378:419::-;28544:4;28582:2;28571:9;28567:18;28559:26;;28631:9;28625:4;28621:20;28617:1;28606:9;28602:17;28595:47;28659:131;28785:4;28659:131;:::i;:::-;28651:139;;28549:248;;;:::o;28803:419::-;28969:4;29007:2;28996:9;28992:18;28984:26;;29056:9;29050:4;29046:20;29042:1;29031:9;29027:17;29020:47;29084:131;29210:4;29084:131;:::i;:::-;29076:139;;28974:248;;;:::o;29228:419::-;29394:4;29432:2;29421:9;29417:18;29409:26;;29481:9;29475:4;29471:20;29467:1;29456:9;29452:17;29445:47;29509:131;29635:4;29509:131;:::i;:::-;29501:139;;29399:248;;;:::o;29653:419::-;29819:4;29857:2;29846:9;29842:18;29834:26;;29906:9;29900:4;29896:20;29892:1;29881:9;29877:17;29870:47;29934:131;30060:4;29934:131;:::i;:::-;29926:139;;29824:248;;;:::o;30078:419::-;30244:4;30282:2;30271:9;30267:18;30259:26;;30331:9;30325:4;30321:20;30317:1;30306:9;30302:17;30295:47;30359:131;30485:4;30359:131;:::i;:::-;30351:139;;30249:248;;;:::o;30503:419::-;30669:4;30707:2;30696:9;30692:18;30684:26;;30756:9;30750:4;30746:20;30742:1;30731:9;30727:17;30720:47;30784:131;30910:4;30784:131;:::i;:::-;30776:139;;30674:248;;;:::o;30928:222::-;31021:4;31059:2;31048:9;31044:18;31036:26;;31072:71;31140:1;31129:9;31125:17;31116:6;31072:71;:::i;:::-;31026:124;;;;:::o;31156:332::-;31277:4;31315:2;31304:9;31300:18;31292:26;;31328:71;31396:1;31385:9;31381:17;31372:6;31328:71;:::i;:::-;31409:72;31477:2;31466:9;31462:18;31453:6;31409:72;:::i;:::-;31282:206;;;;;:::o;31494:214::-;31583:4;31621:2;31610:9;31606:18;31598:26;;31634:67;31698:1;31687:9;31683:17;31674:6;31634:67;:::i;:::-;31588:120;;;;:::o;31714:98::-;31765:6;31799:5;31793:12;31783:22;;31772:40;;;:::o;31818:99::-;31870:6;31904:5;31898:12;31888:22;;31877:40;;;:::o;31923:147::-;32024:11;32061:3;32046:18;;32036:34;;;;:::o;32076:169::-;32160:11;32194:6;32189:3;32182:19;32234:4;32229:3;32225:14;32210:29;;32172:73;;;;:::o;32251:305::-;32291:3;32310:20;32328:1;32310:20;:::i;:::-;32305:25;;32344:20;32362:1;32344:20;:::i;:::-;32339:25;;32498:1;32430:66;32426:74;32423:1;32420:81;32417:2;;;32504:18;;:::i;:::-;32417:2;32548:1;32545;32541:9;32534:16;;32295:261;;;;:::o;32562:185::-;32602:1;32619:20;32637:1;32619:20;:::i;:::-;32614:25;;32653:20;32671:1;32653:20;:::i;:::-;32648:25;;32692:1;32682:2;;32697:18;;:::i;:::-;32682:2;32739:1;32736;32732:9;32727:14;;32604:143;;;;:::o;32753:348::-;32793:7;32816:20;32834:1;32816:20;:::i;:::-;32811:25;;32850:20;32868:1;32850:20;:::i;:::-;32845:25;;33038:1;32970:66;32966:74;32963:1;32960:81;32955:1;32948:9;32941:17;32937:105;32934:2;;;33045:18;;:::i;:::-;32934:2;33093:1;33090;33086:9;33075:20;;32801:300;;;;:::o;33107:191::-;33147:4;33167:20;33185:1;33167:20;:::i;:::-;33162:25;;33201:20;33219:1;33201:20;:::i;:::-;33196:25;;33240:1;33237;33234:8;33231:2;;;33245:18;;:::i;:::-;33231:2;33290:1;33287;33283:9;33275:17;;33152:146;;;;:::o;33304:96::-;33341:7;33370:24;33388:5;33370:24;:::i;:::-;33359:35;;33349:51;;;:::o;33406:90::-;33440:7;33483:5;33476:13;33469:21;33458:32;;33448:48;;;:::o;33502:126::-;33539:7;33579:42;33572:5;33568:54;33557:65;;33547:81;;;:::o;33634:77::-;33671:7;33700:5;33689:16;;33679:32;;;:::o;33717:86::-;33752:7;33792:4;33785:5;33781:16;33770:27;;33760:43;;;:::o;33809:152::-;33872:9;33905:50;33949:5;33905:50;:::i;:::-;33892:63;;33882:79;;;:::o;33967:126::-;34030:9;34063:24;34081:5;34063:24;:::i;:::-;34050:37;;34040:53;;;:::o;34099:307::-;34167:1;34177:113;34191:6;34188:1;34185:13;34177:113;;;34276:1;34271:3;34267:11;34261:18;34257:1;34252:3;34248:11;34241:39;34213:2;34210:1;34206:10;34201:15;;34177:113;;;34308:6;34305:1;34302:13;34299:2;;;34388:1;34379:6;34374:3;34370:16;34363:27;34299:2;34148:258;;;;:::o;34412:320::-;34456:6;34493:1;34487:4;34483:12;34473:22;;34540:1;34534:4;34530:12;34561:18;34551:2;;34617:4;34609:6;34605:17;34595:27;;34551:2;34679;34671:6;34668:14;34648:18;34645:38;34642:2;;;34698:18;;:::i;:::-;34642:2;34463:269;;;;:::o;34738:180::-;34786:77;34783:1;34776:88;34883:4;34880:1;34873:15;34907:4;34904:1;34897:15;34924:180;34972:77;34969:1;34962:88;35069:4;35066:1;35059:15;35093:4;35090:1;35083:15;35110:180;35158:77;35155:1;35148:88;35255:4;35252:1;35245:15;35279:4;35276:1;35269:15;35296:102;35337:6;35388:2;35384:7;35379:2;35372:5;35368:14;35364:28;35354:38;;35344:54;;;:::o;35404:152::-;35544:4;35540:1;35532:6;35528:14;35521:28;35510:46;:::o;35562:222::-;35702:34;35698:1;35690:6;35686:14;35679:58;35771:5;35766:2;35758:6;35754:15;35747:30;35668:116;:::o;35790:152::-;35930:4;35926:1;35918:6;35914:14;35907:28;35896:46;:::o;35948:152::-;36088:4;36084:1;36076:6;36072:14;36065:28;36054:46;:::o;36106:225::-;36246:34;36242:1;36234:6;36230:14;36223:58;36315:8;36310:2;36302:6;36298:15;36291:33;36212:119;:::o;36337:221::-;36477:34;36473:1;36465:6;36461:14;36454:58;36546:4;36541:2;36533:6;36529:15;36522:29;36443:115;:::o;36564:152::-;36704:4;36700:1;36692:6;36688:14;36681:28;36670:46;:::o;36722:225::-;36862:34;36858:1;36850:6;36846:14;36839:58;36931:8;36926:2;36918:6;36914:15;36907:33;36828:119;:::o;36953:152::-;37093:4;37089:1;37081:6;37077:14;37070:28;37059:46;:::o;37111:225::-;37251:34;37247:1;37239:6;37235:14;37228:58;37320:8;37315:2;37307:6;37303:15;37296:33;37217:119;:::o;37342:152::-;37482:4;37478:1;37470:6;37466:14;37459:28;37448:46;:::o;37500:153::-;37640:5;37636:1;37628:6;37624:14;37617:29;37606:47;:::o;37659:153::-;37799:5;37795:1;37787:6;37783:14;37776:29;37765:47;:::o;37818:153::-;37958:5;37954:1;37946:6;37942:14;37935:29;37924:47;:::o;37977:152::-;38117:4;38113:1;38105:6;38101:14;38094:28;38083:46;:::o;38135:152::-;38275:4;38271:1;38263:6;38259:14;38252:28;38241:46;:::o;38293:153::-;38433:5;38429:1;38421:6;38417:14;38410:29;38399:47;:::o;38452:153::-;38592:5;38588:1;38580:6;38576:14;38569:29;38558:47;:::o;38611:227::-;38751:34;38747:1;38739:6;38735:14;38728:58;38820:10;38815:2;38807:6;38803:15;38796:35;38717:121;:::o;38844:182::-;38984:34;38980:1;38972:6;38968:14;38961:58;38950:76;:::o;39032:153::-;39172:5;39168:1;39160:6;39156:14;39149:29;39138:47;:::o;39191:224::-;39331:34;39327:1;39319:6;39315:14;39308:58;39400:7;39395:2;39387:6;39383:15;39376:32;39297:118;:::o;39421:223::-;39561:34;39557:1;39549:6;39545:14;39538:58;39630:6;39625:2;39617:6;39613:15;39606:31;39527:117;:::o;39650:179::-;39790:31;39786:1;39778:6;39774:14;39767:55;39756:73;:::o;39835:152::-;39975:4;39971:1;39963:6;39959:14;39952:28;39941:46;:::o;39993:229::-;40133:34;40129:1;40121:6;40117:14;40110:58;40202:12;40197:2;40189:6;40185:15;40178:37;40099:123;:::o;40228:181::-;40368:33;40364:1;40356:6;40352:14;40345:57;40334:75;:::o;40415:224::-;40555:34;40551:1;40543:6;40539:14;40532:58;40624:7;40619:2;40611:6;40607:15;40600:32;40521:118;:::o;40645:181::-;40785:33;40781:1;40773:6;40769:14;40762:57;40751:75;:::o;40832:122::-;40905:24;40923:5;40905:24;:::i;:::-;40898:5;40895:35;40885:2;;40944:1;40941;40934:12;40885:2;40875:79;:::o;40960:116::-;41030:21;41045:5;41030:21;:::i;:::-;41023:5;41020:32;41010:2;;41066:1;41063;41056:12;41010:2;41000:76;:::o;41082:122::-;41155:24;41173:5;41155:24;:::i;:::-;41148:5;41145:35;41135:2;;41194:1;41191;41184:12;41135:2;41125:79;:::o
Swarm Source
ipfs://f04e86834b1b9b267b63f8158032f40feaaa35d24e7922a4a50408d380efef60
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.