Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
StrategyCommonChefLP
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-08-03 */ // SPDX-License-Identifier: MIT // File: @openzeppelin-4/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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); } // File: @openzeppelin-4/contracts/token/ERC20/extensions/IERC20Metadata.sol // 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-4/contracts/utils/Context.sol // 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-4/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.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, allowance(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 = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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 Updates `owner` s allowance for `spender` based on spent `amount`. * * 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-4/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin-4/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin-4/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (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)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @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: contracts/BIFI/interfaces/common/IUniswapRouterETH.sol pragma solidity >=0.6.0 <0.9.0; interface IUniswapRouterETH { function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } // File: contracts/BIFI/interfaces/common/IUniswapV2Pair.sol pragma solidity >=0.6.0 <0.9.0; interface IUniswapV2Pair { function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function burn(address to) external returns (uint amount0, uint amount1); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } // File: contracts/BIFI/interfaces/common/IMasterChef.sol pragma solidity >=0.6.0 <0.9.0; interface IMasterChef { function deposit(uint256 _pid, uint256 _amount) external; function withdraw(uint256 _pid, uint256 _amount) external; function enterStaking(uint256 _amount) external; function leaveStaking(uint256 _amount) external; function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function emergencyWithdraw(uint256 _pid) external; } // File: @openzeppelin-4/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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-4/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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: contracts/BIFI/interfaces/common/IFeeConfig.sol pragma solidity ^0.8.0; interface IFeeConfig { struct FeeCategory { uint256 total; uint256 beefy; uint256 call; uint256 strategist; string label; bool active; } function getFees(address strategy) external view returns (FeeCategory memory); function stratFeeId(address strategy) external view returns (uint256); function setStratFeeId(uint256 feeId) external; } // File: contracts/BIFI/strategies/Common/StratFeeManager.sol pragma solidity ^0.8.0; contract StratFeeManager is Ownable, Pausable { struct CommonAddresses { address vault; address unirouter; address keeper; address strategist; address beefyFeeRecipient; address beefyFeeConfig; } // common addresses for the strategy address public vault; address public unirouter; address public keeper; address public strategist; address public beefyFeeRecipient; IFeeConfig public beefyFeeConfig; uint256 constant DIVISOR = 1 ether; uint256 constant public WITHDRAWAL_FEE_CAP = 50; uint256 constant public WITHDRAWAL_MAX = 10000; uint256 public withdrawalFee = 10; event SetStratFeeId(uint256 feeId); event SetWithdrawalFee(uint256 withdrawalFee); event SetVault(address vault); event SetUnirouter(address unirouter); event SetKeeper(address keeper); event SetStrategist(address strategist); event SetBeefyFeeRecipient(address beefyFeeRecipient); event SetBeefyFeeConfig(address beefyFeeConfig); constructor( CommonAddresses memory _commonAddresses ) { vault = _commonAddresses.vault; unirouter = _commonAddresses.unirouter; keeper = _commonAddresses.keeper; strategist = _commonAddresses.strategist; beefyFeeRecipient = _commonAddresses.beefyFeeRecipient; beefyFeeConfig = IFeeConfig(_commonAddresses.beefyFeeConfig); } // checks that caller is either owner or keeper. modifier onlyManager() { require(msg.sender == owner() || msg.sender == keeper, "!manager"); _; } // fetch fees from config contract function getFees() public view returns (IFeeConfig.FeeCategory memory) { return beefyFeeConfig.getFees(address(this)); } function getStratFeeId() external view returns (uint256) { return beefyFeeConfig.stratFeeId(address(this)); } function setStratFeeId(uint256 _feeId) external onlyManager { beefyFeeConfig.setStratFeeId(_feeId); emit SetStratFeeId(_feeId); } // adjust withdrawal fee function setWithdrawalFee(uint256 _fee) public onlyManager { require(_fee <= WITHDRAWAL_FEE_CAP, "!cap"); withdrawalFee = _fee; emit SetWithdrawalFee(_fee); } // set new vault (only for strategy upgrades) function setVault(address _vault) external onlyOwner { vault = _vault; emit SetVault(_vault); } // set new unirouter function setUnirouter(address _unirouter) external onlyOwner { unirouter = _unirouter; emit SetUnirouter(_unirouter); } // set new keeper to manage strat function setKeeper(address _keeper) external onlyManager { keeper = _keeper; emit SetKeeper(_keeper); } // set new strategist address to receive strat fees function setStrategist(address _strategist) external { require(msg.sender == strategist, "!strategist"); strategist = _strategist; emit SetStrategist(_strategist); } // set new beefy fee address to receive beefy fees function setBeefyFeeRecipient(address _beefyFeeRecipient) external onlyOwner { beefyFeeRecipient = _beefyFeeRecipient; emit SetBeefyFeeRecipient(_beefyFeeRecipient); } // set new fee config address to fetch fees function setBeefyFeeConfig(address _beefyFeeConfig) external onlyOwner { beefyFeeConfig = IFeeConfig(_beefyFeeConfig); emit SetBeefyFeeConfig(_beefyFeeConfig); } function beforeDeposit() external virtual {} } // File: contracts/BIFI/utils/StringUtils.sol pragma solidity >=0.6.0 <0.9.0; library StringUtils { function concat(string memory a, string memory b) internal pure returns (string memory) { return string(abi.encodePacked(a, b)); } } // File: contracts/BIFI/utils/IGasPrice.sol pragma solidity >=0.6.0 <0.9.0; interface IGasPrice { function maxGasPrice() external returns (uint); } // File: contracts/BIFI/utils/GasFeeThrottler.sol pragma solidity ^0.8.0; contract GasFeeThrottler { bool public shouldGasThrottle = true; address public gasprice = address(0xA43509661141F254F54D9A326E8Ec851A0b95307); modifier gasThrottle() { if (shouldGasThrottle && Address.isContract(gasprice)) { require(tx.gasprice <= IGasPrice(gasprice).maxGasPrice(), "gas is too high!"); } _; } } // File: contracts/BIFI/strategies/Common/StrategyCommonChefLP.sol pragma solidity ^0.8.0; contract StrategyCommonChefLP is StratFeeManager, GasFeeThrottler { using SafeERC20 for IERC20; // Tokens used address public native; address public output; address public want; address public lpToken0; address public lpToken1; // Third party contracts address public chef; uint256 public poolId; bool public harvestOnDeposit; uint256 public lastHarvest; string public pendingRewardsFunctionName; // Routes address[] public outputToNativeRoute; address[] public outputToLp0Route; address[] public outputToLp1Route; event StratHarvest(address indexed harvester, uint256 wantHarvested, uint256 tvl); event Deposit(uint256 tvl); event Withdraw(uint256 tvl); event ChargedFees(uint256 callFees, uint256 beefyFees, uint256 strategistFees); constructor( address _want, uint256 _poolId, address _chef, CommonAddresses memory _commonAddresses, address[] memory _outputToNativeRoute, address[] memory _outputToLp0Route, address[] memory _outputToLp1Route ) StratFeeManager(_commonAddresses) { want = _want; poolId = _poolId; chef = _chef; output = _outputToNativeRoute[0]; native = _outputToNativeRoute[_outputToNativeRoute.length - 1]; outputToNativeRoute = _outputToNativeRoute; // setup lp routing lpToken0 = IUniswapV2Pair(want).token0(); require(_outputToLp0Route[0] == output, "outputToLp0Route[0] != output"); require(_outputToLp0Route[_outputToLp0Route.length - 1] == lpToken0, "outputToLp0Route[last] != lpToken0"); outputToLp0Route = _outputToLp0Route; lpToken1 = IUniswapV2Pair(want).token1(); require(_outputToLp1Route[0] == output, "outputToLp1Route[0] != output"); require(_outputToLp1Route[_outputToLp1Route.length - 1] == lpToken1, "outputToLp1Route[last] != lpToken1"); outputToLp1Route = _outputToLp1Route; _giveAllowances(); } // puts the funds to work function deposit() public whenNotPaused { uint256 wantBal = IERC20(want).balanceOf(address(this)); if (wantBal > 0) { IMasterChef(chef).deposit(poolId, wantBal); emit Deposit(balanceOf()); } } function withdraw(uint256 _amount) external { require(msg.sender == vault, "!vault"); uint256 wantBal = IERC20(want).balanceOf(address(this)); if (wantBal < _amount) { IMasterChef(chef).withdraw(poolId, _amount - wantBal); wantBal = IERC20(want).balanceOf(address(this)); } if (wantBal > _amount) { wantBal = _amount; } if (tx.origin != owner() && !paused()) { uint256 withdrawalFeeAmount = wantBal * withdrawalFee / WITHDRAWAL_MAX; wantBal = wantBal - withdrawalFeeAmount; } IERC20(want).safeTransfer(vault, wantBal); emit Withdraw(balanceOf()); } function beforeDeposit() external virtual override { if (harvestOnDeposit) { require(msg.sender == vault, "!vault"); _harvest(tx.origin); } } function harvest() external gasThrottle virtual { _harvest(tx.origin); } function harvest(address callFeeRecipient) external gasThrottle virtual { _harvest(callFeeRecipient); } function managerHarvest() external onlyManager { _harvest(tx.origin); } // compounds earnings and charges performance fee function _harvest(address callFeeRecipient) internal whenNotPaused { IMasterChef(chef).deposit(poolId, 0); uint256 outputBal = IERC20(output).balanceOf(address(this)); if (outputBal > 0) { chargeFees(callFeeRecipient); addLiquidity(); uint256 wantHarvested = balanceOfWant(); deposit(); lastHarvest = block.timestamp; emit StratHarvest(msg.sender, wantHarvested, balanceOf()); } } // performance fees function chargeFees(address callFeeRecipient) internal { IFeeConfig.FeeCategory memory fees = getFees(); uint256 toNative = IERC20(output).balanceOf(address(this)) * fees.total / DIVISOR; IUniswapRouterETH(unirouter).swapExactTokensForTokens( toNative, 0, outputToNativeRoute, address(this), block.timestamp ); uint256 nativeBal = IERC20(native).balanceOf(address(this)); uint256 callFeeAmount = nativeBal * fees.call / DIVISOR; IERC20(native).safeTransfer(callFeeRecipient, callFeeAmount); uint256 beefyFeeAmount = nativeBal * fees.beefy / DIVISOR; IERC20(native).safeTransfer(beefyFeeRecipient, beefyFeeAmount); uint256 strategistFeeAmount = nativeBal * fees.strategist / DIVISOR; IERC20(native).safeTransfer(strategist, strategistFeeAmount); emit ChargedFees(callFeeAmount, beefyFeeAmount, strategistFeeAmount); } // Adds liquidity to AMM and gets more LP tokens. function addLiquidity() internal { uint256 outputHalf = IERC20(output).balanceOf(address(this)) / 2; if (lpToken0 != output) { IUniswapRouterETH(unirouter).swapExactTokensForTokens( outputHalf, 0, outputToLp0Route, address(this), block.timestamp ); } if (lpToken1 != output) { IUniswapRouterETH(unirouter).swapExactTokensForTokens( outputHalf, 0, outputToLp1Route, address(this), block.timestamp ); } uint256 lp0Bal = IERC20(lpToken0).balanceOf(address(this)); uint256 lp1Bal = IERC20(lpToken1).balanceOf(address(this)); IUniswapRouterETH(unirouter).addLiquidity( lpToken0, lpToken1, lp0Bal, lp1Bal, 1, 1, address(this), block.timestamp ); } // calculate the total underlaying 'want' held by the strat. function balanceOf() public view returns (uint256) { return balanceOfWant() + balanceOfPool(); } // it calculates how much 'want' this contract holds. function balanceOfWant() public view returns (uint256) { return IERC20(want).balanceOf(address(this)); } // it calculates how much 'want' the strategy has working in the farm. function balanceOfPool() public view returns (uint256) { (uint256 _amount,) = IMasterChef(chef).userInfo(poolId, address(this)); return _amount; } function setPendingRewardsFunctionName(string calldata _pendingRewardsFunctionName) external onlyManager { pendingRewardsFunctionName = _pendingRewardsFunctionName; } // returns rewards unharvested function rewardsAvailable() public view returns (uint256) { string memory signature = StringUtils.concat(pendingRewardsFunctionName, "(uint256,address)"); bytes memory result = Address.functionStaticCall( chef, abi.encodeWithSignature( signature, poolId, address(this) ) ); return abi.decode(result, (uint256)); } // native reward amount for calling harvest function callReward() public view returns (uint256) { IFeeConfig.FeeCategory memory fees = getFees(); uint256 outputBal = rewardsAvailable(); uint256 nativeOut; if (outputBal > 0) { uint256[] memory amountOut = IUniswapRouterETH(unirouter).getAmountsOut(outputBal, outputToNativeRoute); nativeOut = amountOut[amountOut.length -1]; } return nativeOut * fees.total / DIVISOR * fees.call / DIVISOR; } function setHarvestOnDeposit(bool _harvestOnDeposit) external onlyManager { harvestOnDeposit = _harvestOnDeposit; if (harvestOnDeposit) { setWithdrawalFee(0); } else { setWithdrawalFee(10); } } function setShouldGasThrottle(bool _shouldGasThrottle) external onlyManager { shouldGasThrottle = _shouldGasThrottle; } // called as part of strat migration. Sends all the available funds back to the vault. function retireStrat() external { require(msg.sender == vault, "!vault"); IMasterChef(chef).emergencyWithdraw(poolId); uint256 wantBal = IERC20(want).balanceOf(address(this)); IERC20(want).transfer(vault, wantBal); } // pauses deposits and withdraws all funds from third party systems. function panic() public onlyManager { pause(); IMasterChef(chef).emergencyWithdraw(poolId); } function pause() public onlyManager { _pause(); _removeAllowances(); } function unpause() external onlyManager { _unpause(); _giveAllowances(); deposit(); } function _giveAllowances() internal { IERC20(want).safeApprove(chef, type(uint).max); IERC20(output).safeApprove(unirouter, type(uint).max); IERC20(lpToken0).safeApprove(unirouter, 0); IERC20(lpToken0).safeApprove(unirouter, type(uint).max); IERC20(lpToken1).safeApprove(unirouter, 0); IERC20(lpToken1).safeApprove(unirouter, type(uint).max); } function _removeAllowances() internal { IERC20(want).safeApprove(chef, 0); IERC20(output).safeApprove(unirouter, 0); IERC20(lpToken0).safeApprove(unirouter, 0); IERC20(lpToken1).safeApprove(unirouter, 0); } function outputToNative() external view returns (address[] memory) { return outputToNativeRoute; } function outputToLp0() external view returns (address[] memory) { return outputToLp0Route; } function outputToLp1() external view returns (address[] memory) { return outputToLp1Route; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_want","type":"address"},{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_chef","type":"address"},{"components":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"unirouter","type":"address"},{"internalType":"address","name":"keeper","type":"address"},{"internalType":"address","name":"strategist","type":"address"},{"internalType":"address","name":"beefyFeeRecipient","type":"address"},{"internalType":"address","name":"beefyFeeConfig","type":"address"}],"internalType":"struct StratFeeManager.CommonAddresses","name":"_commonAddresses","type":"tuple"},{"internalType":"address[]","name":"_outputToNativeRoute","type":"address[]"},{"internalType":"address[]","name":"_outputToLp0Route","type":"address[]"},{"internalType":"address[]","name":"_outputToLp1Route","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"callFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beefyFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"strategistFees","type":"uint256"}],"name":"ChargedFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beefyFeeConfig","type":"address"}],"name":"SetBeefyFeeConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"beefyFeeRecipient","type":"address"}],"name":"SetBeefyFeeRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"keeper","type":"address"}],"name":"SetKeeper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeId","type":"uint256"}],"name":"SetStratFeeId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"strategist","type":"address"}],"name":"SetStrategist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"unirouter","type":"address"}],"name":"SetUnirouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vault","type":"address"}],"name":"SetVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"withdrawalFee","type":"uint256"}],"name":"SetWithdrawalFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"harvester","type":"address"},{"indexed":false,"internalType":"uint256","name":"wantHarvested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"StratHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tvl","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"WITHDRAWAL_FEE_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WITHDRAWAL_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beefyFeeConfig","outputs":[{"internalType":"contract IFeeConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beefyFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasprice","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"components":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"beefy","type":"uint256"},{"internalType":"uint256","name":"call","type":"uint256"},{"internalType":"uint256","name":"strategist","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bool","name":"active","type":"bool"}],"internalType":"struct IFeeConfig.FeeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStratFeeId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"callFeeRecipient","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestOnDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managerHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"native","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"output","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outputToLp0","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToLp0Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outputToLp1","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToLp1Route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outputToNative","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputToNativeRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"panic","outputs":[],"stateMutability":"nonpayable","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":"pendingRewardsFunctionName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"retireStrat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beefyFeeConfig","type":"address"}],"name":"setBeefyFeeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beefyFeeRecipient","type":"address"}],"name":"setBeefyFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_harvestOnDeposit","type":"bool"}],"name":"setHarvestOnDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_keeper","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_pendingRewardsFunctionName","type":"string"}],"name":"setPendingRewardsFunctionName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_shouldGasThrottle","type":"bool"}],"name":"setShouldGasThrottle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeId","type":"uint256"}],"name":"setStratFeeId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_unirouter","type":"address"}],"name":"setUnirouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldGasThrottle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unirouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600a600755600880546001600160a81b03191674a43509661141f254f54d9a326e8ec851a0b95307011790553480156200003d57600080fd5b506040516200419338038062004193833981016040819052620000609162000c0e565b836200006c336200056d565b6000805460ff60a01b191681558151600180546001600160a01b03199081166001600160a01b0393841617909155602084015160028054831691841691909117905560408401516003805483169184169190911790556060840151600480548316918416919091179055608084015160058054831691841691909117905560a090930151600680548516918316919091179055600b805484168b8316179055600f899055600e805490931690881617909155835184919062000132576200013262000d67565b6020026020010151600a60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001845162000171919062000d7d565b8151811062000184576200018462000d67565b602090810291909101810151600980546001600160a01b0319166001600160a01b039092169190911790558351620001c3916013919086019062000a8d565b50600b60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e919062000da3565b600c80546001600160a01b0319166001600160a01b03928316179055600a548351911690839060009062000276576200027662000d67565b60200260200101516001600160a01b031614620002da5760405162461bcd60e51b815260206004820152601d60248201527f6f7574707574546f4c7030526f7574655b305d20213d206f757470757400000060448201526064015b60405180910390fd5b600c5482516001600160a01b03909116908390620002fb9060019062000d7d565b815181106200030e576200030e62000d67565b60200260200101516001600160a01b031614620003795760405162461bcd60e51b815260206004820152602260248201527f6f7574707574546f4c7030526f7574655b6c6173745d20213d206c70546f6b6560448201526106e360f41b6064820152608401620002d1565b81516200038e90601490602085019062000a8d565b50600b60009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000409919062000da3565b600d80546001600160a01b0319166001600160a01b03928316179055600a548251911690829060009062000441576200044162000d67565b60200260200101516001600160a01b031614620004a15760405162461bcd60e51b815260206004820152601d60248201527f6f7574707574546f4c7031526f7574655b305d20213d206f75747075740000006044820152606401620002d1565b600d5481516001600160a01b03909116908290620004c29060019062000d7d565b81518110620004d557620004d562000d67565b60200260200101516001600160a01b031614620005405760405162461bcd60e51b815260206004820152602260248201527f6f7574707574546f4c7031526f7574655b6c6173745d20213d206c70546f6b656044820152616e3160f01b6064820152608401620002d1565b80516200055590601590602084019062000a8d565b5062000560620005bd565b5050505050505062000e85565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e54600b54620005ea916001600160a01b039182169116600019620006cb602090811b62001bc117901c565b600254600a5462000617916001600160a01b039182169116600019620006cb602090811b62001bc117901c565b600254600c5462000643916001600160a01b0391821691166000620006cb602090811b62001bc117901c565b600254600c5462000670916001600160a01b039182169116600019620006cb602090811b62001bc117901c565b600254600d546200069c916001600160a01b0391821691166000620006cb602090811b62001bc117901c565b600254600d54620006c9916001600160a01b039182169116600019620006cb602090811b62001bc117901c565b565b801580620007495750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000721573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000747919062000dc1565b155b620007bd5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401620002d1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620008159185916200081a16565b505050565b600062000876826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620008f860201b62001d09179092919060201c565b80519091501562000815578080602001905181019062000897919062000ddb565b620008155760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620002d1565b606062000909848460008562000913565b90505b9392505050565b606082471015620009765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401620002d1565b6001600160a01b0385163b620009cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620002d1565b600080866001600160a01b03168587604051620009ed919062000e32565b60006040518083038185875af1925050503d806000811462000a2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000a31565b606091505b50909250905062000a4482828662000a4f565b979650505050505050565b6060831562000a605750816200090c565b82511562000a715782518084602001fd5b8160405162461bcd60e51b8152600401620002d1919062000e50565b82805482825590600052602060002090810192821562000ae5579160200282015b8281111562000ae557825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000aae565b5062000af392915062000af7565b5090565b5b8082111562000af3576000815560010162000af8565b80516001600160a01b038116811462000b2657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171562000b665762000b6662000b2b565b60405290565b600082601f83011262000b7e57600080fd5b815160206001600160401b038083111562000b9d5762000b9d62000b2b565b8260051b604051601f19603f8301168101818110848211171562000bc55762000bc562000b2b565b60405293845285810183019383810192508785111562000be457600080fd5b83870191505b8482101562000a445762000bfe8262000b0e565b8352918301919083019062000bea565b600080600080600080600087890361018081121562000c2c57600080fd5b62000c378962000b0e565b97506020890151965062000c4e60408a0162000b0e565b955060c0605f198201121562000c6357600080fd5b5062000c6e62000b41565b62000c7c60608a0162000b0e565b815262000c8c60808a0162000b0e565b602082015262000c9f60a08a0162000b0e565b604082015262000cb260c08a0162000b0e565b606082015262000cc560e08a0162000b0e565b608082015262000cd96101008a0162000b0e565b60a08201526101208901519094506001600160401b038082111562000cfd57600080fd5b62000d0b8b838c0162000b6c565b94506101408a015191508082111562000d2357600080fd5b62000d318b838c0162000b6c565b93506101608a015191508082111562000d4957600080fd5b5062000d588a828b0162000b6c565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60008282101562000d9e57634e487b7160e01b600052601160045260246000fd5b500390565b60006020828403121562000db657600080fd5b6200090c8262000b0e565b60006020828403121562000dd457600080fd5b5051919050565b60006020828403121562000dee57600080fd5b815180151581146200090c57600080fd5b60005b8381101562000e1c57818101518382015260200162000e02565b8381111562000e2c576000848401525b50505050565b6000825162000e4681846020870162000dff565b9190910192915050565b602081526000825180602084015262000e7181604085016020870162000dff565b601f01601f19169190910160400192915050565b6132fe8062000e956000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063748747e6116101e9578063c1a3d44c1161010f578063e7a7250a116100ad578063fad4675e1161007c578063fad4675e14610709578063fb6177871461071c578063fbfa77cf14610724578063fd63a8871461073757600080fd5b8063e7a7250a146106d2578063f1a392da146106da578063f20eaeb8146106e3578063f2fde38b146106f657600080fd5b8063d801d946116100e9578063d801d9461461069a578063d92f3d73146106a2578063db8d55f1146106b5578063dfbdc437146106ca57600080fd5b8063c1a3d44c14610677578063c7b9d5301461067f578063d0e30db01461069257600080fd5b80638e14545911610187578063a68833e511610156578063a68833e51461062b578063ac1e50251461063e578063aced166114610651578063be12a9781461066457600080fd5b80638e145459146105fb57806397fd323d1461060e578063989ef4e3146106165780639f8b5da11461061e57600080fd5b80638912cb8b116101c35780638912cb8b146105cc5780638bc7e8c4146105d95780638cfc0250146105e25780638da5cb5b146105ea57600080fd5b8063748747e61461059e5780638456cb59146105b1578063877562b6146105b957600080fd5b80633e0dc34e116102ce578063573fef0a1161026c5780636817031b1161023b5780636817031b146105635780636ec232d314610576578063715018a61461058e578063722713f71461059657600080fd5b8063573fef0a1461051757806359e791381461051f5780635c975abb146105325780635ee167c01461055057600080fd5b80634641257d116102a85780634641257d146104eb5780634700d305146104f35780634746fb55146104fb57806354518b1a1461050e57600080fd5b80633e0dc34e146104c75780633e55f932146104d05780633f4ba83a146104e357600080fd5b80631f1fcd511161033b578063257ae0de11610315578063257ae0de14610479578063277e5cfd1461048c5780632e1a7d4d146104a157806336c6cf21146104b457600080fd5b80631f1fcd51146104405780631fc8bc5d146104535780631fe4a6861461046657600080fd5b8063106fdbd011610377578063106fdbd0146103e457806311588086146103f757806311b0b42d1461040d57806313e120b11461043857600080fd5b80630587f7851461039e5780630e5c011e146103bc5780630e8fbb5a146103d1575b600080fd5b6103a661074a565b6040516103b39190612b04565b60405180910390f35b6103cf6103ca366004612b51565b6107ac565b005b6103cf6103df366004612b88565b61089f565b6103cf6103f2366004612b51565b61090b565b6103ff610968565b6040519081526020016103b3565b600954610420906001600160a01b031681565b6040516001600160a01b0390911681526020016103b3565b6103a66109ea565b600b54610420906001600160a01b031681565b600e54610420906001600160a01b031681565b600454610420906001600160a01b031681565b600254610420906001600160a01b031681565b610494610a4a565b6040516103b39190612bfd565b6103cf6104af366004612c10565b610ad8565b6104206104c2366004612c10565b610d1d565b6103ff600f5481565b6103cf6104de366004612c10565b610d47565b6103cf610e15565b6103cf610e6e565b6103cf610f59565b600654610420906001600160a01b031681565b6103ff61271081565b6103cf611009565b6103cf61052d366004612c29565b61103e565b600054600160a01b900460ff165b60405190151581526020016103b3565b600c54610420906001600160a01b031681565b6103cf610571366004612b51565b61108f565b6008546104209061010090046001600160a01b031681565b6103cf6110e5565b6103ff6110f7565b6103cf6105ac366004612b51565b611118565b6103cf6111a5565b600d54610420906001600160a01b031681565b6010546105409060ff1681565b6103ff60075481565b6103ff6111f4565b6000546001600160a01b0316610420565b600554610420906001600160a01b031681565b6103ff611262565b6103a6611376565b6008546105409060ff1681565b6103cf610639366004612b51565b6113d6565b6103cf61064c366004612c10565b61142c565b600354610420906001600160a01b031681565b610420610672366004612c10565b6114da565b6103ff6114ea565b6103cf61068d366004612b51565b61151b565b6103cf6115b1565b6103cf6116d3565b6103cf6106b0366004612b51565b611712565b6106bd611768565b6040516103b39190612c9b565b6103ff603281565b6103ff611813565b6103ff60115481565b600a54610420906001600160a01b031681565b6103cf610704366004612b51565b61196a565b6103cf610717366004612b88565b6119e0565b6103cf611a32565b600154610420906001600160a01b031681565b610420610745366004612c10565b611bb1565b606060158054806020026020016040519081016040528092919081815260200182805480156107a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610784575b5050505050905090565b60085460ff1680156107ce575060085461010090046001600160a01b03163b15155b1561089357600860019054906101000a90046001600160a01b03166001600160a01b0316633de39c116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c9190612cf7565b3a11156108935760405162461bcd60e51b815260206004820152601060248201526f67617320697320746f6f20686967682160801b60448201526064015b60405180910390fd5b61089c81611d22565b50565b6000546001600160a01b03163314806108c257506003546001600160a01b031633145b6108de5760405162461bcd60e51b815260040161088a90612d10565b6010805460ff191682151590811790915560ff16156109015761089c600061142c565b61089c600a61142c565b610913611e7b565b600680546001600160a01b0319166001600160a01b0383169081179091556040519081527f91e28ce4210d103c13c5174847e463b836900f8dc63e9d9b42a4255169d19529906020015b60405180910390a150565b600e54600f546040516393f1a40b60e01b8152600481019190915230602482015260009182916001600160a01b03909116906393f1a40b906044016040805180830381865afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e39190612d32565b5092915050565b606060138054806020026020016040519081016040528092919081815260200182805480156107a2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610784575050505050905090565b60128054610a5790612d56565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612d56565b8015610ad05780601f10610aa557610100808354040283529160200191610ad0565b820191906000526020600020905b815481529060010190602001808311610ab357829003601f168201915b505050505081565b6001546001600160a01b03163314610b025760405162461bcd60e51b815260040161088a90612d90565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f9190612cf7565b905081811015610c6057600e54600f546001600160a01b039091169063441a3e7090610b9b8486612dc6565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610bd957600080fd5b505af1158015610bed573d6000803e3d6000fd5b5050600b546040516370a0823160e01b81523060048201526001600160a01b0390911692506370a082319150602401602060405180830381865afa158015610c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5d9190612cf7565b90505b81811115610c6b5750805b6000546001600160a01b03163214801590610c905750600054600160a01b900460ff16155b15610cc257600061271060075483610ca89190612ddd565b610cb29190612dfc565b9050610cbe8183612dc6565b9150505b600154600b54610cdf916001600160a01b03918216911683611ed5565b7f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d610d086110f7565b60405190815260200160405180910390a15050565b60148181548110610d2d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331480610d6a57506003546001600160a01b031633145b610d865760405162461bcd60e51b815260040161088a90612d10565b600654604051631f2afc9960e11b8152600481018390526001600160a01b0390911690633e55f93290602401600060405180830381600087803b158015610dcc57600080fd5b505af1158015610de0573d6000803e3d6000fd5b505050507f9163810ee1e29168d4ce900e48a333fb8fbd3fd070d2bef67f6d4db0846a469f8160405161095d91815260200190565b6000546001600160a01b0316331480610e3857506003546001600160a01b031633145b610e545760405162461bcd60e51b815260040161088a90612d10565b610e5c611f05565b610e64611f5a565b610e6c6115b1565b565b60085460ff168015610e90575060085461010090046001600160a01b03163b15155b15610f5057600860019054906101000a90046001600160a01b03166001600160a01b0316633de39c116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190612cf7565b3a1115610f505760405162461bcd60e51b815260206004820152601060248201526f67617320697320746f6f20686967682160801b604482015260640161088a565b610e6c32611d22565b6000546001600160a01b0316331480610f7c57506003546001600160a01b031633145b610f985760405162461bcd60e51b815260040161088a90612d10565b610fa06111a5565b600e54600f54604051632989754760e11b81526001600160a01b0390921691635312ea8e91610fd59160040190815260200190565b600060405180830381600087803b158015610fef57600080fd5b505af1158015611003573d6000803e3d6000fd5b50505050565b60105460ff1615610e6c576001546001600160a01b03163314610f505760405162461bcd60e51b815260040161088a90612d90565b6000546001600160a01b031633148061106157506003546001600160a01b031633145b61107d5760405162461bcd60e51b815260040161088a90612d10565b601261108a828483612e7a565b505050565b611097611e7b565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527fd459c7242e23d490831b5676a611c4342d899d28f342d89ae80793e56a930f309060200161095d565b6110ed611e7b565b610e6c6000612012565b6000611101610968565b6111096114ea565b6111139190612f3b565b905090565b6000546001600160a01b031633148061113b57506003546001600160a01b031633145b6111575760405162461bcd60e51b815260040161088a90612d10565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fefb5cfa1a8690c124332ab93324539c5c9c4be03f28aeb8be86f2d8a0c9fb99b9060200161095d565b6000546001600160a01b03163314806111c857506003546001600160a01b031633145b6111e45760405162461bcd60e51b815260040161088a90612d10565b6111ec612062565b610e6c6120a5565b600654604051636788231160e11b81523060048201526000916001600160a01b03169063cf104622906024015b602060405180830381865afa15801561123e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111139190612cf7565b60008061126d611768565b90506000611279611813565b9050600081156113295760025460405163d06ca61f60e01b81526000916001600160a01b03169063d06ca61f906112b7908690601390600401612f9c565b600060405180830381865afa1580156112d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112fc919081019061300f565b9050806001825161130d9190612dc6565b8151811061131d5761131d6130b5565b60200260200101519150505b670de0b6b3a76400008360400151670de0b6b3a76400008560000151846113509190612ddd565b61135a9190612dfc565b6113649190612ddd565b61136e9190612dfc565b935050505090565b606060148054806020026020016040519081016040528092919081815260200182805480156107a2576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610784575050505050905090565b6113de611e7b565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f8041329bf7057543a2c2ff4e4071d1d488a31f82ed44e169b5cd2f04f5e3ac859060200161095d565b6000546001600160a01b031633148061144f57506003546001600160a01b031633145b61146b5760405162461bcd60e51b815260040161088a90612d10565b60328111156114a55760405162461bcd60e51b815260040161088a906020808252600490820152630216361760e41b604082015260600190565b60078190556040518181527f3aa4413905e8f015896ec5880bdde24088ccb19b578f9fcf6800354d5320d4af9060200161095d565b60138181548110610d2d57600080fd5b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611221565b6004546001600160a01b031633146115635760405162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015260640161088a565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f46d58e3fa07bf19b1d27240f0e286b27e9f7c1b0d88933333fe833b60eec54129060200161095d565b6115b961211d565b600b546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190612cf7565b9050801561089c57600e54600f54604051631c57762b60e31b81526001600160a01b039092169163e2bbb1589161166a918590600401918252602082015260400190565b600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050507f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384266116c56110f7565b60405190815260200161095d565b6000546001600160a01b03163314806116f657506003546001600160a01b031633145b610f505760405162461bcd60e51b815260040161088a90612d10565b61171a611e7b565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5ca6e64c4522e68e154aa9372f2c5969cd37d9640e59f66953dc472f54ee86fa9060200161095d565b6117a36040518060c0016040528060008152602001600081526020016000815260200160008152602001606081526020016000151581525090565b600654604051639af608c960e01b81523060048201526001600160a01b0390911690639af608c990602401600060405180830381865afa1580156117eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111391908101906130db565b6000806118d36012805461182690612d56565b80601f016020809104026020016040519081016040528092919081815260200182805461185290612d56565b801561189f5780601f106118745761010080835404028352916020019161189f565b820191906000526020600020905b81548152906001019060200180831161188257829003601f168201915b5050505050604051806040016040528060118152602001702875696e743235362c616464726573732960781b81525061216a565b600e54600f54604051602481019190915230604482015291925060009161194d916001600160a01b031690849060640160408051601f19818403018152908290529161191e916131d1565b6040519081900390206020820180516001600160e01b03166001600160e01b0319909216919091179052612196565b9050808060200190518101906119639190612cf7565b9250505090565b611972611e7b565b6001600160a01b0381166119d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088a565b61089c81612012565b6000546001600160a01b0316331480611a0357506003546001600160a01b031633145b611a1f5760405162461bcd60e51b815260040161088a90612d10565b6008805460ff1916911515919091179055565b6001546001600160a01b03163314611a5c5760405162461bcd60e51b815260040161088a90612d90565b600e54600f54604051632989754760e11b81526001600160a01b0390921691635312ea8e91611a919160040190815260200190565b600060405180830381600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b5050600b546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b329190612cf7565b600b5460015460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af1158015611b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bad91906131ed565b5050565b60158181548110610d2d57600080fd5b801580611c3b5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c399190612cf7565b155b611ca65760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161088a565b6040516001600160a01b03831660248201526044810182905261108a90849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526121bb565b6060611d18848460008561228d565b90505b9392505050565b611d2a61211d565b600e54600f54604051631c57762b60e31b81526004810191909152600060248201526001600160a01b039091169063e2bbb15890604401600060405180830381600087803b158015611d7b57600080fd5b505af1158015611d8f573d6000803e3d6000fd5b5050600a546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e029190612cf7565b90508015611bad57611e13826123be565b611e1b61265e565b6000611e256114ea565b9050611e2f6115b1565b42601155337f9bc239f1724cacfb88cb1d66a2dc437467699b68a8c90d7b63110cf4b6f9241082611e5e6110f7565b6040805192835260208301919091520160405180910390a2505050565b6000546001600160a01b03163314610e6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088a565b6040516001600160a01b03831660248201526044810182905261108a90849063a9059cbb60e01b90606401611cd2565b611f0d6129a1565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600e54600b54611f79916001600160a01b039182169116600019611bc1565b600254600a54611f98916001600160a01b039182169116600019611bc1565b600254600c54611fb6916001600160a01b0391821691166000611bc1565b600254600c54611fd5916001600160a01b039182169116600019611bc1565b600254600d54611ff3916001600160a01b0391821691166000611bc1565b600254600d54610e6c916001600160a01b039182169116600019611bc1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61206a61211d565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f3d3390565b600e54600b546120c3916001600160a01b0391821691166000611bc1565b600254600a546120e1916001600160a01b0391821691166000611bc1565b600254600c546120ff916001600160a01b0391821691166000611bc1565b600254600d54610e6c916001600160a01b0391821691166000611bc1565b600054600160a01b900460ff1615610e6c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161088a565b6060828260405160200161217f92919061320a565b604051602081830303815290604052905092915050565b6060611d1b83836040518060600160405280602581526020016132a4602591396129f1565b6000612210826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d099092919063ffffffff16565b80519091501561108a578080602001905181019061222e91906131ed565b61108a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161088a565b6060824710156122ee5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161088a565b6001600160a01b0385163b6123455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161088a565b600080866001600160a01b0316858760405161236191906131d1565b60006040518083038185875af1925050503d806000811461239e576040519150601f19603f3d011682016040523d82523d6000602084013e6123a3565b606091505b50915091506123b3828286612acb565b979650505050505050565b60006123c8611768565b8051600a546040516370a0823160e01b8152306004820152929350600092670de0b6b3a764000092916001600160a01b0316906370a0823190602401602060405180830381865afa158015612421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124459190612cf7565b61244f9190612ddd565b6124599190612dfc565b6002546040516338ed173960e01b81529192506001600160a01b0316906338ed17399061249490849060009060139030904290600401613239565b6000604051808303816000875af11580156124b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124db919081019061300f565b506009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612525573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125499190612cf7565b90506000670de0b6b3a76400008460400151836125669190612ddd565b6125709190612dfc565b60095490915061258a906001600160a01b03168683611ed5565b6000670de0b6b3a76400008560200151846125a59190612ddd565b6125af9190612dfc565b6005546009549192506125cf916001600160a01b03908116911683611ed5565b6000670de0b6b3a76400008660600151856125ea9190612ddd565b6125f49190612dfc565b600454600954919250612614916001600160a01b03908116911683611ed5565b60408051848152602081018490529081018290527fd255b592c7f268a73e534da5219a60ff911b4cf6daae21c7d20527dd657bd99a9060600160405180910390a150505050505050565b600a546040516370a0823160e01b81523060048201526000916002916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156126ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d09190612cf7565b6126da9190612dfc565b600a54600c549192506001600160a01b03918216911614612778576002546040516338ed173960e01b81526001600160a01b03909116906338ed17399061272f90849060009060149030904290600401613239565b6000604051808303816000875af115801561274e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612776919081019061300f565b505b600a54600d546001600160a01b03908116911614612813576002546040516338ed173960e01b81526001600160a01b03909116906338ed1739906127ca90849060009060159030904290600401613239565b6000604051808303816000875af11580156127e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612811919081019061300f565b505b600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561285c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128809190612cf7565b600d546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156128ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f29190612cf7565b600254600c54600d5460405162e8e33760e81b81526001600160a01b0392831660048201529082166024820152604481018690526064810184905260016084820181905260a48201523060c48201524260e4820152929350169063e8e3370090610104016060604051808303816000875af1158015612975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129999190613275565b505050505050565b600054600160a01b900460ff16610e6c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161088a565b60606001600160a01b0384163b612a565760405162461bcd60e51b8152602060048201526024808201527f416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e746044820152631c9858dd60e21b606482015260840161088a565b600080856001600160a01b031685604051612a7191906131d1565b600060405180830381855afa9150503d8060008114612aac576040519150601f19603f3d011682016040523d82523d6000602084013e612ab1565b606091505b5091509150612ac1828286612acb565b9695505050505050565b60608315612ada575081611d1b565b825115612aea5782518084602001fd5b8160405162461bcd60e51b815260040161088a9190612bfd565b6020808252825182820181905260009190848201906040850190845b81811015612b455783516001600160a01b031683529284019291840191600101612b20565b50909695505050505050565b600060208284031215612b6357600080fd5b81356001600160a01b0381168114611d1b57600080fd5b801515811461089c57600080fd5b600060208284031215612b9a57600080fd5b8135611d1b81612b7a565b60005b83811015612bc0578181015183820152602001612ba8565b838111156110035750506000910152565b60008151808452612be9816020860160208601612ba5565b601f01601f19169290920160200192915050565b602081526000611d1b6020830184612bd1565b600060208284031215612c2257600080fd5b5035919050565b60008060208385031215612c3c57600080fd5b823567ffffffffffffffff80821115612c5457600080fd5b818501915085601f830112612c6857600080fd5b813581811115612c7757600080fd5b866020828501011115612c8957600080fd5b60209290920196919550909350505050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160c060a0840152612cdf60e0840182612bd1565b905060a0840151151560c08401528091505092915050565b600060208284031215612d0957600080fd5b5051919050565b60208082526008908201526710b6b0b730b3b2b960c11b604082015260600190565b60008060408385031215612d4557600080fd5b505080516020909101519092909150565b600181811c90821680612d6a57607f821691505b602082108103612d8a57634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260069082015265085d985d5b1d60d21b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015612dd857612dd8612db0565b500390565b6000816000190483118215151615612df757612df7612db0565b500290565b600082612e1957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b601f82111561108a57600081815260208120601f850160051c81016020861015612e5b5750805b601f850160051c820191505b8181101561299957828155600101612e67565b67ffffffffffffffff831115612e9257612e92612e1e565b612ea683612ea08354612d56565b83612e34565b6000601f841160018114612eda5760008515612ec25750838201355b600019600387901b1c1916600186901b178355612f34565b600083815260209020601f19861690835b82811015612f0b5786850135825560209485019460019092019101612eeb565b5086821015612f285760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008219821115612f4e57612f4e612db0565b500190565b6000815480845260208085019450836000528060002060005b83811015612f915781546001600160a01b031687529582019560019182019101612f6c565b509495945050505050565b828152604060208201526000611d186040830184612f53565b60405160c0810167ffffffffffffffff81118282101715612fd857612fd8612e1e565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561300757613007612e1e565b604052919050565b6000602080838503121561302257600080fd5b825167ffffffffffffffff8082111561303a57600080fd5b818501915085601f83011261304e57600080fd5b81518181111561306057613060612e1e565b8060051b9150613071848301612fde565b818152918301840191848101908884111561308b57600080fd5b938501935b838510156130a957845182529385019390850190613090565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b80516130d681612b7a565b919050565b600060208083850312156130ee57600080fd5b825167ffffffffffffffff8082111561310657600080fd5b9084019060c0828703121561311a57600080fd5b613122612fb5565b825181528383015184820152604083015160408201526060830151606082015260808301518281111561315457600080fd5b8301601f8101881361316557600080fd5b80518381111561317757613177612e1e565b613189601f8201601f19168701612fde565b9350808452888682840101111561319f57600080fd5b6131ae81878601888501612ba5565b50508160808201526131c260a084016130cb565b60a08201529695505050505050565b600082516131e3818460208701612ba5565b9190910192915050565b6000602082840312156131ff57600080fd5b8151611d1b81612b7a565b6000835161321c818460208801612ba5565b835190830190613230818360208801612ba5565b01949350505050565b85815284602082015260a06040820152600061325860a0830186612f53565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561328a57600080fd5b835192506020840151915060408401519050925092509256fe416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564a26469706673582212203976700b3da1359922cb260808a973e8464266c2716a20a7ae816dbf175f6a9e64736f6c634300080f0033000000000000000000000000de990994309bc08e57aca82b1a19170ad84323e80000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d814b26554204245a30f8a42c289af582421bf0400000000000000000000000015fc2ba59956564b39eba06dcd6a37f4476f1ed50000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975060000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b6190000000000000000000000001cd89c66e51e5f863b958892f556d1492a4da0d30000000000000000000000007313533ed72d2678bfd9393480d0a30f9ac45c1f0000000000000000000000008e98004fe65a2eada63ad1de0f5ff76d845f14e7000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000300000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a60000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000000000000000000000000000000000000000000200000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a60000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174000000000000000000000000000000000000000000000000000000000000000100000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000de990994309bc08e57aca82b1a19170ad84323e80000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d814b26554204245a30f8a42c289af582421bf0400000000000000000000000015fc2ba59956564b39eba06dcd6a37f4476f1ed50000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b479975060000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b6190000000000000000000000001cd89c66e51e5f863b958892f556d1492a4da0d30000000000000000000000007313533ed72d2678bfd9393480d0a30f9ac45c1f0000000000000000000000008e98004fe65a2eada63ad1de0f5ff76d845f14e7000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000300000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a60000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa841740000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000000000000000000000000000000000000000000200000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a60000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174000000000000000000000000000000000000000000000000000000000000000100000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
-----Decoded View---------------
Arg [0] : _want (address): 0xde990994309bc08e57aca82b1a19170ad84323e8
Arg [1] : _poolId (uint256): 8
Arg [2] : _chef (address): 0xd814b26554204245a30f8a42c289af582421bf04
Arg [3] : _commonAddresses (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [4] : _outputToNativeRoute (address[]): 0x67eb41a14c0fe5cd701fc9d5a3d6597a72f641a6,0x2791bca1f2de4661ed88a30c99a7a9449aa84174,0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [5] : _outputToLp0Route (address[]): 0x67eb41a14c0fe5cd701fc9d5a3d6597a72f641a6,0x2791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [6] : _outputToLp1Route (address[]): 0x67eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 000000000000000000000000de990994309bc08e57aca82b1a19170ad84323e8
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [2] : 000000000000000000000000d814b26554204245a30f8a42c289af582421bf04
Arg [3] : 00000000000000000000000015fc2ba59956564b39eba06dcd6a37f4476f1ed5
Arg [4] : 0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [5] : 0000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b619
Arg [6] : 0000000000000000000000001cd89c66e51e5f863b958892f556d1492a4da0d3
Arg [7] : 0000000000000000000000007313533ed72d2678bfd9393480d0a30f9ac45c1f
Arg [8] : 0000000000000000000000008e98004fe65a2eada63ad1de0f5ff76d845f14e7
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [13] : 00000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
Arg [14] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [15] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [17] : 00000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
Arg [18] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [20] : 00000000000000000000000067eb41a14c0fe5cd701fc9d5a3d6597a72f641a6
Deployed ByteCode Sourcemap
46499:10119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56509:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49901:117;;;;;;:::i;:::-;;:::i;:::-;;54403:262;;;;;;:::i;:::-;;:::i;45248:184::-;;;;;;:::i;:::-;;:::i;53006:169::-;;;:::i;:::-;;;1483:25:1;;;1471:2;1456:18;53006:169:0;1337:177:1;46627:21:0;;;;;-1:-1:-1;;;;;46627:21:0;;;;;;-1:-1:-1;;;;;1683:32:1;;;1665:51;;1653:2;1638:18;46627:21:0;1519:203:1;56275:112:0;;;:::i;46683:19::-;;;;;-1:-1:-1;;;;;46683:19:0;;;46801;;;;;-1:-1:-1;;;;;46801:19:0;;;42194:25;;;;;-1:-1:-1;;;;;42194:25:0;;;42135:24;;;;;-1:-1:-1;;;;;42135:24:0;;;46925:40;;;:::i;:::-;;;;;;;:::i;48881:720::-;;;;;;:::i;:::-;;:::i;47032:33::-;;;;;;:::i;:::-;;:::i;46827:21::-;;;;;;43769:152;;;;;;:::i;:::-;;:::i;55476:121::-;;;:::i;49807:86::-;;;:::i;55249:116::-;;;:::i;42265:32::-;;;;;-1:-1:-1;;;;;42265:32:0;;;42401:46;;42442:5;42401:46;;49609:190;;;:::i;53183:180::-;;;;;;:::i;:::-;;:::i;40208:86::-;40255:4;40279:7;-1:-1:-1;;;40279:7:0;;;;40208:86;;;3652:14:1;;3645:22;3627:41;;3615:2;3600:18;40208:86:0;3487:187:1;46709:23:0;;;;;-1:-1:-1;;;;;46709:23:0;;;44208:118;;;;;;:::i;:::-;;:::i;46083:77::-;;;;;;;;-1:-1:-1;;;;;46083:77:0;;;37720:103;;;:::i;52627:110::-;;;:::i;44549:126::-;;;;;;:::i;:::-;;:::i;55373:95::-;;;:::i;46739:23::-;;;;;-1:-1:-1;;;;;46739:23:0;;;46857:28;;;;;;;;;42454:33;;;;;;43638:123;;;:::i;37072:87::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;37072:87;;42226:32;;;;;-1:-1:-1;;;;;42226:32:0;;;53911:484;;;:::i;56395:106::-;;;:::i;46038:36::-;;;;;;;;;45001:190;;;;;;:::i;:::-;;:::i;43959:::-;;;;;;:::i;:::-;;:::i;42166:21::-;;;;;-1:-1:-1;;;;;42166:21:0;;;46989:36;;;;;;:::i;:::-;;:::i;52804:118::-;;;:::i;44740:197::-;;;;;;:::i;:::-;;:::i;48621:252::-;;;:::i;50026:85::-;;;:::i;44360:142::-;;;;;;:::i;:::-;;:::i;43496:134::-;;;:::i;:::-;;;;;;;:::i;42347:47::-;;42392:2;42347:47;;53407:447;;;:::i;46892:26::-;;;;;;46655:21;;;;;-1:-1:-1;;;;;46655:21:0;;;37978:201;;;;;;:::i;:::-;;:::i;54673:133::-;;;;;;:::i;:::-;;:::i;54906:261::-;;;:::i;42108:20::-;;;;;-1:-1:-1;;;;;42108:20:0;;;47072:33;;;;;;:::i;:::-;;:::i;56509:106::-;56555:16;56591;56584:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56584:23:0;;;;;;;;;;;;;;;;;;;;;;;56509:106;:::o;49901:117::-;46207:17;;;;:49;;;;-1:-1:-1;46247:8:0;;;;;-1:-1:-1;;;;;46247:8:0;21361:19;:23;;46228:28;46203:159;;;46306:8;;;;;;;;;-1:-1:-1;;;;;46306:8:0;-1:-1:-1;;;;;46296:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46281:11;:48;;46273:77;;;;-1:-1:-1;;;46273:77:0;;4769:2:1;46273:77:0;;;4751:21:1;4808:2;4788:18;;;4781:30;-1:-1:-1;;;4827:18:1;;;4820:46;4883:18;;46273:77:0;;;;;;;;;49984:26:::1;49993:16;49984:8;:26::i;:::-;49901:117:::0;:::o;54403:262::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;54488:16:::1;:36:::0;;-1:-1:-1;;54488:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;54541:16:::0;54537:121:::1;;;54574:19;54591:1;54574:16;:19::i;54537:121::-;54626:20;54643:2;54626:16;:20::i;45248:184::-:0;36958:13;:11;:13::i;:::-;45330:14:::1;:44:::0;;-1:-1:-1;;;;;;45330:44:0::1;-1:-1:-1::0;;;;;45330:44:0;::::1;::::0;;::::1;::::0;;;45390:34:::1;::::0;1665:51:1;;;45390:34:0::1;::::0;1653:2:1;1638:18;45390:34:0::1;;;;;;;;45248:184:::0;:::o;53006:169::-;53105:4;;53120:6;;53093:49;;-1:-1:-1;;;53093:49:0;;;;;5422:25:1;;;;53136:4:0;5463:18:1;;;5456:60;53052:7:0;;;;-1:-1:-1;;;;;53105:4:0;;;;53093:26;;5395:18:1;;53093:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;53072:70:0;53006:169;-1:-1:-1;;53006:169:0:o;56275:112::-;56324:16;56360:19;56353:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56353:26:0;;;;;;;;;;;;;;;;;;;;;;56275:112;:::o;46925:40::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48881:720::-;48958:5;;-1:-1:-1;;;;;48958:5:0;48944:10;:19;48936:38;;;;-1:-1:-1;;;48936:38:0;;;;;;;:::i;:::-;49012:4;;49005:37;;-1:-1:-1;;;49005:37:0;;49036:4;49005:37;;;1665:51:1;48987:15:0;;-1:-1:-1;;;;;49012:4:0;;49005:22;;1638:18:1;;49005:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48987:55;;49069:7;49059;:17;49055:165;;;49105:4;;49120:6;;-1:-1:-1;;;;;49105:4:0;;;;49093:26;;49128:17;49138:7;49128;:17;:::i;:::-;49093:53;;-1:-1:-1;;;;;;49093:53:0;;;;;;;;;;6932:25:1;;;;6973:18;;;6966:34;6905:18;;49093:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49178:4:0;;49171:37;;-1:-1:-1;;;49171:37:0;;49202:4;49171:37;;;1665:51:1;-1:-1:-1;;;;;49178:4:0;;;;-1:-1:-1;49171:22:0;;-1:-1:-1;1638:18:1;;49171:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49161:47;;49055:165;49246:7;49236;:17;49232:67;;;-1:-1:-1;49280:7:0;49232:67;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;49315:9;:20;;;;:33;;-1:-1:-1;40255:4:0;40279:7;-1:-1:-1;;;40279:7:0;;;;49339:9;49315:33;49311:190;;;49365:27;42442:5;49405:13;;49395:7;:23;;;;:::i;:::-;:40;;;;:::i;:::-;49365:70;-1:-1:-1;49460:29:0;49365:70;49460:7;:29;:::i;:::-;49450:39;;49350:151;49311:190;49539:5;;49520:4;;49513:41;;-1:-1:-1;;;;;49520:4:0;;;;49539:5;49546:7;49513:25;:41::i;:::-;49572:21;49581:11;:9;:11::i;:::-;49572:21;;1483:25:1;;;1471:2;1456:18;49572:21:0;;;;;;;48925:676;48881:720;:::o;47032:33::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47032:33:0;;-1:-1:-1;47032:33:0;:::o;43769:152::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;43840:14:::1;::::0;:36:::1;::::0;-1:-1:-1;;;43840:36:0;;::::1;::::0;::::1;1483:25:1::0;;;-1:-1:-1;;;;;43840:14:0;;::::1;::::0;:28:::1;::::0;1456:18:1;;43840:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43892:21;43906:6;43892:21;;;;1483:25:1::0;;1471:2;1456:18;;1337:177;55476:121:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;55527:10:::1;:8;:10::i;:::-;55550:17;:15;:17::i;:::-;55580:9;:7;:9::i;:::-;55476:121::o:0;49807:86::-;46207:17;;;;:49;;;;-1:-1:-1;46247:8:0;;;;;-1:-1:-1;;;;;46247:8:0;21361:19;:23;;46228:28;46203:159;;;46306:8;;;;;;;;;-1:-1:-1;;;;;46306:8:0;-1:-1:-1;;;;;46296:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46281:11;:48;;46273:77;;;;-1:-1:-1;;;46273:77:0;;4769:2:1;46273:77:0;;;4751:21:1;4808:2;4788:18;;;4781:30;-1:-1:-1;;;4827:18:1;;;4820:46;4883:18;;46273:77:0;4567:340:1;46273:77:0;49866:19:::1;49875:9;49866:8;:19::i;55249:116::-:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;55296:7:::1;:5;:7::i;:::-;55326:4;::::0;55350:6:::1;::::0;55314:43:::1;::::0;-1:-1:-1;;;55314:43:0;;-1:-1:-1;;;;;55326:4:0;;::::1;::::0;55314:35:::1;::::0;:43:::1;::::0;::::1;;1483:25:1::0;;;1471:2;1456:18;;1337:177;55314:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55249:116::o:0;49609:190::-;49675:16;;;;49671:121;;;49730:5;;-1:-1:-1;;;;;49730:5:0;49716:10;:19;49708:38;;;;-1:-1:-1;;;49708:38:0;;;;;;;:::i;53183:180::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;53299:26:::1;:56;53328:27:::0;;53299:26;:56:::1;:::i;:::-;;53183:180:::0;;:::o;44208:118::-;36958:13;:11;:13::i;:::-;44272:5:::1;:14:::0;;-1:-1:-1;;;;;;44272:14:0::1;-1:-1:-1::0;;;;;44272:14:0;::::1;::::0;;::::1;::::0;;;44302:16:::1;::::0;1665:51:1;;;44302:16:0::1;::::0;1653:2:1;1638:18;44302:16:0::1;1519:203:1::0;37720:103:0;36958:13;:11;:13::i;:::-;37785:30:::1;37812:1;37785:18;:30::i;52627:110::-:0;52669:7;52714:15;:13;:15::i;:::-;52696;:13;:15::i;:::-;:33;;;;:::i;:::-;52689:40;;52627:110;:::o;44549:126::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;44617:6:::1;:16:::0;;-1:-1:-1;;;;;;44617:16:0::1;-1:-1:-1::0;;;;;44617:16:0;::::1;::::0;;::::1;::::0;;;44649:18:::1;::::0;1665:51:1;;;44649:18:0::1;::::0;1653:2:1;1638:18;44649::0::1;1519:203:1::0;55373:95:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;55420:8:::1;:6;:8::i;:::-;55441:19;:17;:19::i;43638:123::-:0;43713:14;;:40;;-1:-1:-1;;;43713:40:0;;43747:4;43713:40;;;1665:51:1;43686:7:0;;-1:-1:-1;;;;;43713:14:0;;:25;;1638:18:1;;43713:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;53911:484::-;53954:7;53974:34;54011:9;:7;:9::i;:::-;53974:46;;54031:17;54051:18;:16;:18::i;:::-;54031:38;-1:-1:-1;54080:17:0;54112:13;;54108:206;;54189:9;;54171:74;;-1:-1:-1;;;54171:74:0;;54142:26;;-1:-1:-1;;;;;54189:9:0;;54171:42;;:74;;54214:9;;54225:19;;54171:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54171:74:0;;;;;;;;;;;;:::i;:::-;54142:103;;54272:9;54300:1;54282:9;:16;:19;;;;:::i;:::-;54272:30;;;;;;;;:::i;:::-;;;;;;;54260:42;;54127:187;54108:206;42333:7;54368:4;:9;;;42333:7;54345:4;:10;;;54333:9;:22;;;;:::i;:::-;:32;;;;:::i;:::-;:44;;;;:::i;:::-;:54;;;;:::i;:::-;54326:61;;;;;53911:484;:::o;56395:106::-;56441:16;56477;56470:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56470:23:0;;;;;;;;;;;;;;;;;;;;;;56395:106;:::o;45001:190::-;36958:13;:11;:13::i;:::-;45089:17:::1;:38:::0;;-1:-1:-1;;;;;;45089:38:0::1;-1:-1:-1::0;;;;;45089:38:0;::::1;::::0;;::::1;::::0;;;45143:40:::1;::::0;1665:51:1;;;45143:40:0::1;::::0;1653:2:1;1638:18;45143:40:0::1;1519:203:1::0;43959:190:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;42392:2:::1;44037:4;:26;;44029:43;;;;-1:-1:-1::0;;;44029:43:0::1;;;;;;12384:2:1::0;12366:21;;;12423:1;12403:18;;;12396:29;-1:-1:-1;;;12456:2:1;12441:18;;12434:34;12500:2;12485:18;;12182:327;44029:43:0::1;44083:13;:20:::0;;;44119:22:::1;::::0;1483:25:1;;;44119:22:0::1;::::0;1471:2:1;1456:18;44119:22:0::1;1337:177:1::0;46989:36:0;;;;;;;;;;;;52804:118;52884:4;;52877:37;;-1:-1:-1;;;52877:37:0;;52908:4;52877:37;;;1665:51:1;52850:7:0;;-1:-1:-1;;;;;52884:4:0;;52877:22;;1638:18:1;;52877:37:0;1519:203:1;44740:197:0;44826:10;;-1:-1:-1;;;;;44826:10:0;44812;:24;44804:48;;;;-1:-1:-1;;;44804:48:0;;12716:2:1;44804:48:0;;;12698:21:1;12755:2;12735:18;;;12728:30;-1:-1:-1;;;12774:18:1;;;12767:41;12825:18;;44804:48:0;12514:335:1;44804:48:0;44863:10;:24;;-1:-1:-1;;;;;;44863:24:0;-1:-1:-1;;;;;44863:24:0;;;;;;;;44903:26;;1665:51:1;;;44903:26:0;;1653:2:1;1638:18;44903:26:0;1519:203:1;48621:252:0;39813:19;:17;:19::i;:::-;48697:4:::1;::::0;48690:37:::1;::::0;-1:-1:-1;;;48690:37:0;;48721:4:::1;48690:37;::::0;::::1;1665:51:1::0;48672:15:0::1;::::0;-1:-1:-1;;;;;48697:4:0::1;::::0;48690:22:::1;::::0;1638:18:1;;48690:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48672:55:::0;-1:-1:-1;48744:11:0;;48740:126:::1;;48784:4;::::0;48798:6:::1;::::0;48772:42:::1;::::0;-1:-1:-1;;;48772:42:0;;-1:-1:-1;;;;;48784:4:0;;::::1;::::0;48772:25:::1;::::0;:42:::1;::::0;48806:7;;48772:42:::1;;6932:25:1::0;;;6988:2;6973:18;;6966:34;6920:2;6905:18;;6758:248;48772:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48834:20;48842:11;:9;:11::i;:::-;48834:20;::::0;1483:25:1;;;1471:2;1456:18;48834:20:0::1;1337:177:1::0;50026:85:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;44360:142::-;36958:13;:11;:13::i;:::-;44432:9:::1;:22:::0;;-1:-1:-1;;;;;;44432:22:0::1;-1:-1:-1::0;;;;;44432:22:0;::::1;::::0;;::::1;::::0;;;44470:24:::1;::::0;1665:51:1;;;44470:24:0::1;::::0;1653:2:1;1638:18;44470:24:0::1;1519:203:1::0;43496:134:0;43536:29;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43536:29:0;43585:14;;:37;;-1:-1:-1;;;43585:37:0;;43616:4;43585:37;;;1665:51:1;-1:-1:-1;;;;;43585:14:0;;;;:22;;1638:18:1;;43585:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43585:37:0;;;;;;;;;;;;:::i;53407:447::-;53456:7;53476:23;53502:67;53521:26;53502:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53502:67:0;;;:18;:67::i;:::-;53643:4;;53733:6;;53663:123;;;;;5422:25:1;;;;53766:4:0;5463:18:1;;;5456:60;53476:93:0;;-1:-1:-1;53580:19:0;;53602:195;;-1:-1:-1;;;;;53643:4:0;;53476:93;;5395:18:1;;53663:123:0;;;-1:-1:-1;;53663:123:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;53663:123:0;-1:-1:-1;;;;;;53663:123:0;;;;;;;;;53602:26;:195::i;:::-;53580:217;;53828:6;53817:29;;;;;;;;;;;;:::i;:::-;53810:36;;;;53407:447;:::o;37978:201::-;36958:13;:11;:13::i;:::-;-1:-1:-1;;;;;38067:22:0;::::1;38059:73;;;::::0;-1:-1:-1;;;38059:73:0;;14749:2:1;38059:73:0::1;::::0;::::1;14731:21:1::0;14788:2;14768:18;;;14761:30;14827:34;14807:18;;;14800:62;-1:-1:-1;;;14878:18:1;;;14871:36;14924:19;;38059:73:0::1;14547:402:1::0;38059:73:0::1;38143:28;38162:8;38143:18;:28::i;54673:133::-:0;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;43370:10;:21;;:45;;-1:-1:-1;43409:6:0;;-1:-1:-1;;;;;43409:6:0;43395:10;:20;43370:45;43362:66;;;;-1:-1:-1;;;43362:66:0;;;;;;;:::i;:::-;54760:17:::1;:38:::0;;-1:-1:-1;;54760:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54673:133::o;54906:261::-;54971:5;;-1:-1:-1;;;;;54971:5:0;54957:10;:19;54949:38;;;;-1:-1:-1;;;54949:38:0;;;;;;;:::i;:::-;55012:4;;55036:6;;55000:43;;-1:-1:-1;;;55000:43:0;;-1:-1:-1;;;;;55012:4:0;;;;55000:35;;:43;;;;1483:25:1;;;1471:2;1456:18;;1337:177;55000:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55081:4:0;;55074:37;;-1:-1:-1;;;55074:37:0;;55105:4;55074:37;;;1665:51:1;55056:15:0;;-1:-1:-1;;;;;;55081:4:0;;;;-1:-1:-1;55074:22:0;;1638:18:1;;55074:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55129:4;;;55144:5;55122:37;;-1:-1:-1;;;55122:37:0;;-1:-1:-1;;;;;55144:5:0;;;55122:37;;;15128:51:1;15195:18;;;15188:34;;;55056:55:0;;-1:-1:-1;55129:4:0;;55122:21;;15101:18:1;;55122:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54938:229;54906:261::o;47072:33::-;;;;;;;;;;;;29834:616;30198:10;;;30197:62;;-1:-1:-1;30214:39:0;;-1:-1:-1;;;30214:39:0;;30238:4;30214:39;;;15695:34:1;-1:-1:-1;;;;;15765:15:1;;;15745:18;;;15738:43;30214:15:0;;;;;15630:18:1;;30214:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;30197:62;30175:166;;;;-1:-1:-1;;;30175:166:0;;15994:2:1;30175:166:0;;;15976:21:1;16033:2;16013:18;;;16006:30;16072:34;16052:18;;;16045:62;-1:-1:-1;;;16123:18:1;;;16116:52;16185:19;;30175:166:0;15792:418:1;30175:166:0;30379:62;;-1:-1:-1;;;;;15146:32:1;;30379:62:0;;;15128:51:1;15195:18;;;15188:34;;;30352:90:0;;30372:5;;-1:-1:-1;;;30402:22:0;15101:18:1;;30379:62:0;;;;-1:-1:-1;;30379:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30379:62:0;-1:-1:-1;;;;;;30379:62:0;;;;;;;;;;30352:19;:90::i;23811:229::-;23948:12;23980:52;24002:6;24010:4;24016:1;24019:12;23980:21;:52::i;:::-;23973:59;;23811:229;;;;;;:::o;50174:501::-;39813:19;:17;:19::i;:::-;50264:4:::1;::::0;50278:6:::1;::::0;50252:36:::1;::::0;-1:-1:-1;;;50252:36:0;;::::1;::::0;::::1;6932:25:1::0;;;;50264:4:0::1;6973:18:1::0;;;6966:34;-1:-1:-1;;;;;50264:4:0;;::::1;::::0;50252:25:::1;::::0;6905:18:1;;50252:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;50326:6:0::1;::::0;50319:39:::1;::::0;-1:-1:-1;;;50319:39:0;;50352:4:::1;50319:39;::::0;::::1;1665:51:1::0;50299:17:0::1;::::0;-1:-1:-1;;;;;;50326:6:0;;::::1;::::0;-1:-1:-1;50319:24:0::1;::::0;1638:18:1;;50319:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50299:59:::0;-1:-1:-1;50373:13:0;;50369:299:::1;;50403:28;50414:16;50403:10;:28::i;:::-;50446:14;:12;:14::i;:::-;50475:21;50499:15;:13;:15::i;:::-;50475:39;;50529:9;:7;:9::i;:::-;50569:15;50555:11;:29:::0;50617:10:::1;50604:52;50629:13:::0;50644:11:::1;:9;:11::i;:::-;50604:52;::::0;;6932:25:1;;;6988:2;6973:18;;6966:34;;;;6905:18;50604:52:0::1;;;;;;;50388:280;50241:434;50174:501:::0;:::o;37237:132::-;37118:7;37145:6;-1:-1:-1;;;;;37145:6:0;4404:10;37301:23;37293:68;;;;-1:-1:-1;;;37293:68:0;;16678:2:1;37293:68:0;;;16660:21:1;;;16697:18;;;16690:30;16756:34;16736:18;;;16729:62;16808:18;;37293:68:0;16476:356:1;29098:211:0;29242:58;;-1:-1:-1;;;;;15146:32:1;;29242:58:0;;;15128:51:1;15195:18;;;15188:34;;;29215:86:0;;29235:5;;-1:-1:-1;;;29265:23:0;15101:18:1;;29242:58:0;14954:274:1;41063:120:0;40072:16;:14;:16::i;:::-;41132:5:::1;41122:15:::0;;-1:-1:-1;;;;41122:15:0::1;::::0;;41153:22:::1;4404:10:::0;41162:12:::1;41153:22;::::0;-1:-1:-1;;;;;1683:32:1;;;1665:51;;1653:2;1638:18;41153:22:0::1;;;;;;;41063:120::o:0;55605:407::-;55677:4;;55659;;55652:46;;-1:-1:-1;;;;;55659:4:0;;;;55677;-1:-1:-1;;55652:24:0;:46::i;:::-;55736:9;;55716:6;;55709:53;;-1:-1:-1;;;;;55716:6:0;;;;55736:9;-1:-1:-1;;55709:26:0;:53::i;:::-;55804:9;;55782:8;;55775:42;;-1:-1:-1;;;;;55782:8:0;;;;55804:9;;55775:28;:42::i;:::-;55857:9;;55835:8;;55828:55;;-1:-1:-1;;;;;55835:8:0;;;;55857:9;-1:-1:-1;;55828:28:0;:55::i;:::-;55925:9;;55903:8;;55896:42;;-1:-1:-1;;;;;55903:8:0;;;;55925:9;;55896:28;:42::i;:::-;55978:9;;55956:8;;55949:55;;-1:-1:-1;;;;;55956:8:0;;;;55978:9;-1:-1:-1;;55949:28:0;:55::i;38339:191::-;38413:16;38432:6;;-1:-1:-1;;;;;38449:17:0;;;-1:-1:-1;;;;;;38449:17:0;;;;;;38482:40;;38432:6;;;;;;;38482:40;;38413:16;38482:40;38402:128;38339:191;:::o;40804:118::-;39813:19;:17;:19::i;:::-;40864:7:::1;:14:::0;;-1:-1:-1;;;;40864:14:0::1;-1:-1:-1::0;;;40864:14:0::1;::::0;;40894:20:::1;40901:12;4404:10:::0;;4324:98;56020:247;56094:4;;56076;;56069:33;;-1:-1:-1;;;;;56076:4:0;;;;56094;;56069:24;:33::i;:::-;56140:9;;56120:6;;56113:40;;-1:-1:-1;;;;;56120:6:0;;;;56140:9;;56113:26;:40::i;:::-;56193:9;;56171:8;;56164:42;;-1:-1:-1;;;;;56171:8:0;;;;56193:9;;56164:28;:42::i;:::-;56246:9;;56224:8;;56217:42;;-1:-1:-1;;;;;56224:8:0;;;;56246:9;;56217:28;:42::i;40367:108::-;40255:4;40279:7;-1:-1:-1;;;40279:7:0;;;;40437:9;40429:38;;;;-1:-1:-1;;;40429:38:0;;17039:2:1;40429:38:0;;;17021:21:1;17078:2;17058:18;;;17051:30;-1:-1:-1;;;17097:18:1;;;17090:46;17153:18;;40429:38:0;16837:340:1;45604:144:0;45677:13;45734:1;45737;45717:22;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45703:37;;45604:144;;;;:::o;25626:199::-;25712:12;25744:73;25763:6;25771:4;25744:73;;;;;;;;;;;;;;;;;:18;:73::i;32165:716::-;32589:23;32615:69;32643:4;32615:69;;;;;;;;;;;;;;;;;32623:5;-1:-1:-1;;;;;32615:27:0;;;:69;;;;;:::i;:::-;32699:17;;32589:95;;-1:-1:-1;32699:21:0;32695:179;;32796:10;32785:30;;;;;;;;;;;;:::i;:::-;32777:85;;;;-1:-1:-1;;;32777:85:0;;17859:2:1;32777:85:0;;;17841:21:1;17898:2;17878:18;;;17871:30;17937:34;17917:18;;;17910:62;-1:-1:-1;;;17988:18:1;;;17981:40;18038:19;;32777:85:0;17657:406:1;24931:510:0;25101:12;25159:5;25134:21;:30;;25126:81;;;;-1:-1:-1;;;25126:81:0;;18270:2:1;25126:81:0;;;18252:21:1;18309:2;18289:18;;;18282:30;18348:34;18328:18;;;18321:62;-1:-1:-1;;;18399:18:1;;;18392:36;18445:19;;25126:81:0;18068:402:1;25126:81:0;-1:-1:-1;;;;;21361:19:0;;;25218:60;;;;-1:-1:-1;;;25218:60:0;;18677:2:1;25218:60:0;;;18659:21:1;18716:2;18696:18;;;18689:30;18755:31;18735:18;;;18728:59;18804:18;;25218:60:0;18475:353:1;25218:60:0;25292:12;25306:23;25333:6;-1:-1:-1;;;;;25333:11:0;25352:5;25359:4;25333:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25291:73;;;;25382:51;25399:7;25408:10;25420:12;25382:16;:51::i;:::-;25375:58;24931:510;-1:-1:-1;;;;;;;24931:510:0:o;50708:952::-;50774:34;50811:9;:7;:9::i;:::-;50892:10;;50857:6;;50850:39;;-1:-1:-1;;;50850:39:0;;50883:4;50850:39;;;1665:51:1;50892:10:0;;-1:-1:-1;50831:16:0;;42333:7;;50892:10;-1:-1:-1;;;;;50857:6:0;;50850:24;;1638:18:1;;50850:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;:::i;:::-;:62;;;;:::i;:::-;50941:9;;50923:143;;-1:-1:-1;;;50923:143:0;;50831:81;;-1:-1:-1;;;;;;50941:9:0;;50923:53;;:143;;50831:81;;50941:9;;51004:19;;51033:4;;51040:15;;50923:143;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50923:143:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;51106:6:0;;51099:39;;-1:-1:-1;;;51099:39:0;;51132:4;51099:39;;;1665:51:1;51079:17:0;;-1:-1:-1;;;;;51106:6:0;;51099:24;;1638:18:1;;51099:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51079:59;;51151:21;42333:7;51187:4;:9;;;51175;:21;;;;:::i;:::-;:31;;;;:::i;:::-;51224:6;;51151:55;;-1:-1:-1;51217:60:0;;-1:-1:-1;;;;;51224:6:0;51245:16;51151:55;51217:27;:60::i;:::-;51290:22;42333:7;51327:4;:10;;;51315:9;:22;;;;:::i;:::-;:32;;;;:::i;:::-;51386:17;;51365:6;;51290:57;;-1:-1:-1;51358:62:0;;-1:-1:-1;;;;;51365:6:0;;;;51386:17;51290:57;51358:27;:62::i;:::-;51433:27;42333:7;51475:4;:15;;;51463:9;:27;;;;:::i;:::-;:37;;;;:::i;:::-;51539:10;;51518:6;;51433:67;;-1:-1:-1;51511:60:0;;-1:-1:-1;;;;;51518:6:0;;;;51539:10;51433:67;51511:27;:60::i;:::-;51589:63;;;19906:25:1;;;19962:2;19947:18;;19940:34;;;19990:18;;;19983:34;;;51589:63:0;;19894:2:1;19879:18;51589:63:0;;;;;;;50763:897;;;;;;50708:952;:::o;51723:830::-;51795:6;;51788:39;;-1:-1:-1;;;51788:39:0;;51821:4;51788:39;;;1665:51:1;51767:18:0;;51830:1;;-1:-1:-1;;;;;51795:6:0;;;;51788:24;;1638:18:1;;51788:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;51858:6;;51846:8;;51767:64;;-1:-1:-1;;;;;;51846:8:0;;;51858:6;;51846:18;51842:201;;51899:9;;51881:150;;-1:-1:-1;;;51881:150:0;;-1:-1:-1;;;;;51899:9:0;;;;51881:53;;:150;;51953:10;;51899:9;;51968:16;;51994:4;;52001:15;;51881:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51881:150:0;;;;;;;;;;;;:::i;:::-;;51842:201;52071:6;;52059:8;;-1:-1:-1;;;;;52059:8:0;;;52071:6;;52059:18;52055:201;;52112:9;;52094:150;;-1:-1:-1;;;52094:150:0;;-1:-1:-1;;;;;52112:9:0;;;;52094:53;;:150;;52166:10;;52112:9;;52181:16;;52207:4;;52214:15;;52094:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52094:150:0;;;;;;;;;;;;:::i;:::-;;52055:201;52292:8;;52285:41;;-1:-1:-1;;;52285:41:0;;52320:4;52285:41;;;1665:51:1;52268:14:0;;-1:-1:-1;;;;;52292:8:0;;52285:26;;1638:18:1;;52285:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52361:8;;52354:41;;-1:-1:-1;;;52354:41:0;;52389:4;52354:41;;;1665:51:1;52268:58:0;;-1:-1:-1;52337:14:0;;-1:-1:-1;;;;;52361:8:0;;;;52354:26;;1638:18:1;;52354:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52424:9;;52462:8;;52472;;52406:139;;-1:-1:-1;;;52406:139:0;;-1:-1:-1;;;;;52462:8:0;;;52406:139;;;20425:34:1;52472:8:0;;;20475:18:1;;;20468:43;20527:18;;;20520:34;;;20570:18;;;20563:34;;;52424:9:0;20613:19:1;;;20606:35;;;20657:19;;;20650:35;52512:4:0;20701:19:1;;;20694:44;52519:15:0;20754:19:1;;;20747:35;52337:58:0;;-1:-1:-1;52424:9:0;;52406:41;;20359:19:1;;52406:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;51756:797;;;51723:830::o;40552:108::-;40255:4;40279:7;-1:-1:-1;;;40279:7:0;;;;40611:41;;;;-1:-1:-1;;;40611:41:0;;21306:2:1;40611:41:0;;;21288:21:1;21345:2;21325:18;;;21318:30;-1:-1:-1;;;21364:18:1;;;21357:50;21424:18;;40611:41:0;21104:344:1;26017:395:0;26165:12;-1:-1:-1;;;;;21361:19:0;;;26190:67;;;;-1:-1:-1;;;26190:67:0;;21655:2:1;26190:67:0;;;21637:21:1;21694:2;21674:18;;;21667:30;21733:34;21713:18;;;21706:62;-1:-1:-1;;;21784:18:1;;;21777:34;21828:19;;26190:67:0;21453:400:1;26190:67:0;26271:12;26285:23;26312:6;-1:-1:-1;;;;;26312:17:0;26330:4;26312:23;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26270:65;;;;26353:51;26370:7;26379:10;26391:12;26353:16;:51::i;:::-;26346:58;26017:395;-1:-1:-1;;;;;;26017:395:0:o;27617:762::-;27767:12;27796:7;27792:580;;;-1:-1:-1;27827:10:0;27820:17;;27792:580;27941:17;;:21;27937:424;;28189:10;28183:17;28250:15;28237:10;28233:2;28229:19;28222:44;27937:424;28332:12;28325:20;;-1:-1:-1;;;28325:20:0;;;;;;;;:::i;14:658:1:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:195;465:6;462:1;459:13;451:195;;;530:13;;-1:-1:-1;;;;;526:39:1;514:52;;621:15;;;;586:12;;;;562:1;480:9;451:195;;;-1:-1:-1;663:3:1;;14:658;-1:-1:-1;;;;;;14:658:1:o;677:286::-;736:6;789:2;777:9;768:7;764:23;760:32;757:52;;;805:1;802;795:12;757:52;831:23;;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;968:118;1054:5;1047:13;1040:21;1033:5;1030:32;1020:60;;1076:1;1073;1066:12;1091:241;1147:6;1200:2;1188:9;1179:7;1175:23;1171:32;1168:52;;;1216:1;1213;1206:12;1168:52;1255:9;1242:23;1274:28;1296:5;1274:28;:::i;1727:258::-;1799:1;1809:113;1823:6;1820:1;1817:13;1809:113;;;1899:11;;;1893:18;1880:11;;;1873:39;1845:2;1838:10;1809:113;;;1940:6;1937:1;1934:13;1931:48;;;-1:-1:-1;;1975:1:1;1957:16;;1950:27;1727:258::o;1990:::-;2032:3;2070:5;2064:12;2097:6;2092:3;2085:19;2113:63;2169:6;2162:4;2157:3;2153:14;2146:4;2139:5;2135:16;2113:63;:::i;:::-;2230:2;2209:15;-1:-1:-1;;2205:29:1;2196:39;;;;2237:4;2192:50;;1990:258;-1:-1:-1;;1990:258:1:o;2253:220::-;2402:2;2391:9;2384:21;2365:4;2422:45;2463:2;2452:9;2448:18;2440:6;2422:45;:::i;2478:180::-;2537:6;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;-1:-1:-1;2629:23:1;;2478:180;-1:-1:-1;2478:180:1:o;2890:592::-;2961:6;2969;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3078:9;3065:23;3107:18;3148:2;3140:6;3137:14;3134:34;;;3164:1;3161;3154:12;3134:34;3202:6;3191:9;3187:22;3177:32;;3247:7;3240:4;3236:2;3232:13;3228:27;3218:55;;3269:1;3266;3259:12;3218:55;3309:2;3296:16;3335:2;3327:6;3324:14;3321:34;;;3351:1;3348;3341:12;3321:34;3396:7;3391:2;3382:6;3378:2;3374:15;3370:24;3367:37;3364:57;;;3417:1;3414;3407:12;3364:57;3448:2;3440:11;;;;;3470:6;;-1:-1:-1;2890:592:1;;-1:-1:-1;;;;2890:592:1:o;3679:694::-;3866:2;3855:9;3848:21;3911:6;3905:13;3900:2;3889:9;3885:18;3878:41;3973:2;3965:6;3961:15;3955:22;3950:2;3939:9;3935:18;3928:50;4032:2;4024:6;4020:15;4014:22;4009:2;3998:9;3994:18;3987:50;4092:2;4084:6;4080:15;4074:22;4068:3;4057:9;4053:19;4046:51;3829:4;4144:3;4136:6;4132:16;4126:23;4186:4;4180:3;4169:9;4165:19;4158:33;4214:52;4261:3;4250:9;4246:19;4232:12;4214:52;:::i;:::-;4200:66;;4336:3;4328:6;4324:16;4318:23;4311:31;4304:39;4297:4;4286:9;4282:20;4275:69;4361:6;4353:14;;;3679:694;;;;:::o;4378:184::-;4448:6;4501:2;4489:9;4480:7;4476:23;4472:32;4469:52;;;4517:1;4514;4507:12;4469:52;-1:-1:-1;4540:16:1;;4378:184;-1:-1:-1;4378:184:1:o;4912:331::-;5114:2;5096:21;;;5153:1;5133:18;;;5126:29;-1:-1:-1;;;5186:2:1;5171:18;;5164:38;5234:2;5219:18;;4912:331::o;5527:245::-;5606:6;5614;5667:2;5655:9;5646:7;5642:23;5638:32;5635:52;;;5683:1;5680;5673:12;5635:52;-1:-1:-1;;5706:16:1;;5762:2;5747:18;;;5741:25;5706:16;;5741:25;;-1:-1:-1;5527:245:1:o;5777:380::-;5856:1;5852:12;;;;5899;;;5920:61;;5974:4;5966:6;5962:17;5952:27;;5920:61;6027:2;6019:6;6016:14;5996:18;5993:38;5990:161;;6073:10;6068:3;6064:20;6061:1;6054:31;6108:4;6105:1;6098:15;6136:4;6133:1;6126:15;5990:161;;5777:380;;;:::o;6162:329::-;6364:2;6346:21;;;6403:1;6383:18;;;6376:29;-1:-1:-1;;;6436:2:1;6421:18;;6414:36;6482:2;6467:18;;6162:329::o;6496:127::-;6557:10;6552:3;6548:20;6545:1;6538:31;6588:4;6585:1;6578:15;6612:4;6609:1;6602:15;6628:125;6668:4;6696:1;6693;6690:8;6687:34;;;6701:18;;:::i;:::-;-1:-1:-1;6738:9:1;;6628:125::o;7011:168::-;7051:7;7117:1;7113;7109:6;7105:14;7102:1;7099:21;7094:1;7087:9;7080:17;7076:45;7073:71;;;7124:18;;:::i;:::-;-1:-1:-1;7164:9:1;;7011:168::o;7184:217::-;7224:1;7250;7240:132;;7294:10;7289:3;7285:20;7282:1;7275:31;7329:4;7326:1;7319:15;7357:4;7354:1;7347:15;7240:132;-1:-1:-1;7386:9:1;;7184:217::o;7406:127::-;7467:10;7462:3;7458:20;7455:1;7448:31;7498:4;7495:1;7488:15;7522:4;7519:1;7512:15;7664:545;7766:2;7761:3;7758:11;7755:448;;;7802:1;7827:5;7823:2;7816:17;7872:4;7868:2;7858:19;7942:2;7930:10;7926:19;7923:1;7919:27;7913:4;7909:38;7978:4;7966:10;7963:20;7960:47;;;-1:-1:-1;8001:4:1;7960:47;8056:2;8051:3;8047:12;8044:1;8040:20;8034:4;8030:31;8020:41;;8111:82;8129:2;8122:5;8119:13;8111:82;;;8174:17;;;8155:1;8144:13;8111:82;;8385:1206;8509:18;8504:3;8501:27;8498:53;;;8531:18;;:::i;:::-;8560:94;8650:3;8610:38;8642:4;8636:11;8610:38;:::i;:::-;8604:4;8560:94;:::i;:::-;8680:1;8705:2;8700:3;8697:11;8722:1;8717:616;;;;9377:1;9394:3;9391:93;;;-1:-1:-1;9450:19:1;;;9437:33;9391:93;-1:-1:-1;;8342:1:1;8338:11;;;8334:24;8330:29;8320:40;8366:1;8362:11;;;8317:57;9497:78;;8690:895;;8717:616;7611:1;7604:14;;;7648:4;7635:18;;-1:-1:-1;;8753:17:1;;;8854:9;8876:229;8890:7;8887:1;8884:14;8876:229;;;8979:19;;;8966:33;8951:49;;9086:4;9071:20;;;;9039:1;9027:14;;;;8906:12;8876:229;;;8880:3;9133;9124:7;9121:16;9118:159;;;9257:1;9253:6;9247:3;9241;9238:1;9234:11;9230:21;9226:34;9222:39;9209:9;9204:3;9200:19;9187:33;9183:79;9175:6;9168:95;9118:159;;;9320:1;9314:3;9311:1;9307:11;9303:19;9297:4;9290:33;8690:895;;;8385:1206;;;:::o;9596:128::-;9636:3;9667:1;9663:6;9660:1;9657:13;9654:39;;;9673:18;;:::i;:::-;-1:-1:-1;9709:9:1;;9596:128::o;9729:495::-;9790:3;9828:5;9822:12;9855:6;9850:3;9843:19;9881:4;9910:2;9905:3;9901:12;9894:19;;9932:5;9929:1;9922:16;9974:2;9971:1;9961:16;9995:1;10005:194;10019:6;10016:1;10013:13;10005:194;;;10084:13;;-1:-1:-1;;;;;10080:39:1;10068:52;;10140:12;;;;10116:1;10175:14;;;;10034:9;10005:194;;;-1:-1:-1;10215:3:1;;9729:495;-1:-1:-1;;;;;9729:495:1:o;10229:337::-;10433:6;10422:9;10415:25;10476:2;10471;10460:9;10456:18;10449:30;10396:4;10496:64;10556:2;10545:9;10541:18;10533:6;10496:64;:::i;10571:253::-;10643:2;10637:9;10685:4;10673:17;;10720:18;10705:34;;10741:22;;;10702:62;10699:88;;;10767:18;;:::i;:::-;10803:2;10796:22;10571:253;:::o;10829:275::-;10900:2;10894:9;10965:2;10946:13;;-1:-1:-1;;10942:27:1;10930:40;;11000:18;10985:34;;11021:22;;;10982:62;10979:88;;;11047:18;;:::i;:::-;11083:2;11076:22;10829:275;;-1:-1:-1;10829:275:1:o;11109:936::-;11204:6;11235:2;11278;11266:9;11257:7;11253:23;11249:32;11246:52;;;11294:1;11291;11284:12;11246:52;11327:9;11321:16;11356:18;11397:2;11389:6;11386:14;11383:34;;;11413:1;11410;11403:12;11383:34;11451:6;11440:9;11436:22;11426:32;;11496:7;11489:4;11485:2;11481:13;11477:27;11467:55;;11518:1;11515;11508:12;11467:55;11547:2;11541:9;11569:2;11565;11562:10;11559:36;;;11575:18;;:::i;:::-;11621:2;11618:1;11614:10;11604:20;;11644:28;11668:2;11664;11660:11;11644:28;:::i;:::-;11706:15;;;11776:11;;;11772:20;;;11737:12;;;;11804:19;;;11801:39;;;11836:1;11833;11826:12;11801:39;11860:11;;;;11880:135;11896:6;11891:3;11888:15;11880:135;;;11962:10;;11950:23;;11913:12;;;;11993;;;;11880:135;;;12034:5;11109:936;-1:-1:-1;;;;;;;;11109:936:1:o;12050:127::-;12111:10;12106:3;12102:20;12099:1;12092:31;12142:4;12139:1;12132:15;12166:4;12163:1;12156:15;12854:132;12930:13;;12952:28;12930:13;12952:28;:::i;:::-;12854:132;;;:::o;12991:1270::-;13090:6;13121:2;13164;13152:9;13143:7;13139:23;13135:32;13132:52;;;13180:1;13177;13170:12;13132:52;13213:9;13207:16;13242:18;13283:2;13275:6;13272:14;13269:34;;;13299:1;13296;13289:12;13269:34;13322:22;;;;13378:4;13360:16;;;13356:27;13353:47;;;13396:1;13393;13386:12;13353:47;13422:22;;:::i;:::-;13473:2;13467:9;13460:5;13453:24;13523:2;13519;13515:11;13509:18;13504:2;13497:5;13493:14;13486:42;13574:2;13570;13566:11;13560:18;13555:2;13548:5;13544:14;13537:42;13625:2;13621;13617:11;13611:18;13606:2;13599:5;13595:14;13588:42;13669:3;13665:2;13661:12;13655:19;13699:2;13689:8;13686:16;13683:36;;;13715:1;13712;13705:12;13683:36;13738:17;;13786:4;13778:13;;13774:27;-1:-1:-1;13764:55:1;;13815:1;13812;13805:12;13764:55;13844:2;13838:9;13866:2;13862;13859:10;13856:36;;;13872:18;;:::i;:::-;13914:53;13957:2;13938:13;;-1:-1:-1;;13934:27:1;13930:36;;13914:53;:::i;:::-;13901:66;;13990:2;13983:5;13976:17;14030:7;14025:2;14020;14016;14012:11;14008:20;14005:33;14002:53;;;14051:1;14048;14041:12;14002:53;14064:54;14115:2;14110;14103:5;14099:14;14094:2;14090;14086:11;14064:54;:::i;:::-;;;14151:5;14145:3;14138:5;14134:15;14127:30;14190:40;14225:3;14221:2;14217:12;14190:40;:::i;:::-;14184:3;14173:15;;14166:65;14177:5;12991:1270;-1:-1:-1;;;;;;12991:1270:1:o;14266:276::-;14397:3;14435:6;14429:13;14451:53;14497:6;14492:3;14485:4;14477:6;14473:17;14451:53;:::i;:::-;14520:16;;;;;14266:276;-1:-1:-1;;14266:276:1:o;15233:245::-;15300:6;15353:2;15341:9;15332:7;15328:23;15324:32;15321:52;;;15369:1;15366;15359:12;15321:52;15401:9;15395:16;15420:28;15442:5;15420:28;:::i;17182:470::-;17361:3;17399:6;17393:13;17415:53;17461:6;17456:3;17449:4;17441:6;17437:17;17415:53;:::i;:::-;17531:13;;17490:16;;;;17553:57;17531:13;17490:16;17587:4;17575:17;;17553:57;:::i;:::-;17626:20;;17182:470;-1:-1:-1;;;;17182:470:1:o;19112:587::-;19408:6;19397:9;19390:25;19451:6;19446:2;19435:9;19431:18;19424:34;19494:3;19489:2;19478:9;19474:18;19467:31;19371:4;19515:65;19575:3;19564:9;19560:19;19552:6;19515:65;:::i;:::-;-1:-1:-1;;;;;19616:32:1;;;;19611:2;19596:18;;19589:60;-1:-1:-1;19680:3:1;19665:19;19658:35;19507:73;19112:587;-1:-1:-1;;;19112:587:1:o;20793:306::-;20881:6;20889;20897;20950:2;20938:9;20929:7;20925:23;20921:32;20918:52;;;20966:1;20963;20956:12;20918:52;20995:9;20989:16;20979:26;;21045:2;21034:9;21030:18;21024:25;21014:35;;21089:2;21078:9;21074:18;21068:25;21058:35;;20793:306;;;;;:::o
Swarm Source
ipfs://3976700b3da1359922cb260808a973e8464266c2716a20a7ae816dbf175f6a9e
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.