Token 6SR wFTM LP
Overview ERC-20
Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
2,052,202,398.538236 ssrwFTM
Holders:
3 addresses
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ssrwFTM
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-18 */ // Sources flattened with hardhat v2.9.1 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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/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/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][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) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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/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 contracts/ssrwFTM.sol pragma solidity ^0.8.0; // Copyright 2022 6th Street Radio LLC contract ssrwFTM is ERC20, Pausable, ReentrancyGuard { using Address for address; uint256 private totalDeposit; address private _lpwallet; ERC20 private _baseToken; event Swap( address indexed owner, address indexed spender, uint256 value, uint256 fee, string memo ); constructor(address lpwallet, address baseToken) ERC20('6SR wFTM LP', 'ssrwFTM') { _lpwallet = lpwallet; _baseToken = ERC20(baseToken); totalDeposit = 0; } // Deposit wFTM, mint and receive ssrwFTM function deposit(uint256 amount) whenNotPaused nonReentrant external returns (bool){ address account = msg.sender; uint256 exrate; exrate = rate(); require(exrate > 0, 'ssrwFTM: LP is empty'); // ssr token is multiplied by 10^6, 42-6=36 uint256 ssrAmount = (amount * exrate) / 10**36; _baseToken.transferFrom(account, _lpwallet, amount); totalDeposit += amount; _mint(account, ssrAmount); emit Transfer(account, _lpwallet, amount); return true; } // Burn ssrwFTM, receive wFTM with interest function withdraw(uint256 amount) whenNotPaused nonReentrant external returns (uint256) { address account = msg.sender; int256 ex = excess(); uint256 abex = ex < 1 ? uint256(0) : uint256(ex); uint256 exrate; exrate = abex; require(exrate > 0, 'ssrwFTM: LP is empty'); // ssr token is multiplied by 10^6, 18+6=24 uint256 baseAmount = (amount * exrate) / 10**24; _burn(account, amount); if (baseAmount > totalDeposit) { totalDeposit = 0; } else { totalDeposit -= baseAmount; } _baseToken.transferFrom(_lpwallet, account, baseAmount); emit Transfer(account, address(0), baseAmount); return baseAmount; } // Get balance of pool account minus // the deposited tokens. function excess() public view returns (int256) { return int256(_baseToken.balanceOf(_lpwallet)) - int256(totalDeposit); } function rate() public view returns (uint256) { int256 ex = excess(); uint256 abex = ex < 1 ? uint256(0) : uint256(ex); uint256 exrate; // rate is 1/abex times 10^(42+18) where // 18 is the number of decimals. if (abex > 0) { exrate = 10**60 / abex; } else { exrate = 0; } return exrate; } function mint(uint256 amount) external { } function burn(uint256 amount) external { _burn(msg.sender, amount); } // Send tokens to the LP wallet, where it is // picked up by an external system and sends // the bridged asset to the wallet attached // to the memo string. function swap(uint256 amount, string calldata memo) whenNotPaused external { address account = msg.sender; _baseToken.transferFrom(account, _lpwallet, amount); uint256 fee = (amount * 15) / 10000; // 0.15% fee totalDeposit += (amount - fee); emit Swap(account, _lpwallet, amount, fee, memo); } function pause() external { require(msg.sender == _lpwallet, 'ssrwFTM: pause permission denied'); _pause(); } function unpause() external { require(msg.sender == _lpwallet, 'ssrwFTM: unpause permission denied'); _unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"lpwallet","type":"address"},{"internalType":"address","name":"baseToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"}],"name":"deposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excess","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002ee138038062002ee1833981810160405281019062000037919062000253565b6040518060400160405280600b81526020017f365352207746544d204c500000000000000000000000000000000000000000008152506040518060400160405280600781526020017f7373727746544d000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200018c565b508060049080519060200190620000d49291906200018c565b5050506000600560006101000a81548160ff021916908315150217905550600160068190555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600781905550505062000347565b8280546200019a90620002c8565b90600052602060002090601f016020900481019282620001be57600085556200020a565b82601f10620001d957805160ff19168380011785556200020a565b828001600101855582156200020a579182015b8281111562000209578251825591602001919060010190620001ec565b5b5090506200021991906200021d565b5090565b5b80821115620002385760008160009055506001016200021e565b5090565b6000815190506200024d816200032d565b92915050565b600080604083850312156200026757600080fd5b600062000277858286016200023c565b92505060206200028a858286016200023c565b9150509250929050565b6000620002a182620002a8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620002e157607f821691505b60208210811415620002f857620002f7620002fe565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620003388162000294565b81146200034457600080fd5b50565b612b8a80620003576000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806342966c68116100b8578063a0712d681161007c578063a0712d681461032e578063a457c2d71461034a578063a9059cbb1461037a578063b6b55f25146103aa578063dd62ed3e146103da578063deb4a6d21461040a57610137565b806342966c681461029c5780635c975abb146102b857806370a08231146102d65780638456cb591461030657806395d89b411461031057610137565b80632c4e722e116100ff5780632c4e722e146101f65780632e1a7d4d14610214578063313ce5671461024457806339509351146102625780633f4ba83a1461029257610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a5780631ae2379c146101a857806323b872dd146101c6575b600080fd5b610144610426565b604051610151919061215b565b60405180910390f35b610174600480360381019061016f9190611ce3565b6104b8565b6040516101819190612125565b60405180910390f35b6101926104db565b60405161019f919061237d565b60405180910390f35b6101b06104e5565b6040516101bd9190612140565b60405180910390f35b6101e060048036038101906101db9190611c94565b6105c6565b6040516101ed9190612125565b60405180910390f35b6101fe6105f5565b60405161020b919061237d565b60405180910390f35b61022e60048036038101906102299190611d48565b61065b565b60405161023b919061237d565b60405180910390f35b61024c610910565b60405161025991906123d8565b60405180910390f35b61027c60048036038101906102779190611ce3565b610919565b6040516102899190612125565b60405180910390f35b61029a6109c3565b005b6102b660048036038101906102b19190611d48565b610a5d565b005b6102c0610a6a565b6040516102cd9190612125565b60405180910390f35b6102f060048036038101906102eb9190611c2f565b610a81565b6040516102fd919061237d565b60405180910390f35b61030e610ac9565b005b610318610b63565b604051610325919061215b565b60405180910390f35b61034860048036038101906103439190611d48565b610bf5565b005b610364600480360381019061035f9190611ce3565b610bf8565b6040516103719190612125565b60405180910390f35b610394600480360381019061038f9190611ce3565b610ce2565b6040516103a19190612125565b60405180910390f35b6103c460048036038101906103bf9190611d48565b610d05565b6040516103d19190612125565b60405180910390f35b6103f460048036038101906103ef9190611c58565b610fad565b604051610401919061237d565b60405180910390f35b610424600480360381019061041f9190611d9a565b611034565b005b60606003805461043590612659565b80601f016020809104026020016040519081016040528092919081815260200182805461046190612659565b80156104ae5780601f10610483576101008083540402835291602001916104ae565b820191906000526020600020905b81548152906001019060200180831161049157829003601f168201915b5050505050905090565b6000806104c361122b565b90506104d0818585611233565b600191505092915050565b6000600254905090565b6000600754600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161056791906120d3565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611d71565b6105c191906124f0565b905090565b6000806105d161122b565b90506105de8582856113fe565b6105e985858561148a565b60019150509392505050565b6000806106006104e5565b90506000600182126106125781610615565b60005b905060008082111561064d5781789f4f2726179a224501d762422c946590d910000000000000006106469190612465565b9050610652565b600090505b80935050505090565b6000610665610a6a565b156106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c9061223d565b60405180910390fd5b600260065414156106eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e2906122fd565b60405180910390fd5b6002600681905550600033905060006107026104e5565b90506000600182126107145781610717565b60005b9050600081905060008111610761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610758906122bd565b60405180910390fd5b600069d3c21bcecceda1000000828861077a9190612496565b6107849190612465565b9050610790858861170b565b6007548111156107a75760006007819055506107c1565b80600760008282546107b99190612584565b925050819055505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687846040518463ffffffff1660e01b8152600401610842939291906120ee565b602060405180830381600087803b15801561085c57600080fd5b505af1158015610870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108949190611d1f565b50600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108f3919061237d565b60405180910390a380955050505050506001600681905550919050565b60006012905090565b60008061092461122b565b90506109b8818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b3919061240f565b611233565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a9061231d565b60405180910390fd5b610a5b6118e2565b565b610a67338261170b565b50565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b509061225d565b60405180910390fd5b610b61611984565b565b606060048054610b7290612659565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e90612659565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b5050505050905090565b50565b600080610c0361122b565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc09061233d565b60405180910390fd5b610cd68286868403611233565b60019250505092915050565b600080610ced61122b565b9050610cfa81858561148a565b600191505092915050565b6000610d0f610a6a565b15610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d469061223d565b60405180910390fd5b60026006541415610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906122fd565b60405180910390fd5b600260068190555060003390506000610dac6105f5565b905060008111610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906122bd565b60405180910390fd5b60006ec097ce7bc90715b34b9f10000000008286610e0f9190612496565b610e199190612465565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd84600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518463ffffffff1660e01b8152600401610e9c939291906120ee565b602060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eee9190611d1f565b508460076000828254610f01919061240f565b92505081905550610f128382611a27565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051610f91919061237d565b60405180910390a3600193505050506001600681905550919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61103c610a6a565b1561107c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110739061223d565b60405180910390fd5b6000339050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd82600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff1660e01b8152600401611102939291906120ee565b602060405180830381600087803b15801561111c57600080fd5b505af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190611d1f565b506000612710600f866111679190612496565b6111719190612465565b9050808561117f9190612584565b60076000828254611190919061240f565b92505081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ff139d7d84bea48dee38c03b95eadae478e98c583d15a43752eb52d6b5434b1418784888860405161121c9493929190612398565b60405180910390a35050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a906122dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a906121dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113f1919061237d565b60405180910390a3505050565b600061140a8484610fad565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114845781811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906121fd565b60405180910390fd5b6114838484848403611233565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f19061229d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115619061217d565b60405180910390fd5b611575838383611b87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f29061221d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461168e919061240f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116f2919061237d565b60405180910390a3611705848484611b8c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561177b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117729061227d565b60405180910390fd5b61178782600083611b87565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906121bd565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546118649190612584565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118c9919061237d565b60405180910390a36118dd83600084611b8c565b505050565b6118ea610a6a565b611929576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119209061219d565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61196d61122b565b60405161197a91906120d3565b60405180910390a1565b61198c610a6a565b156119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c39061223d565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a1061122b565b604051611a1d91906120d3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e9061235d565b60405180910390fd5b611aa360008383611b87565b8060026000828254611ab5919061240f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0a919061240f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6f919061237d565b60405180910390a3611b8360008383611b8c565b5050565b505050565b505050565b600081359050611ba081612b0f565b92915050565b600081519050611bb581612b26565b92915050565b60008083601f840112611bcd57600080fd5b8235905067ffffffffffffffff811115611be657600080fd5b602083019150836001820283011115611bfe57600080fd5b9250929050565b600081359050611c1481612b3d565b92915050565b600081519050611c2981612b3d565b92915050565b600060208284031215611c4157600080fd5b6000611c4f84828501611b91565b91505092915050565b60008060408385031215611c6b57600080fd5b6000611c7985828601611b91565b9250506020611c8a85828601611b91565b9150509250929050565b600080600060608486031215611ca957600080fd5b6000611cb786828701611b91565b9350506020611cc886828701611b91565b9250506040611cd986828701611c05565b9150509250925092565b60008060408385031215611cf657600080fd5b6000611d0485828601611b91565b9250506020611d1585828601611c05565b9150509250929050565b600060208284031215611d3157600080fd5b6000611d3f84828501611ba6565b91505092915050565b600060208284031215611d5a57600080fd5b6000611d6884828501611c05565b91505092915050565b600060208284031215611d8357600080fd5b6000611d9184828501611c1a565b91505092915050565b600080600060408486031215611daf57600080fd5b6000611dbd86828701611c05565b935050602084013567ffffffffffffffff811115611dda57600080fd5b611de686828701611bbb565b92509250509250925092565b611dfb816125b8565b82525050565b611e0a816125ca565b82525050565b611e19816125d6565b82525050565b6000611e2b83856123fe565b9350611e38838584612617565b611e4183612718565b840190509392505050565b6000611e57826123f3565b611e6181856123fe565b9350611e71818560208601612626565b611e7a81612718565b840191505092915050565b6000611e926023836123fe565b9150611e9d82612729565b604082019050919050565b6000611eb56014836123fe565b9150611ec082612778565b602082019050919050565b6000611ed86022836123fe565b9150611ee3826127a1565b604082019050919050565b6000611efb6022836123fe565b9150611f06826127f0565b604082019050919050565b6000611f1e601d836123fe565b9150611f298261283f565b602082019050919050565b6000611f416026836123fe565b9150611f4c82612868565b604082019050919050565b6000611f646010836123fe565b9150611f6f826128b7565b602082019050919050565b6000611f876020836123fe565b9150611f92826128e0565b602082019050919050565b6000611faa6021836123fe565b9150611fb582612909565b604082019050919050565b6000611fcd6025836123fe565b9150611fd882612958565b604082019050919050565b6000611ff06014836123fe565b9150611ffb826129a7565b602082019050919050565b60006120136024836123fe565b915061201e826129d0565b604082019050919050565b6000612036601f836123fe565b915061204182612a1f565b602082019050919050565b60006120596022836123fe565b915061206482612a48565b604082019050919050565b600061207c6025836123fe565b915061208782612a97565b604082019050919050565b600061209f601f836123fe565b91506120aa82612ae6565b602082019050919050565b6120be81612600565b82525050565b6120cd8161260a565b82525050565b60006020820190506120e86000830184611df2565b92915050565b60006060820190506121036000830186611df2565b6121106020830185611df2565b61211d60408301846120b5565b949350505050565b600060208201905061213a6000830184611e01565b92915050565b60006020820190506121556000830184611e10565b92915050565b600060208201905081810360008301526121758184611e4c565b905092915050565b6000602082019050818103600083015261219681611e85565b9050919050565b600060208201905081810360008301526121b681611ea8565b9050919050565b600060208201905081810360008301526121d681611ecb565b9050919050565b600060208201905081810360008301526121f681611eee565b9050919050565b6000602082019050818103600083015261221681611f11565b9050919050565b6000602082019050818103600083015261223681611f34565b9050919050565b6000602082019050818103600083015261225681611f57565b9050919050565b6000602082019050818103600083015261227681611f7a565b9050919050565b6000602082019050818103600083015261229681611f9d565b9050919050565b600060208201905081810360008301526122b681611fc0565b9050919050565b600060208201905081810360008301526122d681611fe3565b9050919050565b600060208201905081810360008301526122f681612006565b9050919050565b6000602082019050818103600083015261231681612029565b9050919050565b600060208201905081810360008301526123368161204c565b9050919050565b600060208201905081810360008301526123568161206f565b9050919050565b6000602082019050818103600083015261237681612092565b9050919050565b600060208201905061239260008301846120b5565b92915050565b60006060820190506123ad60008301876120b5565b6123ba60208301866120b5565b81810360408301526123cd818486611e1f565b905095945050505050565b60006020820190506123ed60008301846120c4565b92915050565b600081519050919050565b600082825260208201905092915050565b600061241a82612600565b915061242583612600565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561245a5761245961268b565b5b828201905092915050565b600061247082612600565b915061247b83612600565b92508261248b5761248a6126ba565b5b828204905092915050565b60006124a182612600565b91506124ac83612600565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156124e5576124e461268b565b5b828202905092915050565b60006124fb826125d6565b9150612506836125d6565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156125415761254061268b565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0182136000841216156125795761257861268b565b5b828203905092915050565b600061258f82612600565b915061259a83612600565b9250828210156125ad576125ac61268b565b5b828203905092915050565b60006125c3826125e0565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612644578082015181840152602081019050612629565b83811115612653576000848401525b50505050565b6000600282049050600182168061267157607f821691505b60208210811415612685576126846126e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f7373727746544d3a207061757365207065726d697373696f6e2064656e696564600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f7373727746544d3a204c5020697320656d707479000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f7373727746544d3a20756e7061757365207065726d697373696f6e2064656e6960008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612b18816125b8565b8114612b2357600080fd5b50565b612b2f816125ca565b8114612b3a57600080fd5b50565b612b4681612600565b8114612b5157600080fd5b5056fea2646970667358221220226c8a101d6cb384085483bec5aa9cb011e93923e540f006a358c150ddf9746b64736f6c63430008040033000000000000000000000000efd08f19dcd2ee843918c842e8d830abf8d6875200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000efd08f19dcd2ee843918c842e8d830abf8d6875200000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
-----Decoded View---------------
Arg [0] : lpwallet (address): 0xefd08f19dcd2ee843918c842e8d830abf8d68752
Arg [1] : baseToken (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000efd08f19dcd2ee843918c842e8d830abf8d68752
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Deployed ByteCode Sourcemap
31267:3558:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6768:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9119:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7888:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33323:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9900:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:403;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32465:778;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10604:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34684:138;;;:::i;:::-;;33927:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18699:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8059:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34546:132;;;:::i;:::-;;6987:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33877:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11347:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8392:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31848:560;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8648:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34195:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6768:100;6822:13;6855:5;6848:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6768:100;:::o;9119:201::-;9202:4;9219:13;9235:12;:10;:12::i;:::-;9219:28;;9258:32;9267:5;9274:7;9283:6;9258:8;:32::i;:::-;9308:4;9301:11;;;9119:201;;;;:::o;7888:108::-;7949:7;7976:12;;7969:19;;7888:108;:::o;33323:135::-;33362:6;33437:12;;33395:10;;;;;;;;;;;:20;;;33416:9;;;;;;;;;;;33395:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33388:62;;;;:::i;:::-;33381:69;;33323:135;:::o;9900:295::-;10031:4;10048:15;10066:12;:10;:12::i;:::-;10048:30;;10089:38;10105:4;10111:7;10120:6;10089:15;:38::i;:::-;10138:27;10148:4;10154:2;10158:6;10138:9;:27::i;:::-;10183:4;10176:11;;;9900:295;;;;;:::o;33466:403::-;33503:7;33523:9;33535:8;:6;:8::i;:::-;33523:20;;33554:12;33574:1;33569:2;:6;:33;;33599:2;33569:33;;;33586:1;33569:33;33554:48;;33613:14;33743:1;33736:4;:8;33732:106;;;33779:4;33770:6;:13;;;;:::i;:::-;33761:22;;33732:106;;;33825:1;33816:10;;33732:106;33855:6;33848:13;;;;;33466:403;:::o;32465:778::-;32544:7;19025:8;:6;:8::i;:::-;19024:9;19016:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30212:1:::1;30810:7;;:19;;30802:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30212:1;30943:7;:18;;;;32564:15:::2;32582:10;32564:28;;32603:9;32615:8;:6;:8::i;:::-;32603:20;;32634:12;32654:1;32649:2;:6;:33;;32679:2;32649:33;;;32666:1;32649:33;32634:48;;32693:14;32729:4;32720:13;;32761:1;32752:6;:10;32744:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;32853:18;32894:6;32884;32875;:15;;;;:::i;:::-;32874:26;;;;:::i;:::-;32853:47;;32913:22;32919:7;32928:6;32913:5;:22::i;:::-;32965:12;;32952:10;:25;32948:133;;;33009:1;32994:12;:16;;;;32948:133;;;33059:10;33043:12;;:26;;;;;;;:::i;:::-;;;;;;;;32948:133;33091:10;;;;;;;;;;;:23;;;33115:9;;;;;;;;;;;33126:7;33135:10;33091:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33190:1;33164:41;;33173:7;33164:41;;;33194:10;33164:41;;;;;;:::i;:::-;;;;;;;;33225:10;33218:17;;;;;;;30168:1:::1;31122:7;:22;;;;32465:778:::0;;;:::o;7730:93::-;7788:5;7813:2;7806:9;;7730:93;:::o;10604:240::-;10692:4;10709:13;10725:12;:10;:12::i;:::-;10709:28;;10748:66;10757:5;10764:7;10803:10;10773:11;:18;10785:5;10773:18;;;;;;;;;;;;;;;:27;10792:7;10773:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;10748:8;:66::i;:::-;10832:4;10825:11;;;10604:240;;;;:::o;34684:138::-;34745:9;;;;;;;;;;;34731:23;;:10;:23;;;34723:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34804:10;:8;:10::i;:::-;34684:138::o;33927:83::-;33977:25;33983:10;33995:6;33977:5;:25::i;:::-;33927:83;:::o;18699:86::-;18746:4;18770:7;;;;;;;;;;;18763:14;;18699:86;:::o;8059:127::-;8133:7;8160:9;:18;8170:7;8160:18;;;;;;;;;;;;;;;;8153:25;;8059:127;;;:::o;34546:132::-;34605:9;;;;;;;;;;;34591:23;;:10;:23;;;34583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34662:8;:6;:8::i;:::-;34546:132::o;6987:104::-;7043:13;7076:7;7069:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:104;:::o;33877:42::-;;:::o;11347:438::-;11440:4;11457:13;11473:12;:10;:12::i;:::-;11457:28;;11496:24;11523:11;:18;11535:5;11523:18;;;;;;;;;;;;;;;:27;11542:7;11523:27;;;;;;;;;;;;;;;;11496:54;;11589:15;11569:16;:35;;11561:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11682:60;11691:5;11698:7;11726:15;11707:16;:34;11682:8;:60::i;:::-;11773:4;11766:11;;;;11347:438;;;;:::o;8392:193::-;8471:4;8488:13;8504:12;:10;:12::i;:::-;8488:28;;8527;8537:5;8544:2;8548:6;8527:9;:28::i;:::-;8573:4;8566:11;;;8392:193;;;;:::o;31848:560::-;31926:4;19025:8;:6;:8::i;:::-;19024:9;19016:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;30212:1:::1;30810:7;;:19;;30802:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30212:1;30943:7;:18;;;;31942:15:::2;31960:10;31942:28;;31981:14;32017:6;:4;:6::i;:::-;32008:15;;32051:1;32042:6;:10;32034:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;32143:17;32183:6;32173;32164;:15;;;;:::i;:::-;32163:26;;;;:::i;:::-;32143:46;;32202:10;;;;;;;;;;;:23;;;32226:7;32235:9;;;;;;;;;;;32246:6;32202:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32280:6;32264:12;;:22;;;;;;;:::i;:::-;;;;;;;;32297:25;32303:7;32312:9;32297:5;:25::i;:::-;32358:9;;;;;;;;;;;32340:36;;32349:7;32340:36;;;32369:6;32340:36;;;;;;:::i;:::-;;;;;;;;32396:4;32389:11;;;;;30168:1:::1;31122:7;:22;;;;31848:560:::0;;;:::o;8648:151::-;8737:7;8764:11;:18;8776:5;8764:18;;;;;;;;;;;;;;;:27;8783:7;8764:27;;;;;;;;;;;;;;;;8757:34;;8648:151;;;;:::o;34195:343::-;19025:8;:6;:8::i;:::-;19024:9;19016:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:15:::1;34299:10;34281:28;;34320:10;;;;;;;;;;;:23;;;34344:7;34353:9;;;;;;;;;;;34364:6;34320:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34382:11;34412:5;34406:2;34397:6;:11;;;;:::i;:::-;34396:21;;;;:::i;:::-;34382:35;;34467:3;34458:6;:12;;;;:::i;:::-;34441;;:30;;;;;;;:::i;:::-;;;;;;;;34501:9;;;;;;;;;;;34487:43;;34492:7;34487:43;;;34512:6;34520:3;34525:4;;34487:43;;;;;;;;;:::i;:::-;;;;;;;;19065:1;;34195:343:::0;;;:::o;4404:98::-;4457:7;4484:10;4477:17;;4404:98;:::o;14983:380::-;15136:1;15119:19;;:5;:19;;;;15111:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15217:1;15198:21;;:7;:21;;;;15190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15301:6;15271:11;:18;15283:5;15271:18;;;;;;;;;;;;;;;:27;15290:7;15271:27;;;;;;;;;;;;;;;:36;;;;15339:7;15323:32;;15332:5;15323:32;;;15348:6;15323:32;;;;;;:::i;:::-;;;;;;;;14983:380;;;:::o;15650:453::-;15785:24;15812:25;15822:5;15829:7;15812:9;:25::i;:::-;15785:52;;15872:17;15852:16;:37;15848:248;;15934:6;15914:16;:26;;15906:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16018:51;16027:5;16034:7;16062:6;16043:16;:25;16018:8;:51::i;:::-;15848:248;15650:453;;;;:::o;12264:671::-;12411:1;12395:18;;:4;:18;;;;12387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12488:1;12474:16;;:2;:16;;;;12466:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12543:38;12564:4;12570:2;12574:6;12543:20;:38::i;:::-;12594:19;12616:9;:15;12626:4;12616:15;;;;;;;;;;;;;;;;12594:37;;12665:6;12650:11;:21;;12642:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:6;12768:11;:20;12750:9;:15;12760:4;12750:15;;;;;;;;;;;;;;;:38;;;;12827:6;12810:9;:13;12820:2;12810:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12866:2;12851:26;;12860:4;12851:26;;;12870:6;12851:26;;;;;;:::i;:::-;;;;;;;;12890:37;12910:4;12916:2;12920:6;12890:19;:37::i;:::-;12264:671;;;;:::o;13954:591::-;14057:1;14038:21;;:7;:21;;;;14030:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14110:49;14131:7;14148:1;14152:6;14110:20;:49::i;:::-;14172:22;14197:9;:18;14207:7;14197:18;;;;;;;;;;;;;;;;14172:43;;14252:6;14234:14;:24;;14226:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14371:6;14354:14;:23;14333:9;:18;14343:7;14333:18;;;;;;;;;;;;;;;:44;;;;14415:6;14399:12;;:22;;;;;;;:::i;:::-;;;;;;;;14465:1;14439:37;;14448:7;14439:37;;;14469:6;14439:37;;;;;;:::i;:::-;;;;;;;;14489:48;14509:7;14526:1;14530:6;14489:19;:48::i;:::-;13954:591;;;:::o;19758:120::-;19302:8;:6;:8::i;:::-;19294:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19827:5:::1;19817:7;;:15;;;;;;;;;;;;;;;;;;19848:22;19857:12;:10;:12::i;:::-;19848:22;;;;;;:::i;:::-;;;;;;;;19758:120::o:0;19499:118::-;19025:8;:6;:8::i;:::-;19024:9;19016:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;19569:4:::1;19559:7;;:14;;;;;;;;;;;;;;;;;;19589:20;19596:12;:10;:12::i;:::-;19589:20;;;;;;:::i;:::-;;;;;;;;19499:118::o:0;13222:399::-;13325:1;13306:21;;:7;:21;;;;13298:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13376:49;13405:1;13409:7;13418:6;13376:20;:49::i;:::-;13454:6;13438:12;;:22;;;;;;;:::i;:::-;;;;;;;;13493:6;13471:9;:18;13481:7;13471:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13536:7;13515:37;;13532:1;13515:37;;;13545:6;13515:37;;;;;;:::i;:::-;;;;;;;;13565:48;13593:1;13597:7;13606:6;13565:19;:48::i;:::-;13222:399;;:::o;16703:125::-;;;;:::o;17432:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;309:352::-;367:8;377:6;427:3;420:4;412:6;408:17;404:27;394:2;;445:1;442;435:12;394:2;481:6;468:20;458:30;;511:18;503:6;500:30;497:2;;;543:1;540;533:12;497:2;580:4;572:6;568:17;556:29;;634:3;626:4;618:6;614:17;604:8;600:32;597:41;594:2;;;651:1;648;641:12;594:2;384:277;;;;;:::o;667:139::-;713:5;751:6;738:20;729:29;;767:33;794:5;767:33;:::i;:::-;719:87;;;;:::o;812:143::-;869:5;900:6;894:13;885:22;;916:33;943:5;916:33;:::i;:::-;875:80;;;;:::o;961:262::-;1020:6;1069:2;1057:9;1048:7;1044:23;1040:32;1037:2;;;1085:1;1082;1075:12;1037:2;1128:1;1153:53;1198:7;1189:6;1178:9;1174:22;1153:53;:::i;:::-;1143:63;;1099:117;1027:196;;;;:::o;1229:407::-;1297:6;1305;1354:2;1342:9;1333:7;1329:23;1325:32;1322:2;;;1370:1;1367;1360:12;1322:2;1413:1;1438:53;1483:7;1474:6;1463:9;1459:22;1438:53;:::i;:::-;1428:63;;1384:117;1540:2;1566:53;1611:7;1602:6;1591:9;1587:22;1566:53;:::i;:::-;1556:63;;1511:118;1312:324;;;;;:::o;1642:552::-;1719:6;1727;1735;1784:2;1772:9;1763:7;1759:23;1755:32;1752:2;;;1800:1;1797;1790:12;1752:2;1843:1;1868:53;1913:7;1904:6;1893:9;1889:22;1868:53;:::i;:::-;1858:63;;1814:117;1970:2;1996:53;2041:7;2032:6;2021:9;2017:22;1996:53;:::i;:::-;1986:63;;1941:118;2098:2;2124:53;2169:7;2160:6;2149:9;2145:22;2124:53;:::i;:::-;2114:63;;2069:118;1742:452;;;;;:::o;2200:407::-;2268:6;2276;2325:2;2313:9;2304:7;2300:23;2296:32;2293:2;;;2341:1;2338;2331:12;2293:2;2384:1;2409:53;2454:7;2445:6;2434:9;2430:22;2409:53;:::i;:::-;2399:63;;2355:117;2511:2;2537:53;2582:7;2573:6;2562:9;2558:22;2537:53;:::i;:::-;2527:63;;2482:118;2283:324;;;;;:::o;2613:278::-;2680:6;2729:2;2717:9;2708:7;2704:23;2700:32;2697:2;;;2745:1;2742;2735:12;2697:2;2788:1;2813:61;2866:7;2857:6;2846:9;2842:22;2813:61;:::i;:::-;2803:71;;2759:125;2687:204;;;;:::o;2897:262::-;2956:6;3005:2;2993:9;2984:7;2980:23;2976:32;2973:2;;;3021:1;3018;3011:12;2973:2;3064:1;3089:53;3134:7;3125:6;3114:9;3110:22;3089:53;:::i;:::-;3079:63;;3035:117;2963:196;;;;:::o;3165:284::-;3235:6;3284:2;3272:9;3263:7;3259:23;3255:32;3252:2;;;3300:1;3297;3290:12;3252:2;3343:1;3368:64;3424:7;3415:6;3404:9;3400:22;3368:64;:::i;:::-;3358:74;;3314:128;3242:207;;;;:::o;3455:540::-;3535:6;3543;3551;3600:2;3588:9;3579:7;3575:23;3571:32;3568:2;;;3616:1;3613;3606:12;3568:2;3659:1;3684:53;3729:7;3720:6;3709:9;3705:22;3684:53;:::i;:::-;3674:63;;3630:117;3814:2;3803:9;3799:18;3786:32;3845:18;3837:6;3834:30;3831:2;;;3877:1;3874;3867:12;3831:2;3913:65;3970:7;3961:6;3950:9;3946:22;3913:65;:::i;:::-;3895:83;;;;3757:231;3558:437;;;;;:::o;4001:118::-;4088:24;4106:5;4088:24;:::i;:::-;4083:3;4076:37;4066:53;;:::o;4125:109::-;4206:21;4221:5;4206:21;:::i;:::-;4201:3;4194:34;4184:50;;:::o;4240:115::-;4325:23;4342:5;4325:23;:::i;:::-;4320:3;4313:36;4303:52;;:::o;4385:304::-;4483:3;4504:71;4568:6;4563:3;4504:71;:::i;:::-;4497:78;;4585:43;4621:6;4616:3;4609:5;4585:43;:::i;:::-;4653:29;4675:6;4653:29;:::i;:::-;4648:3;4644:39;4637:46;;4487:202;;;;;:::o;4695:364::-;4783:3;4811:39;4844:5;4811:39;:::i;:::-;4866:71;4930:6;4925:3;4866:71;:::i;:::-;4859:78;;4946:52;4991:6;4986:3;4979:4;4972:5;4968:16;4946:52;:::i;:::-;5023:29;5045:6;5023:29;:::i;:::-;5018:3;5014:39;5007:46;;4787:272;;;;;:::o;5065:366::-;5207:3;5228:67;5292:2;5287:3;5228:67;:::i;:::-;5221:74;;5304:93;5393:3;5304:93;:::i;:::-;5422:2;5417:3;5413:12;5406:19;;5211:220;;;:::o;5437:366::-;5579:3;5600:67;5664:2;5659:3;5600:67;:::i;:::-;5593:74;;5676:93;5765:3;5676:93;:::i;:::-;5794:2;5789:3;5785:12;5778:19;;5583:220;;;:::o;5809:366::-;5951:3;5972:67;6036:2;6031:3;5972:67;:::i;:::-;5965:74;;6048:93;6137:3;6048:93;:::i;:::-;6166:2;6161:3;6157:12;6150:19;;5955:220;;;:::o;6181:366::-;6323:3;6344:67;6408:2;6403:3;6344:67;:::i;:::-;6337:74;;6420:93;6509:3;6420:93;:::i;:::-;6538:2;6533:3;6529:12;6522:19;;6327:220;;;:::o;6553:366::-;6695:3;6716:67;6780:2;6775:3;6716:67;:::i;:::-;6709:74;;6792:93;6881:3;6792:93;:::i;:::-;6910:2;6905:3;6901:12;6894:19;;6699:220;;;:::o;6925:366::-;7067:3;7088:67;7152:2;7147:3;7088:67;:::i;:::-;7081:74;;7164:93;7253:3;7164:93;:::i;:::-;7282:2;7277:3;7273:12;7266:19;;7071:220;;;:::o;7297:366::-;7439:3;7460:67;7524:2;7519:3;7460:67;:::i;:::-;7453:74;;7536:93;7625:3;7536:93;:::i;:::-;7654:2;7649:3;7645:12;7638:19;;7443:220;;;:::o;7669:366::-;7811:3;7832:67;7896:2;7891:3;7832:67;:::i;:::-;7825:74;;7908:93;7997:3;7908:93;:::i;:::-;8026:2;8021:3;8017:12;8010:19;;7815:220;;;:::o;8041:366::-;8183:3;8204:67;8268:2;8263:3;8204:67;:::i;:::-;8197:74;;8280:93;8369:3;8280:93;:::i;:::-;8398:2;8393:3;8389:12;8382:19;;8187:220;;;:::o;8413:366::-;8555:3;8576:67;8640:2;8635:3;8576:67;:::i;:::-;8569:74;;8652:93;8741:3;8652:93;:::i;:::-;8770:2;8765:3;8761:12;8754:19;;8559:220;;;:::o;8785:366::-;8927:3;8948:67;9012:2;9007:3;8948:67;:::i;:::-;8941:74;;9024:93;9113:3;9024:93;:::i;:::-;9142:2;9137:3;9133:12;9126:19;;8931:220;;;:::o;9157:366::-;9299:3;9320:67;9384:2;9379:3;9320:67;:::i;:::-;9313:74;;9396:93;9485:3;9396:93;:::i;:::-;9514:2;9509:3;9505:12;9498:19;;9303:220;;;:::o;9529:366::-;9671:3;9692:67;9756:2;9751:3;9692:67;:::i;:::-;9685:74;;9768:93;9857:3;9768:93;:::i;:::-;9886:2;9881:3;9877:12;9870:19;;9675:220;;;:::o;9901:366::-;10043:3;10064:67;10128:2;10123:3;10064:67;:::i;:::-;10057:74;;10140:93;10229:3;10140:93;:::i;:::-;10258:2;10253:3;10249:12;10242:19;;10047:220;;;:::o;10273:366::-;10415:3;10436:67;10500:2;10495:3;10436:67;:::i;:::-;10429:74;;10512:93;10601:3;10512:93;:::i;:::-;10630:2;10625:3;10621:12;10614:19;;10419:220;;;:::o;10645:366::-;10787:3;10808:67;10872:2;10867:3;10808:67;:::i;:::-;10801:74;;10884:93;10973:3;10884:93;:::i;:::-;11002:2;10997:3;10993:12;10986:19;;10791:220;;;:::o;11017:118::-;11104:24;11122:5;11104:24;:::i;:::-;11099:3;11092:37;11082:53;;:::o;11141:112::-;11224:22;11240:5;11224:22;:::i;:::-;11219:3;11212:35;11202:51;;:::o;11259:222::-;11352:4;11390:2;11379:9;11375:18;11367:26;;11403:71;11471:1;11460:9;11456:17;11447:6;11403:71;:::i;:::-;11357:124;;;;:::o;11487:442::-;11636:4;11674:2;11663:9;11659:18;11651:26;;11687:71;11755:1;11744:9;11740:17;11731:6;11687:71;:::i;:::-;11768:72;11836:2;11825:9;11821:18;11812:6;11768:72;:::i;:::-;11850;11918:2;11907:9;11903:18;11894:6;11850:72;:::i;:::-;11641:288;;;;;;:::o;11935:210::-;12022:4;12060:2;12049:9;12045:18;12037:26;;12073:65;12135:1;12124:9;12120:17;12111:6;12073:65;:::i;:::-;12027:118;;;;:::o;12151:218::-;12242:4;12280:2;12269:9;12265:18;12257:26;;12293:69;12359:1;12348:9;12344:17;12335:6;12293:69;:::i;:::-;12247:122;;;;:::o;12375:313::-;12488:4;12526:2;12515:9;12511:18;12503:26;;12575:9;12569:4;12565:20;12561:1;12550:9;12546:17;12539:47;12603:78;12676:4;12667:6;12603:78;:::i;:::-;12595:86;;12493:195;;;;:::o;12694:419::-;12860:4;12898:2;12887:9;12883:18;12875:26;;12947:9;12941:4;12937:20;12933:1;12922:9;12918:17;12911:47;12975:131;13101:4;12975:131;:::i;:::-;12967:139;;12865:248;;;:::o;13119:419::-;13285:4;13323:2;13312:9;13308:18;13300:26;;13372:9;13366:4;13362:20;13358:1;13347:9;13343:17;13336:47;13400:131;13526:4;13400:131;:::i;:::-;13392:139;;13290:248;;;:::o;13544:419::-;13710:4;13748:2;13737:9;13733:18;13725:26;;13797:9;13791:4;13787:20;13783:1;13772:9;13768:17;13761:47;13825:131;13951:4;13825:131;:::i;:::-;13817:139;;13715:248;;;:::o;13969:419::-;14135:4;14173:2;14162:9;14158:18;14150:26;;14222:9;14216:4;14212:20;14208:1;14197:9;14193:17;14186:47;14250:131;14376:4;14250:131;:::i;:::-;14242:139;;14140:248;;;:::o;14394:419::-;14560:4;14598:2;14587:9;14583:18;14575:26;;14647:9;14641:4;14637:20;14633:1;14622:9;14618:17;14611:47;14675:131;14801:4;14675:131;:::i;:::-;14667:139;;14565:248;;;:::o;14819:419::-;14985:4;15023:2;15012:9;15008:18;15000:26;;15072:9;15066:4;15062:20;15058:1;15047:9;15043:17;15036:47;15100:131;15226:4;15100:131;:::i;:::-;15092:139;;14990:248;;;:::o;15244:419::-;15410:4;15448:2;15437:9;15433:18;15425:26;;15497:9;15491:4;15487:20;15483:1;15472:9;15468:17;15461:47;15525:131;15651:4;15525:131;:::i;:::-;15517:139;;15415:248;;;:::o;15669:419::-;15835:4;15873:2;15862:9;15858:18;15850:26;;15922:9;15916:4;15912:20;15908:1;15897:9;15893:17;15886:47;15950:131;16076:4;15950:131;:::i;:::-;15942:139;;15840:248;;;:::o;16094:419::-;16260:4;16298:2;16287:9;16283:18;16275:26;;16347:9;16341:4;16337:20;16333:1;16322:9;16318:17;16311:47;16375:131;16501:4;16375:131;:::i;:::-;16367:139;;16265:248;;;:::o;16519:419::-;16685:4;16723:2;16712:9;16708:18;16700:26;;16772:9;16766:4;16762:20;16758:1;16747:9;16743:17;16736:47;16800:131;16926:4;16800:131;:::i;:::-;16792:139;;16690:248;;;:::o;16944:419::-;17110:4;17148:2;17137:9;17133:18;17125:26;;17197:9;17191:4;17187:20;17183:1;17172:9;17168:17;17161:47;17225:131;17351:4;17225:131;:::i;:::-;17217:139;;17115:248;;;:::o;17369:419::-;17535:4;17573:2;17562:9;17558:18;17550:26;;17622:9;17616:4;17612:20;17608:1;17597:9;17593:17;17586:47;17650:131;17776:4;17650:131;:::i;:::-;17642:139;;17540:248;;;:::o;17794:419::-;17960:4;17998:2;17987:9;17983:18;17975:26;;18047:9;18041:4;18037:20;18033:1;18022:9;18018:17;18011:47;18075:131;18201:4;18075:131;:::i;:::-;18067:139;;17965:248;;;:::o;18219:419::-;18385:4;18423:2;18412:9;18408:18;18400:26;;18472:9;18466:4;18462:20;18458:1;18447:9;18443:17;18436:47;18500:131;18626:4;18500:131;:::i;:::-;18492:139;;18390:248;;;:::o;18644:419::-;18810:4;18848:2;18837:9;18833:18;18825:26;;18897:9;18891:4;18887:20;18883:1;18872:9;18868:17;18861:47;18925:131;19051:4;18925:131;:::i;:::-;18917:139;;18815:248;;;:::o;19069:419::-;19235:4;19273:2;19262:9;19258:18;19250:26;;19322:9;19316:4;19312:20;19308:1;19297:9;19293:17;19286:47;19350:131;19476:4;19350:131;:::i;:::-;19342:139;;19240:248;;;:::o;19494:222::-;19587:4;19625:2;19614:9;19610:18;19602:26;;19638:71;19706:1;19695:9;19691:17;19682:6;19638:71;:::i;:::-;19592:124;;;;:::o;19722:553::-;19901:4;19939:2;19928:9;19924:18;19916:26;;19952:71;20020:1;20009:9;20005:17;19996:6;19952:71;:::i;:::-;20033:72;20101:2;20090:9;20086:18;20077:6;20033:72;:::i;:::-;20152:9;20146:4;20142:20;20137:2;20126:9;20122:18;20115:48;20180:88;20263:4;20254:6;20246;20180:88;:::i;:::-;20172:96;;19906:369;;;;;;;:::o;20281:214::-;20370:4;20408:2;20397:9;20393:18;20385:26;;20421:67;20485:1;20474:9;20470:17;20461:6;20421:67;:::i;:::-;20375:120;;;;:::o;20501:99::-;20553:6;20587:5;20581:12;20571:22;;20560:40;;;:::o;20606:169::-;20690:11;20724:6;20719:3;20712:19;20764:4;20759:3;20755:14;20740:29;;20702:73;;;;:::o;20781:305::-;20821:3;20840:20;20858:1;20840:20;:::i;:::-;20835:25;;20874:20;20892:1;20874:20;:::i;:::-;20869:25;;21028:1;20960:66;20956:74;20953:1;20950:81;20947:2;;;21034:18;;:::i;:::-;20947:2;21078:1;21075;21071:9;21064:16;;20825:261;;;;:::o;21092:185::-;21132:1;21149:20;21167:1;21149:20;:::i;:::-;21144:25;;21183:20;21201:1;21183:20;:::i;:::-;21178:25;;21222:1;21212:2;;21227:18;;:::i;:::-;21212:2;21269:1;21266;21262:9;21257:14;;21134:143;;;;:::o;21283:348::-;21323:7;21346:20;21364:1;21346:20;:::i;:::-;21341:25;;21380:20;21398:1;21380:20;:::i;:::-;21375:25;;21568:1;21500:66;21496:74;21493:1;21490:81;21485:1;21478:9;21471:17;21467:105;21464:2;;;21575:18;;:::i;:::-;21464:2;21623:1;21620;21616:9;21605:20;;21331:300;;;;:::o;21637:527::-;21676:4;21696:19;21713:1;21696:19;:::i;:::-;21691:24;;21729:19;21746:1;21729:19;:::i;:::-;21724:24;;21918:1;21850:66;21846:74;21843:1;21839:82;21834:1;21831;21827:9;21820:17;21816:106;21813:2;;;21925:18;;:::i;:::-;21813:2;22104:1;22036:66;22032:74;22029:1;22025:82;22021:1;22018;22014:9;22010:98;22007:2;;;22111:18;;:::i;:::-;22007:2;22156:1;22153;22149:9;22141:17;;21681:483;;;;:::o;22170:191::-;22210:4;22230:20;22248:1;22230:20;:::i;:::-;22225:25;;22264:20;22282:1;22264:20;:::i;:::-;22259:25;;22303:1;22300;22297:8;22294:2;;;22308:18;;:::i;:::-;22294:2;22353:1;22350;22346:9;22338:17;;22215:146;;;;:::o;22367:96::-;22404:7;22433:24;22451:5;22433:24;:::i;:::-;22422:35;;22412:51;;;:::o;22469:90::-;22503:7;22546:5;22539:13;22532:21;22521:32;;22511:48;;;:::o;22565:76::-;22601:7;22630:5;22619:16;;22609:32;;;:::o;22647:126::-;22684:7;22724:42;22717:5;22713:54;22702:65;;22692:81;;;:::o;22779:77::-;22816:7;22845:5;22834:16;;22824:32;;;:::o;22862:86::-;22897:7;22937:4;22930:5;22926:16;22915:27;;22905:43;;;:::o;22954:154::-;23038:6;23033:3;23028;23015:30;23100:1;23091:6;23086:3;23082:16;23075:27;23005:103;;;:::o;23114:307::-;23182:1;23192:113;23206:6;23203:1;23200:13;23192:113;;;23291:1;23286:3;23282:11;23276:18;23272:1;23267:3;23263:11;23256:39;23228:2;23225:1;23221:10;23216:15;;23192:113;;;23323:6;23320:1;23317:13;23314:2;;;23403:1;23394:6;23389:3;23385:16;23378:27;23314:2;23163:258;;;;:::o;23427:320::-;23471:6;23508:1;23502:4;23498:12;23488:22;;23555:1;23549:4;23545:12;23576:18;23566:2;;23632:4;23624:6;23620:17;23610:27;;23566:2;23694;23686:6;23683:14;23663:18;23660:38;23657:2;;;23713:18;;:::i;:::-;23657:2;23478:269;;;;:::o;23753:180::-;23801:77;23798:1;23791:88;23898:4;23895:1;23888:15;23922:4;23919:1;23912:15;23939:180;23987:77;23984:1;23977:88;24084:4;24081:1;24074:15;24108:4;24105:1;24098:15;24125:180;24173:77;24170:1;24163:88;24270:4;24267:1;24260:15;24294:4;24291:1;24284:15;24311:102;24352:6;24403:2;24399:7;24394:2;24387:5;24383:14;24379:28;24369:38;;24359:54;;;:::o;24419:222::-;24559:34;24555:1;24547:6;24543:14;24536:58;24628:5;24623:2;24615:6;24611:15;24604:30;24525:116;:::o;24647:170::-;24787:22;24783:1;24775:6;24771:14;24764:46;24753:64;:::o;24823:221::-;24963:34;24959:1;24951:6;24947:14;24940:58;25032:4;25027:2;25019:6;25015:15;25008:29;24929:115;:::o;25050:221::-;25190:34;25186:1;25178:6;25174:14;25167:58;25259:4;25254:2;25246:6;25242:15;25235:29;25156:115;:::o;25277:179::-;25417:31;25413:1;25405:6;25401:14;25394:55;25383:73;:::o;25462:225::-;25602:34;25598:1;25590:6;25586:14;25579:58;25671:8;25666:2;25658:6;25654:15;25647:33;25568:119;:::o;25693:166::-;25833:18;25829:1;25821:6;25817:14;25810:42;25799:60;:::o;25865:182::-;26005:34;26001:1;25993:6;25989:14;25982:58;25971:76;:::o;26053:220::-;26193:34;26189:1;26181:6;26177:14;26170:58;26262:3;26257:2;26249:6;26245:15;26238:28;26159:114;:::o;26279:224::-;26419:34;26415:1;26407:6;26403:14;26396:58;26488:7;26483:2;26475:6;26471:15;26464:32;26385:118;:::o;26509:170::-;26649:22;26645:1;26637:6;26633:14;26626:46;26615:64;:::o;26685:223::-;26825:34;26821:1;26813:6;26809:14;26802:58;26894:6;26889:2;26881:6;26877:15;26870:31;26791:117;:::o;26914:181::-;27054:33;27050:1;27042:6;27038:14;27031:57;27020:75;:::o;27101:221::-;27241:34;27237:1;27229:6;27225:14;27218:58;27310:4;27305:2;27297:6;27293:15;27286:29;27207:115;:::o;27328:224::-;27468:34;27464:1;27456:6;27452:14;27445:58;27537:7;27532:2;27524:6;27520:15;27513:32;27434:118;:::o;27558:181::-;27698:33;27694:1;27686:6;27682:14;27675:57;27664:75;:::o;27745:122::-;27818:24;27836:5;27818:24;:::i;:::-;27811:5;27808:35;27798:2;;27857:1;27854;27847:12;27798:2;27788:79;:::o;27873:116::-;27943:21;27958:5;27943:21;:::i;:::-;27936:5;27933:32;27923:2;;27979:1;27976;27969:12;27923:2;27913:76;:::o;27995:122::-;28068:24;28086:5;28068:24;:::i;:::-;28061:5;28058:35;28048:2;;28107:1;28104;28097:12;28048:2;28038:79;:::o
Swarm Source
ipfs://226c8a101d6cb384085483bec5aa9cb011e93923e540f006a358c150ddf9746b