ERC-20
Overview
Max Total Supply
289,730.694355828478961622 cLQDR
Holders
567
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PerpetualEscrowToken
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-02-11 */ /** *Submitted for verification at FtmScan.com on 2022-02-07 */ // Sources flattened with hardhat v2.8.3 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) 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() { _transferOwnership(_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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) 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 making 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/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) 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/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol) 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 Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) 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/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Create2.sol) pragma solidity ^0.8.0; /** * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer. * `CREATE2` can be used to compute in advance the address where a smart * contract will be deployed, which allows for interesting new mechanisms known * as 'counterfactual interactions'. * * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more * information. */ library Create2 { /** * @dev Deploys a contract using `CREATE2`. The address where the contract * will be deployed can be known in advance via {computeAddress}. * * The bytecode for a contract can be obtained from Solidity with * `type(contractName).creationCode`. * * Requirements: * * - `bytecode` must not be empty. * - `salt` must have not been used for `bytecode` already. * - the factory must have a balance of at least `amount`. * - if `amount` is non-zero, `bytecode` must have a `payable` constructor. */ function deploy( uint256 amount, bytes32 salt, bytes memory bytecode ) internal returns (address) { address addr; require(address(this).balance >= amount, "Create2: insufficient balance"); require(bytecode.length != 0, "Create2: bytecode length is zero"); assembly { addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt) } require(addr != address(0), "Create2: Failed on deploy"); return addr; } /** * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the * `bytecodeHash` or `salt` will result in a new destination address. */ function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) { return computeAddress(salt, bytecodeHash, address(this)); } /** * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}. */ function computeAddress( bytes32 salt, bytes32 bytecodeHash, address deployer ) internal pure returns (address) { bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)); return address(uint160(uint256(_data))); } } // File contracts/network/$.sol pragma solidity 0.8.9; library $ { // mainnet address constant LQDR = 0x10b620b2dbAC4Faa7D7FFD71Da486f5D44cd86f9; address constant XLQDR = 0x3Ae658656d1C526144db371FaEf2Fff7170654eE; } // File contracts/interop/VoteEscrow.sol pragma solidity 0.8.9; interface VoteEscrow { function locked(address _account) external view returns (int128 _amount, uint256 _unlockTime); function create_lock(uint256 _amount, uint256 _unlockTime) external; function deposit_for(address _account, uint256 _amount) external; function increase_unlock_time(uint256 _unlockTime) external; function withdraw() external; } // File contracts/DelayedActionGuard.sol pragma solidity 0.8.9; abstract contract DelayedActionGuard { uint256 private constant DEFAULT_WAIT_INTERVAL = 1 days; uint256 private constant DEFAULT_OPEN_INTERVAL = 1 days; struct DelayedAction { uint256 release; uint256 expiration; } mapping (address => mapping (bytes32 => DelayedAction)) private actions_; modifier delayed() { bytes32 _actionId = keccak256(msg.data); DelayedAction storage _action = actions_[msg.sender][_actionId]; require(_action.release <= block.timestamp && block.timestamp < _action.expiration, "invalid action"); delete actions_[msg.sender][_actionId]; emit ExecuteDelayedAction(msg.sender, _actionId); _; } function announceDelayedAction(bytes calldata _data) external { bytes4 _selector = bytes4(_data); bytes32 _actionId = keccak256(_data); (uint256 _wait, uint256 _open) = _delayedActionIntervals(_selector); uint256 _release = block.timestamp + _wait; uint256 _expiration = _release + _open; actions_[msg.sender][_actionId] = DelayedAction({ release: _release, expiration: _expiration }); emit AnnounceDelayedAction(msg.sender, _actionId, _selector, _data, _release, _expiration); } function _delayedActionIntervals(bytes4 _selector) internal pure virtual returns (uint256 _wait, uint256 _open) { _selector; return (DEFAULT_WAIT_INTERVAL, DEFAULT_OPEN_INTERVAL); } event AnnounceDelayedAction(address indexed _sender, bytes32 indexed _actionId, bytes4 indexed _selector, bytes _data, uint256 _release, uint256 _expiration); event ExecuteDelayedAction(address indexed _sender, bytes32 indexed _actionId); } // File contracts/PerpetualEscrowToken.sol pragma solidity 0.8.9; contract PerpetualEscrowToken is ERC20, Ownable, ReentrancyGuard, DelayedActionGuard { using SafeERC20 for IERC20; uint256 constant WEEK = 7 days; uint256 constant MAXTIME = 730 days; // 2 years uint256 private unlockTime_; address public extension; bool public emergencyMode; modifier onlyExtension() { require(msg.sender == extension, "access denied"); _; } modifier inEmergency() { require(emergencyMode, "not available"); _; } modifier nonEmergency() { require(!emergencyMode, "not available"); _; } constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { uint256 _unlockTime = ((block.timestamp + MAXTIME) / WEEK) * WEEK; IERC20($.LQDR).safeApprove($.XLQDR, 1); VoteEscrow($.XLQDR).create_lock(1, _unlockTime); unlockTime_ = _unlockTime; _mint(address(1), 1); } function totalReserve() public view returns (uint256 _amount) { if (emergencyMode) { return IERC20($.LQDR).balanceOf(address(this)); } else { (int128 _value,) = VoteEscrow($.XLQDR).locked(address(this)); return uint256(uint128(_value)); } } function calcSharesFromAmount(uint256 _amount) public view returns (uint256 _shares) { return _amount * totalSupply() / totalReserve(); } function calcAmountFromShares(uint256 _shares) public view returns (uint256 _amount) { return _shares * totalReserve() / totalSupply(); } function deposit(uint256 _amount, uint256 _minShares) external nonReentrant nonEmergency { uint256 _shares = _amount * totalSupply() / totalReserve(); require(_shares >= _minShares, "high slippage"); _mint(msg.sender, _shares); IERC20($.LQDR).safeTransferFrom(msg.sender, address(this), _amount); IERC20($.LQDR).safeApprove($.XLQDR, _amount); VoteEscrow($.XLQDR).deposit_for(address(this), _amount); } function withdraw(uint256 _shares, uint256 _minAmount) external nonReentrant inEmergency { uint256 _amount = _shares * totalReserve() / totalSupply(); require(_amount >= _minAmount, "high slippage"); _burn(msg.sender, _shares); IERC20($.LQDR).safeTransfer(msg.sender, _amount); } function burn(uint256 _amount) external nonReentrant { _burn(msg.sender, _amount); } function _call(address _target, bytes calldata _calldata) external payable onlyExtension returns (bool _success, bytes memory _resultdata) { require(_target != $.XLQDR, "forbidden target"); return _target.call{value: msg.value}(_calldata); } function enterEmergencyMode() external onlyOwner nonEmergency { require(block.timestamp >= unlockTime_, "not available"); emergencyMode = true; VoteEscrow($.XLQDR).withdraw(); emit EmergencyDeclared(); } function setExtension(address _newExtension) external onlyOwner delayed { address _oldExtension = extension; extension = _newExtension; emit UpdateExtension(_oldExtension, _newExtension); } function _beforeTokenTransfer(address _from, address _to, uint256 _amount) internal virtual override { if (emergencyMode) return; uint256 _unlockTime = ((block.timestamp + MAXTIME) / WEEK) * WEEK; if (_unlockTime > unlockTime_) { try VoteEscrow($.XLQDR).increase_unlock_time(_unlockTime) { unlockTime_ = _unlockTime; } catch (bytes memory _data) { _from; _to; _amount; _data; } } } event EmergencyDeclared(); event UpdateExtension(address _oldExtension, address _newExtension); } // File contracts/PerpetualEscrowTokenFactory.sol // SPDX-License-Identifier: GPL-3.0-only pragma solidity 0.8.9; contract PerpetualEscrowTokenFactory is ReentrancyGuard { using SafeERC20 for IERC20; function computePerpetualEscrowTokenAddress(string calldata _name, string calldata _symbol, bytes32 _salt) public view returns (address _escrowToken) { bytes32 _hash = keccak256(abi.encodePacked(type(PerpetualEscrowToken).creationCode, abi.encode(_name, _symbol))); return Create2.computeAddress(_salt, _hash); } function createPerpetualEscrowToken(string calldata _name, string calldata _symbol, bytes32 _salt) external nonReentrant returns (address _escrowToken) { address _address = computePerpetualEscrowTokenAddress(_name, _symbol, _salt); IERC20($.LQDR).safeTransferFrom(msg.sender, _address, 1); _escrowToken = address(new PerpetualEscrowToken{salt: _salt}(_name, _symbol)); PerpetualEscrowToken(_escrowToken).transferOwnership(msg.sender); emit CreatePerpetualEscrowToken(_escrowToken); return _escrowToken; } event CreatePerpetualEscrowToken(address _escrowToken); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_actionId","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"_selector","type":"bytes4"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_release","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"AnnounceDelayedAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyDeclared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"bytes32","name":"_actionId","type":"bytes32"}],"name":"ExecuteDelayedAction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_oldExtension","type":"address"},{"indexed":false,"internalType":"address","name":"_newExtension","type":"address"}],"name":"UpdateExtension","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"_call","outputs":[{"internalType":"bool","name":"_success","type":"bool"},{"internalType":"bytes","name":"_resultdata","type":"bytes"}],"stateMutability":"payable","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":"bytes","name":"_data","type":"bytes"}],"name":"announceDelayedAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"calcAmountFromShares","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calcSharesFromAmount","outputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minShares","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enterEmergencyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extension","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newExtension","type":"address"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserve","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"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":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_minAmount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620051bd380380620051bd833981810160405281019062000037919062000b9e565b818181600390805190602001906200005192919062000951565b5080600490805190602001906200006a92919062000951565b5050506200008d62000081620001cc60201b60201c565b620001d460201b60201c565b6001600681905550600062093a80806303c2670042620000ae919062000c5c565b620000ba919062000ce8565b620000c6919062000d20565b905062000123733ae658656d1c526144db371faef2fff7170654ee60017310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff166200029a60201b62001a1a179092919060201c565b733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff166365fc38736001836040518363ffffffff1660e01b81526004016200017592919062000ddf565b600060405180830381600087803b1580156200019057600080fd5b505af1158015620001a5573d6000803e3d6000fd5b5050505080600881905550620001c36001806200040c60201b60201c565b50505062001392565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008114806200033a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620002e492919062000e51565b60206040518083038186803b158015620002fd57600080fd5b505afa15801562000312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000338919062000eaf565b145b6200037c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003739062000f68565b60405180910390fd5b620004078363095ea7b360e01b84846040516024016200039e92919062000f8a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200058560201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004769062001007565b60405180910390fd5b62000493600083836200065960201b60201c565b8060026000828254620004a7919062000c5c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004fe919062000c5c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000565919062001029565b60405180910390a362000581600083836200077f60201b60201c565b5050565b6000620005ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166200078460201b62001b78179092919060201c565b905060008151111562000654578080602001905181019062000611919062001083565b62000653576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064a906200112b565b60405180910390fd5b5b505050565b600960149054906101000a900460ff161562000675576200077a565b600062093a80806303c26700426200068e919062000c5c565b6200069a919062000ce8565b620006a6919062000d20565b90506008548111156200077857733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff1663eff7a612826040518263ffffffff1660e01b815260040162000702919062001029565b600060405180830381600087803b1580156200071d57600080fd5b505af19250505080156200072f575060015b6200076f573d806000811462000762576040519150601f19603f3d011682016040523d82523d6000602084013e62000767565b606091505b505062000777565b806008819055505b5b505b505050565b505050565b60606200079b8484600085620007a460201b60201c565b90509392505050565b606082471015620007ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e390620011c3565b60405180910390fd5b620007fd85620008d260201b60201c565b6200083f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008369062001235565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516200086a9190620012a4565b60006040518083038185875af1925050503d8060008114620008a9576040519150601f19603f3d011682016040523d82523d6000602084013e620008ae565b606091505b5091509150620008c6828286620008e560201b60201c565b92505050949350505050565b600080823b905060008111915050919050565b60608315620008f7578290506200094a565b6000835111156200090b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000941919062001309565b60405180910390fd5b9392505050565b8280546200095f906200135c565b90600052602060002090601f016020900481019282620009835760008555620009cf565b82601f106200099e57805160ff1916838001178555620009cf565b82800160010185558215620009cf579182015b82811115620009ce578251825591602001919060010190620009b1565b5b509050620009de9190620009e2565b5090565b5b80821115620009fd576000816000905550600101620009e3565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000a6a8262000a1f565b810181811067ffffffffffffffff8211171562000a8c5762000a8b62000a30565b5b80604052505050565b600062000aa162000a01565b905062000aaf828262000a5f565b919050565b600067ffffffffffffffff82111562000ad25762000ad162000a30565b5b62000add8262000a1f565b9050602081019050919050565b60005b8381101562000b0a57808201518184015260208101905062000aed565b8381111562000b1a576000848401525b50505050565b600062000b3762000b318462000ab4565b62000a95565b90508281526020810184848401111562000b565762000b5562000a1a565b5b62000b6384828562000aea565b509392505050565b600082601f83011262000b835762000b8262000a15565b5b815162000b9584826020860162000b20565b91505092915050565b6000806040838503121562000bb85762000bb762000a0b565b5b600083015167ffffffffffffffff81111562000bd95762000bd862000a10565b5b62000be78582860162000b6b565b925050602083015167ffffffffffffffff81111562000c0b5762000c0a62000a10565b5b62000c198582860162000b6b565b9150509250929050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c698262000c23565b915062000c768362000c23565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cae5762000cad62000c2d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf58262000c23565b915062000d028362000c23565b92508262000d155762000d1462000cb9565b5b828204905092915050565b600062000d2d8262000c23565b915062000d3a8362000c23565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d765762000d7562000c2d565b5b828202905092915050565b6000819050919050565b6000819050919050565b600062000db662000db062000daa8462000d81565b62000d8b565b62000c23565b9050919050565b62000dc88162000d95565b82525050565b62000dd98162000c23565b82525050565b600060408201905062000df6600083018562000dbd565b62000e05602083018462000dce565b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e398262000e0c565b9050919050565b62000e4b8162000e2c565b82525050565b600060408201905062000e68600083018562000e40565b62000e77602083018462000e40565b9392505050565b62000e898162000c23565b811462000e9557600080fd5b50565b60008151905062000ea98162000e7e565b92915050565b60006020828403121562000ec85762000ec762000a0b565b5b600062000ed88482850162000e98565b91505092915050565b600082825260208201905092915050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b600062000f5060368362000ee1565b915062000f5d8262000ef2565b604082019050919050565b6000602082019050818103600083015262000f838162000f41565b9050919050565b600060408201905062000fa1600083018562000e40565b62000fb0602083018462000dce565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fef601f8362000ee1565b915062000ffc8262000fb7565b602082019050919050565b60006020820190508181036000830152620010228162000fe0565b9050919050565b600060208201905062001040600083018462000dce565b92915050565b60008115159050919050565b6200105d8162001046565b81146200106957600080fd5b50565b6000815190506200107d8162001052565b92915050565b6000602082840312156200109c576200109b62000a0b565b5b6000620010ac848285016200106c565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600062001113602a8362000ee1565b91506200112082620010b5565b604082019050919050565b60006020820190508181036000830152620011468162001104565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000620011ab60268362000ee1565b9150620011b8826200114d565b604082019050919050565b60006020820190508181036000830152620011de816200119c565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006200121d601d8362000ee1565b91506200122a82620011e5565b602082019050919050565b6000602082019050818103600083015262001250816200120e565b9050919050565b600081519050919050565b600081905092915050565b60006200127a8262001257565b62001286818562001262565b93506200129881856020860162000aea565b80840191505092915050565b6000620012b282846200126d565b915081905092915050565b600081519050919050565b6000620012d582620012bd565b620012e1818562000ee1565b9350620012f381856020860162000aea565b620012fe8162000a1f565b840191505092915050565b60006020820190508181036000830152620013258184620012c8565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200137557607f821691505b602082108114156200138c576200138b6200132d565b5b50919050565b613e1b80620013a26000396000f3fe6080604052600436106101815760003560e01c8063609082bf116100d15780639844afd21161008a578063ab622d9a11610064578063ab622d9a146105a0578063dd62ed3e146105c9578063e2bbb15814610606578063f2fde38b1461062f57610181565b80639844afd21461050f578063a457c2d714610526578063a9059cbb1461056357610181565b8063609082bf146103ff5780636589d2f21461043c57806370a0823114610465578063715018a6146104a25780638da5cb5b146104b957806395d89b41146104e457610181565b80632d5537b01161013e5780633950935111610118578063395093511461034557806342966c6814610382578063441a3e70146103ab5780634c68df67146103d457610181565b80632d5537b0146102b25780632f2eac00146102dd578063313ce5671461031a57610181565b806306fdde03146101865780630905f560146101b1578063095ea7b3146101dc5780630f4414c81461021957806318160ddd1461024a57806323b872dd14610275575b600080fd5b34801561019257600080fd5b5061019b610658565b6040516101a89190612909565b60405180910390f35b3480156101bd57600080fd5b506101c66106ea565b6040516101d39190612946565b60405180910390f35b3480156101e857600080fd5b5061020360048036038101906101fe91906129ff565b6106fd565b6040516102109190612946565b60405180910390f35b610233600480360381019061022e9190612aa4565b61071b565b604051610241929190612b59565b60405180910390f35b34801561025657600080fd5b5061025f6108a9565b60405161026c9190612b98565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612bb3565b6108b3565b6040516102a99190612946565b60405180910390f35b3480156102be57600080fd5b506102c76109ab565b6040516102d49190612c15565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190612c30565b6109d1565b6040516103119190612b98565b60405180910390f35b34801561032657600080fd5b5061032f6109ff565b60405161033c9190612c79565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906129ff565b610a08565b6040516103799190612946565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612c30565b610ab4565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612c94565b610b17565b005b3480156103e057600080fd5b506103e9610c76565b6040516103f69190612b98565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612c30565b610dec565b6040516104339190612b98565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190612cd4565b610e1a565b005b34801561047157600080fd5b5061048c60048036038101906104879190612d21565b610f72565b6040516104999190612b98565b60405180910390f35b3480156104ae57600080fd5b506104b7610fba565b005b3480156104c557600080fd5b506104ce611042565b6040516104db9190612c15565b60405180910390f35b3480156104f057600080fd5b506104f961106c565b6040516105069190612909565b60405180910390f35b34801561051b57600080fd5b506105246110fe565b005b34801561053257600080fd5b5061054d600480360381019061054891906129ff565b6112cc565b60405161055a9190612946565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906129ff565b6113b7565b6040516105979190612946565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612d21565b6113d5565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190612d4e565b611665565b6040516105fd9190612b98565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190612c94565b6116ec565b005b34801561063b57600080fd5b5061065660048036038101906106519190612d21565b611922565b005b60606003805461066790612dbd565b80601f016020809104026020016040519081016040528092919081815260200182805461069390612dbd565b80156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b5050505050905090565b600960149054906101000a900460ff1681565b600061071161070a611b90565b8484611b98565b6001905092915050565b60006060600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612e3b565b60405180910390fd5b733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082990612ea7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1634858560405161085a929190612f06565b60006040518083038185875af1925050503d8060008114610897576040519150601f19603f3d011682016040523d82523d6000602084013e61089c565b606091505b5091509150935093915050565b6000600254905090565b60006108c0848484611d63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090b611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290612f91565b60405180910390fd5b61099f85610997611b90565b858403611b98565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109db6108a9565b6109e3610c76565b836109ee9190612fe0565b6109f89190613069565b9050919050565b60006012905090565b6000610aaa610a15611b90565b848460016000610a23611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aa5919061309a565b611b98565b6001905092915050565b60026006541415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061313c565b60405180910390fd5b6002600681905550610b0c3382611fe4565b600160068190555050565b60026006541415610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b549061313c565b60405180910390fd5b6002600681905550600960149054906101000a900460ff16610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906131a8565b60405180910390fd5b6000610bbe6108a9565b610bc6610c76565b84610bd19190612fe0565b610bdb9190613069565b905081811015610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790613214565b60405180910390fd5b610c2a3384611fe4565b610c6933827310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff166121bb9092919063ffffffff16565b5060016006819055505050565b6000600960149054906101000a900460ff1615610d31577310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cda9190612c15565b60206040518083038186803b158015610cf257600080fd5b505afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190613249565b9050610de9565b6000733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff1663cbf9fe5f306040518263ffffffff1660e01b8152600401610d809190612c15565b604080518083038186803b158015610d9757600080fd5b505afa158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf91906132af565b509050806fffffffffffffffffffffffffffffffff169150505b90565b6000610df6610c76565b610dfe6108a9565b83610e099190612fe0565b610e139190613069565b9050919050565b6000828290610e299190613333565b905060008383604051610e3d929190612f06565b60405180910390209050600080610e5384612241565b9150915060008242610e65919061309a565b905060008282610e75919061309a565b9050604051806040016040528083815260200182815250600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206000820151816000015560208201518160010155905050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916853373ffffffffffffffffffffffffffffffffffffffff167fd0eac2b5990bae781c44f9a9ad4557a1634432b6b89a265be00f6d853790108f8b8b8787604051610f6094939291906133bf565b60405180910390a45050505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc2611b90565b73ffffffffffffffffffffffffffffffffffffffff16610fe0611042565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061344b565b60405180910390fd5b6110406000612252565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461107b90612dbd565b80601f01602080910402602001604051908101604052809291908181526020018280546110a790612dbd565b80156110f45780601f106110c9576101008083540402835291602001916110f4565b820191906000526020600020905b8154815290600101906020018083116110d757829003601f168201915b5050505050905090565b611106611b90565b73ffffffffffffffffffffffffffffffffffffffff16611124611042565b73ffffffffffffffffffffffffffffffffffffffff161461117a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111719061344b565b60405180910390fd5b600960149054906101000a900460ff16156111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906131a8565b60405180910390fd5b60085442101561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906131a8565b60405180910390fd5b6001600960146101000a81548160ff021916908315150217905550733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b505050507f237686b3187f938eabcc6f70896e955674d436715cd906be94cd5b6085ceb3a260405160405180910390a1565b600080600160006112db611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f906134dd565b60405180910390fd5b6113ac6113a3611b90565b85858403611b98565b600191505092915050565b60006113cb6113c4611b90565b8484611d63565b6001905092915050565b6113dd611b90565b73ffffffffffffffffffffffffffffffffffffffff166113fb611042565b73ffffffffffffffffffffffffffffffffffffffff1614611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061344b565b60405180910390fd5b60008036604051611463929190612f06565b604051809103902090506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000209050428160000154111580156114d85750806001015442105b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613549565b60405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008082016000905560018201600090555050813373ffffffffffffffffffffffffffffffffffffffff167f2ab4019dadfb2c441d8715d8f519d6f819a77c25d0aa58b44af012cc83e23a3a60405160405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f07a2305342714ffe1ef18b75a89bcaf5380810bdd350a1d06db265d73140db728185604051611657929190613569565b60405180910390a150505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60026006541415611732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117299061313c565b60405180910390fd5b6002600681905550600960149054906101000a900460ff161561178a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611781906131a8565b60405180910390fd5b6000611794610c76565b61179c6108a9565b846117a79190612fe0565b6117b19190613069565b9050818110156117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613214565b60405180910390fd5b6118003382612318565b6118413330857310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff16612478909392919063ffffffff16565b611894733ae658656d1c526144db371faef2fff7170654ee847310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff16611a1a9092919063ffffffff16565b733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff16633a46273e30856040518363ffffffff1660e01b81526004016118e3929190613592565b600060405180830381600087803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505060016006819055505050565b61192a611b90565b73ffffffffffffffffffffffffffffffffffffffff16611948611042565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061344b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a059061362d565b60405180910390fd5b611a1781612252565b50565b6000811480611ab3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a61929190613569565b60206040518083038186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab19190613249565b145b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae9906136bf565b60405180910390fd5b611b738363095ea7b360e01b8484604051602401611b11929190613592565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b505050565b6060611b8784846000856125c8565b90509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff90613751565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906137e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d569190612b98565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613875565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613907565b60405180910390fd5b611e4e8383836126dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613999565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f67919061309a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fcb9190612b98565b60405180910390a3611fde8484846127f1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90613a2b565b60405180910390fd5b612060826000836126dc565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90613abd565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461213d9190613add565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121a29190612b98565b60405180910390a36121b6836000846127f1565b505050565b61223c8363a9059cbb60e01b84846040516024016121da929190613592565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b505050565b600080620151808091509150915091565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90613b5d565b60405180910390fd5b612394600083836126dc565b80600260008282546123a6919061309a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb919061309a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124609190612b98565b60405180910390a3612474600083836127f1565b5050565b6124fb846323b872dd60e01b85858560405160240161249993929190613b7d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b50505050565b6000612563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611b789092919063ffffffff16565b90506000815111156125c357808060200190518101906125839190613be0565b6125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990613c7f565b60405180910390fd5b5b505050565b60608247101561260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490613d11565b60405180910390fd5b612616856127f6565b612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c90613d7d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161267e9190613dce565b60006040518083038185875af1925050503d80600081146126bb576040519150601f19603f3d011682016040523d82523d6000602084013e6126c0565b606091505b50915091506126d0828286612809565b92505050949350505050565b600960149054906101000a900460ff16156126f6576127ec565b600062093a80806303c267004261270d919061309a565b6127179190613069565b6127219190612fe0565b90506008548111156127ea57733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff1663eff7a612826040518263ffffffff1660e01b815260040161277a9190612b98565b600060405180830381600087803b15801561279457600080fd5b505af19250505080156127a5575060015b6127e1573d80600081146127d5576040519150601f19603f3d011682016040523d82523d6000602084013e6127da565b606091505b50506127e9565b806008819055505b5b505b505050565b505050565b600080823b905060008111915050919050565b6060831561281957829050612869565b60008351111561282c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128609190612909565b60405180910390fd5b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128aa57808201518184015260208101905061288f565b838111156128b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006128db82612870565b6128e5818561287b565b93506128f581856020860161288c565b6128fe816128bf565b840191505092915050565b6000602082019050818103600083015261292381846128d0565b905092915050565b60008115159050919050565b6129408161292b565b82525050565b600060208201905061295b6000830184612937565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129968261296b565b9050919050565b6129a68161298b565b81146129b157600080fd5b50565b6000813590506129c38161299d565b92915050565b6000819050919050565b6129dc816129c9565b81146129e757600080fd5b50565b6000813590506129f9816129d3565b92915050565b60008060408385031215612a1657612a15612961565b5b6000612a24858286016129b4565b9250506020612a35858286016129ea565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a6457612a63612a3f565b5b8235905067ffffffffffffffff811115612a8157612a80612a44565b5b602083019150836001820283011115612a9d57612a9c612a49565b5b9250929050565b600080600060408486031215612abd57612abc612961565b5b6000612acb868287016129b4565b935050602084013567ffffffffffffffff811115612aec57612aeb612966565b5b612af886828701612a4e565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000612b2b82612b04565b612b358185612b0f565b9350612b4581856020860161288c565b612b4e816128bf565b840191505092915050565b6000604082019050612b6e6000830185612937565b8181036020830152612b808184612b20565b90509392505050565b612b92816129c9565b82525050565b6000602082019050612bad6000830184612b89565b92915050565b600080600060608486031215612bcc57612bcb612961565b5b6000612bda868287016129b4565b9350506020612beb868287016129b4565b9250506040612bfc868287016129ea565b9150509250925092565b612c0f8161298b565b82525050565b6000602082019050612c2a6000830184612c06565b92915050565b600060208284031215612c4657612c45612961565b5b6000612c54848285016129ea565b91505092915050565b600060ff82169050919050565b612c7381612c5d565b82525050565b6000602082019050612c8e6000830184612c6a565b92915050565b60008060408385031215612cab57612caa612961565b5b6000612cb9858286016129ea565b9250506020612cca858286016129ea565b9150509250929050565b60008060208385031215612ceb57612cea612961565b5b600083013567ffffffffffffffff811115612d0957612d08612966565b5b612d1585828601612a4e565b92509250509250929050565b600060208284031215612d3757612d36612961565b5b6000612d45848285016129b4565b91505092915050565b60008060408385031215612d6557612d64612961565b5b6000612d73858286016129b4565b9250506020612d84858286016129b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd557607f821691505b60208210811415612de957612de8612d8e565b5b50919050565b7f6163636573732064656e69656400000000000000000000000000000000000000600082015250565b6000612e25600d8361287b565b9150612e3082612def565b602082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f666f7262696464656e2074617267657400000000000000000000000000000000600082015250565b6000612e9160108361287b565b9150612e9c82612e5b565b602082019050919050565b60006020820190508181036000830152612ec081612e84565b9050919050565b600081905092915050565b82818337600083830152505050565b6000612eed8385612ec7565b9350612efa838584612ed2565b82840190509392505050565b6000612f13828486612ee1565b91508190509392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612f7b60288361287b565b9150612f8682612f1f565b604082019050919050565b60006020820190508181036000830152612faa81612f6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612feb826129c9565b9150612ff6836129c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561302f5761302e612fb1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613074826129c9565b915061307f836129c9565b92508261308f5761308e61303a565b5b828204905092915050565b60006130a5826129c9565b91506130b0836129c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130e5576130e4612fb1565b5b828201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613126601f8361287b565b9150613131826130f0565b602082019050919050565b6000602082019050818103600083015261315581613119565b9050919050565b7f6e6f7420617661696c61626c6500000000000000000000000000000000000000600082015250565b6000613192600d8361287b565b915061319d8261315c565b602082019050919050565b600060208201905081810360008301526131c181613185565b9050919050565b7f6869676820736c69707061676500000000000000000000000000000000000000600082015250565b60006131fe600d8361287b565b9150613209826131c8565b602082019050919050565b6000602082019050818103600083015261322d816131f1565b9050919050565b600081519050613243816129d3565b92915050565b60006020828403121561325f5761325e612961565b5b600061326d84828501613234565b91505092915050565b600081600f0b9050919050565b61328c81613276565b811461329757600080fd5b50565b6000815190506132a981613283565b92915050565b600080604083850312156132c6576132c5612961565b5b60006132d48582860161329a565b92505060206132e585828601613234565b9150509250929050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b600061333f83836132ef565b8261334a81356132fa565b9250600482101561338a576133857fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613326565b831692505b505092915050565b600061339e8385612b0f565b93506133ab838584612ed2565b6133b4836128bf565b840190509392505050565b600060608201905081810360008301526133da818688613392565b90506133e96020830185612b89565b6133f66040830184612b89565b95945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061343560208361287b565b9150613440826133ff565b602082019050919050565b6000602082019050818103600083015261346481613428565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134c760258361287b565b91506134d28261346b565b604082019050919050565b600060208201905081810360008301526134f6816134ba565b9050919050565b7f696e76616c696420616374696f6e000000000000000000000000000000000000600082015250565b6000613533600e8361287b565b915061353e826134fd565b602082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b600060408201905061357e6000830185612c06565b61358b6020830184612c06565b9392505050565b60006040820190506135a76000830185612c06565b6135b46020830184612b89565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061361760268361287b565b9150613622826135bb565b604082019050919050565b600060208201905081810360008301526136468161360a565b9050919050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b60006136a960368361287b565b91506136b48261364d565b604082019050919050565b600060208201905081810360008301526136d88161369c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061373b60248361287b565b9150613746826136df565b604082019050919050565b6000602082019050818103600083015261376a8161372e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006137cd60228361287b565b91506137d882613771565b604082019050919050565b600060208201905081810360008301526137fc816137c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061385f60258361287b565b915061386a82613803565b604082019050919050565b6000602082019050818103600083015261388e81613852565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138f160238361287b565b91506138fc82613895565b604082019050919050565b60006020820190508181036000830152613920816138e4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061398360268361287b565b915061398e82613927565b604082019050919050565b600060208201905081810360008301526139b281613976565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a1560218361287b565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aa760228361287b565b9150613ab282613a4b565b604082019050919050565b60006020820190508181036000830152613ad681613a9a565b9050919050565b6000613ae8826129c9565b9150613af3836129c9565b925082821015613b0657613b05612fb1565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613b47601f8361287b565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b6000606082019050613b926000830186612c06565b613b9f6020830185612c06565b613bac6040830184612b89565b949350505050565b613bbd8161292b565b8114613bc857600080fd5b50565b600081519050613bda81613bb4565b92915050565b600060208284031215613bf657613bf5612961565b5b6000613c0484828501613bcb565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613c69602a8361287b565b9150613c7482613c0d565b604082019050919050565b60006020820190508181036000830152613c9881613c5c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613cfb60268361287b565b9150613d0682613c9f565b604082019050919050565b60006020820190508181036000830152613d2a81613cee565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d67601d8361287b565b9150613d7282613d31565b602082019050919050565b60006020820190508181036000830152613d9681613d5a565b9050919050565b6000613da882612b04565b613db28185612ec7565b9350613dc281856020860161288c565b80840191505092915050565b6000613dda8284613d9d565b91508190509291505056fea2646970667358221220cdfb9b66d9d9b103d9bd253b48bf23488bfc56b95a5e890d37340719fb7f52b464736f6c63430008090033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005634c5144520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005634c514452000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101815760003560e01c8063609082bf116100d15780639844afd21161008a578063ab622d9a11610064578063ab622d9a146105a0578063dd62ed3e146105c9578063e2bbb15814610606578063f2fde38b1461062f57610181565b80639844afd21461050f578063a457c2d714610526578063a9059cbb1461056357610181565b8063609082bf146103ff5780636589d2f21461043c57806370a0823114610465578063715018a6146104a25780638da5cb5b146104b957806395d89b41146104e457610181565b80632d5537b01161013e5780633950935111610118578063395093511461034557806342966c6814610382578063441a3e70146103ab5780634c68df67146103d457610181565b80632d5537b0146102b25780632f2eac00146102dd578063313ce5671461031a57610181565b806306fdde03146101865780630905f560146101b1578063095ea7b3146101dc5780630f4414c81461021957806318160ddd1461024a57806323b872dd14610275575b600080fd5b34801561019257600080fd5b5061019b610658565b6040516101a89190612909565b60405180910390f35b3480156101bd57600080fd5b506101c66106ea565b6040516101d39190612946565b60405180910390f35b3480156101e857600080fd5b5061020360048036038101906101fe91906129ff565b6106fd565b6040516102109190612946565b60405180910390f35b610233600480360381019061022e9190612aa4565b61071b565b604051610241929190612b59565b60405180910390f35b34801561025657600080fd5b5061025f6108a9565b60405161026c9190612b98565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612bb3565b6108b3565b6040516102a99190612946565b60405180910390f35b3480156102be57600080fd5b506102c76109ab565b6040516102d49190612c15565b60405180910390f35b3480156102e957600080fd5b5061030460048036038101906102ff9190612c30565b6109d1565b6040516103119190612b98565b60405180910390f35b34801561032657600080fd5b5061032f6109ff565b60405161033c9190612c79565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906129ff565b610a08565b6040516103799190612946565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612c30565b610ab4565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612c94565b610b17565b005b3480156103e057600080fd5b506103e9610c76565b6040516103f69190612b98565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612c30565b610dec565b6040516104339190612b98565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190612cd4565b610e1a565b005b34801561047157600080fd5b5061048c60048036038101906104879190612d21565b610f72565b6040516104999190612b98565b60405180910390f35b3480156104ae57600080fd5b506104b7610fba565b005b3480156104c557600080fd5b506104ce611042565b6040516104db9190612c15565b60405180910390f35b3480156104f057600080fd5b506104f961106c565b6040516105069190612909565b60405180910390f35b34801561051b57600080fd5b506105246110fe565b005b34801561053257600080fd5b5061054d600480360381019061054891906129ff565b6112cc565b60405161055a9190612946565b60405180910390f35b34801561056f57600080fd5b5061058a600480360381019061058591906129ff565b6113b7565b6040516105979190612946565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190612d21565b6113d5565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190612d4e565b611665565b6040516105fd9190612b98565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190612c94565b6116ec565b005b34801561063b57600080fd5b5061065660048036038101906106519190612d21565b611922565b005b60606003805461066790612dbd565b80601f016020809104026020016040519081016040528092919081815260200182805461069390612dbd565b80156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b5050505050905090565b600960149054906101000a900460ff1681565b600061071161070a611b90565b8484611b98565b6001905092915050565b60006060600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612e3b565b60405180910390fd5b733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082990612ea7565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1634858560405161085a929190612f06565b60006040518083038185875af1925050503d8060008114610897576040519150601f19603f3d011682016040523d82523d6000602084013e61089c565b606091505b5091509150935093915050565b6000600254905090565b60006108c0848484611d63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090b611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098290612f91565b60405180910390fd5b61099f85610997611b90565b858403611b98565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109db6108a9565b6109e3610c76565b836109ee9190612fe0565b6109f89190613069565b9050919050565b60006012905090565b6000610aaa610a15611b90565b848460016000610a23611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aa5919061309a565b611b98565b6001905092915050565b60026006541415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061313c565b60405180910390fd5b6002600681905550610b0c3382611fe4565b600160068190555050565b60026006541415610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b549061313c565b60405180910390fd5b6002600681905550600960149054906101000a900460ff16610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab906131a8565b60405180910390fd5b6000610bbe6108a9565b610bc6610c76565b84610bd19190612fe0565b610bdb9190613069565b905081811015610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1790613214565b60405180910390fd5b610c2a3384611fe4565b610c6933827310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff166121bb9092919063ffffffff16565b5060016006819055505050565b6000600960149054906101000a900460ff1615610d31577310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cda9190612c15565b60206040518083038186803b158015610cf257600080fd5b505afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190613249565b9050610de9565b6000733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff1663cbf9fe5f306040518263ffffffff1660e01b8152600401610d809190612c15565b604080518083038186803b158015610d9757600080fd5b505afa158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf91906132af565b509050806fffffffffffffffffffffffffffffffff169150505b90565b6000610df6610c76565b610dfe6108a9565b83610e099190612fe0565b610e139190613069565b9050919050565b6000828290610e299190613333565b905060008383604051610e3d929190612f06565b60405180910390209050600080610e5384612241565b9150915060008242610e65919061309a565b905060008282610e75919061309a565b9050604051806040016040528083815260200182815250600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206000820151816000015560208201518160010155905050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916853373ffffffffffffffffffffffffffffffffffffffff167fd0eac2b5990bae781c44f9a9ad4557a1634432b6b89a265be00f6d853790108f8b8b8787604051610f6094939291906133bf565b60405180910390a45050505050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc2611b90565b73ffffffffffffffffffffffffffffffffffffffff16610fe0611042565b73ffffffffffffffffffffffffffffffffffffffff1614611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d9061344b565b60405180910390fd5b6110406000612252565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461107b90612dbd565b80601f01602080910402602001604051908101604052809291908181526020018280546110a790612dbd565b80156110f45780601f106110c9576101008083540402835291602001916110f4565b820191906000526020600020905b8154815290600101906020018083116110d757829003601f168201915b5050505050905090565b611106611b90565b73ffffffffffffffffffffffffffffffffffffffff16611124611042565b73ffffffffffffffffffffffffffffffffffffffff161461117a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111719061344b565b60405180910390fd5b600960149054906101000a900460ff16156111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906131a8565b60405180910390fd5b60085442101561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906131a8565b60405180910390fd5b6001600960146101000a81548160ff021916908315150217905550733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff16633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b505050507f237686b3187f938eabcc6f70896e955674d436715cd906be94cd5b6085ceb3a260405160405180910390a1565b600080600160006112db611b90565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f906134dd565b60405180910390fd5b6113ac6113a3611b90565b85858403611b98565b600191505092915050565b60006113cb6113c4611b90565b8484611d63565b6001905092915050565b6113dd611b90565b73ffffffffffffffffffffffffffffffffffffffff166113fb611042565b73ffffffffffffffffffffffffffffffffffffffff1614611451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114489061344b565b60405180910390fd5b60008036604051611463929190612f06565b604051809103902090506000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000209050428160000154111580156114d85750806001015442105b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613549565b60405180910390fd5b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008082016000905560018201600090555050813373ffffffffffffffffffffffffffffffffffffffff167f2ab4019dadfb2c441d8715d8f519d6f819a77c25d0aa58b44af012cc83e23a3a60405160405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f07a2305342714ffe1ef18b75a89bcaf5380810bdd350a1d06db265d73140db728185604051611657929190613569565b60405180910390a150505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60026006541415611732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117299061313c565b60405180910390fd5b6002600681905550600960149054906101000a900460ff161561178a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611781906131a8565b60405180910390fd5b6000611794610c76565b61179c6108a9565b846117a79190612fe0565b6117b19190613069565b9050818110156117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613214565b60405180910390fd5b6118003382612318565b6118413330857310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff16612478909392919063ffffffff16565b611894733ae658656d1c526144db371faef2fff7170654ee847310b620b2dbac4faa7d7ffd71da486f5d44cd86f973ffffffffffffffffffffffffffffffffffffffff16611a1a9092919063ffffffff16565b733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff16633a46273e30856040518363ffffffff1660e01b81526004016118e3929190613592565b600060405180830381600087803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505060016006819055505050565b61192a611b90565b73ffffffffffffffffffffffffffffffffffffffff16611948611042565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061344b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a059061362d565b60405180910390fd5b611a1781612252565b50565b6000811480611ab3575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a61929190613569565b60206040518083038186803b158015611a7957600080fd5b505afa158015611a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab19190613249565b145b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae9906136bf565b60405180910390fd5b611b738363095ea7b360e01b8484604051602401611b11929190613592565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b505050565b6060611b8784846000856125c8565b90509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff90613751565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f906137e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d569190612b98565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90613875565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613907565b60405180910390fd5b611e4e8383836126dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613999565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f67919061309a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fcb9190612b98565b60405180910390a3611fde8484846127f1565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90613a2b565b60405180910390fd5b612060826000836126dc565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90613abd565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461213d9190613add565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121a29190612b98565b60405180910390a36121b6836000846127f1565b505050565b61223c8363a9059cbb60e01b84846040516024016121da929190613592565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b505050565b600080620151808091509150915091565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90613b5d565b60405180910390fd5b612394600083836126dc565b80600260008282546123a6919061309a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123fb919061309a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124609190612b98565b60405180910390a3612474600083836127f1565b5050565b6124fb846323b872dd60e01b85858560405160240161249993929190613b7d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612501565b50505050565b6000612563826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611b789092919063ffffffff16565b90506000815111156125c357808060200190518101906125839190613be0565b6125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990613c7f565b60405180910390fd5b5b505050565b60608247101561260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490613d11565b60405180910390fd5b612616856127f6565b612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c90613d7d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161267e9190613dce565b60006040518083038185875af1925050503d80600081146126bb576040519150601f19603f3d011682016040523d82523d6000602084013e6126c0565b606091505b50915091506126d0828286612809565b92505050949350505050565b600960149054906101000a900460ff16156126f6576127ec565b600062093a80806303c267004261270d919061309a565b6127179190613069565b6127219190612fe0565b90506008548111156127ea57733ae658656d1c526144db371faef2fff7170654ee73ffffffffffffffffffffffffffffffffffffffff1663eff7a612826040518263ffffffff1660e01b815260040161277a9190612b98565b600060405180830381600087803b15801561279457600080fd5b505af19250505080156127a5575060015b6127e1573d80600081146127d5576040519150601f19603f3d011682016040523d82523d6000602084013e6127da565b606091505b50506127e9565b806008819055505b5b505b505050565b505050565b600080823b905060008111915050919050565b6060831561281957829050612869565b60008351111561282c5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128609190612909565b60405180910390fd5b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156128aa57808201518184015260208101905061288f565b838111156128b9576000848401525b50505050565b6000601f19601f8301169050919050565b60006128db82612870565b6128e5818561287b565b93506128f581856020860161288c565b6128fe816128bf565b840191505092915050565b6000602082019050818103600083015261292381846128d0565b905092915050565b60008115159050919050565b6129408161292b565b82525050565b600060208201905061295b6000830184612937565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129968261296b565b9050919050565b6129a68161298b565b81146129b157600080fd5b50565b6000813590506129c38161299d565b92915050565b6000819050919050565b6129dc816129c9565b81146129e757600080fd5b50565b6000813590506129f9816129d3565b92915050565b60008060408385031215612a1657612a15612961565b5b6000612a24858286016129b4565b9250506020612a35858286016129ea565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a6457612a63612a3f565b5b8235905067ffffffffffffffff811115612a8157612a80612a44565b5b602083019150836001820283011115612a9d57612a9c612a49565b5b9250929050565b600080600060408486031215612abd57612abc612961565b5b6000612acb868287016129b4565b935050602084013567ffffffffffffffff811115612aec57612aeb612966565b5b612af886828701612a4e565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000612b2b82612b04565b612b358185612b0f565b9350612b4581856020860161288c565b612b4e816128bf565b840191505092915050565b6000604082019050612b6e6000830185612937565b8181036020830152612b808184612b20565b90509392505050565b612b92816129c9565b82525050565b6000602082019050612bad6000830184612b89565b92915050565b600080600060608486031215612bcc57612bcb612961565b5b6000612bda868287016129b4565b9350506020612beb868287016129b4565b9250506040612bfc868287016129ea565b9150509250925092565b612c0f8161298b565b82525050565b6000602082019050612c2a6000830184612c06565b92915050565b600060208284031215612c4657612c45612961565b5b6000612c54848285016129ea565b91505092915050565b600060ff82169050919050565b612c7381612c5d565b82525050565b6000602082019050612c8e6000830184612c6a565b92915050565b60008060408385031215612cab57612caa612961565b5b6000612cb9858286016129ea565b9250506020612cca858286016129ea565b9150509250929050565b60008060208385031215612ceb57612cea612961565b5b600083013567ffffffffffffffff811115612d0957612d08612966565b5b612d1585828601612a4e565b92509250509250929050565b600060208284031215612d3757612d36612961565b5b6000612d45848285016129b4565b91505092915050565b60008060408385031215612d6557612d64612961565b5b6000612d73858286016129b4565b9250506020612d84858286016129b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd557607f821691505b60208210811415612de957612de8612d8e565b5b50919050565b7f6163636573732064656e69656400000000000000000000000000000000000000600082015250565b6000612e25600d8361287b565b9150612e3082612def565b602082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f666f7262696464656e2074617267657400000000000000000000000000000000600082015250565b6000612e9160108361287b565b9150612e9c82612e5b565b602082019050919050565b60006020820190508181036000830152612ec081612e84565b9050919050565b600081905092915050565b82818337600083830152505050565b6000612eed8385612ec7565b9350612efa838584612ed2565b82840190509392505050565b6000612f13828486612ee1565b91508190509392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612f7b60288361287b565b9150612f8682612f1f565b604082019050919050565b60006020820190508181036000830152612faa81612f6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612feb826129c9565b9150612ff6836129c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561302f5761302e612fb1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613074826129c9565b915061307f836129c9565b92508261308f5761308e61303a565b5b828204905092915050565b60006130a5826129c9565b91506130b0836129c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130e5576130e4612fb1565b5b828201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613126601f8361287b565b9150613131826130f0565b602082019050919050565b6000602082019050818103600083015261315581613119565b9050919050565b7f6e6f7420617661696c61626c6500000000000000000000000000000000000000600082015250565b6000613192600d8361287b565b915061319d8261315c565b602082019050919050565b600060208201905081810360008301526131c181613185565b9050919050565b7f6869676820736c69707061676500000000000000000000000000000000000000600082015250565b60006131fe600d8361287b565b9150613209826131c8565b602082019050919050565b6000602082019050818103600083015261322d816131f1565b9050919050565b600081519050613243816129d3565b92915050565b60006020828403121561325f5761325e612961565b5b600061326d84828501613234565b91505092915050565b600081600f0b9050919050565b61328c81613276565b811461329757600080fd5b50565b6000815190506132a981613283565b92915050565b600080604083850312156132c6576132c5612961565b5b60006132d48582860161329a565b92505060206132e585828601613234565b9150509250929050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b600061333f83836132ef565b8261334a81356132fa565b9250600482101561338a576133857fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613326565b831692505b505092915050565b600061339e8385612b0f565b93506133ab838584612ed2565b6133b4836128bf565b840190509392505050565b600060608201905081810360008301526133da818688613392565b90506133e96020830185612b89565b6133f66040830184612b89565b95945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061343560208361287b565b9150613440826133ff565b602082019050919050565b6000602082019050818103600083015261346481613428565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134c760258361287b565b91506134d28261346b565b604082019050919050565b600060208201905081810360008301526134f6816134ba565b9050919050565b7f696e76616c696420616374696f6e000000000000000000000000000000000000600082015250565b6000613533600e8361287b565b915061353e826134fd565b602082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b600060408201905061357e6000830185612c06565b61358b6020830184612c06565b9392505050565b60006040820190506135a76000830185612c06565b6135b46020830184612b89565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061361760268361287b565b9150613622826135bb565b604082019050919050565b600060208201905081810360008301526136468161360a565b9050919050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b60006136a960368361287b565b91506136b48261364d565b604082019050919050565b600060208201905081810360008301526136d88161369c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061373b60248361287b565b9150613746826136df565b604082019050919050565b6000602082019050818103600083015261376a8161372e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006137cd60228361287b565b91506137d882613771565b604082019050919050565b600060208201905081810360008301526137fc816137c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061385f60258361287b565b915061386a82613803565b604082019050919050565b6000602082019050818103600083015261388e81613852565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138f160238361287b565b91506138fc82613895565b604082019050919050565b60006020820190508181036000830152613920816138e4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061398360268361287b565b915061398e82613927565b604082019050919050565b600060208201905081810360008301526139b281613976565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a1560218361287b565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aa760228361287b565b9150613ab282613a4b565b604082019050919050565b60006020820190508181036000830152613ad681613a9a565b9050919050565b6000613ae8826129c9565b9150613af3836129c9565b925082821015613b0657613b05612fb1565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613b47601f8361287b565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b6000606082019050613b926000830186612c06565b613b9f6020830185612c06565b613bac6040830184612b89565b949350505050565b613bbd8161292b565b8114613bc857600080fd5b50565b600081519050613bda81613bb4565b92915050565b600060208284031215613bf657613bf5612961565b5b6000613c0484828501613bcb565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613c69602a8361287b565b9150613c7482613c0d565b604082019050919050565b60006020820190508181036000830152613c9881613c5c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613cfb60268361287b565b9150613d0682613c9f565b604082019050919050565b60006020820190508181036000830152613d2a81613cee565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613d67601d8361287b565b9150613d7282613d31565b602082019050919050565b60006020820190508181036000830152613d9681613d5a565b9050919050565b6000613da882612b04565b613db28185612ec7565b9350613dc281856020860161288c565b80840191505092915050565b6000613dda8284613d9d565b91508190509291505056fea2646970667358221220cdfb9b66d9d9b103d9bd253b48bf23488bfc56b95a5e890d37340719fb7f52b464736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005634c5144520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005634c514452000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): cLQDR
Arg [1] : _symbol (string): cLQDR
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 634c514452000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 634c514452000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
39266:3487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12118:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39537:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14285:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41542:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13238:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14936:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39507:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40569:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13080:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15837:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41446:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41146:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40150:265;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40420:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38230:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13409:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2752:103;;;;;;;;;;;;;:::i;:::-;;2101:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12337:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41798:219;;;;;;;;;;;;;:::i;:::-;;16555:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13749:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42022:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13987:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40718:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3010:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12118:100;12172:13;12205:5;12198:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12118:100;:::o;39537:25::-;;;;;;;;;;;;;:::o;14285:169::-;14368:4;14385:39;14394:12;:10;:12::i;:::-;14408:7;14417:6;14385:8;:39::i;:::-;14442:4;14435:11;;14285:169;;;;:::o;41542:251::-;41640:13;41655:24;39622:9;;;;;;;;;;;39608:23;;:10;:23;;;39600:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;37006:42:::1;41696:18;;:7;:18;;;;41688:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41747:7;:12;;41767:9;41778;;41747:41;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41740:48;;;;41542:251:::0;;;;;;:::o;13238:108::-;13299:7;13326:12;;13319:19;;13238:108;:::o;14936:492::-;15076:4;15093:36;15103:6;15111:9;15122:6;15093:9;:36::i;:::-;15142:24;15169:11;:19;15181:6;15169:19;;;;;;;;;;;;;;;:33;15189:12;:10;:12::i;:::-;15169:33;;;;;;;;;;;;;;;;15142:60;;15241:6;15221:16;:26;;15213:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;15328:57;15337:6;15345:12;:10;:12::i;:::-;15378:6;15359:16;:25;15328:8;:57::i;:::-;15416:4;15409:11;;;14936:492;;;;;:::o;39507:24::-;;;;;;;;;;;;;:::o;40569:144::-;40637:15;40695:13;:11;:13::i;:::-;40678:14;:12;:14::i;:::-;40668:7;:24;;;;:::i;:::-;:40;;;;:::i;:::-;40661:47;;40569:144;;;:::o;13080:93::-;13138:5;13163:2;13156:9;;13080:93;:::o;15837:215::-;15925:4;15942:80;15951:12;:10;:12::i;:::-;15965:7;16011:10;15974:11;:25;15986:12;:10;:12::i;:::-;15974:25;;;;;;;;;;;;;;;:34;16000:7;15974:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15942:8;:80::i;:::-;16040:4;16033:11;;15837:215;;;;:::o;41446:91::-;5389:1;5987:7;;:19;;5979:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5389:1;6120:7;:18;;;;41506:26:::1;41512:10;41524:7;41506:5;:26::i;:::-;5345:1:::0;6299:7;:22;;;;41446:91;:::o;41146:295::-;5389:1;5987:7;;:19;;5979:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5389:1;6120:7;:18;;;;39703:13:::1;;;;;;;;;;;39695:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41242:15:::2;41287:13;:11;:13::i;:::-;41270:14;:12;:14::i;:::-;41260:7;:24;;;;:::i;:::-;:40;;;;:::i;:::-;41242:58;;41324:10;41313:7;:21;;41305:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41357:26;41363:10;41375:7;41357:5;:26::i;:::-;41388:48;41416:10;41428:7;36935:42;41388:27;;;;:48;;;;;:::i;:::-;41237:204;5345:1:::0;6299:7;:22;;;;41146:295;;:::o;40150:265::-;40195:15;40223:13;;;;;;;;;;;40219:192;;;36935:42;40251:24;;;40284:4;40251:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40244:46;;;;40219:192;40309:13;37006:42;40327:26;;;40362:4;40327:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40308:60;;;40397:6;40381:24;;40374:31;;;40150:265;;:::o;40420:144::-;40488:15;40545:14;:12;:14::i;:::-;40529:13;:11;:13::i;:::-;40519:7;:23;;;;:::i;:::-;:40;;;;:::i;:::-;40512:47;;40420:144;;;:::o;38230:504::-;38299:16;38325:5;;38318:13;;;;;:::i;:::-;38299:32;;38336:17;38366:5;;38356:16;;;;;;;:::i;:::-;;;;;;;;38336:36;;38378:13;38393;38410:34;38434:9;38410:23;:34::i;:::-;38377:67;;;;38449:16;38486:5;38468:15;:23;;;;:::i;:::-;38449:42;;38496:19;38529:5;38518:8;:16;;;;:::i;:::-;38496:38;;38573:61;;;;;;;;38598:8;38573:61;;;;38620:11;38573:61;;;38539:8;:20;38548:10;38539:20;;;;;;;;;;;;;;;:31;38560:9;38539:31;;;;;;;;;;;:95;;;;;;;;;;;;;;;;;;;38689:9;38644:85;;;38678:9;38666:10;38644:85;;;38700:5;;38707:8;38717:11;38644:85;;;;;;;;;:::i;:::-;;;;;;;;38294:440;;;;;;38230:504;;:::o;13409:127::-;13483:7;13510:9;:18;13520:7;13510:18;;;;;;;;;;;;;;;;13503:25;;13409:127;;;:::o;2752:103::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2817:30:::1;2844:1;2817:18;:30::i;:::-;2752:103::o:0;2101:87::-;2147:7;2174:6;;;;;;;;;;;2167:13;;2101:87;:::o;12337:104::-;12393:13;12426:7;12419:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12337:104;:::o;41798:219::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39790:13:::1;;;;;;;;;;;39789:14;39781:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;41894:11:::2;;41875:15;:30;;41867:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41944:4;41928:13;;:20;;;;;;;;;;;;;;;;;;37006:42;41953:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;41993:19;;;;;;;;;;41798:219::o:0;16555:413::-;16648:4;16665:24;16692:11;:25;16704:12;:10;:12::i;:::-;16692:25;;;;;;;;;;;;;;;:34;16718:7;16692:34;;;;;;;;;;;;;;;;16665:61;;16765:15;16745:16;:35;;16737:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16858:67;16867:12;:10;:12::i;:::-;16881:7;16909:15;16890:16;:34;16858:8;:67::i;:::-;16956:4;16949:11;;;16555:413;;;;:::o;13749:175::-;13835:4;13852:42;13862:12;:10;:12::i;:::-;13876:9;13887:6;13852:9;:42::i;:::-;13912:4;13905:11;;13749:175;;;;:::o;42022:202::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37905:17:::1;37935:8:::0;::::1;37925:19;;;;;;;:::i;:::-;;;;;;;;37905:39;;37949:29;37981:8;:20;37990:10;37981:20;;;;;;;;;;;;;;;:31;38002:9;37981:31;;;;;;;;;;;37949:63;;38044:15;38025:7;:15;;;:34;;:74;;;;;38081:7;:18;;;38063:15;:36;38025:74;38017:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;38130:8;:20;38139:10;38130:20;;;;;;;;;;;;;;;:31;38151:9;38130:31;;;;;;;;;;;;38123:38:::0;::::1;;;;;;;;;;;;;38204:9;38192:10;38171:43;;;;;;;;;;;;42101:21:::2;42125:9;;;;;;;;;;;42101:33;;42151:13;42139:9;;:25;;;;;;;;;;;;;;;;;;42174:45;42190:13;42205;42174:45;;;;;;;:::i;:::-;;;;;;;;42096:128;37900:325:::1;;42022:202:::0;:::o;13987:151::-;14076:7;14103:11;:18;14115:5;14103:18;;;;;;;;;;;;;;;:27;14122:7;14103:27;;;;;;;;;;;;;;;;14096:34;;13987:151;;;;:::o;40718:423::-;5389:1;5987:7;;:19;;5979:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5389:1;6120:7;:18;;;;39790:13:::1;;;;;;;;;;;39789:14;39781:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40814:15:::2;40858:14;:12;:14::i;:::-;40842:13;:11;:13::i;:::-;40832:7;:23;;;;:::i;:::-;:40;;;;:::i;:::-;40814:58;;40896:10;40885:7;:21;;40877:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40929:26;40935:10;40947:7;40929:5;:26::i;:::-;40960:67;40992:10;41012:4;41019:7;36935:42;40960:31;;;;:67;;;;;;:::i;:::-;41032:44;37006:42;41068:7;36935:42;41032:26;;;;:44;;;;;:::i;:::-;37006:42;41081:31;;;41121:4;41128:7;41081:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;40809:332;5345:1:::0;6299:7;:22;;;;40718:423;;:::o;3010:201::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3119:1:::1;3099:22;;:8;:22;;;;3091:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3175:28;3194:8;3175:18;:28::i;:::-;3010:201:::0;:::o;31677:616::-;32050:1;32041:5;:10;32040:62;;;;32100:1;32057:5;:15;;;32081:4;32088:7;32057:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;32040:62;32018:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;32195:90;32215:5;32245:22;;;32269:7;32278:5;32222:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32195:19;:90::i;:::-;31677:616;;;:::o;25713:229::-;25850:12;25882:52;25904:6;25912:4;25918:1;25921:12;25882:21;:52::i;:::-;25875:59;;25713:229;;;;;:::o;819:98::-;872:7;899:10;892:17;;819:98;:::o;20239:380::-;20392:1;20375:19;;:5;:19;;;;20367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20473:1;20454:21;;:7;:21;;;;20446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20557:6;20527:11;:18;20539:5;20527:18;;;;;;;;;;;;;;;:27;20546:7;20527:27;;;;;;;;;;;;;;;:36;;;;20595:7;20579:32;;20588:5;20579:32;;;20604:6;20579:32;;;;;;:::i;:::-;;;;;;;;20239:380;;;:::o;17458:733::-;17616:1;17598:20;;:6;:20;;;;17590:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17700:1;17679:23;;:9;:23;;;;17671:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17755:47;17776:6;17784:9;17795:6;17755:20;:47::i;:::-;17815:21;17839:9;:17;17849:6;17839:17;;;;;;;;;;;;;;;;17815:41;;17892:6;17875:13;:23;;17867:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18013:6;17997:13;:22;17977:9;:17;17987:6;17977:17;;;;;;;;;;;;;;;:42;;;;18065:6;18041:9;:20;18051:9;18041:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18106:9;18089:35;;18098:6;18089:35;;;18117:6;18089:35;;;;;;:::i;:::-;;;;;;;;18137:46;18157:6;18165:9;18176:6;18137:19;:46::i;:::-;17579:612;17458:733;;;:::o;19210:591::-;19313:1;19294:21;;:7;:21;;;;19286:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19366:49;19387:7;19404:1;19408:6;19366:20;:49::i;:::-;19428:22;19453:9;:18;19463:7;19453:18;;;;;;;;;;;;;;;;19428:43;;19508:6;19490:14;:24;;19482:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19627:6;19610:14;:23;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;:44;;;;19671:6;19655:12;;:22;;;;;;;:::i;:::-;;;;;;;;19721:1;19695:37;;19704:7;19695:37;;;19725:6;19695:37;;;;;;:::i;:::-;;;;;;;;19745:48;19765:7;19782:1;19786:6;19745:19;:48::i;:::-;19275:526;19210:591;;:::o;30941:211::-;31058:86;31078:5;31108:23;;;31133:2;31137:5;31085:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31058:19;:86::i;:::-;30941:211;;;:::o;38739:191::-;38821:13;38836;37656:6;37715;38872:53;;;;38739:191;;;:::o;3371:::-;3445:16;3464:6;;;;;;;;;;;3445:25;;3490:8;3481:6;;:17;;;;;;;;;;;;;;;;;;3545:8;3514:40;;3535:8;3514:40;;;;;;;;;;;;3434:128;3371:191;:::o;18478:399::-;18581:1;18562:21;;:7;:21;;;;18554:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18632:49;18661:1;18665:7;18674:6;18632:20;:49::i;:::-;18710:6;18694:12;;:22;;;;;;;:::i;:::-;;;;;;;;18749:6;18727:9;:18;18737:7;18727:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;18792:7;18771:37;;18788:1;18771:37;;;18801:6;18771:37;;;;;;:::i;:::-;;;;;;;;18821:48;18849:1;18853:7;18862:6;18821:19;:48::i;:::-;18478:399;;:::o;31160:248::-;31304:96;31324:5;31354:27;;;31383:4;31389:2;31393:5;31331:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31304:19;:96::i;:::-;31160:248;;;;:::o;33514:716::-;33938:23;33964:69;33992:4;33964:69;;;;;;;;;;;;;;;;;33972:5;33964:27;;;;:69;;;;;:::i;:::-;33938:95;;34068:1;34048:10;:17;:21;34044:179;;;34145:10;34134:30;;;;;;;;;;;;:::i;:::-;34126:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34044:179;33584:646;33514:716;;:::o;26833:510::-;27003:12;27061:5;27036:21;:30;;27028:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27128:18;27139:6;27128:10;:18::i;:::-;27120:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27194:12;27208:23;27235:6;:11;;27254:5;27261:4;27235:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27193:73;;;;27284:51;27301:7;27310:10;27322:12;27284:16;:51::i;:::-;27277:58;;;;26833:510;;;;;;:::o;42229:419::-;42341:13;;;;;;;;;;;42337:26;;;42356:7;;42337:26;42367:19;39412:6;;39449:8;42391:15;:25;;;;:::i;:::-;42390:34;;;;:::i;:::-;42389:43;;;;:::i;:::-;42367:65;;42455:11;;42441;:25;42437:207;;;37006:42;42478:40;;;42519:11;42478:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42474:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42572:67;42474:165;;;42553:11;42539;:25;;;;42474:165;42437:207;42332:316;42229:419;;;;:::o;21948:124::-;;;;:::o;22907:387::-;22967:4;23175:12;23242:7;23230:20;23222:28;;23285:1;23278:4;:8;23271:15;;;22907:387;;;:::o;29519:712::-;29669:12;29698:7;29694:530;;;29729:10;29722:17;;;;29694:530;29863:1;29843:10;:17;:21;29839:374;;;30041:10;30035:17;30102:15;30089:10;30085:2;30081:19;30074:44;29839:374;30184:12;30177:20;;;;;;;;;;;:::i;:::-;;;;;;;;29519:712;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:90::-;1431:7;1474:5;1467:13;1460:21;1449:32;;1397:90;;;:::o;1493:109::-;1574:21;1589:5;1574:21;:::i;:::-;1569:3;1562:34;1493:109;;:::o;1608:210::-;1695:4;1733:2;1722:9;1718:18;1710:26;;1746:65;1808:1;1797:9;1793:17;1784:6;1746:65;:::i;:::-;1608:210;;;;:::o;1905:117::-;2014:1;2011;2004:12;2028:117;2137:1;2134;2127:12;2151:126;2188:7;2228:42;2221:5;2217:54;2206:65;;2151:126;;;:::o;2283:96::-;2320:7;2349:24;2367:5;2349:24;:::i;:::-;2338:35;;2283:96;;;:::o;2385:122::-;2458:24;2476:5;2458:24;:::i;:::-;2451:5;2448:35;2438:63;;2497:1;2494;2487:12;2438:63;2385:122;:::o;2513:139::-;2559:5;2597:6;2584:20;2575:29;;2613:33;2640:5;2613:33;:::i;:::-;2513:139;;;;:::o;2658:77::-;2695:7;2724:5;2713:16;;2658:77;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:474::-;3082:6;3090;3139:2;3127:9;3118:7;3114:23;3110:32;3107:119;;;3145:79;;:::i;:::-;3107:119;3265:1;3290:53;3335:7;3326:6;3315:9;3311:22;3290:53;:::i;:::-;3280:63;;3236:117;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3014:474;;;;;:::o;3494:117::-;3603:1;3600;3593:12;3617:117;3726:1;3723;3716:12;3740:117;3849:1;3846;3839:12;3876:552;3933:8;3943:6;3993:3;3986:4;3978:6;3974:17;3970:27;3960:122;;4001:79;;:::i;:::-;3960:122;4114:6;4101:20;4091:30;;4144:18;4136:6;4133:30;4130:117;;;4166:79;;:::i;:::-;4130:117;4280:4;4272:6;4268:17;4256:29;;4334:3;4326:4;4318:6;4314:17;4304:8;4300:32;4297:41;4294:128;;;4341:79;;:::i;:::-;4294:128;3876:552;;;;;:::o;4434:672::-;4513:6;4521;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4859:2;4848:9;4844:18;4831:32;4890:18;4882:6;4879:30;4876:117;;;4912:79;;:::i;:::-;4876:117;5025:64;5081:7;5072:6;5061:9;5057:22;5025:64;:::i;:::-;5007:82;;;;4802:297;4434:672;;;;;:::o;5112:98::-;5163:6;5197:5;5191:12;5181:22;;5112:98;;;:::o;5216:168::-;5299:11;5333:6;5328:3;5321:19;5373:4;5368:3;5364:14;5349:29;;5216:168;;;;:::o;5390:360::-;5476:3;5504:38;5536:5;5504:38;:::i;:::-;5558:70;5621:6;5616:3;5558:70;:::i;:::-;5551:77;;5637:52;5682:6;5677:3;5670:4;5663:5;5659:16;5637:52;:::i;:::-;5714:29;5736:6;5714:29;:::i;:::-;5709:3;5705:39;5698:46;;5480:270;5390:360;;;;:::o;5756:407::-;5889:4;5927:2;5916:9;5912:18;5904:26;;5940:65;6002:1;5991:9;5987:17;5978:6;5940:65;:::i;:::-;6052:9;6046:4;6042:20;6037:2;6026:9;6022:18;6015:48;6080:76;6151:4;6142:6;6080:76;:::i;:::-;6072:84;;5756:407;;;;;:::o;6169:118::-;6256:24;6274:5;6256:24;:::i;:::-;6251:3;6244:37;6169:118;;:::o;6293:222::-;6386:4;6424:2;6413:9;6409:18;6401:26;;6437:71;6505:1;6494:9;6490:17;6481:6;6437:71;:::i;:::-;6293:222;;;;:::o;6521:619::-;6598:6;6606;6614;6663:2;6651:9;6642:7;6638:23;6634:32;6631:119;;;6669:79;;:::i;:::-;6631:119;6789:1;6814:53;6859:7;6850:6;6839:9;6835:22;6814:53;:::i;:::-;6804:63;;6760:117;6916:2;6942:53;6987:7;6978:6;6967:9;6963:22;6942:53;:::i;:::-;6932:63;;6887:118;7044:2;7070:53;7115:7;7106:6;7095:9;7091:22;7070:53;:::i;:::-;7060:63;;7015:118;6521:619;;;;;:::o;7146:118::-;7233:24;7251:5;7233:24;:::i;:::-;7228:3;7221:37;7146:118;;:::o;7270:222::-;7363:4;7401:2;7390:9;7386:18;7378:26;;7414:71;7482:1;7471:9;7467:17;7458:6;7414:71;:::i;:::-;7270:222;;;;:::o;7498:329::-;7557:6;7606:2;7594:9;7585:7;7581:23;7577:32;7574:119;;;7612:79;;:::i;:::-;7574:119;7732:1;7757:53;7802:7;7793:6;7782:9;7778:22;7757:53;:::i;:::-;7747:63;;7703:117;7498:329;;;;:::o;7833:86::-;7868:7;7908:4;7901:5;7897:16;7886:27;;7833:86;;;:::o;7925:112::-;8008:22;8024:5;8008:22;:::i;:::-;8003:3;7996:35;7925:112;;:::o;8043:214::-;8132:4;8170:2;8159:9;8155:18;8147:26;;8183:67;8247:1;8236:9;8232:17;8223:6;8183:67;:::i;:::-;8043:214;;;;:::o;8263:474::-;8331:6;8339;8388:2;8376:9;8367:7;8363:23;8359:32;8356:119;;;8394:79;;:::i;:::-;8356:119;8514:1;8539:53;8584:7;8575:6;8564:9;8560:22;8539:53;:::i;:::-;8529:63;;8485:117;8641:2;8667:53;8712:7;8703:6;8692:9;8688:22;8667:53;:::i;:::-;8657:63;;8612:118;8263:474;;;;;:::o;8743:527::-;8813:6;8821;8870:2;8858:9;8849:7;8845:23;8841:32;8838:119;;;8876:79;;:::i;:::-;8838:119;9024:1;9013:9;9009:17;8996:31;9054:18;9046:6;9043:30;9040:117;;;9076:79;;:::i;:::-;9040:117;9189:64;9245:7;9236:6;9225:9;9221:22;9189:64;:::i;:::-;9171:82;;;;8967:296;8743:527;;;;;:::o;9276:329::-;9335:6;9384:2;9372:9;9363:7;9359:23;9355:32;9352:119;;;9390:79;;:::i;:::-;9352:119;9510:1;9535:53;9580:7;9571:6;9560:9;9556:22;9535:53;:::i;:::-;9525:63;;9481:117;9276:329;;;;:::o;9611:474::-;9679:6;9687;9736:2;9724:9;9715:7;9711:23;9707:32;9704:119;;;9742:79;;:::i;:::-;9704:119;9862:1;9887:53;9932:7;9923:6;9912:9;9908:22;9887:53;:::i;:::-;9877:63;;9833:117;9989:2;10015:53;10060:7;10051:6;10040:9;10036:22;10015:53;:::i;:::-;10005:63;;9960:118;9611:474;;;;;:::o;10091:180::-;10139:77;10136:1;10129:88;10236:4;10233:1;10226:15;10260:4;10257:1;10250:15;10277:320;10321:6;10358:1;10352:4;10348:12;10338:22;;10405:1;10399:4;10395:12;10426:18;10416:81;;10482:4;10474:6;10470:17;10460:27;;10416:81;10544:2;10536:6;10533:14;10513:18;10510:38;10507:84;;;10563:18;;:::i;:::-;10507:84;10328:269;10277:320;;;:::o;10603:163::-;10743:15;10739:1;10731:6;10727:14;10720:39;10603:163;:::o;10772:366::-;10914:3;10935:67;10999:2;10994:3;10935:67;:::i;:::-;10928:74;;11011:93;11100:3;11011:93;:::i;:::-;11129:2;11124:3;11120:12;11113:19;;10772:366;;;:::o;11144:419::-;11310:4;11348:2;11337:9;11333:18;11325:26;;11397:9;11391:4;11387:20;11383:1;11372:9;11368:17;11361:47;11425:131;11551:4;11425:131;:::i;:::-;11417:139;;11144:419;;;:::o;11569:166::-;11709:18;11705:1;11697:6;11693:14;11686:42;11569:166;:::o;11741:366::-;11883:3;11904:67;11968:2;11963:3;11904:67;:::i;:::-;11897:74;;11980:93;12069:3;11980:93;:::i;:::-;12098:2;12093:3;12089:12;12082:19;;11741:366;;;:::o;12113:419::-;12279:4;12317:2;12306:9;12302:18;12294:26;;12366:9;12360:4;12356:20;12352:1;12341:9;12337:17;12330:47;12394:131;12520:4;12394:131;:::i;:::-;12386:139;;12113:419;;;:::o;12538:147::-;12639:11;12676:3;12661:18;;12538:147;;;;:::o;12691:154::-;12775:6;12770:3;12765;12752:30;12837:1;12828:6;12823:3;12819:16;12812:27;12691:154;;;:::o;12873:314::-;12987:3;13008:88;13089:6;13084:3;13008:88;:::i;:::-;13001:95;;13106:43;13142:6;13137:3;13130:5;13106:43;:::i;:::-;13174:6;13169:3;13165:16;13158:23;;12873:314;;;;;:::o;13193:291::-;13333:3;13355:103;13454:3;13445:6;13437;13355:103;:::i;:::-;13348:110;;13475:3;13468:10;;13193:291;;;;;:::o;13490:227::-;13630:34;13626:1;13618:6;13614:14;13607:58;13699:10;13694:2;13686:6;13682:15;13675:35;13490:227;:::o;13723:366::-;13865:3;13886:67;13950:2;13945:3;13886:67;:::i;:::-;13879:74;;13962:93;14051:3;13962:93;:::i;:::-;14080:2;14075:3;14071:12;14064:19;;13723:366;;;:::o;14095:419::-;14261:4;14299:2;14288:9;14284:18;14276:26;;14348:9;14342:4;14338:20;14334:1;14323:9;14319:17;14312:47;14376:131;14502:4;14376:131;:::i;:::-;14368:139;;14095:419;;;:::o;14520:180::-;14568:77;14565:1;14558:88;14665:4;14662:1;14655:15;14689:4;14686:1;14679:15;14706:348;14746:7;14769:20;14787:1;14769:20;:::i;:::-;14764:25;;14803:20;14821:1;14803:20;:::i;:::-;14798:25;;14991:1;14923:66;14919:74;14916:1;14913:81;14908:1;14901:9;14894:17;14890:105;14887:131;;;14998:18;;:::i;:::-;14887:131;15046:1;15043;15039:9;15028:20;;14706:348;;;;:::o;15060:180::-;15108:77;15105:1;15098:88;15205:4;15202:1;15195:15;15229:4;15226:1;15219:15;15246:185;15286:1;15303:20;15321:1;15303:20;:::i;:::-;15298:25;;15337:20;15355:1;15337:20;:::i;:::-;15332:25;;15376:1;15366:35;;15381:18;;:::i;:::-;15366:35;15423:1;15420;15416:9;15411:14;;15246:185;;;;:::o;15437:305::-;15477:3;15496:20;15514:1;15496:20;:::i;:::-;15491:25;;15530:20;15548:1;15530:20;:::i;:::-;15525:25;;15684:1;15616:66;15612:74;15609:1;15606:81;15603:107;;;15690:18;;:::i;:::-;15603:107;15734:1;15731;15727:9;15720:16;;15437:305;;;;:::o;15748:181::-;15888:33;15884:1;15876:6;15872:14;15865:57;15748:181;:::o;15935:366::-;16077:3;16098:67;16162:2;16157:3;16098:67;:::i;:::-;16091:74;;16174:93;16263:3;16174:93;:::i;:::-;16292:2;16287:3;16283:12;16276:19;;15935:366;;;:::o;16307:419::-;16473:4;16511:2;16500:9;16496:18;16488:26;;16560:9;16554:4;16550:20;16546:1;16535:9;16531:17;16524:47;16588:131;16714:4;16588:131;:::i;:::-;16580:139;;16307:419;;;:::o;16732:163::-;16872:15;16868:1;16860:6;16856:14;16849:39;16732:163;:::o;16901:366::-;17043:3;17064:67;17128:2;17123:3;17064:67;:::i;:::-;17057:74;;17140:93;17229:3;17140:93;:::i;:::-;17258:2;17253:3;17249:12;17242:19;;16901:366;;;:::o;17273:419::-;17439:4;17477:2;17466:9;17462:18;17454:26;;17526:9;17520:4;17516:20;17512:1;17501:9;17497:17;17490:47;17554:131;17680:4;17554:131;:::i;:::-;17546:139;;17273:419;;;:::o;17698:163::-;17838:15;17834:1;17826:6;17822:14;17815:39;17698:163;:::o;17867:366::-;18009:3;18030:67;18094:2;18089:3;18030:67;:::i;:::-;18023:74;;18106:93;18195:3;18106:93;:::i;:::-;18224:2;18219:3;18215:12;18208:19;;17867:366;;;:::o;18239:419::-;18405:4;18443:2;18432:9;18428:18;18420:26;;18492:9;18486:4;18482:20;18478:1;18467:9;18463:17;18456:47;18520:131;18646:4;18520:131;:::i;:::-;18512:139;;18239:419;;;:::o;18664:143::-;18721:5;18752:6;18746:13;18737:22;;18768:33;18795:5;18768:33;:::i;:::-;18664:143;;;;:::o;18813:351::-;18883:6;18932:2;18920:9;18911:7;18907:23;18903:32;18900:119;;;18938:79;;:::i;:::-;18900:119;19058:1;19083:64;19139:7;19130:6;19119:9;19115:22;19083:64;:::i;:::-;19073:74;;19029:128;18813:351;;;;:::o;19170:92::-;19206:7;19250:5;19246:2;19235:21;19224:32;;19170:92;;;:::o;19268:120::-;19340:23;19357:5;19340:23;:::i;:::-;19333:5;19330:34;19320:62;;19378:1;19375;19368:12;19320:62;19268:120;:::o;19394:141::-;19450:5;19481:6;19475:13;19466:22;;19497:32;19523:5;19497:32;:::i;:::-;19394:141;;;;:::o;19541:505::-;19619:6;19627;19676:2;19664:9;19655:7;19651:23;19647:32;19644:119;;;19682:79;;:::i;:::-;19644:119;19802:1;19827:63;19882:7;19873:6;19862:9;19858:22;19827:63;:::i;:::-;19817:73;;19773:127;19939:2;19965:64;20021:7;20012:6;20001:9;19997:22;19965:64;:::i;:::-;19955:74;;19910:129;19541:505;;;;;:::o;20052:96::-;20110:6;20138:3;20128:13;;20052:96;;;;:::o;20246:149::-;20282:7;20322:66;20315:5;20311:78;20300:89;;20246:149;;;:::o;20401:107::-;20445:8;20495:5;20489:4;20485:16;20464:37;;20401:107;;;;:::o;20514:548::-;20604:5;20635:45;20676:3;20669:5;20635:45;:::i;:::-;20705:5;20729:40;20759:8;20746:22;20729:40;:::i;:::-;20720:49;;20793:1;20785:6;20782:13;20779:276;;;20863:168;20947:66;20917:6;20914:1;20910:14;20907:1;20903:22;20863:168;:::i;:::-;20840:5;20819:226;20810:235;;20779:276;20610:452;;20514:548;;;;:::o;21090:301::-;21186:3;21207:70;21270:6;21265:3;21207:70;:::i;:::-;21200:77;;21287:43;21323:6;21318:3;21311:5;21287:43;:::i;:::-;21355:29;21377:6;21355:29;:::i;:::-;21350:3;21346:39;21339:46;;21090:301;;;;;:::o;21397:549::-;21574:4;21612:2;21601:9;21597:18;21589:26;;21661:9;21655:4;21651:20;21647:1;21636:9;21632:17;21625:47;21689:86;21770:4;21761:6;21753;21689:86;:::i;:::-;21681:94;;21785:72;21853:2;21842:9;21838:18;21829:6;21785:72;:::i;:::-;21867;21935:2;21924:9;21920:18;21911:6;21867:72;:::i;:::-;21397:549;;;;;;;:::o;21952:182::-;22092:34;22088:1;22080:6;22076:14;22069:58;21952:182;:::o;22140:366::-;22282:3;22303:67;22367:2;22362:3;22303:67;:::i;:::-;22296:74;;22379:93;22468:3;22379:93;:::i;:::-;22497:2;22492:3;22488:12;22481:19;;22140:366;;;:::o;22512:419::-;22678:4;22716:2;22705:9;22701:18;22693:26;;22765:9;22759:4;22755:20;22751:1;22740:9;22736:17;22729:47;22793:131;22919:4;22793:131;:::i;:::-;22785:139;;22512:419;;;:::o;22937:224::-;23077:34;23073:1;23065:6;23061:14;23054:58;23146:7;23141:2;23133:6;23129:15;23122:32;22937:224;:::o;23167:366::-;23309:3;23330:67;23394:2;23389:3;23330:67;:::i;:::-;23323:74;;23406:93;23495:3;23406:93;:::i;:::-;23524:2;23519:3;23515:12;23508:19;;23167:366;;;:::o;23539:419::-;23705:4;23743:2;23732:9;23728:18;23720:26;;23792:9;23786:4;23782:20;23778:1;23767:9;23763:17;23756:47;23820:131;23946:4;23820:131;:::i;:::-;23812:139;;23539:419;;;:::o;23964:164::-;24104:16;24100:1;24092:6;24088:14;24081:40;23964:164;:::o;24134:366::-;24276:3;24297:67;24361:2;24356:3;24297:67;:::i;:::-;24290:74;;24373:93;24462:3;24373:93;:::i;:::-;24491:2;24486:3;24482:12;24475:19;;24134:366;;;:::o;24506:419::-;24672:4;24710:2;24699:9;24695:18;24687:26;;24759:9;24753:4;24749:20;24745:1;24734:9;24730:17;24723:47;24787:131;24913:4;24787:131;:::i;:::-;24779:139;;24506:419;;;:::o;24931:332::-;25052:4;25090:2;25079:9;25075:18;25067:26;;25103:71;25171:1;25160:9;25156:17;25147:6;25103:71;:::i;:::-;25184:72;25252:2;25241:9;25237:18;25228:6;25184:72;:::i;:::-;24931:332;;;;;:::o;25269:::-;25390:4;25428:2;25417:9;25413:18;25405:26;;25441:71;25509:1;25498:9;25494:17;25485:6;25441:71;:::i;:::-;25522:72;25590:2;25579:9;25575:18;25566:6;25522:72;:::i;:::-;25269:332;;;;;:::o;25607:225::-;25747:34;25743:1;25735:6;25731:14;25724:58;25816:8;25811:2;25803:6;25799:15;25792:33;25607:225;:::o;25838:366::-;25980:3;26001:67;26065:2;26060:3;26001:67;:::i;:::-;25994:74;;26077:93;26166:3;26077:93;:::i;:::-;26195:2;26190:3;26186:12;26179:19;;25838:366;;;:::o;26210:419::-;26376:4;26414:2;26403:9;26399:18;26391:26;;26463:9;26457:4;26453:20;26449:1;26438:9;26434:17;26427:47;26491:131;26617:4;26491:131;:::i;:::-;26483:139;;26210:419;;;:::o;26635:241::-;26775:34;26771:1;26763:6;26759:14;26752:58;26844:24;26839:2;26831:6;26827:15;26820:49;26635:241;:::o;26882:366::-;27024:3;27045:67;27109:2;27104:3;27045:67;:::i;:::-;27038:74;;27121:93;27210:3;27121:93;:::i;:::-;27239:2;27234:3;27230:12;27223:19;;26882:366;;;:::o;27254:419::-;27420:4;27458:2;27447:9;27443:18;27435:26;;27507:9;27501:4;27497:20;27493:1;27482:9;27478:17;27471:47;27535:131;27661:4;27535:131;:::i;:::-;27527:139;;27254:419;;;:::o;27679:223::-;27819:34;27815:1;27807:6;27803:14;27796:58;27888:6;27883:2;27875:6;27871:15;27864:31;27679:223;:::o;27908:366::-;28050:3;28071:67;28135:2;28130:3;28071:67;:::i;:::-;28064:74;;28147:93;28236:3;28147:93;:::i;:::-;28265:2;28260:3;28256:12;28249:19;;27908:366;;;:::o;28280:419::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:221::-;28845:34;28841:1;28833:6;28829:14;28822:58;28914:4;28909:2;28901:6;28897:15;28890:29;28705:221;:::o;28932:366::-;29074:3;29095:67;29159:2;29154:3;29095:67;:::i;:::-;29088:74;;29171:93;29260:3;29171:93;:::i;:::-;29289:2;29284:3;29280:12;29273:19;;28932:366;;;:::o;29304:419::-;29470:4;29508:2;29497:9;29493:18;29485:26;;29557:9;29551:4;29547:20;29543:1;29532:9;29528:17;29521:47;29585:131;29711:4;29585:131;:::i;:::-;29577:139;;29304:419;;;:::o;29729:224::-;29869:34;29865:1;29857:6;29853:14;29846:58;29938:7;29933:2;29925:6;29921:15;29914:32;29729:224;:::o;29959:366::-;30101:3;30122:67;30186:2;30181:3;30122:67;:::i;:::-;30115:74;;30198:93;30287:3;30198:93;:::i;:::-;30316:2;30311:3;30307:12;30300:19;;29959:366;;;:::o;30331:419::-;30497:4;30535:2;30524:9;30520:18;30512:26;;30584:9;30578:4;30574:20;30570:1;30559:9;30555:17;30548:47;30612:131;30738:4;30612:131;:::i;:::-;30604:139;;30331:419;;;:::o;30756:222::-;30896:34;30892:1;30884:6;30880:14;30873:58;30965:5;30960:2;30952:6;30948:15;30941:30;30756:222;:::o;30984:366::-;31126:3;31147:67;31211:2;31206:3;31147:67;:::i;:::-;31140:74;;31223:93;31312:3;31223:93;:::i;:::-;31341:2;31336:3;31332:12;31325:19;;30984:366;;;:::o;31356:419::-;31522:4;31560:2;31549:9;31545:18;31537:26;;31609:9;31603:4;31599:20;31595:1;31584:9;31580:17;31573:47;31637:131;31763:4;31637:131;:::i;:::-;31629:139;;31356:419;;;:::o;31781:225::-;31921:34;31917:1;31909:6;31905:14;31898:58;31990:8;31985:2;31977:6;31973:15;31966:33;31781:225;:::o;32012:366::-;32154:3;32175:67;32239:2;32234:3;32175:67;:::i;:::-;32168:74;;32251:93;32340:3;32251:93;:::i;:::-;32369:2;32364:3;32360:12;32353:19;;32012:366;;;:::o;32384:419::-;32550:4;32588:2;32577:9;32573:18;32565:26;;32637:9;32631:4;32627:20;32623:1;32612:9;32608:17;32601:47;32665:131;32791:4;32665:131;:::i;:::-;32657:139;;32384:419;;;:::o;32809:220::-;32949:34;32945:1;32937:6;32933:14;32926:58;33018:3;33013:2;33005:6;33001:15;32994:28;32809:220;:::o;33035:366::-;33177:3;33198:67;33262:2;33257:3;33198:67;:::i;:::-;33191:74;;33274:93;33363:3;33274:93;:::i;:::-;33392:2;33387:3;33383:12;33376:19;;33035:366;;;:::o;33407:419::-;33573:4;33611:2;33600:9;33596:18;33588:26;;33660:9;33654:4;33650:20;33646:1;33635:9;33631:17;33624:47;33688:131;33814:4;33688:131;:::i;:::-;33680:139;;33407:419;;;:::o;33832:221::-;33972:34;33968:1;33960:6;33956:14;33949:58;34041:4;34036:2;34028:6;34024:15;34017:29;33832:221;:::o;34059:366::-;34201:3;34222:67;34286:2;34281:3;34222:67;:::i;:::-;34215:74;;34298:93;34387:3;34298:93;:::i;:::-;34416:2;34411:3;34407:12;34400:19;;34059:366;;;:::o;34431:419::-;34597:4;34635:2;34624:9;34620:18;34612:26;;34684:9;34678:4;34674:20;34670:1;34659:9;34655:17;34648:47;34712:131;34838:4;34712:131;:::i;:::-;34704:139;;34431:419;;;:::o;34856:191::-;34896:4;34916:20;34934:1;34916:20;:::i;:::-;34911:25;;34950:20;34968:1;34950:20;:::i;:::-;34945:25;;34989:1;34986;34983:8;34980:34;;;34994:18;;:::i;:::-;34980:34;35039:1;35036;35032:9;35024:17;;34856:191;;;;:::o;35053:181::-;35193:33;35189:1;35181:6;35177:14;35170:57;35053:181;:::o;35240:366::-;35382:3;35403:67;35467:2;35462:3;35403:67;:::i;:::-;35396:74;;35479:93;35568:3;35479:93;:::i;:::-;35597:2;35592:3;35588:12;35581:19;;35240:366;;;:::o;35612:419::-;35778:4;35816:2;35805:9;35801:18;35793:26;;35865:9;35859:4;35855:20;35851:1;35840:9;35836:17;35829:47;35893:131;36019:4;35893:131;:::i;:::-;35885:139;;35612:419;;;:::o;36037:442::-;36186:4;36224:2;36213:9;36209:18;36201:26;;36237:71;36305:1;36294:9;36290:17;36281:6;36237:71;:::i;:::-;36318:72;36386:2;36375:9;36371:18;36362:6;36318:72;:::i;:::-;36400;36468:2;36457:9;36453:18;36444:6;36400:72;:::i;:::-;36037:442;;;;;;:::o;36485:116::-;36555:21;36570:5;36555:21;:::i;:::-;36548:5;36545:32;36535:60;;36591:1;36588;36581:12;36535:60;36485:116;:::o;36607:137::-;36661:5;36692:6;36686:13;36677:22;;36708:30;36732:5;36708:30;:::i;:::-;36607:137;;;;:::o;36750:345::-;36817:6;36866:2;36854:9;36845:7;36841:23;36837:32;36834:119;;;36872:79;;:::i;:::-;36834:119;36992:1;37017:61;37070:7;37061:6;37050:9;37046:22;37017:61;:::i;:::-;37007:71;;36963:125;36750:345;;;;:::o;37101:229::-;37241:34;37237:1;37229:6;37225:14;37218:58;37310:12;37305:2;37297:6;37293:15;37286:37;37101:229;:::o;37336:366::-;37478:3;37499:67;37563:2;37558:3;37499:67;:::i;:::-;37492:74;;37575:93;37664:3;37575:93;:::i;:::-;37693:2;37688:3;37684:12;37677:19;;37336:366;;;:::o;37708:419::-;37874:4;37912:2;37901:9;37897:18;37889:26;;37961:9;37955:4;37951:20;37947:1;37936:9;37932:17;37925:47;37989:131;38115:4;37989:131;:::i;:::-;37981:139;;37708:419;;;:::o;38133:225::-;38273:34;38269:1;38261:6;38257:14;38250:58;38342:8;38337:2;38329:6;38325:15;38318:33;38133:225;:::o;38364:366::-;38506:3;38527:67;38591:2;38586:3;38527:67;:::i;:::-;38520:74;;38603:93;38692:3;38603:93;:::i;:::-;38721:2;38716:3;38712:12;38705:19;;38364:366;;;:::o;38736:419::-;38902:4;38940:2;38929:9;38925:18;38917:26;;38989:9;38983:4;38979:20;38975:1;38964:9;38960:17;38953:47;39017:131;39143:4;39017:131;:::i;:::-;39009:139;;38736:419;;;:::o;39161:179::-;39301:31;39297:1;39289:6;39285:14;39278:55;39161:179;:::o;39346:366::-;39488:3;39509:67;39573:2;39568:3;39509:67;:::i;:::-;39502:74;;39585:93;39674:3;39585:93;:::i;:::-;39703:2;39698:3;39694:12;39687:19;;39346:366;;;:::o;39718:419::-;39884:4;39922:2;39911:9;39907:18;39899:26;;39971:9;39965:4;39961:20;39957:1;39946:9;39942:17;39935:47;39999:131;40125:4;39999:131;:::i;:::-;39991:139;;39718:419;;;:::o;40143:373::-;40247:3;40275:38;40307:5;40275:38;:::i;:::-;40329:88;40410:6;40405:3;40329:88;:::i;:::-;40322:95;;40426:52;40471:6;40466:3;40459:4;40452:5;40448:16;40426:52;:::i;:::-;40503:6;40498:3;40494:16;40487:23;;40251:265;40143:373;;;;:::o;40522:271::-;40652:3;40674:93;40763:3;40754:6;40674:93;:::i;:::-;40667:100;;40784:3;40777:10;;40522:271;;;;:::o
Swarm Source
ipfs://cdfb9b66d9d9b103d9bd253b48bf23488bfc56b95a5e890d37340719fb7f52b4
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.