More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,740 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Get Reward | 17254088 | 483 days ago | IN | 0 ETH | 0.00188418 | ||||
Get Reward | 16604062 | 574 days ago | IN | 0 ETH | 0.00439864 | ||||
Withdraw | 16604036 | 574 days ago | IN | 0 ETH | 0.00508376 | ||||
Claim LP Reward | 15218807 | 774 days ago | IN | 0 ETH | 0.00075053 | ||||
Withdraw | 15189313 | 779 days ago | IN | 0 ETH | 0.00302386 | ||||
Withdraw | 15183500 | 779 days ago | IN | 0 ETH | 0.00174366 | ||||
Withdraw | 15183499 | 779 days ago | IN | 0 ETH | 0.00669512 | ||||
Get Reward | 15183498 | 779 days ago | IN | 0 ETH | 0.00665315 | ||||
Claim LP Reward | 15182980 | 780 days ago | IN | 0 ETH | 0.00050526 | ||||
Get Reward | 15182979 | 780 days ago | IN | 0 ETH | 0.00139081 | ||||
Withdraw | 15179379 | 780 days ago | IN | 0 ETH | 0.00466715 | ||||
Get Reward | 15179363 | 780 days ago | IN | 0 ETH | 0.00560947 | ||||
Claim LP Reward | 15170032 | 782 days ago | IN | 0 ETH | 0.00083855 | ||||
Withdraw | 15132048 | 787 days ago | IN | 0 ETH | 0.00380101 | ||||
Get Reward | 15132036 | 787 days ago | IN | 0 ETH | 0.00380727 | ||||
Withdraw | 15106032 | 791 days ago | IN | 0 ETH | 0.00396569 | ||||
Withdraw | 15098157 | 793 days ago | IN | 0 ETH | 0.02875465 | ||||
Get Reward | 15080495 | 795 days ago | IN | 0 ETH | 0.00100062 | ||||
Get Reward | 15080281 | 795 days ago | IN | 0 ETH | 0.00067373 | ||||
Get Reward | 15080279 | 795 days ago | IN | 0 ETH | 0.00081116 | ||||
Get Reward | 15080277 | 795 days ago | IN | 0 ETH | 0.00070122 | ||||
Get Reward | 15080259 | 795 days ago | IN | 0 ETH | 0.00561735 | ||||
Withdraw | 15073996 | 796 days ago | IN | 0 ETH | 0.00356841 | ||||
Get Reward | 15073988 | 796 days ago | IN | 0 ETH | 0.00076869 | ||||
Get Reward | 15072539 | 797 days ago | IN | 0 ETH | 0.00100438 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13803051 | 998 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
GoldFarmFaaSForOne
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-14 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.10; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers . */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } 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; } function ceil(uint a, uint m) internal pure returns (uint r) { return (a + m - 1) / m * m; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { 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; } } 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 () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @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; } } 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); function decimals() external view returns (uint8); 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); } 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"); } } } 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 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); } } } } library TransferHelper { function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } abstract contract IRewardDistributionRecipient is Ownable { address rewardDistribution; modifier onlyRewardDistribution() { require(_msgSender() == rewardDistribution, "Caller is not reward distribution"); _; } function setRewardDistributionAdmin(address _rewardDistribution) internal { require(rewardDistribution == address(0), "Reward distribution Admin already set"); rewardDistribution = _rewardDistribution; } function updateRewardDistributionAdmin(address _rewardDistribution) public onlyOwner { require(rewardDistribution == address(0), "Reward distribution Admin already set"); rewardDistribution = _rewardDistribution; } } interface iGoldFarmFaaS { function Initialize(address, address, address, uint256, uint256, uint256, address) external; function setFarmRewards(uint256, uint256) external; function setFarmRewards1(uint256, uint256) external; } interface iGoldFarmFaaSForOne { function Initialize(address, address, uint256, uint256, address) external; function setFarmRewards(uint256, uint256) external; } contract GoldFarmFaasDeployer{ using Address for address; event FaaSCreated(address, address, address); mapping(address => mapping(address => mapping(address => address))) public getFaaSContract; address[] public allContracts; function createFaaS(address _lpToken, address rewardToken0, address rewardToken1, uint256 rewardToken1Amount, uint256 _duration1, uint256 rewardToken2Amount, uint256 _duration2, uint256 lpTokenFrictionlessFee) external returns (address pair) { require(getFaaSContract[_lpToken][rewardToken0][rewardToken1] == address(0), 'Faas: Contract_EXISTS'); // single check is sufficient require(_duration1 !=0, "Cannot be 0"); require(_duration2 !=0, "Cannot be 0"); bytes memory bytecode = type(GoldFarmFaaS).creationCode; bytes32 salt = keccak256(abi.encodePacked(_lpToken, rewardToken0, rewardToken1)); assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt) } iGoldFarmFaaS(pair).Initialize(_lpToken, rewardToken0, rewardToken1, _duration1, _duration2, lpTokenFrictionlessFee, msg.sender); getFaaSContract[_lpToken][rewardToken0][rewardToken1] = pair; allContracts.push(pair); TransferHelper.safeTransferFrom(rewardToken0, msg.sender, address(pair), rewardToken1Amount); TransferHelper.safeTransferFrom(rewardToken1, msg.sender, address(pair), rewardToken2Amount); iGoldFarmFaaS(pair).setFarmRewards(rewardToken1Amount, _duration1); iGoldFarmFaaS(pair).setFarmRewards1(rewardToken2Amount, _duration2); emit FaaSCreated(_lpToken, rewardToken0, rewardToken1); } function createFaaSForOne(address _lpToken, address rewardToken0, uint256 rewardToken1Amount, uint256 _duration1, uint256 lpTokenFrictionlessFee) external returns (address pair) { require(getFaaSContract[_lpToken][rewardToken0][address(0)] == address(0), 'Faas: Contract_EXISTS'); // single check is sufficient require(_duration1 !=0, "Cannot be 0"); bytes memory bytecode = type(GoldFarmFaaSForOne).creationCode; bytes32 salt = keccak256(abi.encodePacked(_lpToken, rewardToken0, address(0))); assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt) } iGoldFarmFaaSForOne(pair).Initialize(_lpToken, rewardToken0, _duration1, lpTokenFrictionlessFee, msg.sender); getFaaSContract[_lpToken][rewardToken0][address(0)] = pair; allContracts.push(pair); TransferHelper.safeTransferFrom(rewardToken0, msg.sender, address(pair), rewardToken1Amount); iGoldFarmFaaSForOne(pair).setFarmRewards(rewardToken1Amount, _duration1); emit FaaSCreated(_lpToken, rewardToken0, address(0)); } function getFaaSContractAddress(address _lpToken, address rewardToken0, address rewardToken1) public view returns(address){ return getFaaSContract[_lpToken][rewardToken0][rewardToken1]; } } contract GoldFarmFaaS is IRewardDistributionRecipient, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint256; using Address for address; IERC20 public rewardToken; IERC20 public rewardToken1; IERC20 public lpToken; // Farm Token BSC20 address public devAddy = 0xdaC47d05e1aAa9Bd4DA120248E8e0d7480365CFB;//collects pool use fee uint256 public devtxfee = 1; //Fee for pool use, sent to GOLD farming pool uint256 public txfee = 0; //Amount of frictionless rewards of the LP token uint256 public duration = 90 days; uint256 public duration1 = 90 days; bool public perform = true; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 public periodFinish1 = 0; uint256 public rewardRate1 = 0; uint256 public lastUpdateTime1; uint256 public rewardPerTokenStored1; mapping(address => uint256) public userRewardPerTokenPaid1; mapping(address => uint256) public rewards1; mapping(address => uint) public farmTime; bool public farmBreaker = false; // farm can be lock by admin,, default unlocked type=0 bool public rewardBreaker = false; // getreward can be lock by admin,, default unlocked type=1 bool public reward1Breaker = false; // getreward1 can be lock by admin,, default unlocked type=2 bool public withdrawBreaker = false; // withdraw can be lock by admin,, default unlocked type=3 uint256 private _totalSupply; mapping(address => uint256) private _balances; mapping(address => uint256) public lpTokenReward; event RewardAdded(uint256 reward); event Farmed(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); address[] public farmers; bool public deployed = false; struct USER{ bool initialized; } mapping(address => USER) stakers; constructor() { } function Initialize(address _lpToken, address _rewardToken, address _rewardToken1, uint256 _duration1, uint256 _duration2, uint256 _lpTokenFrictionlessFee, address _newOwner) external nonReentrant { require(deployed != true, "Contract can only Initialize once"); rewardToken = IERC20(_rewardToken); rewardToken1 = IERC20(_rewardToken1); lpToken = IERC20(_lpToken); setRewardDistributionAdmin(msg.sender); transferOwnership(_newOwner); duration = _duration1; duration1 = _duration2; txfee = _lpTokenFrictionlessFee; deployed = true; } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } modifier updateReward1(address account) { rewardPerTokenStored1 = rewardPerToken1(); lastUpdateTime1 = lastTimeRewardApplicable1(); if (account != address(0)) { rewards1[account] = earned1(account); userRewardPerTokenPaid1[account] = rewardPerTokenStored1; } _; } modifier noContract(address account) { require(Address.isContract(account) == false, "Contracts are not allowed to interact with the farm"); _; } function setdevAddy(address _addy) public onlyOwner { require(_addy != address(0), " Setting 0 as Addy "); devAddy = _addy; } function setBreaker(bool _breaker, uint256 _type) external onlyOwner { if(_type==0){ farmBreaker =_breaker; } else if(_type==1){ rewardBreaker=_breaker; } else if(_type==2){ reward1Breaker=_breaker; }else if(_type==3){ withdrawBreaker=_breaker; } } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function recoverLostTokensAfterFarmExpired(IERC20 _token, uint256 amount) external onlyOwner { // Recover lost tokens can only be used after farming duration expires require(duration < block.timestamp, "Cannot use if farm is live"); _token.safeTransfer(owner(), amount); } receive() external payable { // Prevent ETH from being sent to the farming contract revert(); } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function lastTimeRewardApplicable1() public view returns (uint256) { return Math.min(block.timestamp, periodFinish1); } function rewardPerToken() public view returns (uint256) { if (totalSupply() == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(10** IERC20(rewardToken).decimals()) .div(totalSupply()) ); } function rewardPerToken1() public view returns (uint256) { if (totalSupply() == 0) { return rewardPerTokenStored1; } return rewardPerTokenStored1.add( lastTimeRewardApplicable1() .sub(lastUpdateTime1) .mul(rewardRate1) .mul(10** IERC20(rewardToken1).decimals()) .div(totalSupply()) ); } function earned(address account) public view returns (uint256) { return balanceOf(account) .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(10** IERC20(rewardToken).decimals()) .add(rewards[account]); } function earned1(address account) public view returns (uint256) { return balanceOf(account) .mul(rewardPerToken1().sub(userRewardPerTokenPaid1[account])) .div(10** IERC20(rewardToken1).decimals()) .add(rewards1[account]); } function isStakeholder(address _address) public view returns(bool) { if(stakers[_address].initialized) return true; else return false; } function addStakeholder(address _stakeholder) internal { (bool _isStakeholder) = isStakeholder(_stakeholder); if(!_isStakeholder) { farmTime[msg.sender] = block.timestamp; stakers[_stakeholder].initialized = true; farmers.push(_stakeholder); } } function farm(uint256 amount) external updateReward(msg.sender) updateReward1(msg.sender) noContract(msg.sender) nonReentrant { require(farmBreaker == false, "Admin Restricted function temporarily 0"); require(amount > 0, "Cannot farm nothing"); lpToken.safeTransferFrom(msg.sender, address(this), amount); uint256 devtax = amount.mul(devtxfee).div(100); uint256 _txfee = amount.mul(txfee).div(100); lpToken.safeTransfer(address(devAddy), devtax); uint256 finalAmount = amount.sub(_txfee).sub(devtax); _totalSupply = _totalSupply.add(finalAmount); _balances[msg.sender] = _balances[msg.sender].add(finalAmount); addStakeholder(msg.sender); emit Farmed(msg.sender,finalAmount); } function withdraw(uint256 amount) public updateReward(msg.sender) updateReward1(msg.sender) noContract(msg.sender) nonReentrant { require(withdrawBreaker == false, "Admin Restricted function temporarily 3"); require(amount > 0, "Cannot withdraw nothing"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); lpToken.safeTransfer(msg.sender, amount); if( _balances[msg.sender] == 0) { stakers[msg.sender].initialized = false; } emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(balanceOf(msg.sender)); ClaimLPReward(); getReward(); getReward1(); } function getReward() public updateReward(msg.sender) noContract(msg.sender) { require(rewardBreaker == false, "Admin Restricted function temporarily 1"); uint256 reward = earned(msg.sender); if (reward > 0) { rewards[msg.sender] = 0; rewardToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function getReward1() public updateReward1(msg.sender) noContract(msg.sender) { require(reward1Breaker == false, "Admin Restricted function temporarily 2"); uint256 reward1 = earned1(msg.sender); if (reward1 > 0) { rewards1[msg.sender] = 0; rewardToken1.safeTransfer(msg.sender, reward1); emit RewardPaid(msg.sender, reward1); } } function setFarmRewards(uint256 reward, uint256 _duration) public onlyRewardDistribution nonReentrant updateReward(address(0)) { require(_duration > 0, "Duration must not be 0"); if(rewardRate.mul(duration) <= rewardToken.balanceOf(address(this))){ duration = _duration.mul(1 days); if (block.timestamp >= periodFinish) { rewardRate = reward.div(duration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(duration); } lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(duration); //require(rewardRate.mul(duration) <= rewardToken.balanceOf(address(this)), "Insufficient reward"); emit RewardAdded(reward); } } function setFarmRewards1(uint256 _reward1, uint256 _duration2) public onlyRewardDistribution nonReentrant updateReward1(address(0)) { require(_duration2 > 0, "Duration must not be 0"); if(rewardRate1.mul(duration1) <= rewardToken1.balanceOf(address(this))){ duration1 = _duration2.mul(1 days); if (block.timestamp >= periodFinish1) { rewardRate1 = _reward1.div(duration1); } else { uint256 remaining1 = periodFinish1.sub(block.timestamp); uint256 leftover1 = remaining1.mul(rewardRate1); rewardRate1 = _reward1.add(leftover1).div(duration1); } lastUpdateTime1 = block.timestamp; periodFinish1 = block.timestamp.add(duration1); //require(rewardRate1.mul(duration1) <= rewardToken1.balanceOf(address(this)), "Insufficient reward"); emit RewardAdded(_reward1); } } uint256 public aclaimed = 0; function DisributeLPTxFunds1() public { // distribute any TX rewards tokens sent to pool for tokens with TX rewards uint256 balanceOfContract = lpToken.balanceOf(address(this)); uint256 transferToAmount = balanceOfContract.sub(_totalSupply.add(aclaimed)); aclaimed = aclaimed.add(transferToAmount); if(transferToAmount > 0 ){ for (uint256 s = 0; s < farmers.length; s++){ address abc = farmers[s]; uint256 blnc = balanceOf(abc); if(blnc > 0) { uint256 userShare = (transferToAmount).mul(blnc).div(_totalSupply); lpTokenReward[abc] = lpTokenReward[abc].add(userShare); emit RewardAdded(userShare); } } } } function ClaimAllRewards() public { ClaimLPReward(); getReward(); getReward1(); if(perform==true){ DisributeLPTxFunds1();} } function onePercent(uint256 _tokens) private pure returns (uint256){ uint256 roundValue = _tokens.ceil(100); uint onePercentofTokens = roundValue.mul(100).div(100 * 10**uint(2)); return onePercentofTokens; } function emergencySaveLostTokens(address _token) external onlyOwner { require(IERC20(_token).transfer(owner(), IERC20(_token).balanceOf(address(this))), "Error in retrieving tokens"); } function ClaimLPReward() public { address _addy = msg.sender; if(lpTokenReward[_addy] > 0 ){ aclaimed = aclaimed.sub(lpTokenReward[_addy]); lpToken.safeTransfer(msg.sender, lpTokenReward[_addy]); lpTokenReward[_addy] = 0; } } function changePerform(bool _bool) external onlyOwner{ perform = _bool; } } contract GoldFarmFaaSForOne is IRewardDistributionRecipient, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint256; using Address for address; IERC20 public rewardToken;// BSC20 IERC20 public lpToken; // BSC20 address public devAddy = 0xdaC47d05e1aAa9Bd4DA120248E8e0d7480365CFB;//collects pool use fee uint256 public devtxfee = 1; //Fee for pool use, sent to GOLD farming pool uint256 public txfee = 0; //Amount of frictionless rewards of the LP token uint256 public duration = 180 days; bool public perform = true; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; mapping(address => uint) public farmTime; bool public farmBreaker = false; // farm can be lock by admin,, default unlocked type=0 bool public rewardBreaker = false; // getreward can be lock by admin,, default unlocked type=1 bool public withdrawBreaker = false; // withdraw can be lock by admin,, default unlocked type=3 uint256 private _totalSupply; mapping(address => uint256) private _balances; mapping(address => uint256) public lpTokenReward; event RewardAdded(uint256 reward); event Farmed(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); address[] public farmers; bool public deployed = false; struct USER{ bool initialized; } mapping(address => USER) stakers; constructor() { } function Initialize(address _lpToken, address _rewardToken, uint256 _duration1, uint256 _lpTokenFrictionlessFee, address _newOwner) external nonReentrant { rewardToken = IERC20(_rewardToken); lpToken = IERC20(_lpToken); setRewardDistributionAdmin(msg.sender); transferOwnership(_newOwner); duration = _duration1; txfee = _lpTokenFrictionlessFee; deployed = true; } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } modifier noContract(address account) { require(Address.isContract(account) == false, "Contracts are not allowed to interact with the farm"); _; } function setdevAddy(address _addy) public onlyOwner { require(_addy != address(0), " Setting 0 as Addy "); devAddy = _addy; } function setBreaker(bool _breaker, uint256 _type) external onlyOwner { if(_type==0){ farmBreaker =_breaker; } else if(_type==1){ rewardBreaker=_breaker; } else if(_type==3){ withdrawBreaker=_breaker; } } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns (uint256) { return _balances[account]; } function recoverLostTokensAfterFarmExpired(IERC20 _token, uint256 amount) external onlyOwner { // Recover lost tokens can only be used after farming duration expires require(duration < block.timestamp, "Cannot use if farm is live"); _token.safeTransfer(owner(), amount); } receive() external payable { // Prevent ETH from being sent to the farming contract revert(); } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (totalSupply() == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(10** IERC20(rewardToken).decimals()) .div(totalSupply()) ); } function earned(address account) public view returns (uint256) { return balanceOf(account) .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(10** IERC20(rewardToken).decimals()) .add(rewards[account]); } function isStakeholder(address _address) public view returns(bool) { if(stakers[_address].initialized) return true; else return false; } function addStakeholder(address _stakeholder) internal { (bool _isStakeholder) = isStakeholder(_stakeholder); if(!_isStakeholder) { farmTime[msg.sender] = block.timestamp; stakers[_stakeholder].initialized = true; farmers.push(_stakeholder); } } function farm(uint256 amount) external updateReward(msg.sender) noContract(msg.sender) nonReentrant { require(farmBreaker == false, "Admin Restricted function temporarily"); require(amount > 0, "Cannot farm nothing"); lpToken.safeTransferFrom(msg.sender, address(this), amount); uint256 devtax = amount.mul(devtxfee).div(100); uint256 _txfee = amount.mul(txfee).div(100); lpToken.safeTransfer(address(devAddy), devtax); uint256 finalAmount = amount.sub(_txfee).sub(devtax); _totalSupply = _totalSupply.add(finalAmount); _balances[msg.sender] = _balances[msg.sender].add(finalAmount); addStakeholder(msg.sender); emit Farmed(msg.sender,finalAmount); } function withdraw(uint256 amount) public updateReward(msg.sender) noContract(msg.sender) nonReentrant { require(withdrawBreaker == false, "Admin Restricted function temporarily"); require(amount > 0, "Cannot withdraw nothing"); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); lpToken.safeTransfer(msg.sender, amount); if( _balances[msg.sender] == 0) { stakers[msg.sender].initialized = false; } emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(balanceOf(msg.sender)); ClaimLPReward(); getReward(); } function getReward() public updateReward(msg.sender) noContract(msg.sender) { require(rewardBreaker == false, "Admin Restricted function temporarily"); uint256 reward = earned(msg.sender); if (reward > 0) { rewards[msg.sender] = 0; rewardToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function setFarmRewards(uint256 reward, uint256 _duration) public onlyRewardDistribution nonReentrant updateReward(address(0)) { require(_duration > 0, "Duration must not be 0"); if(rewardRate.mul(duration) <= rewardToken.balanceOf(address(this))){ duration = _duration.mul(1 days); if (block.timestamp >= periodFinish) { rewardRate = reward.div(duration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(duration); } lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(duration); //require(rewardRate.mul(duration) <= rewardToken.balanceOf(address(this)), "Insufficient reward"); emit RewardAdded(reward); } } uint256 public aclaimed = 0; function DisributeLPTxFunds1() public { // distribute any TX rewards tokens sent to pool for tokens with TX rewards uint256 balanceOfContract = lpToken.balanceOf(address(this)); uint256 transferToAmount = balanceOfContract.sub(_totalSupply.add(aclaimed)); aclaimed = aclaimed.add(transferToAmount); if(transferToAmount > 0 ){ for (uint256 s = 0; s < farmers.length; s++){ address abc = farmers[s]; uint256 blnc = balanceOf(abc); if(blnc > 0) { uint256 userShare = (transferToAmount).mul(blnc).div(_totalSupply); lpTokenReward[abc] = lpTokenReward[abc].add(userShare); emit RewardAdded(userShare); } } } } function ClaimAllRewards() public { ClaimLPReward(); getReward(); if(perform==true){ DisributeLPTxFunds1();} } function onePercent(uint256 _tokens) private pure returns (uint256){ uint256 roundValue = _tokens.ceil(100); uint onePercentofTokens = roundValue.mul(100).div(100 * 10**uint(2)); return onePercentofTokens; } function emergencySaveLostTokens(address _token) external onlyOwner { require(IERC20(_token).transfer(owner(), IERC20(_token).balanceOf(address(this))), "Error in retrieving tokens"); } function ClaimLPReward() public { address _addy = msg.sender; if(lpTokenReward[_addy] > 0 ){ aclaimed = aclaimed.sub(lpTokenReward[_addy]); lpToken.safeTransfer(msg.sender, lpTokenReward[_addy]); lpTokenReward[_addy] = 0; } } function changePerform(bool _bool) external onlyOwner{ perform = _bool; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Farmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"ClaimAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimLPReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DisributeLPTxFunds1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_duration1","type":"uint256"},{"internalType":"uint256","name":"_lpTokenFrictionlessFee","type":"uint256"},{"internalType":"address","name":"_newOwner","type":"address"}],"name":"Initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"aclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"changePerform","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devtxfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"emergencySaveLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"farm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmBreaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"farmTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"farmers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isStakeholder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpTokenReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverLostTokensAfterFarmExpired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardBreaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_breaker","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"setBreaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setFarmRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setdevAddy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"updateRewardDistributionAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBreaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600580546001600160a01b03191673dac47d05e1aaa9bd4da120248e8e0d7480365cfb179055600160068190556000600781905562ed4e006008556009805460ff199081169093179055600a819055600b8190556011805462ffffff191690556016805490921690915560185534801561007d57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600160025561249b806100d16000396000f3fe6080604052600436106102755760003560e01c806370a082311161014f578063bf6d63da116100c1578063e9fad8ee1161007a578063e9fad8ee1461073e578063ebe2b12b14610753578063ef037b9014610769578063f2fde38b14610789578063f7c618c1146107a9578063f905c15a146107c957600080fd5b8063bf6d63da1461069a578063c3f344a8146106ba578063c8f33c91146106e7578063cd3daf9d146106fd578063df136d6514610712578063e89c31691461072857600080fd5b80638afdd669116101135780638afdd669146105db5780638b876347146105fb5780638da5cb5b146106285780638f864bb014610646578063a68ca71114610660578063b147f40c1461068057600080fd5b806370a0823114610545578063715018a61461057b5780637b0a47ee1461059057806380faa57d146105a65780638698c211146105bb57600080fd5b806331c2b53d116101e8578063538a85a1116101ac578063538a85a11461048d57806354df47ce146104ad57806357e885b9146104da5780635fcbd285146104f05780636426f13414610510578063674d83c21461052557600080fd5b806331c2b53d1461040d5780633d18b9121461042d5780633ed38cc61461044257806345bde800146104585780634f49e6551461046d57600080fd5b8063200681391161023a578063200681391461032657806322ff6acd14610346578063282bab221461037557806329570778146103955780632e1a7d4d146103cd5780632f3fadea146103ed57600080fd5b80628cc262146102845780630700037d146102b75780630fb5a6b4146102e457806318160ddd146102fa578063196dc32e1461030f57600080fd5b3661027f57600080fd5b600080fd5b34801561029057600080fd5b506102a461029f366004611fb7565b6107e3565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102a46102d2366004611fb7565b600f6020526000908152604090205481565b3480156102f057600080fd5b506102a460085481565b34801561030657600080fd5b506012546102a4565b34801561031b57600080fd5b506103246108f4565b005b34801561033257600080fd5b50610324610341366004611fb7565b610978565b34801561035257600080fd5b5060115461036590610100900460ff1681565b60405190151581526020016102ae565b34801561038157600080fd5b50610324610390366004611fd4565b610aef565b3480156103a157600080fd5b506005546103b5906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b3480156103d957600080fd5b506103246103e8366004612033565b610b78565b3480156103f957600080fd5b50610324610408366004611fb7565b610d53565b34801561041957600080fd5b5061032461042836600461204c565b610e06565b34801561043957600080fd5b50610324610eab565b34801561044e57600080fd5b506102a460075481565b34801561046457600080fd5b50610324610fc5565b34801561047957600080fd5b50610324610488366004612086565b611174565b34801561049957600080fd5b506103246104a8366004612033565b6111b1565b3480156104b957600080fd5b506102a46104c8366004611fb7565b60146020526000908152604090205481565b3480156104e657600080fd5b506102a460065481565b3480156104fc57600080fd5b506004546103b5906001600160a01b031681565b34801561051c57600080fd5b506103246113c8565b34801561053157600080fd5b506103246105403660046120a3565b6113f2565b34801561055157600080fd5b506102a4610560366004611fb7565b6001600160a01b031660009081526013602052604090205490565b34801561058757600080fd5b5061032461147b565b34801561059c57600080fd5b506102a4600b5481565b3480156105b257600080fd5b506102a46114ef565b3480156105c757600080fd5b506011546103659062010000900460ff1681565b3480156105e757600080fd5b506103b56105f6366004612033565b611502565b34801561060757600080fd5b506102a4610616366004611fb7565b600e6020526000908152604090205481565b34801561063457600080fd5b506000546001600160a01b03166103b5565b34801561065257600080fd5b506011546103659060ff1681565b34801561066c57600080fd5b5061032461067b3660046120c1565b61152c565b34801561068c57600080fd5b506009546103659060ff1681565b3480156106a657600080fd5b506103246106b5366004611fb7565b6117aa565b3480156106c657600080fd5b506102a46106d5366004611fb7565b60106020526000908152604090205481565b3480156106f357600080fd5b506102a4600c5481565b34801561070957600080fd5b506102a4611842565b34801561071e57600080fd5b506102a4600d5481565b34801561073457600080fd5b506102a460185481565b34801561074a57600080fd5b506103246118fe565b34801561075f57600080fd5b506102a4600a5481565b34801561077557600080fd5b50610365610784366004611fb7565b611927565b34801561079557600080fd5b506103246107a4366004611fb7565b611958565b3480156107b557600080fd5b506003546103b5906001600160a01b031681565b3480156107d557600080fd5b506016546103659060ff1681565b60006108ee600f6000846001600160a01b03166001600160a01b03168152602001908152602001600020546108e8600360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088891906120e3565b61089390600a612200565b6001600160a01b0386166000908152600e60205260409020546108e2906108c2906108bc611842565b90611a42565b6001600160a01b0388166000908152601360205260409020545b90611a8b565b90611b0a565b90611b4c565b92915050565b3360008181526014602052604090205415610975576001600160a01b03811660009081526014602052604090205460185461092e91611a42565b6018556001600160a01b0380821660009081526014602052604090205460045461095b9216903390611bab565b6001600160a01b0381166000908152601460205260408120555b50565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016109a29061220f565b60405180910390fd5b806001600160a01b031663a9059cbb6109cc6000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190612244565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa3919061225d565b6109755760405162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e2072657472696576696e6720746f6b656e7300000000000060448201526064016109a2565b600280541415610b115760405162461bcd60e51b81526004016109a29061227a565b60028055600380546001600160a01b038087166001600160a01b0319928316179092556004805492881692909116919091179055610b4e33610d7d565b610b5781611958565b5060089190915560075550506016805460ff19166001908117909155600255565b33610b81611842565b600d55610b8c6114ef565b600c556001600160a01b03811615610bd357610ba7816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b15610bf35760405162461bcd60e51b81526004016109a2906122b1565b600280541415610c155760405162461bcd60e51b81526004016109a29061227a565b6002805560115462010000900460ff1615610c425760405162461bcd60e51b81526004016109a290612304565b60008311610c925760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207769746864726177206e6f7468696e6700000000000000000060448201526064016109a2565b601254610c9f9084611a42565b60125533600090815260136020526040902054610cbc9084611a42565b33600081815260136020526040902091909155600454610ce8916001600160a01b039091169085611bab565b33600090815260136020526040902054610d1457336000908152601760205260409020805460ff191690555b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a25050600160025550565b6000546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109a29061220f565b6001546001600160a01b031615610de45760405162461bcd60e51b815260206004820152602560248201527f52657761726420646973747269627574696f6e2041646d696e20616c726561646044820152641e481cd95d60da1b60648201526084016109a2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e305760405162461bcd60e51b81526004016109a29061220f565b4260085410610e815760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757365206966206661726d206973206c69766500000000000060448201526064016109a2565b610ea7610e966000546001600160a01b031690565b6001600160a01b0384169083611bab565b5050565b33610eb4611842565b600d55610ebf6114ef565b600c556001600160a01b03811615610f0657610eda816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b15610f265760405162461bcd60e51b81526004016109a2906122b1565b601154610100900460ff1615610f4e5760405162461bcd60e51b81526004016109a290612304565b6000610f59336107e3565b90508015610fc057336000818152600f6020526040812055600354610f8a916001600160a01b039091169083611bab565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04869060200160405180910390a25b505050565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190612244565b9050600061105c611055601854601254611b4c90919063ffffffff16565b8390611a42565b60185490915061106c9082611b4c565b6018558015610ea75760005b601554811015610fc05760006015828154811061109757611097612349565b60009182526020822001546001600160a01b031691506110cc826001600160a01b031660009081526013602052604090205490565b9050801561115f576012546000906110e8906108e28785611a8b565b6001600160a01b03841660009081526014602052604090205490915061110e9082611b4c565b6001600160a01b03841660009081526014602090815260409182902092909255518281527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d910160405180910390a1505b5050808061116c9061235f565b915050611078565b6000546001600160a01b0316331461119e5760405162461bcd60e51b81526004016109a29061220f565b6009805460ff1916911515919091179055565b336111ba611842565b600d556111c56114ef565b600c556001600160a01b0381161561120c576111e0816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b1561122c5760405162461bcd60e51b81526004016109a2906122b1565b60028054141561124e5760405162461bcd60e51b81526004016109a29061227a565b6002805560115460ff16156112755760405162461bcd60e51b81526004016109a290612304565b600083116112bb5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f74206661726d206e6f7468696e6760681b60448201526064016109a2565b6004546112d3906001600160a01b0316333086611c0e565b60006112ef60646108e260065487611a8b90919063ffffffff16565b9050600061130d60646108e260075488611a8b90919063ffffffff16565b60055460045491925061132d916001600160a01b03908116911684611bab565b600061133d836108bc8885611a42565b60125490915061134d9082611b4c565b6012553360009081526013602052604090205461136a9082611b4c565b3360008181526013602052604090209190915561138690611c4c565b60405181815233907f78b5171f3125ee7fa9cda18c8fa6bdfdd147883c0abd8cae698c883b49a192bb9060200160405180910390a25050600160025550505050565b6113d06108f4565b6113d8610eab565b60095460ff161515600114156113f0576113f0610fc5565b565b6000546001600160a01b0316331461141c5760405162461bcd60e51b81526004016109a29061220f565b80611435576011805483151560ff199091161790555050565b806001141561145757601180548315156101000261ff00199091161790555050565b8060031415610ea75760118054831515620100000262ff0000199091161790555050565b6000546001600160a01b031633146114a55760405162461bcd60e51b81526004016109a29061220f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006114fd42600a54611cda565b905090565b6015818154811061151257600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b0316336001600160a01b0316146115995760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742072657761726420646973747269627574696f6044820152603760f91b60648201526084016109a2565b6002805414156115bb5760405162461bcd60e51b81526004016109a29061227a565b6002805560006115c9611842565b600d556115d46114ef565b600c556001600160a01b0381161561161b576115ef816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b600082116116645760405162461bcd60e51b815260206004820152601660248201527504475726174696f6e206d757374206e6f7420626520360541b60448201526064016109a2565b6003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156116ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d09190612244565b600854600b546116df91611a8b565b116117a0576116f18262015180611a8b565b600855600a5442106117135760085461170b908490611b0a565b600b55611756565b600a546000906117239042611a42565b9050600061173c600b5483611a8b90919063ffffffff16565b600854909150611750906108e28784611b4c565b600b5550505b42600c8190556008546117699190611b4c565b600a556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a15b5050600160025550565b6000546001600160a01b031633146117d45760405162461bcd60e51b81526004016109a29061220f565b6001600160a01b0381166118205760405162461bcd60e51b815260206004820152601360248201527201029b2ba3a34b73390181030b99020b2323c9606d1b60448201526064016109a2565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600061184d60125490565b6118585750600d5490565b6114fd6118f561186760125490565b6003546040805163313ce56760e01b815290516108e2926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906120e3565b6118e190600a612200565b6108dc600b546108dc600c546108bc6114ef565b600d5490611b4c565b3360009081526013602052604090205461191790610b78565b61191f6108f4565b6113f0610eab565b6001600160a01b03811660009081526017602052604081205460ff161561195057506001919050565b506000919050565b6000546001600160a01b031633146119825760405162461bcd60e51b81526004016109a29061220f565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611a8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cf0565b9392505050565b600082611a9a575060006108ee565b6000611aa6838561237a565b905082611ab38583612399565b14611a845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109a2565b6000611a8483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d2a565b600080611b5983856123bb565b905083811015611a845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a2565b6040516001600160a01b038316602482015260448101829052610fc090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d58565b6040516001600160a01b0380851660248301528316604482015260648101829052611c469085906323b872dd60e01b90608401611bd7565b50505050565b6000611c5782611927565b905080610ea7573360009081526010602090815260408083204290556001600160a01b03851680845260179092528220805460ff191660019081179091556015805491820181559092527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47590910180546001600160a01b03191690911790555050565b6000818310611ce95781611a84565b5090919050565b60008184841115611d145760405162461bcd60e51b81526004016109a291906123ff565b506000611d218486612432565b95945050505050565b60008183611d4b5760405162461bcd60e51b81526004016109a291906123ff565b506000611d218486612399565b6000611dad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e2a9092919063ffffffff16565b805190915015610fc05780806020019051810190611dcb919061225d565b610fc05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109a2565b6060611e398484600085611e41565b949350505050565b606082471015611ea25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109a2565b843b611ef05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109a2565b600080866001600160a01b03168587604051611f0c9190612449565b60006040518083038185875af1925050503d8060008114611f49576040519150601f19603f3d011682016040523d82523d6000602084013e611f4e565b606091505b5091509150611f5e828286611f69565b979650505050505050565b60608315611f78575081611a84565b825115611f885782518084602001fd5b8160405162461bcd60e51b81526004016109a291906123ff565b6001600160a01b038116811461097557600080fd5b600060208284031215611fc957600080fd5b8135611a8481611fa2565b600080600080600060a08688031215611fec57600080fd5b8535611ff781611fa2565b9450602086013561200781611fa2565b93506040860135925060608601359150608086013561202581611fa2565b809150509295509295909350565b60006020828403121561204557600080fd5b5035919050565b6000806040838503121561205f57600080fd5b823561206a81611fa2565b946020939093013593505050565b801515811461097557600080fd5b60006020828403121561209857600080fd5b8135611a8481612078565b600080604083850312156120b657600080fd5b823561206a81612078565b600080604083850312156120d457600080fd5b50508035926020909101359150565b6000602082840312156120f557600080fd5b815160ff81168114611a8457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561215757816000190482111561213d5761213d612106565b8085161561214a57918102915b93841c9390800290612121565b509250929050565b60008261216e575060016108ee565b8161217b575060006108ee565b8160018114612191576002811461219b576121b7565b60019150506108ee565b60ff8411156121ac576121ac612106565b50506001821b6108ee565b5060208310610133831016604e8410600b84101617156121da575081810a6108ee565b6121e4838361211c565b80600019048211156121f8576121f8612106565b029392505050565b6000611a8460ff84168361215f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561225657600080fd5b5051919050565b60006020828403121561226f57600080fd5b8151611a8481612078565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e746040820152726572616374207769746820746865206661726d60681b606082015260800190565b60208082526025908201527f41646d696e20526573747269637465642066756e6374696f6e2074656d706f726040820152646172696c7960d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561237357612373612106565b5060010190565b600081600019048311821515161561239457612394612106565b500290565b6000826123b657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123ce576123ce612106565b500190565b60005b838110156123ee5781810151838201526020016123d6565b83811115611c465750506000910152565b602081526000825180602084015261241e8160408501602087016123d3565b601f01601f19169190910160400192915050565b60008282101561244457612444612106565b500390565b6000825161245b8184602087016123d3565b919091019291505056fea2646970667358221220ba8a422b4bfdab4fa43299ece4de981c245fcde7e5c275b50f0d03f73124738264736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102755760003560e01c806370a082311161014f578063bf6d63da116100c1578063e9fad8ee1161007a578063e9fad8ee1461073e578063ebe2b12b14610753578063ef037b9014610769578063f2fde38b14610789578063f7c618c1146107a9578063f905c15a146107c957600080fd5b8063bf6d63da1461069a578063c3f344a8146106ba578063c8f33c91146106e7578063cd3daf9d146106fd578063df136d6514610712578063e89c31691461072857600080fd5b80638afdd669116101135780638afdd669146105db5780638b876347146105fb5780638da5cb5b146106285780638f864bb014610646578063a68ca71114610660578063b147f40c1461068057600080fd5b806370a0823114610545578063715018a61461057b5780637b0a47ee1461059057806380faa57d146105a65780638698c211146105bb57600080fd5b806331c2b53d116101e8578063538a85a1116101ac578063538a85a11461048d57806354df47ce146104ad57806357e885b9146104da5780635fcbd285146104f05780636426f13414610510578063674d83c21461052557600080fd5b806331c2b53d1461040d5780633d18b9121461042d5780633ed38cc61461044257806345bde800146104585780634f49e6551461046d57600080fd5b8063200681391161023a578063200681391461032657806322ff6acd14610346578063282bab221461037557806329570778146103955780632e1a7d4d146103cd5780632f3fadea146103ed57600080fd5b80628cc262146102845780630700037d146102b75780630fb5a6b4146102e457806318160ddd146102fa578063196dc32e1461030f57600080fd5b3661027f57600080fd5b600080fd5b34801561029057600080fd5b506102a461029f366004611fb7565b6107e3565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102a46102d2366004611fb7565b600f6020526000908152604090205481565b3480156102f057600080fd5b506102a460085481565b34801561030657600080fd5b506012546102a4565b34801561031b57600080fd5b506103246108f4565b005b34801561033257600080fd5b50610324610341366004611fb7565b610978565b34801561035257600080fd5b5060115461036590610100900460ff1681565b60405190151581526020016102ae565b34801561038157600080fd5b50610324610390366004611fd4565b610aef565b3480156103a157600080fd5b506005546103b5906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b3480156103d957600080fd5b506103246103e8366004612033565b610b78565b3480156103f957600080fd5b50610324610408366004611fb7565b610d53565b34801561041957600080fd5b5061032461042836600461204c565b610e06565b34801561043957600080fd5b50610324610eab565b34801561044e57600080fd5b506102a460075481565b34801561046457600080fd5b50610324610fc5565b34801561047957600080fd5b50610324610488366004612086565b611174565b34801561049957600080fd5b506103246104a8366004612033565b6111b1565b3480156104b957600080fd5b506102a46104c8366004611fb7565b60146020526000908152604090205481565b3480156104e657600080fd5b506102a460065481565b3480156104fc57600080fd5b506004546103b5906001600160a01b031681565b34801561051c57600080fd5b506103246113c8565b34801561053157600080fd5b506103246105403660046120a3565b6113f2565b34801561055157600080fd5b506102a4610560366004611fb7565b6001600160a01b031660009081526013602052604090205490565b34801561058757600080fd5b5061032461147b565b34801561059c57600080fd5b506102a4600b5481565b3480156105b257600080fd5b506102a46114ef565b3480156105c757600080fd5b506011546103659062010000900460ff1681565b3480156105e757600080fd5b506103b56105f6366004612033565b611502565b34801561060757600080fd5b506102a4610616366004611fb7565b600e6020526000908152604090205481565b34801561063457600080fd5b506000546001600160a01b03166103b5565b34801561065257600080fd5b506011546103659060ff1681565b34801561066c57600080fd5b5061032461067b3660046120c1565b61152c565b34801561068c57600080fd5b506009546103659060ff1681565b3480156106a657600080fd5b506103246106b5366004611fb7565b6117aa565b3480156106c657600080fd5b506102a46106d5366004611fb7565b60106020526000908152604090205481565b3480156106f357600080fd5b506102a4600c5481565b34801561070957600080fd5b506102a4611842565b34801561071e57600080fd5b506102a4600d5481565b34801561073457600080fd5b506102a460185481565b34801561074a57600080fd5b506103246118fe565b34801561075f57600080fd5b506102a4600a5481565b34801561077557600080fd5b50610365610784366004611fb7565b611927565b34801561079557600080fd5b506103246107a4366004611fb7565b611958565b3480156107b557600080fd5b506003546103b5906001600160a01b031681565b3480156107d557600080fd5b506016546103659060ff1681565b60006108ee600f6000846001600160a01b03166001600160a01b03168152602001908152602001600020546108e8600360009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610864573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088891906120e3565b61089390600a612200565b6001600160a01b0386166000908152600e60205260409020546108e2906108c2906108bc611842565b90611a42565b6001600160a01b0388166000908152601360205260409020545b90611a8b565b90611b0a565b90611b4c565b92915050565b3360008181526014602052604090205415610975576001600160a01b03811660009081526014602052604090205460185461092e91611a42565b6018556001600160a01b0380821660009081526014602052604090205460045461095b9216903390611bab565b6001600160a01b0381166000908152601460205260408120555b50565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016109a29061220f565b60405180910390fd5b806001600160a01b031663a9059cbb6109cc6000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a349190612244565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa3919061225d565b6109755760405162461bcd60e51b815260206004820152601a60248201527f4572726f7220696e2072657472696576696e6720746f6b656e7300000000000060448201526064016109a2565b600280541415610b115760405162461bcd60e51b81526004016109a29061227a565b60028055600380546001600160a01b038087166001600160a01b0319928316179092556004805492881692909116919091179055610b4e33610d7d565b610b5781611958565b5060089190915560075550506016805460ff19166001908117909155600255565b33610b81611842565b600d55610b8c6114ef565b600c556001600160a01b03811615610bd357610ba7816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b15610bf35760405162461bcd60e51b81526004016109a2906122b1565b600280541415610c155760405162461bcd60e51b81526004016109a29061227a565b6002805560115462010000900460ff1615610c425760405162461bcd60e51b81526004016109a290612304565b60008311610c925760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207769746864726177206e6f7468696e6700000000000000000060448201526064016109a2565b601254610c9f9084611a42565b60125533600090815260136020526040902054610cbc9084611a42565b33600081815260136020526040902091909155600454610ce8916001600160a01b039091169085611bab565b33600090815260136020526040902054610d1457336000908152601760205260409020805460ff191690555b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a25050600160025550565b6000546001600160a01b03163314610d7d5760405162461bcd60e51b81526004016109a29061220f565b6001546001600160a01b031615610de45760405162461bcd60e51b815260206004820152602560248201527f52657761726420646973747269627574696f6e2041646d696e20616c726561646044820152641e481cd95d60da1b60648201526084016109a2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e305760405162461bcd60e51b81526004016109a29061220f565b4260085410610e815760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420757365206966206661726d206973206c69766500000000000060448201526064016109a2565b610ea7610e966000546001600160a01b031690565b6001600160a01b0384169083611bab565b5050565b33610eb4611842565b600d55610ebf6114ef565b600c556001600160a01b03811615610f0657610eda816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b15610f265760405162461bcd60e51b81526004016109a2906122b1565b601154610100900460ff1615610f4e5760405162461bcd60e51b81526004016109a290612304565b6000610f59336107e3565b90508015610fc057336000818152600f6020526040812055600354610f8a916001600160a01b039091169083611bab565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04869060200160405180910390a25b505050565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190612244565b9050600061105c611055601854601254611b4c90919063ffffffff16565b8390611a42565b60185490915061106c9082611b4c565b6018558015610ea75760005b601554811015610fc05760006015828154811061109757611097612349565b60009182526020822001546001600160a01b031691506110cc826001600160a01b031660009081526013602052604090205490565b9050801561115f576012546000906110e8906108e28785611a8b565b6001600160a01b03841660009081526014602052604090205490915061110e9082611b4c565b6001600160a01b03841660009081526014602090815260409182902092909255518281527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d910160405180910390a1505b5050808061116c9061235f565b915050611078565b6000546001600160a01b0316331461119e5760405162461bcd60e51b81526004016109a29061220f565b6009805460ff1916911515919091179055565b336111ba611842565b600d556111c56114ef565b600c556001600160a01b0381161561120c576111e0816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b33803b1561122c5760405162461bcd60e51b81526004016109a2906122b1565b60028054141561124e5760405162461bcd60e51b81526004016109a29061227a565b6002805560115460ff16156112755760405162461bcd60e51b81526004016109a290612304565b600083116112bb5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f74206661726d206e6f7468696e6760681b60448201526064016109a2565b6004546112d3906001600160a01b0316333086611c0e565b60006112ef60646108e260065487611a8b90919063ffffffff16565b9050600061130d60646108e260075488611a8b90919063ffffffff16565b60055460045491925061132d916001600160a01b03908116911684611bab565b600061133d836108bc8885611a42565b60125490915061134d9082611b4c565b6012553360009081526013602052604090205461136a9082611b4c565b3360008181526013602052604090209190915561138690611c4c565b60405181815233907f78b5171f3125ee7fa9cda18c8fa6bdfdd147883c0abd8cae698c883b49a192bb9060200160405180910390a25050600160025550505050565b6113d06108f4565b6113d8610eab565b60095460ff161515600114156113f0576113f0610fc5565b565b6000546001600160a01b0316331461141c5760405162461bcd60e51b81526004016109a29061220f565b80611435576011805483151560ff199091161790555050565b806001141561145757601180548315156101000261ff00199091161790555050565b8060031415610ea75760118054831515620100000262ff0000199091161790555050565b6000546001600160a01b031633146114a55760405162461bcd60e51b81526004016109a29061220f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006114fd42600a54611cda565b905090565b6015818154811061151257600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b0316336001600160a01b0316146115995760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742072657761726420646973747269627574696f6044820152603760f91b60648201526084016109a2565b6002805414156115bb5760405162461bcd60e51b81526004016109a29061227a565b6002805560006115c9611842565b600d556115d46114ef565b600c556001600160a01b0381161561161b576115ef816107e3565b6001600160a01b0382166000908152600f6020908152604080832093909355600d54600e909152919020555b600082116116645760405162461bcd60e51b815260206004820152601660248201527504475726174696f6e206d757374206e6f7420626520360541b60448201526064016109a2565b6003546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156116ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d09190612244565b600854600b546116df91611a8b565b116117a0576116f18262015180611a8b565b600855600a5442106117135760085461170b908490611b0a565b600b55611756565b600a546000906117239042611a42565b9050600061173c600b5483611a8b90919063ffffffff16565b600854909150611750906108e28784611b4c565b600b5550505b42600c8190556008546117699190611b4c565b600a556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a15b5050600160025550565b6000546001600160a01b031633146117d45760405162461bcd60e51b81526004016109a29061220f565b6001600160a01b0381166118205760405162461bcd60e51b815260206004820152601360248201527201029b2ba3a34b73390181030b99020b2323c9606d1b60448201526064016109a2565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600061184d60125490565b6118585750600d5490565b6114fd6118f561186760125490565b6003546040805163313ce56760e01b815290516108e2926001600160a01b03169163313ce5679160048083019260209291908290030181865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d691906120e3565b6118e190600a612200565b6108dc600b546108dc600c546108bc6114ef565b600d5490611b4c565b3360009081526013602052604090205461191790610b78565b61191f6108f4565b6113f0610eab565b6001600160a01b03811660009081526017602052604081205460ff161561195057506001919050565b506000919050565b6000546001600160a01b031633146119825760405162461bcd60e51b81526004016109a29061220f565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611a8483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cf0565b9392505050565b600082611a9a575060006108ee565b6000611aa6838561237a565b905082611ab38583612399565b14611a845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109a2565b6000611a8483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d2a565b600080611b5983856123bb565b905083811015611a845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109a2565b6040516001600160a01b038316602482015260448101829052610fc090849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d58565b6040516001600160a01b0380851660248301528316604482015260648101829052611c469085906323b872dd60e01b90608401611bd7565b50505050565b6000611c5782611927565b905080610ea7573360009081526010602090815260408083204290556001600160a01b03851680845260179092528220805460ff191660019081179091556015805491820181559092527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec47590910180546001600160a01b03191690911790555050565b6000818310611ce95781611a84565b5090919050565b60008184841115611d145760405162461bcd60e51b81526004016109a291906123ff565b506000611d218486612432565b95945050505050565b60008183611d4b5760405162461bcd60e51b81526004016109a291906123ff565b506000611d218486612399565b6000611dad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e2a9092919063ffffffff16565b805190915015610fc05780806020019051810190611dcb919061225d565b610fc05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016109a2565b6060611e398484600085611e41565b949350505050565b606082471015611ea25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109a2565b843b611ef05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109a2565b600080866001600160a01b03168587604051611f0c9190612449565b60006040518083038185875af1925050503d8060008114611f49576040519150601f19603f3d011682016040523d82523d6000602084013e611f4e565b606091505b5091509150611f5e828286611f69565b979650505050505050565b60608315611f78575081611a84565b825115611f885782518084602001fd5b8160405162461bcd60e51b81526004016109a291906123ff565b6001600160a01b038116811461097557600080fd5b600060208284031215611fc957600080fd5b8135611a8481611fa2565b600080600080600060a08688031215611fec57600080fd5b8535611ff781611fa2565b9450602086013561200781611fa2565b93506040860135925060608601359150608086013561202581611fa2565b809150509295509295909350565b60006020828403121561204557600080fd5b5035919050565b6000806040838503121561205f57600080fd5b823561206a81611fa2565b946020939093013593505050565b801515811461097557600080fd5b60006020828403121561209857600080fd5b8135611a8481612078565b600080604083850312156120b657600080fd5b823561206a81612078565b600080604083850312156120d457600080fd5b50508035926020909101359150565b6000602082840312156120f557600080fd5b815160ff81168114611a8457600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561215757816000190482111561213d5761213d612106565b8085161561214a57918102915b93841c9390800290612121565b509250929050565b60008261216e575060016108ee565b8161217b575060006108ee565b8160018114612191576002811461219b576121b7565b60019150506108ee565b60ff8411156121ac576121ac612106565b50506001821b6108ee565b5060208310610133831016604e8410600b84101617156121da575081810a6108ee565b6121e4838361211c565b80600019048211156121f8576121f8612106565b029392505050565b6000611a8460ff84168361215f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561225657600080fd5b5051919050565b60006020828403121561226f57600080fd5b8151611a8481612078565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e746040820152726572616374207769746820746865206661726d60681b606082015260800190565b60208082526025908201527f41646d696e20526573747269637465642066756e6374696f6e2074656d706f726040820152646172696c7960d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561237357612373612106565b5060010190565b600081600019048311821515161561239457612394612106565b500290565b6000826123b657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123ce576123ce612106565b500190565b60005b838110156123ee5781810151838201526020016123d6565b83811115611c465750506000910152565b602081526000825180602084015261241e8160408501602087016123d3565b601f01601f19169190910160400192915050565b60008282101561244457612444612106565b500390565b6000825161245b8184602087016123d3565b919091019291505056fea2646970667358221220ba8a422b4bfdab4fa43299ece4de981c245fcde7e5c275b50f0d03f73124738264736f6c634300080a0033
Deployed Bytecode Sourcemap
42011:10493:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46002:8;;;42011:10493;;;;46646:296;;;;;;;;;;-1:-1:-1;46646:296:0;;;;;:::i;:::-;;:::i;:::-;;;548:25:1;;;536:2;521:18;46646:296:0;;;;;;;;42856:42;;;;;;;;;;-1:-1:-1;42856:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;42554:34;;;;;;;;;;;;;;;;45363:91;;;;;;;;;;-1:-1:-1;45434:12:0;;45363:91;;52082:320;;;;;;;;;;;;;:::i;:::-;;51871:199;;;;;;;;;;-1:-1:-1;51871:199:0;;;;;:::i;:::-;;:::i;43058:33::-;;;;;;;;;;-1:-1:-1;43058:33:0;;;;;;;;;;;;;;749:14:1;;742:22;724:41;;712:2;697:18;43058:33:0;584:187:1;43839:474:0;;;;;;;;;;-1:-1:-1;43839:474:0;;;;;:::i;:::-;;:::i;42290:67::-;;;;;;;;;;-1:-1:-1;42290:67:0;;;;-1:-1:-1;;;;;42290:67:0;;;;;;-1:-1:-1;;;;;1612:32:1;;;1594:51;;1582:2;1567:18;42290:67:0;1448:203:1;48315:604:0;;;;;;;;;;-1:-1:-1;48315:604:0;;;;;:::i;:::-;;:::i;24011:237::-;;;;;;;;;;-1:-1:-1;24011:237:0;;;;;:::i;:::-;;:::i;45584:304::-;;;;;;;;;;-1:-1:-1;45584:304:0;;;;;:::i;:::-;;:::i;49063:398::-;;;;;;;;;;;;;:::i;42467:24::-;;;;;;;;;;;;;;;;50515:924;;;;;;;;;;;;;:::i;52414:87::-;;;;;;;;;;-1:-1:-1;52414:87:0;;;;;:::i;:::-;;:::i;47491:816::-;;;;;;;;;;-1:-1:-1;47491:816:0;;;;;:::i;:::-;;:::i;43358:48::-;;;;;;;;;;-1:-1:-1;43358:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;42387:27;;;;;;;;;;;;;;;;42246:21;;;;;;;;;;-1:-1:-1;42246:21:0;;;;-1:-1:-1;;;;;42246:21:0;;;51451:151;;;;;;;;;;;;;:::i;45012:343::-;;;;;;;;;;-1:-1:-1;45012:343:0;;;;;:::i;:::-;;:::i;45462:110::-;;;;;;;;;;-1:-1:-1;45462:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;45546:18:0;45519:7;45546:18;;;:9;:18;;;;;;;45462:110;7160:148;;;;;;;;;;;;;:::i;42678:29::-;;;;;;;;;;;;;;;;46026:131;;;;;;;;;;;;;:::i;43158:35::-;;;;;;;;;;-1:-1:-1;43158:35:0;;;;;;;;;;;43639:24;;;;;;;;;;-1:-1:-1;43639:24:0;;;;;:::i;:::-;;:::i;42792:57::-;;;;;;;;;;-1:-1:-1;42792:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;6518:79;;;;;;;;;;-1:-1:-1;6556:7:0;6583:6;-1:-1:-1;;;;;6583:6:0;6518:79;;42965:31;;;;;;;;;;-1:-1:-1;42965:31:0;;;;;;;;49479:972;;;;;;;;;;-1:-1:-1;49479:972:0;;;;;:::i;:::-;;:::i;42595:26::-;;;;;;;;;;-1:-1:-1;42595:26:0;;;;;;;;44851:149;;;;;;;;;;-1:-1:-1;44851:149:0;;;;;:::i;:::-;;:::i;42917:40::-;;;;;;;;;;-1:-1:-1;42917:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;42714:29;;;;;;;;;;;;;;;;46175:453;;;;;;;;;;;;;:::i;42750:35::-;;;;;;;;;;;;;;;;50475:27;;;;;;;;;;;;;;;;48927:128;;;;;;;;;;;;;:::i;42640:31::-;;;;;;;;;;;;;;;;46960:193;;;;;;;;;;-1:-1:-1;46960:193:0;;;;;:::i;:::-;;:::i;7463:244::-;;;;;;;;;;-1:-1:-1;7463:244:0;;;;;:::i;:::-;;:::i;42199:25::-;;;;;;;;;;-1:-1:-1;42199:25:0;;;;-1:-1:-1;;;;;42199:25:0;;;43670:28;;;;;;;;;;-1:-1:-1;43670:28:0;;;;;;;;46646:296;46700:7;46740:194;46917:7;:16;46925:7;-1:-1:-1;;;;;46917:16:0;-1:-1:-1;;;;;46917:16:0;;;;;;;;;;;;;46740:154;46870:11;;;;;;;;;-1:-1:-1;;;;;46870:11:0;-1:-1:-1;;;;;46863:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46858:35;;:2;:35;:::i;:::-;-1:-1:-1;;;;;46802:31:0;;;;;;:22;:31;;;;;;46740:95;;46781:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;-1:-1:-1;;;;;45546:18:0;;45519:7;45546:18;;;:9;:18;;;;;;46740;:40;;:95::i;:::-;:117;;:154::i;:::-;:176;;:194::i;:::-;46720:214;46646:296;-1:-1:-1;;46646:296:0:o;52082:320::-;52141:10;52125:13;52175:20;;;:13;:20;;;;;;:24;52172:223;;-1:-1:-1;;;;;52240:20:0;;;;;;:13;:20;;;;;;52227:8;;:34;;:12;:34::i;:::-;52216:8;:45;-1:-1:-1;;;;;52323:20:0;;;;;;;:13;:20;;;;;;52290:7;;:54;;:7;;52311:10;;52290:20;:54::i;:::-;-1:-1:-1;;;;;52359:20:0;;52382:1;52359:20;;;:13;:20;;;;;:24;52172:223;52114:288;52082:320::o;51871:199::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;;;;;;;;;51965:6:::1;-1:-1:-1::0;;;;;51958:23:0::1;;51982:7;6556::::0;6583:6;-1:-1:-1;;;;;6583:6:0;;6518:79;51982:7:::1;51991:39;::::0;-1:-1:-1;;;51991:39:0;;52024:4:::1;51991:39;::::0;::::1;1594:51:1::0;-1:-1:-1;;;;;51991:24:0;::::1;::::0;::::1;::::0;1567:18:1;;51991:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51958:73;::::0;-1:-1:-1;;;;;;51958:73:0::1;::::0;;;;;;-1:-1:-1;;;;;5868:32:1;;;51958:73:0::1;::::0;::::1;5850:51:1::0;5917:18;;;5910:34;5823:18;;51958:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51950:112;;;::::0;-1:-1:-1;;;51950:112:0;;6407:2:1;51950:112:0::1;::::0;::::1;6389:21:1::0;6446:2;6426:18;;;6419:30;6485:28;6465:18;;;6458:56;6531:18;;51950:112:0::1;6205:350:1::0;43839:474:0;22560:1;23157:7;;:19;;23149:63;;;;-1:-1:-1;;;23149:63:0;;;;;;;:::i;:::-;22560:1;23290:18;;44004:11:::1;:34:::0;;-1:-1:-1;;;;;44004:34:0;;::::1;-1:-1:-1::0;;;;;;44004:34:0;;::::1;;::::0;;;44049:7:::1;:26:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;44086:38:::1;44113:10;44086:26;:38::i;:::-;44145:28;44163:9;44145:17;:28::i;:::-;-1:-1:-1::0;44194:8:0::1;:21:::0;;;;44236:5:::1;:31:::0;-1:-1:-1;;44288:8:0::1;:15:::0;;-1:-1:-1;;44288:15:0::1;-1:-1:-1::0;44288:15:0;;::::1;::::0;;;23469:7;:22;43839:474::o;48315:604::-;48369:10;44394:16;:14;:16::i;:::-;44371:20;:39;44438:26;:24;:26::i;:::-;44421:14;:43;-1:-1:-1;;;;;44479:21:0;;;44475:157;;44536:15;44543:7;44536:6;:15::i;:::-;-1:-1:-1;;;;;44517:16:0;;;;;;:7;:16;;;;;;;;:34;;;;44600:20;;44566:22;:31;;;;;;:54;44475:157;48392:10:::1;14341:20:::0;;14380:8;44719:100:::1;;;;-1:-1:-1::0;;;44719:100:0::1;;;;;;;:::i;:::-;22560:1:::2;23157:7:::0;::::2;:19;;23149:63;;;;-1:-1:-1::0;;;23149:63:0::2;;;;;;;:::i;:::-;22560:1;23290:18:::0;;48436:15:::3;::::0;;;::::3;;;:24;48428:74;;;;-1:-1:-1::0;;;48428:74:0::3;;;;;;;:::i;:::-;48530:1;48521:6;:10;48513:46;;;::::0;-1:-1:-1;;;48513:46:0;;7948:2:1;48513:46:0::3;::::0;::::3;7930:21:1::0;7987:2;7967:18;;;7960:30;8026:25;8006:18;;;7999:53;8069:18;;48513:46:0::3;7746:347:1::0;48513:46:0::3;48595:12;::::0;:24:::3;::::0;48612:6;48595:16:::3;:24::i;:::-;48580:12;:39:::0;48664:10:::3;48654:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;48680:6;48654:25:::3;:33::i;:::-;48640:10;48630:21;::::0;;;:9:::3;:21;::::0;;;;:57;;;;48698:7:::3;::::0;:40:::3;::::0;-1:-1:-1;;;;;48698:7:0;;::::3;::::0;48731:6;48698:20:::3;:40::i;:::-;48773:10;48763:21;::::0;;;:9:::3;:21;::::0;;;;;48759:98:::3;;48814:10;48840:5;48806:19:::0;;;:7:::3;:19;::::0;;;;:39;;-1:-1:-1;;48806:39:0::3;::::0;;48759:98:::3;48872:29;::::0;548:25:1;;;48882:10:0::3;::::0;48872:29:::3;::::0;536:2:1;521:18;48872:29:0::3;;;;;;;-1:-1:-1::0;;22516:1:0::2;23469:7;:22:::0;-1:-1:-1;48315:604:0:o;24011:237::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;24115:18:::1;::::0;-1:-1:-1;;;;;24115:18:0::1;:32:::0;24107:82:::1;;;::::0;-1:-1:-1;;;24107:82:0;;8300:2:1;24107:82:0::1;::::0;::::1;8282:21:1::0;8339:2;8319:18;;;8312:30;8378:34;8358:18;;;8351:62;-1:-1:-1;;;8429:18:1;;;8422:35;8474:19;;24107:82:0::1;8098:401:1::0;24107:82:0::1;24200:18;:40:::0;;-1:-1:-1;;;;;;24200:40:0::1;-1:-1:-1::0;;;;;24200:40:0;;;::::1;::::0;;;::::1;::::0;;24011:237::o;45584:304::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;45787:15:::1;45776:8;;:26;45768:65;;;::::0;-1:-1:-1;;;45768:65:0;;8706:2:1;45768:65:0::1;::::0;::::1;8688:21:1::0;8745:2;8725:18;;;8718:30;8784:28;8764:18;;;8757:56;8830:18;;45768:65:0::1;8504:350:1::0;45768:65:0::1;45844:36;45864:7;6556::::0;6583:6;-1:-1:-1;;;;;6583:6:0;;6518:79;45864:7:::1;-1:-1:-1::0;;;;;45844:19:0;::::1;::::0;45873:6;45844:19:::1;:36::i;:::-;45584:304:::0;;:::o;49063:398::-;49104:10;44394:16;:14;:16::i;:::-;44371:20;:39;44438:26;:24;:26::i;:::-;44421:14;:43;-1:-1:-1;;;;;44479:21:0;;;44475:157;;44536:15;44543:7;44536:6;:15::i;:::-;-1:-1:-1;;;;;44517:16:0;;;;;;:7;:16;;;;;;;;:34;;;;44600:20;;44566:22;:31;;;;;;:54;44475:157;49127:10:::1;14341:20:::0;;14380:8;44719:100:::1;;;;-1:-1:-1::0;;;44719:100:0::1;;;;;;;:::i;:::-;49158:13:::2;::::0;::::2;::::0;::::2;;;:22;49150:72;;;;-1:-1:-1::0;;;49150:72:0::2;;;;;;;:::i;:::-;49233:14;49250:18;49257:10;49250:6;:18::i;:::-;49233:35:::0;-1:-1:-1;49283:10:0;;49279:175:::2;;49318:10;49332:1;49310:19:::0;;;:7:::2;:19;::::0;;;;:23;49348:11:::2;::::0;:44:::2;::::0;-1:-1:-1;;;;;49348:11:0;;::::2;::::0;49385:6;49348:24:::2;:44::i;:::-;49412:30;::::0;548:25:1;;;49423:10:0::2;::::0;49412:30:::2;::::0;536:2:1;521:18;49412:30:0::2;;;;;;;49279:175;49139:322;44642:1:::1;49063:398:::0;:::o;50515:924::-;50688:7;;;:32;;-1:-1:-1;;;50688:32:0;;50714:4;50688:32;;;1594:51:1;;;;50660:25:0;;-1:-1:-1;;;;;50688:7:0;;;;:17;;1567:18:1;;50688:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50660:60;;50731:24;50758:49;50780:26;50797:8;;50780:12;;:16;;:26;;;;:::i;:::-;50758:17;;:21;:49::i;:::-;50839:8;;50731:76;;-1:-1:-1;50839:30:0;;50731:76;50839:12;:30::i;:::-;50828:8;:41;50904:20;;50901:531;;50946:9;50941:480;50965:7;:14;50961:18;;50941:480;;;51005:11;51019:7;51027:1;51019:10;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;51019:10:0;;-1:-1:-1;51064:14:0;51019:10;-1:-1:-1;;;;;45546:18:0;45519:7;45546:18;;;:9;:18;;;;;;;45462:110;51064:14;51049:29;-1:-1:-1;51101:8:0;;51098:309;;51189:12;;51135:17;;51156:46;;:28;51157:16;51179:4;51156:22;:28::i;:46::-;-1:-1:-1;;;;;51275:18:0;;;;;;:13;:18;;;;;;51135:67;;-1:-1:-1;51275:33:0;;51135:67;51275:22;:33::i;:::-;-1:-1:-1;;;;;51254:18:0;;;;;;:13;:18;;;;;;;;;:54;;;;51364:22;548:25:1;;;51364:22:0;;521:18:1;51364:22:0;;;;;;;51111:296;51098:309;50985:436;;50981:3;;;;;:::i;:::-;;;;50941:480;;52414:87;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;52478:7:::1;:15:::0;;-1:-1:-1;;52478:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52414:87::o;47491:816::-;47543:10;44394:16;:14;:16::i;:::-;44371:20;:39;44438:26;:24;:26::i;:::-;44421:14;:43;-1:-1:-1;;;;;44479:21:0;;;44475:157;;44536:15;44543:7;44536:6;:15::i;:::-;-1:-1:-1;;;;;44517:16:0;;;;;;:7;:16;;;;;;;;:34;;;;44600:20;;44566:22;:31;;;;;;:54;44475:157;47566:10:::1;14341:20:::0;;14380:8;44719:100:::1;;;;-1:-1:-1::0;;;44719:100:0::1;;;;;;;:::i;:::-;22560:1:::2;23157:7:::0;::::2;:19;;23149:63;;;;-1:-1:-1::0;;;23149:63:0::2;;;;;;;:::i;:::-;22560:1;23290:18:::0;;47610:11:::3;::::0;::::3;;:20;47602:70;;;;-1:-1:-1::0;;;47602:70:0::3;;;;;;;:::i;:::-;47700:1;47691:6;:10;47683:42;;;::::0;-1:-1:-1;;;47683:42:0;;9333:2:1;47683:42:0::3;::::0;::::3;9315:21:1::0;9372:2;9352:18;;;9345:30;-1:-1:-1;;;9391:18:1;;;9384:49;9450:18;;47683:42:0::3;9131:343:1::0;47683:42:0::3;47738:7;::::0;:59:::3;::::0;-1:-1:-1;;;;;47738:7:0::3;47763:10;47783:4;47790:6:::0;47738:24:::3;:59::i;:::-;47818:14;47835:29;47860:3;47835:20;47846:8;;47835:6;:10;;:20;;;;:::i;:29::-;47818:46;;47875:14;47892:26;47914:3;47892:17;47903:5;;47892:6;:10;;:17;;;;:::i;:26::-;47968:7;::::0;47939::::3;::::0;47875:43;;-1:-1:-1;47939:46:0::3;::::0;-1:-1:-1;;;;;47939:7:0;;::::3;::::0;47968::::3;47978:6:::0;47939:20:::3;:46::i;:::-;48006:19;48028:30;48051:6:::0;48028:18:::3;:6:::0;48039;48028:10:::3;:18::i;:30::-;48094:12;::::0;48006:52;;-1:-1:-1;48094:29:0::3;::::0;48006:52;48094:16:::3;:29::i;:::-;48079:12;:44:::0;48168:10:::3;48158:21;::::0;;;:9:::3;:21;::::0;;;;;:38:::3;::::0;48184:11;48158:25:::3;:38::i;:::-;48144:10;48134:21;::::0;;;:9:::3;:21;::::0;;;;:62;;;;48217:26:::3;::::0;:14:::3;:26::i;:::-;48269:30;::::0;548:25:1;;;48276:10:0::3;::::0;48269:30:::3;::::0;536:2:1;521:18;48269:30:0::3;;;;;;;-1:-1:-1::0;;22516:1:0::2;23469:7;:22:::0;-1:-1:-1;;;;47491:816:0:o;51451:151::-;51496:15;:13;:15::i;:::-;51522:11;:9;:11::i;:::-;51547:7;;;;:13;;:7;:13;51544:51;;;51572:21;:19;:21::i;:::-;51451:151::o;45012:343::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;45095:8;45092:256:::1;;45119:11;:21:::0;;;::::1;;-1:-1:-1::0;;45119:21:0;;::::1;;::::0;;45584:304;;:::o;45092:256::-:1;45184:5;45191:1;45184:8;45181:167;;;45208:13;:22:::0;;;::::1;;;;-1:-1:-1::0;;45208:22:0;;::::1;;::::0;;45584:304;;:::o;45181:167::-:1;45274:5;45281:1;45274:8;45271:77;;;45298:15;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45298:24:0;;::::1;;::::0;;45012:343;;:::o;7160:148::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;7267:1:::1;7251:6:::0;;7230:40:::1;::::0;-1:-1:-1;;;;;7251:6:0;;::::1;::::0;7230:40:::1;::::0;7267:1;;7230:40:::1;7298:1;7281:19:::0;;-1:-1:-1;;;;;;7281:19:0::1;::::0;;7160:148::o;46026:131::-;46083:7;46110:39;46119:15;46136:12;;46110:8;:39::i;:::-;46103:46;;46026:131;:::o;43639:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43639:24:0;;-1:-1:-1;43639:24:0;:::o;49479:972::-;23675:18;;-1:-1:-1;;;;;23675:18:0;5796:10;-1:-1:-1;;;;;23659:34:0;;23651:80;;;;-1:-1:-1;;;23651:80:0;;9681:2:1;23651:80:0;;;9663:21:1;9720:2;9700:18;;;9693:30;9759:34;9739:18;;;9732:62;-1:-1:-1;;;9810:18:1;;;9803:31;9851:19;;23651:80:0;9479:397:1;23651:80:0;22560:1:::1;23157:7:::0;::::1;:19;;23149:63;;;;-1:-1:-1::0;;;23149:63:0::1;;;;;;;:::i;:::-;22560:1;23290:18:::0;;49638:1:::2;44394:16;:14;:16::i;:::-;44371:20;:39:::0;44438:26:::2;:24;:26::i;:::-;44421:14;:43:::0;-1:-1:-1;;;;;44479:21:0;::::2;::::0;44475:157:::2;;44536:15;44543:7;44536:6;:15::i;:::-;-1:-1:-1::0;;;;;44517:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;44600:20:::2;::::0;44566:22:::2;:31:::0;;;;;;:54;44475:157:::2;49678:1:::3;49666:9;:13;49658:48;;;::::0;-1:-1:-1;;;49658:48:0;;10083:2:1;49658:48:0::3;::::0;::::3;10065:21:1::0;10122:2;10102:18;;;10095:30;-1:-1:-1;;;10141:18:1;;;10134:52;10203:18;;49658:48:0::3;9881:346:1::0;49658:48:0::3;49748:11;::::0;:36:::3;::::0;-1:-1:-1;;;49748:36:0;;49778:4:::3;49748:36;::::0;::::3;1594:51:1::0;-1:-1:-1;;;;;49748:11:0;;::::3;::::0;:21:::3;::::0;1567:18:1;;49748:36:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49735:8;::::0;49720:10:::3;::::0;:24:::3;::::0;:14:::3;:24::i;:::-;:64;49717:727;;49811:21;:9:::0;49825:6:::3;49811:13;:21::i;:::-;49800:8;:32:::0;49870:12:::3;::::0;49851:15:::3;:31;49847:328;;49927:8;::::0;49916:20:::3;::::0;:6;;:10:::3;:20::i;:::-;49903:10;:33:::0;49847:328:::3;;;49997:12;::::0;49977:17:::3;::::0;49997:33:::3;::::0;50014:15:::3;49997:16;:33::i;:::-;49977:53;;50049:16;50068:25;50082:10;;50068:9;:13;;:25;;;;:::i;:::-;50150:8;::::0;50049:44;;-1:-1:-1;50125:34:0::3;::::0;:20:::3;:6:::0;50049:44;50125:10:::3;:20::i;:34::-;50112:10;:47:::0;-1:-1:-1;;49847:328:0::3;50206:15;50189:14;:32:::0;;;50271:8:::3;::::0;50251:29:::3;::::0;50206:15;50251:19:::3;:29::i;:::-;50236:12;:44:::0;50413:19:::3;::::0;548:25:1;;;50413:19:0::3;::::0;536:2:1;521:18;50413:19:0::3;;;;;;;49717:727;-1:-1:-1::0;;22516:1:0::1;23469:7;:22:::0;-1:-1:-1;49479:972:0:o;44851:149::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44922:19:0;::::1;44914:51;;;::::0;-1:-1:-1;;;44914:51:0;;10434:2:1;44914:51:0::1;::::0;::::1;10416:21:1::0;10473:2;10453:18;;;10446:30;-1:-1:-1;;;10492:18:1;;;10485:49;10551:18;;44914:51:0::1;10232:343:1::0;44914:51:0::1;44977:7;:15:::0;;-1:-1:-1;;;;;;44977:15:0::1;-1:-1:-1::0;;;;;44977:15:0;;;::::1;::::0;;;::::1;::::0;;44851:149::o;46175:453::-;46222:7;46246:13;45434:12;;;45363:91;46246:13;46242:78;;-1:-1:-1;46288:20:0;;;46175:453::o;46242:78::-;46352:268;46395:210;46591:13;45434:12;;;45363:91;46591:13;46540:11;;46533:30;;;-1:-1:-1;;;46533:30:0;;;;46395:169;;-1:-1:-1;;;;;46540:11:0;;46533:28;;:30;;;;;;;;;;;;;;46540:11;46533:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46528:35;;:2;:35;:::i;:::-;46395:106;46490:10;;46395:68;46448:14;;46395:26;:24;:26::i;:210::-;46352:20;;;:24;:268::i;48927:128::-;48982:10;45519:7;45546:18;;;:9;:18;;;;;;48963:31;;48315:604;:::i;48963:31::-;49005:15;:13;:15::i;:::-;49032:11;:9;:11::i;46960:193::-;-1:-1:-1;;;;;47077:17:0;;47045:4;47077:17;;;:7;:17;;;;;:29;;;47074:72;;;-1:-1:-1;47115:4:0;;46960:193;-1:-1:-1;46960:193:0:o;47074:72::-;-1:-1:-1;47141:5:0;;46960:193;-1:-1:-1;46960:193:0:o;7463:244::-;6730:6;;-1:-1:-1;;;;;6730:6:0;5796:10;6730:22;6722:67;;;;-1:-1:-1;;;6722:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7552:22:0;::::1;7544:73;;;::::0;-1:-1:-1;;;7544:73:0;;10782:2:1;7544:73:0::1;::::0;::::1;10764:21:1::0;10821:2;10801:18;;;10794:30;10860:34;10840:18;;;10833:62;-1:-1:-1;;;10911:18:1;;;10904:36;10957:19;;7544:73:0::1;10580:402:1::0;7544:73:0::1;7654:6;::::0;;7633:38:::1;::::0;-1:-1:-1;;;;;7633:38:0;;::::1;::::0;7654:6;::::1;::::0;7633:38:::1;::::0;::::1;7682:6;:17:::0;;-1:-1:-1;;;;;;7682:17:0::1;-1:-1:-1::0;;;;;7682:17:0;;;::::1;::::0;;;::::1;::::0;;7463:244::o;1569:136::-;1627:7;1654:43;1658:1;1661;1654:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1647:50;1569:136;-1:-1:-1;;;1569:136:0:o;2459:471::-;2517:7;2762:6;2758:47;;-1:-1:-1;2792:1:0;2785:8;;2758:47;2817:9;2829:5;2833:1;2829;:5;:::i;:::-;2817:17;-1:-1:-1;2862:1:0;2853:5;2857:1;2817:17;2853:5;:::i;:::-;:10;2845:56;;;;-1:-1:-1;;;2845:56:0;;11584:2:1;2845:56:0;;;11566:21:1;11623:2;11603:18;;;11596:30;11662:34;11642:18;;;11635:62;-1:-1:-1;;;11713:18:1;;;11706:31;11754:19;;2845:56:0;11382:397:1;3406:132:0;3464:7;3491:39;3495:1;3498;3491:39;;;;;;;;;;;;;;;;;:3;:39::i;1105:181::-;1163:7;;1195:5;1199:1;1195;:5;:::i;:::-;1183:17;;1224:1;1219;:6;;1211:46;;;;-1:-1:-1;;;1211:46:0;;12119:2:1;1211:46:0;;;12101:21:1;12158:2;12138:18;;;12131:30;12197:29;12177:18;;;12170:57;12244:18;;1211:46:0;11917:351:1;10293:177:0;10403:58;;-1:-1:-1;;;;;5868:32:1;;10403:58:0;;;5850:51:1;5917:18;;;5910:34;;;10376:86:0;;10396:5;;-1:-1:-1;;;10426:23:0;5823:18:1;;10403:58:0;;;;-1:-1:-1;;10403:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10403:58:0;-1:-1:-1;;;;;;10403:58:0;;;;;;;;;;10376:19;:86::i;10478:205::-;10606:68;;-1:-1:-1;;;;;12531:15:1;;;10606:68:0;;;12513:34:1;12583:15;;12563:18;;;12556:43;12615:18;;;12608:34;;;10579:96:0;;10599:5;;-1:-1:-1;;;10629:27:0;12448:18:1;;10606:68:0;12273:375:1;10579:96:0;10478:205;;;;:::o;47163:320::-;47241:19;47264:27;47278:12;47264:13;:27::i;:::-;47240:51;;47305:14;47301:176;;47344:10;47335:20;;;;:8;:20;;;;;;;;47359:15;47335:39;;-1:-1:-1;;;;;47388:21:0;;;;;:7;:21;;;;;:40;;-1:-1:-1;;47388:40:0;47424:4;47388:40;;;;;;47440:7;:26;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47440:26:0;;;;;;47230:253;47163:320;:::o;417:106::-;475:7;506:1;502;:5;:13;;514:1;502:13;;;-1:-1:-1;510:1:0;;417:106;-1:-1:-1;417:106:0:o;2008:192::-;2094:7;2130:12;2122:6;;;;2114:29;;;;-1:-1:-1;;;2114:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2154:9:0;2166:5;2170:1;2166;:5;:::i;:::-;2154:17;2008:192;-1:-1:-1;;;;;2008:192:0:o;4034:278::-;4120:7;4155:12;4148:5;4140:28;;;;-1:-1:-1;;;4140:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4179:9:0;4191:5;4195:1;4191;:5;:::i;12598:761::-;13022:23;13048:69;13076:4;13048:69;;;;;;;;;;;;;;;;;13056:5;-1:-1:-1;;;;;13048:27:0;;;:69;;;;;:::i;:::-;13132:17;;13022:95;;-1:-1:-1;13132:21:0;13128:224;;13274:10;13263:30;;;;;;;;;;;;:::i;:::-;13255:85;;;;-1:-1:-1;;;13255:85:0;;13636:2:1;13255:85:0;;;13618:21:1;13675:2;13655:18;;;13648:30;13714:34;13694:18;;;13687:62;-1:-1:-1;;;13765:18:1;;;13758:40;13815:19;;13255:85:0;13434:406:1;16892:195:0;16995:12;17027:52;17049:6;17057:4;17063:1;17066:12;17027:21;:52::i;:::-;17020:59;16892:195;-1:-1:-1;;;;16892:195:0:o;17944:530::-;18071:12;18129:5;18104:21;:30;;18096:81;;;;-1:-1:-1;;;18096:81:0;;14047:2:1;18096:81:0;;;14029:21:1;14086:2;14066:18;;;14059:30;14125:34;14105:18;;;14098:62;-1:-1:-1;;;14176:18:1;;;14169:36;14222:19;;18096:81:0;13845:402:1;18096:81:0;14341:20;;18188:60;;;;-1:-1:-1;;;18188:60:0;;14454:2:1;18188:60:0;;;14436:21:1;14493:2;14473:18;;;14466:30;14532:31;14512:18;;;14505:59;14581:18;;18188:60:0;14252:353:1;18188:60:0;18322:12;18336:23;18363:6;-1:-1:-1;;;;;18363:11:0;18383:5;18391:4;18363:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18321:75;;;;18414:52;18432:7;18441:10;18453:12;18414:17;:52::i;:::-;18407:59;17944:530;-1:-1:-1;;;;;;;17944:530:0:o;20484:742::-;20599:12;20628:7;20624:595;;;-1:-1:-1;20659:10:0;20652:17;;20624:595;20773:17;;:21;20769:439;;21036:10;21030:17;21097:15;21084:10;21080:2;21076:19;21069:44;20769:439;21179:12;21172:20;;-1:-1:-1;;;21172:20:0;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;776:667::-;871:6;879;887;895;903;956:3;944:9;935:7;931:23;927:33;924:53;;;973:1;970;963:12;924:53;1012:9;999:23;1031:31;1056:5;1031:31;:::i;:::-;1081:5;-1:-1:-1;1138:2:1;1123:18;;1110:32;1151:33;1110:32;1151:33;:::i;:::-;1203:7;-1:-1:-1;1257:2:1;1242:18;;1229:32;;-1:-1:-1;1308:2:1;1293:18;;1280:32;;-1:-1:-1;1364:3:1;1349:19;;1336:33;1378;1336;1378;:::i;:::-;1430:7;1420:17;;;776:667;;;;;;;;:::o;1656:180::-;1715:6;1768:2;1756:9;1747:7;1743:23;1739:32;1736:52;;;1784:1;1781;1774:12;1736:52;-1:-1:-1;1807:23:1;;1656:180;-1:-1:-1;1656:180:1:o;1841:329::-;1923:6;1931;1984:2;1972:9;1963:7;1959:23;1955:32;1952:52;;;2000:1;1997;1990:12;1952:52;2039:9;2026:23;2058:31;2083:5;2058:31;:::i;:::-;2108:5;2160:2;2145:18;;;;2132:32;;-1:-1:-1;;;1841:329:1:o;2175:118::-;2261:5;2254:13;2247:21;2240:5;2237:32;2227:60;;2283:1;2280;2273:12;2298:241;2354:6;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;2462:9;2449:23;2481:28;2503:5;2481:28;:::i;2766:309::-;2831:6;2839;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;2947:9;2934:23;2966:28;2988:5;2966:28;:::i;3080:248::-;3148:6;3156;3209:2;3197:9;3188:7;3184:23;3180:32;3177:52;;;3225:1;3222;3215:12;3177:52;-1:-1:-1;;3248:23:1;;;3318:2;3303:18;;;3290:32;;-1:-1:-1;3080:248:1:o;3333:273::-;3401:6;3454:2;3442:9;3433:7;3429:23;3425:32;3422:52;;;3470:1;3467;3460:12;3422:52;3502:9;3496:16;3552:4;3545:5;3541:16;3534:5;3531:27;3521:55;;3572:1;3569;3562:12;3611:127;3672:10;3667:3;3663:20;3660:1;3653:31;3703:4;3700:1;3693:15;3727:4;3724:1;3717:15;3743:422;3832:1;3875:5;3832:1;3889:270;3910:7;3900:8;3897:21;3889:270;;;3969:4;3965:1;3961:6;3957:17;3951:4;3948:27;3945:53;;;3978:18;;:::i;:::-;4028:7;4018:8;4014:22;4011:55;;;4048:16;;;;4011:55;4127:22;;;;4087:15;;;;3889:270;;;3893:3;3743:422;;;;;:::o;4170:806::-;4219:5;4249:8;4239:80;;-1:-1:-1;4290:1:1;4304:5;;4239:80;4338:4;4328:76;;-1:-1:-1;4375:1:1;4389:5;;4328:76;4420:4;4438:1;4433:59;;;;4506:1;4501:130;;;;4413:218;;4433:59;4463:1;4454:10;;4477:5;;;4501:130;4538:3;4528:8;4525:17;4522:43;;;4545:18;;:::i;:::-;-1:-1:-1;;4601:1:1;4587:16;;4616:5;;4413:218;;4715:2;4705:8;4702:16;4696:3;4690:4;4687:13;4683:36;4677:2;4667:8;4664:16;4659:2;4653:4;4650:12;4646:35;4643:77;4640:159;;;-1:-1:-1;4752:19:1;;;4784:5;;4640:159;4831:34;4856:8;4850:4;4831:34;:::i;:::-;4901:6;4897:1;4893:6;4889:19;4880:7;4877:32;4874:58;;;4912:18;;:::i;:::-;4950:20;;4170:806;-1:-1:-1;;;4170:806:1:o;4981:140::-;5039:5;5068:47;5109:4;5099:8;5095:19;5089:4;5068:47;:::i;5126:356::-;5328:2;5310:21;;;5347:18;;;5340:30;5406:34;5401:2;5386:18;;5379:62;5473:2;5458:18;;5126:356::o;5487:184::-;5557:6;5610:2;5598:9;5589:7;5585:23;5581:32;5578:52;;;5626:1;5623;5616:12;5578:52;-1:-1:-1;5649:16:1;;5487:184;-1:-1:-1;5487:184:1:o;5955:245::-;6022:6;6075:2;6063:9;6054:7;6050:23;6046:32;6043:52;;;6091:1;6088;6081:12;6043:52;6123:9;6117:16;6142:28;6164:5;6142:28;:::i;6560:355::-;6762:2;6744:21;;;6801:2;6781:18;;;6774:30;6840:33;6835:2;6820:18;;6813:61;6906:2;6891:18;;6560:355::o;6920:415::-;7122:2;7104:21;;;7161:2;7141:18;;;7134:30;7200:34;7195:2;7180:18;;7173:62;-1:-1:-1;;;7266:2:1;7251:18;;7244:49;7325:3;7310:19;;6920:415::o;7340:401::-;7542:2;7524:21;;;7581:2;7561:18;;;7554:30;7620:34;7615:2;7600:18;;7593:62;-1:-1:-1;;;7686:2:1;7671:18;;7664:35;7731:3;7716:19;;7340:401::o;8859:127::-;8920:10;8915:3;8911:20;8908:1;8901:31;8951:4;8948:1;8941:15;8975:4;8972:1;8965:15;8991:135;9030:3;-1:-1:-1;;9051:17:1;;9048:43;;;9071:18;;:::i;:::-;-1:-1:-1;9118:1:1;9107:13;;8991:135::o;10987:168::-;11027:7;11093:1;11089;11085:6;11081:14;11078:1;11075:21;11070:1;11063:9;11056:17;11052:45;11049:71;;;11100:18;;:::i;:::-;-1:-1:-1;11140:9:1;;10987:168::o;11160:217::-;11200:1;11226;11216:132;;11270:10;11265:3;11261:20;11258:1;11251:31;11305:4;11302:1;11295:15;11333:4;11330:1;11323:15;11216:132;-1:-1:-1;11362:9:1;;11160:217::o;11784:128::-;11824:3;11855:1;11851:6;11848:1;11845:13;11842:39;;;11861:18;;:::i;:::-;-1:-1:-1;11897:9:1;;11784:128::o;12653:258::-;12725:1;12735:113;12749:6;12746:1;12743:13;12735:113;;;12825:11;;;12819:18;12806:11;;;12799:39;12771:2;12764:10;12735:113;;;12866:6;12863:1;12860:13;12857:48;;;-1:-1:-1;;12901:1:1;12883:16;;12876:27;12653:258::o;12916:383::-;13065:2;13054:9;13047:21;13028:4;13097:6;13091:13;13140:6;13135:2;13124:9;13120:18;13113:34;13156:66;13215:6;13210:2;13199:9;13195:18;13190:2;13182:6;13178:15;13156:66;:::i;:::-;13283:2;13262:15;-1:-1:-1;;13258:29:1;13243:45;;;;13290:2;13239:54;;12916:383;-1:-1:-1;;12916:383:1:o;13304:125::-;13344:4;13372:1;13369;13366:8;13363:34;;;13377:18;;:::i;:::-;-1:-1:-1;13414:9:1;;13304:125::o;14610:274::-;14739:3;14777:6;14771:13;14793:53;14839:6;14834:3;14827:4;14819:6;14815:17;14793:53;:::i;:::-;14862:16;;;;;14610:274;-1:-1:-1;;14610:274:1:o
Swarm Source
ipfs://ba8a422b4bfdab4fa43299ece4de981c245fcde7e5c275b50f0d03f731247382
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.