Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xfe74fd5095bebe89c2a698100a6617fabb456be879a175701cd810ba6ccf1baf | 0x60806040 | 17063942 | 684 days 16 hrs ago | Swamp Finance: Deployer | IN | Contract Creation | 0 MATIC | 0.090423735 |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x7431370e1CCC508925395EAaf8d258b85149E64c
Contract Name:
StrategyV3_Jetswap
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-21 */ // Sources flattened with hardhat v2.4.3 https://hardhat.org // File contracts/interfaces/IERC20.sol pragma solidity ^0.6.12; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol"; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File contracts/libraries/SafeMath.sol pragma solidity ^0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/libraries/Address.sol pragma solidity 0.6.12; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/SafeERC20.sol"; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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.3._ */ 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.3._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/libraries/SafeERC20.sol pragma solidity 0.6.12; /** * @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 SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } // File contracts/helpers/ReentrancyGuard.sol pragma solidity 0.6.12; // "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol"; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/helpers/Context.sol pragma solidity 0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/helpers/Pausable.sol pragma solidity 0.6.12; // "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Pausable.sol"; 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() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/helpers/Ownable.sol pragma solidity 0.6.12; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol"; 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() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/interfaces/IXswapFarm.sol pragma solidity 0.6.12; interface IXswapFarm { function poolLength() external view returns (uint256); function userInfo() external view returns (uint256); // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); // View function to see pending CAKEs on frontend. // function pendingCake(uint256 _pid, address _user) // external // view // returns (uint256); // Deposit LP tokens to the farm for farm's token allocation. function deposit(uint256 _pid, uint256 _amount) external; // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) external; // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) external; } // File contracts/interfaces/IXRouter01.sol pragma solidity 0.6.12; interface IXRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File contracts/interfaces/IXRouter02.sol pragma solidity 0.6.12; interface IXRouter02 is IXRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File contracts/StrategyV3.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IWMATIC is IERC20 { function deposit() external payable; function withdraw(uint256 wad) external; } abstract contract StrategyV3 is Ownable, ReentrancyGuard, Pausable { // Maximises yields in e.g. pancakeswap using SafeMath for uint256; using SafeERC20 for IERC20; bool public isSingleVault; bool public isAutoComp; address public farmContractAddress; // address of farm, eg, PCS, Thugs etc. uint256 public pid; // pid of pool in farmContractAddress address public wantAddress; address public token0Address; address public token1Address; address public earnedAddress; address public uniRouterAddress; // uniswap, pancakeswap etc address public buybackRouterAddress; // uniswap, pancakeswap etc uint256 public routerDeadlineDuration = 300; // Set on global level, could be passed to functions via arguments address public wmaticAddress; address public nativeFarmAddress; address public NATIVEAddress; address public govAddress; // timelock contract uint256 public lastEarnBlock = 0; uint256 public wantLockedTotal = 0; uint256 public sharesTotal = 0; uint256 public controllerFee = 200; uint256 public constant controllerFeeMax = 10000; // 100 = 1% uint256 public constant controllerFeeUL = 300; uint256 public buyBackRate = 200; uint256 public constant buyBackRateMax = 10000; // 100 = 1% uint256 public constant buyBackRateUL = 800; address public constant buyBackAddress = 0x000000000000000000000000000000000000dEaD; uint256 public entranceFeeFactor; // < 0.1% entrance fee - goes to pool + prevents front-running uint256 public constant entranceFeeFactorMax = 10000; uint256 public constant entranceFeeFactorLL = 9950; // 0.5% is the max entrance fee settable. LL = lowerlimit uint256 public depositFeeFactor; // 9600 == 4% fee uint256 public constant depositFeeFactorMax = 10000; // 100 = 1% uint256 public constant depositFeeFactorLL = 9500; uint256 public withdrawFeeFactor; uint256 public constant withdrawFeeFactorMax = 10000; uint256 public constant withdrawFeeFactorLL = 9950; uint256 public slippageFactor = 950; // 5% default slippage tolerance uint256 public constant slippageFactorUL = 995; address[] public earnedToNATIVEPath; address[] public earnedToToken0Path; address[] public earnedToToken1Path; address[] public token0ToEarnedPath; address[] public token1ToEarnedPath; address[] public earnedToWMATICPath; address[] public WMATICToNATIVEPath; modifier onlyAllowGov() { require(msg.sender == govAddress, "Not authorised"); _; } // Receives new deposits from user function deposit(address _userAddress, uint256 _wantAmt) public virtual onlyOwner nonReentrant whenNotPaused returns (uint256) { IERC20(wantAddress).safeTransferFrom( address(msg.sender), address(this), _wantAmt ); // If depositFee in set, than _wantAmt - depositFee if (depositFeeFactor < depositFeeFactorMax) { _wantAmt = _wantAmt.mul(depositFeeFactor).div(depositFeeFactorMax); } uint256 sharesAdded = _wantAmt; if (wantLockedTotal > 0 && sharesTotal > 0) { sharesAdded = _wantAmt .mul(sharesTotal) .mul(entranceFeeFactor) .div(wantLockedTotal) .div(entranceFeeFactorMax); } sharesTotal = sharesTotal.add(sharesAdded); if (isAutoComp) { _farm(); } else { wantLockedTotal = wantLockedTotal.add(_wantAmt); } return sharesAdded; } function farm() public virtual nonReentrant { _farm(); } function _farm() internal virtual { require(isAutoComp, "!isAutoComp"); uint256 wantAmt = IERC20(wantAddress).balanceOf(address(this)); wantLockedTotal = wantLockedTotal.add(wantAmt); IERC20(wantAddress).safeIncreaseAllowance(farmContractAddress, wantAmt); IXswapFarm(farmContractAddress).deposit(pid, wantAmt); } function _unfarm(uint256 _wantAmt) internal virtual { IXswapFarm(farmContractAddress).withdraw(pid, _wantAmt); } function withdraw(address _userAddress, uint256 _wantAmt) public virtual onlyOwner nonReentrant returns (uint256) { require(_wantAmt > 0, "_wantAmt <= 0"); uint256 sharesRemoved = _wantAmt.mul(sharesTotal).div(wantLockedTotal); if (sharesRemoved > sharesTotal) { sharesRemoved = sharesTotal; } sharesTotal = sharesTotal.sub(sharesRemoved); if (withdrawFeeFactor < withdrawFeeFactorMax) { _wantAmt = _wantAmt.mul(withdrawFeeFactor).div(withdrawFeeFactorMax); } if (isAutoComp) { _unfarm(_wantAmt); } uint256 wantAmt = IERC20(wantAddress).balanceOf(address(this)); if (_wantAmt > wantAmt) { _wantAmt = wantAmt; } if (wantLockedTotal < _wantAmt) { _wantAmt = wantLockedTotal; } wantLockedTotal = wantLockedTotal.sub(_wantAmt); IERC20(wantAddress).safeTransfer(nativeFarmAddress, _wantAmt); return sharesRemoved; } function _harvest() internal virtual { _unfarm(0); } // 1. Harvest farm tokens // 2. Converts farm tokens into want tokens // 3. Deposits want tokens function earn() public virtual nonReentrant whenNotPaused { require(isAutoComp, "!isAutoComp"); // Harvest farm tokens _harvest(); // Converts farm tokens into want tokens uint256 earnedAmt = IERC20(earnedAddress).balanceOf(address(this)); earnedAmt = distributeFees(earnedAmt); earnedAmt = buyBack(earnedAmt); if (isSingleVault) { if (earnedAddress != wantAddress) { IERC20(earnedAddress).safeIncreaseAllowance( uniRouterAddress, earnedAmt ); // Swap earned to want _safeSwap( uniRouterAddress, earnedAmt, slippageFactor, earnedToToken0Path, address(this), now + routerDeadlineDuration ); } lastEarnBlock = block.number; _farm(); return; } IERC20(earnedAddress).safeIncreaseAllowance( uniRouterAddress, earnedAmt ); if (earnedAddress != token0Address) { // Swap half earned to token0 _safeSwap( uniRouterAddress, earnedAmt.div(2), slippageFactor, earnedToToken0Path, address(this), now + routerDeadlineDuration ); } if (earnedAddress != token1Address) { // Swap half earned to token1 _safeSwap( uniRouterAddress, earnedAmt.div(2), slippageFactor, earnedToToken1Path, address(this), now + routerDeadlineDuration ); } // Get want tokens, ie. add liquidity uint256 token0Amt = IERC20(token0Address).balanceOf(address(this)); uint256 token1Amt = IERC20(token1Address).balanceOf(address(this)); if (token0Amt > 0 && token1Amt > 0) { IERC20(token0Address).safeIncreaseAllowance( uniRouterAddress, token0Amt ); IERC20(token1Address).safeIncreaseAllowance( uniRouterAddress, token1Amt ); IXRouter02(uniRouterAddress).addLiquidity( token0Address, token1Address, token0Amt, token1Amt, 0, 0, address(this), now + routerDeadlineDuration ); } lastEarnBlock = block.number; _farm(); } function buyBack(uint256 _earnedAmt) internal virtual returns (uint256) { if (buyBackRate <= 0) { return _earnedAmt; } uint256 buyBackAmt = _earnedAmt.mul(buyBackRate).div(buyBackRateMax); if (uniRouterAddress != buybackRouterAddress) { // Example case: LP token on ApeSwap and NATIVE token on PancakeSwap if (earnedAddress != wmaticAddress) { // First convert earn to wmatic IERC20(earnedAddress).safeIncreaseAllowance( uniRouterAddress, buyBackAmt ); IXRouter02(uniRouterAddress) .swapExactTokensForTokensSupportingFeeOnTransferTokens( buyBackAmt, 0, earnedToWMATICPath, address(this), now + routerDeadlineDuration ); } // convert all wmatic to Native and burn them uint256 wmaticAmt = IERC20(wmaticAddress).balanceOf(address(this)); if (wmaticAmt > 0) { IERC20(wmaticAddress).safeIncreaseAllowance( buybackRouterAddress, wmaticAmt ); IXRouter02(buybackRouterAddress) .swapExactTokensForTokensSupportingFeeOnTransferTokens( wmaticAmt, 0, WMATICToNATIVEPath, buyBackAddress, now + routerDeadlineDuration ); } } else { IERC20(earnedAddress).safeIncreaseAllowance( uniRouterAddress, buyBackAmt ); _safeSwap( uniRouterAddress, buyBackAmt, slippageFactor, earnedToNATIVEPath, buyBackAddress, now + routerDeadlineDuration ); } return _earnedAmt.sub(buyBackAmt); } function distributeFees(uint256 _earnedAmt) internal virtual returns (uint256) { if (_earnedAmt > 0) { // Performance fee if (controllerFee > 0) { uint256 fee = _earnedAmt.mul(controllerFee).div(controllerFeeMax); IERC20(earnedAddress).safeTransfer(govAddress, fee); _earnedAmt = _earnedAmt.sub(fee); } } return _earnedAmt; } function convertDustToEarned() public virtual whenNotPaused { require(isAutoComp, "!isAutoComp"); require(!isSingleVault, "isSingleVault"); // Converts dust tokens into earned tokens, which will be reinvested on the next earn(). // Converts token0 dust (if any) to earned tokens uint256 token0Amt = IERC20(token0Address).balanceOf(address(this)); if (token0Address != earnedAddress && token0Amt > 0) { IERC20(token0Address).safeIncreaseAllowance( uniRouterAddress, token0Amt ); // Swap all dust tokens to earned tokens _safeSwap( uniRouterAddress, token0Amt, slippageFactor, token0ToEarnedPath, address(this), now + routerDeadlineDuration ); } // Converts token1 dust (if any) to earned tokens uint256 token1Amt = IERC20(token1Address).balanceOf(address(this)); if (token1Address != earnedAddress && token1Amt > 0) { IERC20(token1Address).safeIncreaseAllowance( uniRouterAddress, token1Amt ); // Swap all dust tokens to earned tokens _safeSwap( uniRouterAddress, token1Amt, slippageFactor, token1ToEarnedPath, address(this), now + routerDeadlineDuration ); } } function pause() public virtual onlyAllowGov { _pause(); } function unpause() external virtual onlyAllowGov { _unpause(); } function setEntranceFeeFactor(uint256 _entranceFeeFactor) public onlyAllowGov { require(_entranceFeeFactor > entranceFeeFactorLL, "!safe - too low"); require(_entranceFeeFactor <= entranceFeeFactorMax, "!safe - too high"); entranceFeeFactor = _entranceFeeFactor; } function setControllerFee(uint256 _controllerFee) public onlyAllowGov{ require(_controllerFee <= controllerFeeUL, "too high"); controllerFee = _controllerFee; } function setGov(address _govAddress) public virtual onlyAllowGov { govAddress = _govAddress; } function setDepositFeeFactor(uint256 _depositFeeFactor) public onlyAllowGov{ require(_depositFeeFactor > depositFeeFactorLL, "!safe - too low"); require(_depositFeeFactor <= depositFeeFactorMax, "!safe - too high"); depositFeeFactor = _depositFeeFactor; } function setWithdrawFeeFactor(uint256 _withdrawFeeFactor) public onlyAllowGov { require(_withdrawFeeFactor > withdrawFeeFactorLL, "!safe - too low"); require(_withdrawFeeFactor <= withdrawFeeFactorMax, "!safe - too high"); withdrawFeeFactor = _withdrawFeeFactor; } function setbuyBackRate(uint256 _buyBackRate) public onlyAllowGov { require(buyBackRate <= buyBackRateUL, "too high"); buyBackRate = _buyBackRate; } function setBuybackRouterAddress(address _buybackRouterAddress) public onlyAllowGov { buybackRouterAddress = _buybackRouterAddress; } function inCaseTokensGetStuck( address _token, uint256 _amount, address _to ) public virtual onlyAllowGov { require(_token != earnedAddress, "!safe"); require(_token != wantAddress, "!safe"); IERC20(_token).safeTransfer(_to, _amount); } function _wrapMATIC() internal virtual onlyAllowGov { // MATIC -> WMATIC uint256 maticBal = address(this).balance; if (maticBal > 0) { IWMATIC(wmaticAddress).deposit{value: maticBal}(); // MATIC -> WMATIC } } function _safeSwap( address _uniRouterAddress, uint256 _amountIn, uint256 _slippageFactor, address[] memory _path, address _to, uint256 _deadline ) internal virtual { uint256[] memory amounts = IXRouter02(_uniRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length.sub(1)]; IXRouter02(_uniRouterAddress) .swapExactTokensForTokensSupportingFeeOnTransferTokens( _amountIn, amountOut.mul(_slippageFactor).div(1000), _path, _to, _deadline ); } } // File contracts/StrategyV3_Jetswap.sol pragma solidity 0.6.12; contract StrategyV3_Jetswap is StrategyV3 { address public earned0Address; address[] public earned0ToEarnedPath; constructor( address[] memory _addresses, address[] memory _tokenAddresses, bool _isSingleVault, uint256 _pid, address[] memory _earnedToNATIVEPath, address[] memory _earnedToToken0Path, address[] memory _earnedToToken1Path, address[] memory _token0ToEarnedPath, address[] memory _token1ToEarnedPath, address[] memory _earned0ToEarnedPath, uint256 _depositFeeFactor, uint256 _withdrawFeeFactor, uint256 _entranceFeeFactor ) public { nativeFarmAddress = _addresses[0]; farmContractAddress = _addresses[1]; govAddress = _addresses[2]; uniRouterAddress = _addresses[3]; buybackRouterAddress = _addresses[4]; NATIVEAddress = _tokenAddresses[0]; wmaticAddress = _tokenAddresses[1]; wantAddress = _tokenAddresses[2]; earnedAddress = _tokenAddresses[3]; earned0Address = _tokenAddresses[4]; token0Address = _tokenAddresses[5]; token1Address = _tokenAddresses[6]; pid = _pid; isSingleVault = _isSingleVault; isAutoComp = true; earnedToNATIVEPath = _earnedToNATIVEPath; earnedToToken0Path = _earnedToToken0Path; earnedToToken1Path = _earnedToToken1Path; token0ToEarnedPath = _token0ToEarnedPath; token1ToEarnedPath = _token1ToEarnedPath; earned0ToEarnedPath = _earned0ToEarnedPath; earnedToWMATICPath = [earnedAddress, wmaticAddress]; WMATICToNATIVEPath = [wmaticAddress, NATIVEAddress]; depositFeeFactor = _depositFeeFactor; withdrawFeeFactor = _withdrawFeeFactor; entranceFeeFactor = _entranceFeeFactor; transferOwnership(nativeFarmAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"address[]","name":"_tokenAddresses","type":"address[]"},{"internalType":"bool","name":"_isSingleVault","type":"bool"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address[]","name":"_earnedToNATIVEPath","type":"address[]"},{"internalType":"address[]","name":"_earnedToToken0Path","type":"address[]"},{"internalType":"address[]","name":"_earnedToToken1Path","type":"address[]"},{"internalType":"address[]","name":"_token0ToEarnedPath","type":"address[]"},{"internalType":"address[]","name":"_token1ToEarnedPath","type":"address[]"},{"internalType":"address[]","name":"_earned0ToEarnedPath","type":"address[]"},{"internalType":"uint256","name":"_depositFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"},{"internalType":"uint256","name":"_entranceFeeFactor","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"NATIVEAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"WMATICToNATIVEPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRateMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackRateUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controllerFeeUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convertDustToEarned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earned0Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earned0ToEarnedPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earnedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToNATIVEPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToToken0Path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToToken1Path","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earnedToWMATICPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entranceFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAutoComp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSingleVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastEarnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeFarmAddress","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerDeadlineDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackRouterAddress","type":"address"}],"name":"setBuybackRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_controllerFee","type":"uint256"}],"name":"setControllerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositFeeFactor","type":"uint256"}],"name":"setDepositFeeFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_entranceFeeFactor","type":"uint256"}],"name":"setEntranceFeeFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_govAddress","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFeeFactor","type":"uint256"}],"name":"setWithdrawFeeFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyBackRate","type":"uint256"}],"name":"setbuyBackRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sharesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactorUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token0ToEarnedPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token1ToEarnedPath","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":"uniRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wantAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wantLockedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_wantAmt","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeeFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeeFactorMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wmaticAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405261012c600a556000600f556000601055600060115560c860125560c86013556103b66017553480156200003657600080fd5b50604051620069343803806200693483398181016040526101a08110156200005d57600080fd5b81019080805160405193929190846401000000008211156200007e57600080fd5b838201915060208201858111156200009557600080fd5b8251866020820283011164010000000082111715620000b357600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620000ec578082015181840152602081019050620000cf565b50505050905001604052602001805160405193929190846401000000008211156200011657600080fd5b838201915060208201858111156200012d57600080fd5b82518660208202830111640100000000821117156200014b57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200018457808201518184015260208101905062000167565b50505050905001604052602001805190602001909291908051906020019092919080516040519392919084640100000000821115620001c257600080fd5b83820191506020820185811115620001d957600080fd5b8251866020820283011164010000000082111715620001f757600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200023057808201518184015260208101905062000213565b50505050905001604052602001805160405193929190846401000000008211156200025a57600080fd5b838201915060208201858111156200027157600080fd5b82518660208202830111640100000000821117156200028f57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620002c8578082015181840152602081019050620002ab565b5050505090500160405260200180516040519392919084640100000000821115620002f257600080fd5b838201915060208201858111156200030957600080fd5b82518660208202830111640100000000821117156200032757600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200036057808201518184015260208101905062000343565b50505050905001604052602001805160405193929190846401000000008211156200038a57600080fd5b83820191506020820185811115620003a157600080fd5b8251866020820283011164010000000082111715620003bf57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620003f8578082015181840152602081019050620003db565b50505050905001604052602001805160405193929190846401000000008211156200042257600080fd5b838201915060208201858111156200043957600080fd5b82518660208202830111640100000000821117156200045757600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200049057808201518184015260208101905062000473565b5050505090500160405260200180516040519392919084640100000000821115620004ba57600080fd5b83820191506020820185811115620004d157600080fd5b8251866020820283011164010000000082111715620004ef57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620005285780820151818401526020810190506200050b565b5050505090500160405260200180519060200190929190805190602001909291908051906020019092919050505060006200056862000ce460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055506000600260006101000a81548160ff0219169083151502179055508c6000815181106200063657fe5b6020026020010151600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c6001815181106200068c57fe5b6020026020010151600260036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c600281518110620006e257fe5b6020026020010151600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c6003815181106200073857fe5b6020026020010151600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c6004815181106200078e57fe5b6020026020010151600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600081518110620007e457fe5b6020026020010151600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6001815181106200083a57fe5b6020026020010151600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6002815181106200089057fe5b6020026020010151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600381518110620008e657fe5b6020026020010151600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6004815181106200093c57fe5b6020026020010151601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b6005815181106200099257fe5b6020026020010151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600681518110620009e857fe5b6020026020010151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550896003819055508a600260016101000a81548160ff02191690831515021790555060016002806101000a81548160ff021916908315150217905550886018908051906020019062000a8392919062000f02565b50876019908051906020019062000a9c92919062000f02565b5086601a908051906020019062000ab592919062000f02565b5085601b908051906020019062000ace92919062000f02565b5084601c908051906020019062000ae792919062000f02565b50836020908051906020019062000b0092919062000f02565b506040518060400160405280600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250601d90600262000bc492919062000f91565b506040518060400160405280600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250601e90600262000c8892919062000f91565b5082601581905550816016819055508060148190555062000cd1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000cec60201b60201c565b505050505050505050505050506200105d565b600033905090565b62000cfc62000ce460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806200690e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b82805482825590600052602060002090810192821562000f7e579160200282015b8281111562000f7d5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000f23565b5b50905062000f8d919062001020565b5090565b8280548282559060005260206000209081019282156200100d579160200282015b828111156200100c5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000fb2565b5b5090506200101c919062001020565b5090565b5b808211156200105957600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010162001021565b5090565b6158a1806200106d6000396000f3fe608060405234801561001057600080fd5b50600436106103cf5760003560e01c8063866b2018116101ff578063cb9718471161011a578063e7198474116100ad578063f2fde38b1161007c578063f2fde38b14610e8e578063f3fef3a314610ed2578063f400d31114610f34578063ffbd3b1f14610f62576103cf565b8063e719847414610dea578063e7a0367914610e1e578063ee50dc3414610e52578063f106845414610e70576103cf565b8063db4b7eee116100e9578063db4b7eee14610d10578063dd85a8ad14610d44578063decfd2c314610d9c578063e5dd455a14610dca576103cf565b8063cb97184714610c5a578063cfad57a214610c8e578063d389800f14610cd2578063d7cb416f14610cdc576103cf565b8063b3ed459911610192578063c11c2e9211610161578063c11c2e9214610b82578063c302a4d014610b8c578063c8e3d18b14610baa578063cb46b7e314610c02576103cf565b8063b3ed459914610aaa578063b40fa1ce14610ade578063b74cd24214610b0c578063b77050e714610b2a576103cf565b806396e9aff8116101ce57806396e9aff8146109e25780639fc33a9f14610a3a578063a613a28a14610a6e578063b3545c0114610a8c576103cf565b8063866b20181461092e57806388f9e8001461094c5780638da5cb5b1461098057806396470b73146109b4576103cf565b806346008a07116102ef578063693a090b116102825780637c75e9e5116102515780637c75e9e51461088e5780637ff36fbe146108d25780638456cb591461090657806385f02dd614610910576103cf565b8063693a090b146107fe578063715018a614610832578063783478ad1461083c5780637c717c0914610870576103cf565b806367057b6c116102be57806367057b6c146106fc57806367206d401461071a57806367eed8e01461078857806368f54162146107e0576103cf565b806346008a071461062857806347e7ef241461065c5780634d9f7bb2146106be5780635c975abb146106dc576103cf565b806325c7ce6b116103675780633e1a8912116103365780633e1a8912146105b45780633f4ba83a146105e257806342da4eb3146105ec57806344a3955e1461060a576103cf565b806325c7ce6b1461053a5780632717eff3146105585780632db693301461057657806336e9332d146105aa576103cf565b80630fa4e01e116103a35780630fa4e01e146104c25780631334903f146104e0578063178a8d07146104fe5780631b61e0551461051c576103cf565b80627a2ae3146103d4578063061c7d481461042c57806307e2318d1461044a5780630ddea8c3146104a2575b600080fd5b610400600480360360208110156103ea57600080fd5b8101908080359060200190929190505050610f80565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610434610fbc565b6040518082815260200191505060405180910390f35b6104766004803603602081101561046057600080fd5b8101908080359060200190929190505050610fc2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104aa610ffe565b60405180821515815260200191505060405180910390f35b6104ca611011565b6040518082815260200191505060405180910390f35b6104e8611017565b6040518082815260200191505060405180910390f35b61050661101d565b6040518082815260200191505060405180910390f35b610524611023565b6040518082815260200191505060405180910390f35b610542611029565b6040518082815260200191505060405180910390f35b61056061102f565b6040518082815260200191505060405180910390f35b61057e611035565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b261105b565b005b6105e0600480360360208110156105ca57600080fd5b81019080803590602001909291905050506110ed565b005b6105ea6112a9565b005b6105f4611376565b6040518082815260200191505060405180910390f35b61061261137c565b6040518082815260200191505060405180910390f35b610630611382565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a86004803603604081101561067257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a8565b6040518082815260200191505060405180910390f35b6106c66116d7565b6040518082815260200191505060405180910390f35b6106e46116dd565b60405180821515815260200191505060405180910390f35b6107046116f4565b6040518082815260200191505060405180910390f35b6107866004803603606081101561073057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fa565b005b6107b46004803603602081101561079e57600080fd5b8101908080359060200190929190505050611975565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107e86119b1565b6040518082815260200191505060405180910390f35b6108066119b7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61083a6119dd565b005b610844611b63565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610878611b69565b6040518082815260200191505060405180910390f35b6108d0600480360360208110156108a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b6f565b005b6108da611c76565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61090e611c9c565b005b610918611d69565b6040518082815260200191505060405180910390f35b610936611d6f565b6040518082815260200191505060405180910390f35b610954611d75565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610988611d9b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109e0600480360360208110156109ca57600080fd5b8101908080359060200190929190505050611dc4565b005b610a0e600480360360208110156109f857600080fd5b8101908080359060200190929190505050611f80565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a42611fbc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a76611fe2565b6040518082815260200191505060405180910390f35b610a94611fe8565b6040518082815260200191505060405180910390f35b610ab2611fee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b0a60048036036020811015610af457600080fd5b8101908080359060200190929190505050612014565b005b610b1461215b565b6040518082815260200191505060405180910390f35b610b5660048036036020811015610b4057600080fd5b8101908080359060200190929190505050612161565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b8a61219d565b005b610b94612819565b6040518082815260200191505060405180910390f35b610bd660048036036020811015610bc057600080fd5b810190808035906020019092919050505061281f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c2e60048036036020811015610c1857600080fd5b810190808035906020019092919050505061285b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c62612897565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610cd060048036036020811015610ca457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128bd565b005b610cda6129c4565b005b610ce4613522565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d18613548565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d7060048036036020811015610d5a57600080fd5b810190808035906020019092919050505061356e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dc860048036036020811015610db257600080fd5b81019080803590602001909291905050506135aa565b005b610dd2613766565b60405180821515815260200191505060405180910390f35b610df2613777565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e2661379d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e5a6137c3565b6040518082815260200191505060405180910390f35b610e786137c9565b6040518082815260200191505060405180910390f35b610ed060048036036020811015610ea457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137cf565b005b610f1e60048036036040811015610ee857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139da565b6040518082815260200191505060405180910390f35b610f6060048036036020811015610f4a57600080fd5b8101908080359060200190929190505050613dc8565b005b610f6a613f0d565b6040518082815260200191505060405180910390f35b601c8181548110610f8d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61012c81565b60208181548110610fcf57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260019054906101000a900460ff1681565b600f5481565b60145481565b60135481565b600a5481565b60155481565b61271081565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156110d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506110e4613f13565b60018081905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b6126de8111611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f2173616665202d20746f6f206c6f77000000000000000000000000000000000081525060200191505060405180910390fd5b61271081111561129f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f2173616665202d20746f6f20686967680000000000000000000000000000000081525060200191505060405180910390fd5b8060148190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b61137461417f565b565b60105481565b60115481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113b2614272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600260015414156114eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600260009054906101000a900460ff1615611576576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6115c5333084600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661427a909392919063ffffffff16565b61271060155410156115fd576115fa6127106115ec6015548561433b90919063ffffffff16565b6143c190919063ffffffff16565b91505b6000829050600060105411801561161657506000601154115b1561166f5761166c61271061165e6010546116506014546116426011548a61433b90919063ffffffff16565b61433b90919063ffffffff16565b6143c190919063ffffffff16565b6143c190919063ffffffff16565b90505b6116848160115461440b90919063ffffffff16565b60118190555060028054906101000a900460ff16156116aa576116a5613f13565b6116c6565b6116bf8360105461440b90919063ffffffff16565b6010819055505b809150506001808190555092915050565b61271081565b6000600260009054906101000a900460ff16905090565b61271081565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f217361666500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611945576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f217361666500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61197081838573ffffffffffffffffffffffffffffffffffffffff166144939092919063ffffffff16565b505050565b6018818154811061198257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119e5614272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61dead81565b61251c81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b611d67614535565b565b60125481565b6126de81565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b6126de8111611efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f2173616665202d20746f6f206c6f77000000000000000000000000000000000081525060200191505060405180910390fd5b612710811115611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f2173616665202d20746f6f20686967680000000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b601a8181548110611f8d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b61032081565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b6103206013541115612151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f746f6f206869676800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060138190555050565b6103e381565b601b818154811061216e57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900460ff1615612220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60028054906101000a900460ff166122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260019054906101000a900460ff1615612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f697353696e676c655661756c740000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123ae57600080fd5b505afa1580156123c2573d6000803e3d6000fd5b505050506040513d60208110156123d857600080fd5b81019080805190602001909291905050509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561246b5750600081115b1561259c576124df600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b61259b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601754601b80548060200260200160405190810160405280929190818152602001828054801561258b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612541575b505050505030600a5442016147a2565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561262757600080fd5b505afa15801561263b573d6000803e3d6000fd5b505050506040513d602081101561265157600080fd5b81019080805190602001909291905050509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156126e45750600081115b1561281557612758600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b612814600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682601754601c80548060200260200160405190810160405280929190818152602001828054801561280457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116127ba575b505050505030600a5442016147a2565b5b5050565b6126de81565b6019818154811061282c57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d818154811061286857fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60026001541415612a3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600260009054906101000a900460ff1615612ac8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b60028054906101000a900460ff16612b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612b50614a53565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d6020811015612c0557600080fd5b81019080805190602001909291905050509050612c2181614a5f565b9050612c2c81614b30565b9050600260019054906101000a900460ff1615612dfb57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612de657612d29600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b612de5600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826017546019805480602002602001604051908101604052809291908181526020018280548015612dd557602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612d8b575b505050505030600a5442016147a2565b5b43600f81905550612df5613f13565b50613519565b612e6a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fb157612fb0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612f1b6002846143c190919063ffffffff16565b6017546019805480602002602001604051908101604052809291908181526020018280548015612fa057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612f56575b505050505030600a5442016147a2565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130f8576130f7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166130626002846143c190919063ffffffff16565b601754601a8054806020026020016040519081016040528092919081815260200182805480156130e757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161309d575b505050505030600a5442016147a2565b5b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561318357600080fd5b505afa158015613197573d6000803e3d6000fd5b505050506040513d60208110156131ad57600080fd5b810190808051906020019092919050505090506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561324b57600080fd5b505afa15801561325f573d6000803e3d6000fd5b505050506040513d602081101561327557600080fd5b810190808051906020019092919050505090506000821180156132985750600081115b156135065761330c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b61337b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030600a5442016040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200198505050505050505050606060405180830381600087803b1580156134b357600080fd5b505af11580156134c7573d6000803e3d6000fd5b505050506040513d60608110156134dd57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505b43600f81905550613515613f13565b5050505b60018081905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e818154811061357b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461366d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b61251c81116136e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f2173616665202d20746f6f206c6f77000000000000000000000000000000000081525060200191505060405180910390fd5b61271081111561375c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f2173616665202d20746f6f20686967680000000000000000000000000000000081525060200191505060405180910390fd5b8060158190555050565b60028054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b60035481565b6137d7614272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613897576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561391d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806157d56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006139e4614272565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613aa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60026001541415613b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060008211613b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f5f77616e74416d74203c3d20300000000000000000000000000000000000000081525060200191505060405180910390fd5b6000613bc6601054613bb86011548661433b90919063ffffffff16565b6143c190919063ffffffff16565b9050601154811115613bd85760115490505b613bed816011546151db90919063ffffffff16565b6011819055506127106016541015613c2b57613c28612710613c1a6016548661433b90919063ffffffff16565b6143c190919063ffffffff16565b92505b60028054906101000a900460ff1615613c4857613c4783615225565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613cd357600080fd5b505afa158015613ce7573d6000803e3d6000fd5b505050506040513d6020811015613cfd57600080fd5b8101908080519060200190929190505050905080841115613d1c578093505b836010541015613d2c5760105493505b613d41846010546151db90919063ffffffff16565b601081905550613db6600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166144939092919063ffffffff16565b81925050506001808190555092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420617574686f726973656400000000000000000000000000000000000081525060200191505060405180910390fd5b61012c811115613f03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f746f6f206869676800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060128190555050565b60175481565b60028054906101000a900460ff16613f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f2169734175746f436f6d7000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561401e57600080fd5b505afa158015614032573d6000803e3d6000fd5b505050506040513d602081101561404857600080fd5b810190808051906020019092919050505090506140708160105461440b90919063ffffffff16565b6010819055506140e5600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2bbb158600354836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561416457600080fd5b505af1158015614178573d6000803e3d6000fd5b5050505050565b600260009054906101000a900460ff16614201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa614245614272565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600033905090565b614335846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506152bf565b50505050565b60008083141561434e57600090506143bb565b600082840290508284828161435f57fe5b04146143b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158216021913960400191505060405180910390fd5b809150505b92915050565b600061440383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506153ae565b905092915050565b600080828401905083811015614489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6145308363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506152bf565b505050565b600260009054906101000a900460ff16156145b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586145fc614272565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006146fd828573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156146b457600080fd5b505afa1580156146c8573d6000803e3d6000fd5b505050506040513d60208110156146de57600080fd5b810190808051906020019092919050505061440b90919063ffffffff16565b905061479c8463095ea7b360e01b8584604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506152bf565b50505050565b60608673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f87866040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561481a5780820151818401526020810190506147ff565b50505050905001935050505060006040518083038186803b15801561483e57600080fd5b505afa158015614852573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561487c57600080fd5b810190808051604051939291908464010000000082111561489c57600080fd5b838201915060208201858111156148b257600080fd5b82518660208202830111640100000000821117156148cf57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156149065780820151818401526020810190506148eb565b50505050905001604052505050905060008161492d600184516151db90919063ffffffff16565b8151811061493757fe5b602002602001015190508773ffffffffffffffffffffffffffffffffffffffff16635c11d795886149856103e86149778b8761433b90919063ffffffff16565b6143c190919063ffffffff16565b8888886040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614a085780820151818401526020810190506149ed565b505050509050019650505050505050600060405180830381600087803b158015614a3157600080fd5b505af1158015614a45573d6000803e3d6000fd5b505050505050505050505050565b614a5d6000615225565b565b600080821115614b285760006012541115614b27576000614a9f612710614a916012548661433b90919063ffffffff16565b6143c190919063ffffffff16565b9050614b10600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166144939092919063ffffffff16565b614b2381846151db90919063ffffffff16565b9250505b5b819050919050565b60008060135411614b43578190506151d6565b6000614b6e612710614b606013548661433b90919063ffffffff16565b6143c190919063ffffffff16565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461509157600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614e0b57614ccd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795826000601d30600a5442016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281038252858181548152602001915080548015614dce57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614d84575b50509650505050505050600060405180830381600087803b158015614df257600080fd5b505af1158015614e06573d6000803e3d6000fd5b505050505b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614e9657600080fd5b505afa158015614eaa573d6000803e3d6000fd5b505050506040513d6020811015614ec057600080fd5b81019080805190602001909291905050509050600081111561508b57614f4b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795826000601e61dead600a5442016040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818154815260200191508054801561504e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311615004575b50509650505050505050600060405180830381600087803b15801561507257600080fd5b505af1158015615086573d6000803e3d6000fd5b505050505b506151bf565b615100600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166146299092919063ffffffff16565b6151be600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260175460188054806020026020016040519081016040528092919081815260200182805480156151ac57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311615162575b505050505061dead600a5442016147a2565b5b6151d281846151db90919063ffffffff16565b9150505b919050565b600061521d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615474565b905092915050565b600260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663441a3e70600354836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156152a457600080fd5b505af11580156152b8573d6000803e3d6000fd5b5050505050565b6060615321826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166155349092919063ffffffff16565b90506000815111156153a95780806020019051602081101561534257600080fd5b81019080805190602001909291905050506153a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615842602a913960400191505060405180910390fd5b5b505050565b6000808311829061545a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561541f578082015181840152602081019050615404565b50505050905090810190601f16801561544c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161546657fe5b049050809150509392505050565b6000838311158290615521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156154e65780820151818401526020810190506154cb565b50505050905090810190601f1680156155135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060615543848460008561554c565b90509392505050565b6060824710156155a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806157fb6026913960400191505060405180910390fd5b6155b0856156f5565b615622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310615672578051825260208201915060208101905060208303925061564f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146156d4576040519150601f19603f3d011682016040523d82523d6000602084013e6156d9565b606091505b50915091506156e9828286615708565b92505050949350505050565b600080823b905060008111915050919050565b60608315615718578290506157cd565b60008351111561572b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615792578082015181840152602081019050615777565b50505050905090810190601f1680156157bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122010d760e869a7d19bd789c19f1d2424e055b565b9b26d50bc3ad0a1c9ed5b379764736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737300000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000050000000000000000000000004f04e540a51013afb6761ee73d71d2fb1f29af800000000000000000000000004e22399070ad5ad7f7beb7d3a7b543e8ecbf1d85000000000000000000000000b842a05e5aa8f308f00a1be50464809f5bb1a8240000000000000000000000005c6ec38fb0e2609672bdf628b1fd605a523e5923000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff00000000000000000000000000000000000000000000000000000000000000070000000000000000000000005f1657896b38c4761dbc5484473c7a7c845910b60000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000a0a6e9a5185d5737cf6f7920cb417ea2f07f03b3000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000000000000000000000000000000000000000003000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000005f1657896b38c4761dbc5484473c7a7c845910b60000000000000000000000000000000000000000000000000000000000000002000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000000000000000000000000000000000000000000003000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee2500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000000000000000000000000000000000000000003000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000845e76a8691423fbc4ecb8dd77556cb61c09ee250000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
50637:1949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37346:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36125:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50722:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35133:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35898:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36429;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35614:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36707:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36058:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50686:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38714:70;;;:::i;:::-;;47768:296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47682:78;;;:::i;:::-;;35937:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35978:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35843:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37628:1078;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36218:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24832:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36930:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49312:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37178:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36891:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35478:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27364:148;;;:::i;:::-;;36333:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36833:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49157:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35373:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47602:72;;;:::i;:::-;;36017:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36989:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35769:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26722:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48674:296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37262:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35196:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36763:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36283:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35808:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48978:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37123:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37304:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46018:1576;;;:::i;:::-;;36590:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37220:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35544;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48263:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40596:2804;;;:::i;:::-;;35408:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35734;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48379:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35165:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35443:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35340:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36531:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35277:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27667:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39299:1103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48072:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37048:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36125:45::-;36167:3;36125:45;:::o;50722:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35133:25::-;;;;;;;;;;;;;:::o;35898:32::-;;;;:::o;36429:::-;;;;:::o;36179:::-;;;;:::o;35614:43::-;;;;:::o;36707:31::-;;;;:::o;36058:48::-;36101:5;36058:48;:::o;50686:29::-;;;;;;;;;;;;;:::o;38714:70::-;22614:1;23219:7;;:19;;23211:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22614:1;23352:7;:18;;;;38769:7:::1;:5;:7::i;:::-;22570:1:::0;23531:7;:22;;;;38714:70::o;47768:296::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36636:4:::1;47865:18;:40;47857:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36578:5;47944:18;:42;;47936:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48038:18;48018:17;:38;;;;47768:296:::0;:::o;47682:78::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47742:10:::1;:8;:10::i;:::-;47682:78::o:0;35937:34::-;;;;:::o;35978:30::-;;;;:::o;35843:25::-;;;;;;;;;;;;;:::o;37628:1078::-;37800:7;26944:12;:10;:12::i;:::-;26934:22;;:6;;;;;;;;;;:22;;;26926:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22614:1:::1;23219:7;;:19;;23211:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22614:1;23352:7;:18;;;;25150:7:::2;;;;;;;;;;;25149:8;25141:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;37825:132:::3;37884:10;37918:4;37938:8;37832:11;;;;;;;;;;;37825:36;;;;:132;;;;;;:::i;:::-;36809:5;38035:16;;:38;38031:137;;;38101:55;36809:5;38101:30;38114:16;;38101:8;:12;;:30;;;;:::i;:::-;:34;;:55;;;;:::i;:::-;38090:66;;38031:137;38180:19;38202:8;38180:30;;38243:1;38225:15;;:19;:38;;;;;38262:1;38248:11;;:15;38225:38;38221:252;;;38294:167;36578:5;38294:123;38401:15;;38294:84;38360:17;;38294:43;38325:11;;38294:8;:30;;:43;;;;:::i;:::-;:65;;:84;;;;:::i;:::-;:106;;:123;;;;:::i;:::-;:145;;:167;;;;:::i;:::-;38280:181;;38221:252;38497:28;38513:11;38497;;:15;;:28;;;;:::i;:::-;38483:11;:42;;;;38542:10;::::0;::::3;;;;;;;;38538:130;;;38569:7;:5;:7::i;:::-;38538:130;;;38627:29;38647:8;38627:15;;:19;;:29;;;;:::i;:::-;38609:15;:47;;;;38538:130;38687:11;38680:18;;;22570:1:::1;23531:7:::0;:22:::1;;;;37628:1078:::0;;;;:::o;36218:46::-;36259:5;36218:46;:::o;24832:78::-;24871:4;24895:7;;;;;;;;;;;24888:14;;24832:78;:::o;36930:52::-;36977:5;36930:52;:::o;49312:300::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49479:13:::1;;;;;;;;;;;49469:23;;:6;:23;;;;49461:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;49531:11;;;;;;;;;;;49521:21;;:6;:21;;;;49513:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;49563:41;49591:3;49596:7;49570:6;49563:27;;;;:41;;;;;:::i;:::-;49312:300:::0;;;:::o;37178:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36891:32::-;;;;:::o;35478:31::-;;;;;;;;;;;;;:::o;27364:148::-;26944:12;:10;:12::i;:::-;26934:22;;:6;;;;;;;;;;:22;;;26926:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27471:1:::1;27434:40;;27455:6;::::0;::::1;;;;;;;;27434:40;;;;;;;;;;;;27502:1;27485:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;27364:148::o:0;36333:83::-;36374:42;36333:83;:::o;36833:49::-;36878:4;36833:49;:::o;49157:147::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49275:21:::1;49252:20;;:44;;;;;;;;;;;;;;;;;;49157:147:::0;:::o;35373:28::-;;;;;;;;;;;;;:::o;47602:72::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47658:8:::1;:6;:8::i;:::-;47602:72::o:0;36017:34::-;;;;:::o;36989:50::-;37035:4;36989:50;:::o;35769:32::-;;;;;;;;;;;;;:::o;26722:79::-;26760:7;26787:6;;;;;;;;;;;26780:13;;26722:79;:::o;48674:296::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37035:4:::1;48771:18;:40;48763:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36977:5;48850:18;:42;;48842:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48944:18;48924:17;:38;;;;48674:296:::0;:::o;37262:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35196:34::-;;;;;;;;;;;;;:::o;36763:51::-;36809:5;36763:51;:::o;36283:43::-;36323:3;36283:43;:::o;35808:28::-;;;;;;;;;;;;;:::o;48978:171::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36323:3:::1;49063:11;;:28;;49055:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;49129:12;49115:11;:26;;;;48978:171:::0;:::o;37123:46::-;37166:3;37123:46;:::o;37304:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46018:1576::-;25150:7;;;;;;;;;;;25149:8;25141:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46097:10:::1;::::0;::::1;;;;;;;;46089:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46143:13;;;;;;;;;;;46142:14;46134:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46346:17;46373:13;;;;;;;;;;;46366:31;;;46406:4;46366:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;46346:66;;46444:13;;;;;;;;;;;46427:30;;:13;;;;;;;;;;;:30;;;;:47;;;;;46473:1;46461:9;:13;46427:47;46423:508;;;46491:121;46553:16;;;;;;;;;;;46588:9;46498:13;;;;;;;;;;;46491:43;;;;:121;;;;;:::i;:::-;46683:236;46711:16;;;;;;;;;;;46746:9;46774:14;;46807:18;46683:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46852:4;46882:22;;46876:3;:28;46683:9;:236::i;:::-;46423:508;47002:17;47029:13;;;;;;;;;;;47022:31;;;47062:4;47022:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;47002:66;;47100:13;;;;;;;;;;;47083:30;;:13;;;;;;;;;;;:30;;;;:47;;;;;47129:1;47117:9;:13;47083:47;47079:508;;;47147:121;47209:16;;;;;;;;;;;47244:9;47154:13;;;;;;;;;;;47147:43;;;;:121;;;;;:::i;:::-;47339:236;47367:16;;;;;;;;;;;47402:9;47430:14;;47463:18;47339:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47508:4;47538:22;;47532:3;:28;47339:9;:236::i;:::-;47079:508;25189:1;;46018:1576::o:0;36590:50::-;36636:4;36590:50;:::o;37220:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37388:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35544:::-;;;;;;;;;;;;;:::o;48263:108::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48352:11:::1;48339:10;;:24;;;;;;;;;;;;;;;;;;48263:108:::0;:::o;40596:2804::-;22614:1;23219:7;;:19;;23211:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22614:1;23352:7;:18;;;;25150:7:::1;;;;;;;;;;;25149:8;25141:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40673:10:::2;::::0;::::2;;;;;;;;40665:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;40744:10;:8;:10::i;:::-;40817:17;40844:13;;;;;;;;;;;40837:31;;;40877:4;40837:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;40817:66;;40908:25;40923:9;40908:14;:25::i;:::-;40896:37;;40956:18;40964:9;40956:7;:18::i;:::-;40944:30;;40991:13;;;;;;;;;;;40987:658;;;41042:11;;;;;;;;;;;41025:28;;:13;;;;;;;;;;;:28;;;41021:527;;41074:133;41140:16;;;;;;;;;;;41179:9;41081:13;;;;;;;;;;;41074:43;;;;:133;;;;;:::i;:::-;41268:264;41300:16;;;;;;;;;;;41339:9;41371:14;;41408:18;41268:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41457:4;41491:22;;41485:3;:28;41268:9;:264::i;:::-;41021:527;41578:12;41562:13;:28;;;;41605:7;:5;:7::i;:::-;41627;;;40987:658;41657:109;41715:16;;;;;;;;;;;41746:9;41664:13;;;;;;;;;;;41657:43;;;;:109;;;;;:::i;:::-;41800:13;;;;;;;;;;;41783:30;;:13;;;;;;;;;;;:30;;;41779:349;;41873:243;41901:16;;;;;;;;;;;41936;41950:1;41936:9;:13;;:16;;;;:::i;:::-;41971:14;;42004:18;41873:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42049:4;42079:22;;42073:3;:28;41873:9;:243::i;:::-;41779:349;42161:13;;;;;;;;;;;42144:30;;:13;;;;;;;;;;;:30;;;42140:349;;42234:243;42262:16;;;;;;;;;;;42297;42311:1;42297:9;:13;;:16;;;;:::i;:::-;42332:14;;42365:18;42234:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42410:4;42440:22;;42434:3;:28;42234:9;:243::i;:::-;42140:349;42548:17;42575:13;;;;;;;;;;;42568:31;;;42608:4;42568:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;42548:66;;42625:17;42652:13;;;;;;;;;;;42645:31;;;42685:4;42645:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;42625:66;;42718:1;42706:9;:13;:30;;;;;42735:1;42723:9;:13;42706:30;42702:630;;;42753:121;42815:16;;;;;;;;;;;42850:9;42760:13;;;;;;;;;;;42753:43;;;;:121;;;;;:::i;:::-;42889;42951:16;;;;;;;;;;;42986:9;42896:13;;;;;;;;;;;42889:43;;;;:121;;;;;:::i;:::-;43036:16;;;;;;;;;;;43025:41;;;43085:13;;;;;;;;;;;43117;;;;;;;;;;;43149:9;43177;43205:1;43225::::0;43253:4:::2;43283:22;;43277:3;:28;43025:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42702:630;43360:12;43344:13;:28;;;;43385:7;:5;:7::i;:::-;25189:1;;;;22570::::0;23531:7;:22;;;;40596:2804::o;35408:28::-;;;;;;;;;;;;;:::o;35734:::-;;;;;;;;;;;;;:::o;37430:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48379:287::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36878:4:::1;48473:17;:38;48465:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36809:5;48550:17;:40;;48542:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48641:17;48622:16;:36;;;;48379:287:::0;:::o;35165:22::-;;;;;;;;;;;;:::o;35443:28::-;;;;;;;;;;;;;:::o;35340:26::-;;;;;;;;;;;;;:::o;36531:52::-;36578:5;36531:52;:::o;35277:18::-;;;;:::o;27667:281::-;26944:12;:10;:12::i;:::-;26934:22;;:6;;;;;;;;;;:22;;;26926:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27790:1:::1;27770:22;;:8;:22;;;;27748:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27903:8;27874:38;;27895:6;::::0;::::1;;;;;;;;27874:38;;;;;;;;;;;;27932:8;27923:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;27667:281:::0;:::o;39299:1103::-;39449:7;26944:12;:10;:12::i;:::-;26934:22;;:6;;;;;;;;;;:22;;;26926:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22614:1:::1;23219:7;;:19;;23211:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22614:1;23352:7;:18;;;;39493:1:::2;39482:8;:12;39474:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;39525:21;39549:46;39579:15;;39549:25;39562:11;;39549:8;:12;;:25;;;;:::i;:::-;:29;;:46;;;;:::i;:::-;39525:70;;39626:11;;39610:13;:27;39606:87;;;39670:11;;39654:27;;39606:87;39717:30;39733:13;39717:11;;:15;;:30;;;;:::i;:::-;39703:11;:44;;;;36977:5;39764:17;;:40;39760:141;;;39832:57;36977:5;39832:31;39845:17;;39832:8;:12;;:31;;;;:::i;:::-;:35;;:57;;;;:::i;:::-;39821:68;;39760:141;39917:10;::::0;::::2;;;;;;;;39913:60;;;39944:17;39952:8;39944:7;:17::i;:::-;39913:60;39985:15;40010:11;;;;;;;;;;;40003:29;;;40041:4;40003:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;39985:62;;40073:7;40062:8;:18;40058:69;;;40108:7;40097:18;;40058:69;40161:8;40143:15;;:26;40139:85;;;40197:15;;40186:26;;40139:85;40258:29;40278:8;40258:15;;:19;;:29;;;;:::i;:::-;40240:15;:47;;;;40300:61;40333:17;;;;;;;;;;;40352:8;40307:11;;;;;;;;;;;40300:32;;;;:61;;;;;:::i;:::-;40381:13;40374:20;;;;22570:1:::1;23531:7:::0;:22:::1;;;;39299:1103:::0;;;;:::o;48072:183::-;37531:10;;;;;;;;;;;37517:24;;:10;:24;;;37509:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36167:3:::1;48160:14;:33;;48152:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;48233:14;48217:13;:30;;;;48072:183:::0;:::o;37048:35::-;;;;:::o;38792:365::-;38845:10;;;;;;;;;;38837:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38882:15;38907:11;;;;;;;;;;;38900:29;;;38938:4;38900:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38882:62;;38973:28;38993:7;38973:15;;:19;;:28;;;;:::i;:::-;38955:15;:46;;;;39012:71;39054:19;;;;;;;;;;;39075:7;39019:11;;;;;;;;;;;39012:41;;;;:71;;;;;:::i;:::-;39107:19;;;;;;;;;;;39096:39;;;39136:3;;39141:7;39096:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38792:365;:::o;25881:120::-;25426:7;;;;;;;;;;;25418:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25950:5:::1;25940:7;;:15;;;;;;;;;;;;;;;;;;25971:22;25980:12;:10;:12::i;:::-;25971:22;;;;;;;;;;;;;;;;;;;;25881:120::o:0;23770:106::-;23823:15;23858:10;23851:17;;23770:106;:::o;18016:285::-;18160:133;18194:5;18237:27;;;18266:4;18272:2;18276:5;18214:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18160:19;:133::i;:::-;18016:285;;;;:::o;4825:471::-;4883:7;5133:1;5128;:6;5124:47;;;5158:1;5151:8;;;;5124:47;5183:9;5199:1;5195;:5;5183:17;;5228:1;5223;5219;:5;;;;;;:10;5211:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5287:1;5280:8;;;4825:471;;;;;:::o;5772:132::-;5830:7;5857:39;5861:1;5864;5857:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5850:46;;5772:132;;;;:::o;3437:181::-;3495:7;3515:9;3531:1;3527;:5;3515:17;;3556:1;3551;:6;;3543:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3609:1;3602:8;;;3437:181;;;;:::o;17760:248::-;17877:123;17911:5;17954:23;;;17979:2;17983:5;17931:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17877:19;:123::i;:::-;17760:248;;;:::o;25622:118::-;25150:7;;;;;;;;;;;25149:8;25141:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25692:4:::1;25682:7;;:14;;;;;;;;;;;;;;;;;;25712:20;25719:12;:10;:12::i;:::-;25712:20;;;;;;;;;;;;;;;;;;;;25622:118::o:0;19285:436::-;19416:20;19452:50;19496:5;19452;:15;;;19476:4;19483:7;19452:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;:50;;;;:::i;:::-;19416:86;;19513:200;19547:5;19608:22;;;19649:7;19675:12;19567:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19513:19;:200::i;:::-;19285:436;;;;:::o;49890:667::-;50125:24;50176:17;50165:43;;;50209:9;50220:5;50165:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50125:101;;50237:17;50257:7;50265:21;50284:1;50265:7;:14;:18;;:21;;;;:::i;:::-;50257:30;;;;;;;;;;;;;;50237:50;;50311:17;50300:97;;;50412:9;50436:40;50471:4;50436:30;50450:15;50436:9;:13;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;50491:5;50511:3;50529:9;50300:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49890:667;;;;;;;;:::o;40410:66::-;40458:10;40466:1;40458:7;:10::i;:::-;40410:66::o;45540:470::-;45610:7;45647:1;45634:10;:14;45630:343;;;45717:1;45701:13;;:17;45697:265;;;45739:11;45774:51;36101:5;45774:29;45789:13;;45774:10;:14;;:29;;;;:::i;:::-;:33;;:51;;;;:::i;:::-;45739:86;;45844:51;45879:10;;;;;;;;;;;45891:3;45851:13;;;;;;;;;;;45844:34;;;;:51;;;;;:::i;:::-;45927:19;45942:3;45927:10;:14;;:19;;;;:::i;:::-;45914:32;;45697:265;;45630:343;45992:10;45985:17;;45540:470;;;:::o;43408:2124::-;43471:7;43510:1;43495:11;;:16;43491:66;;43535:10;43528:17;;;;43491:66;43569:18;43590:47;36259:5;43590:27;43605:11;;43590:10;:14;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;43569:68;;43674:20;;;;;;;;;;;43654:40;;:16;;;;;;;;;;;:40;;;43650:1829;;43816:13;;;;;;;;;;;43799:30;;:13;;;;;;;;;;;:30;;;43795:583;;43899:134;43965:16;;;;;;;;;;;44004:10;43906:13;;;;;;;;;;;43899:43;;;;:134;;;;;:::i;:::-;44065:16;;;;;;;;;;;44054:104;;;44181:10;44214:1;44238:18;44287:4;44321:22;;44315:3;:28;44054:308;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43795:583;44453:17;44480:13;;;;;;;;;;;44473:31;;;44513:4;44473:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44453:66;;44550:1;44538:9;:13;44534:524;;;44572:137;44638:20;;;;;;;;;;;44681:9;44579:13;;;;;;;;;;;44572:43;;;;:137;;;;;:::i;:::-;44741:20;;;;;;;;;;;44730:108;;;44861:9;44893:1;44917:18;36374:42;45001:22;;44995:3;:28;44730:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44534:524;43650:1829;;;;45090:122;45152:16;;;;;;;;;;;45187:10;45097:13;;;;;;;;;;;45090:43;;;;:122;;;;;:::i;:::-;45229:238;45257:16;;;;;;;;;;;45292:10;45321:14;;45354:18;45229:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36374:42;45430:22;;45424:3;:28;45229:9;:238::i;:::-;43650:1829;45498:26;45513:10;45498;:14;;:26;;;;:::i;:::-;45491:33;;;43408:2124;;;;:::o;3901:136::-;3959:7;3986:43;3990:1;3993;3986:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3979:50;;3901:136;;;;:::o;39165:126::-;39239:19;;;;;;;;;;;39228:40;;;39269:3;;39274:8;39228:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39165:126;:::o;20650:885::-;21074:23;21113:118;21159:4;21113:118;;;;;;;;;;;;;;;;;21121:5;21113:27;;;;:118;;;;;:::i;:::-;21074:157;;21266:1;21246:10;:17;:21;21242:286;;;21419:10;21408:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21382:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21242:286;20650:885;;;:::o;6400:312::-;6520:7;6552:1;6548;:5;6555:12;6540:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6579:9;6595:1;6591;:5;;;;;;6579:17;;6703:1;6696:8;;;6400:312;;;;;:::o;4340:226::-;4460:7;4493:1;4488;:6;;4496:12;4480:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4520:9;4536:1;4532;:5;4520:17;;4557:1;4550:8;;;4340:226;;;;;:::o;12211:229::-;12348:12;12380:52;12402:6;12410:4;12416:1;12419:12;12380:21;:52::i;:::-;12373:59;;12211:229;;;;;:::o;13427:621::-;13597:12;13669:5;13644:21;:30;;13622:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13759:18;13770:6;13759:10;:18::i;:::-;13751:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13885:12;13899:23;13939:6;:11;;13958:5;13965:4;13939:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13884:86;;;;13988:52;14006:7;14015:10;14027:12;13988:17;:52::i;:::-;13981:59;;;;13427:621;;;;;;:::o;8798:444::-;8858:4;9066:12;9190:7;9178:20;9170:28;;9233:1;9226:4;:8;9219:15;;;8798:444;;;:::o;16339:777::-;16489:12;16518:7;16514:595;;;16549:10;16542:17;;;;16514:595;16683:1;16663:10;:17;:21;16659:439;;;16926:10;16920:17;16987:15;16974:10;16970:2;16966:19;16959:44;16874:148;17069:12;17062:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16339:777;;;;;;:::o
Swarm Source
ipfs://10d760e869a7d19bd789c19f1d2424e055b565b9b26d50bc3ad0a1c9ed5b3797
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.